← SentCONTENT HISTORY

Update to Sent

Snapshot Sep 30, 2026 · 22:48 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "sms-10dlc-registration",
  "description": "Prepares and validates Sent US A2P 10DLC brand and campaign registration through Sender Profiles, including inheritance, all campaign use cases, opt-in evidence, sample-message policy, autoresponses, sandbox validation, TCR status, and rejection remediation.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 205
    },
    {
      "relative_path": "references/10dlc-evidence-checklist.md",
      "size_in_bytes": 1969
    },
    {
      "relative_path": "references/10dlc-rejection-remediation.md",
      "size_in_bytes": 1858
    },
    {
      "relative_path": "references/tcr-use-cases.md",
      "size_in_bytes": 1636
    },
    {
      "relative_path": "scripts/fixtures/bad.json",
      "size_in_bytes": 527
    },
    {
      "relative_path": "scripts/fixtures/campaign_bad.json",
      "size_in_bytes": 340
    },
    {
      "relative_path": "scripts/fixtures/campaign_good.json",
      "size_in_bytes": 1014
    },
    {
      "relative_path": "scripts/fixtures/good.json",
      "size_in_bytes": 1438
    },
    {
      "relative_path": "scripts/validate_10dlc_packet.py",
      "size_in_bytes": 5708
    },
    {
      "relative_path": "scripts/validate_campaign_payload.py",
      "size_in_bytes": 5346
    }
  ],
  "skill_md_contents": "---\nname: sms-10dlc-registration\ndescription: Prepares and validates Sent US A2P 10DLC brand and campaign registration through Sender Profiles, including inheritance, all campaign use cases, opt-in evidence, sample-message policy, autoresponses, sandbox validation, TCR status, and rejection remediation.\n---\n\n# SMS 10DLC Registration\n\nUse this skill for US A2P SMS over 10-digit long codes. Separate the compliance evidence packet from the exact Sent API request; they have different schemas and validators.\n\n## Current Sent resource model\n\nThere is no standalone brand CRUD path in the current v3 API.\n\n- Create a dedicated brand inside `POST /v3/profiles` using `brand` and `inherit_tcr_brand: false`.\n- List/create campaigns with `GET|POST /v3/profiles/{profileId}/campaigns`.\n- Update/delete with `PUT|DELETE /v3/profiles/{profileId}/campaigns/{campaignId}`.\n\nReject guidance that reintroduces a free-standing brand path.\n\n## Choose inheritance deliberately\n\n| Brand | Campaign | Settings |\n| --- | --- | --- |\n| Inherit both | Organization brand and campaign | `inherit_tcr_brand: true`, `inherit_tcr_campaign: true` |\n| Inherit brand, own campaign | Shared legal brand with tenant-specific traffic | brand true, campaign false |\n| Own both | Dedicated tenant/business | both false and supply `brand` during profile creation |\n\nInherited campaigns are read-only. A profile cannot supply `brand` while brand inheritance is true.\n\n## Two validation layers\n\n### Evidence readiness packet\n\nThe private packet uses the explicit internal version `sent-10dlc-evidence/v1` and snake_case evidence fields. It is not an API payload.\n\n```bash\npython scripts/validate_10dlc_packet.py evidence.json\n```\n\nCollect legal identity, public website/policy links, consent proof, message flow, opt-in/opt-out/help responses and keywords, use cases, and realistic samples. See [references/10dlc-evidence-checklist.md](references/10dlc-evidence-checklist.md).\n\n### Sent campaign request\n\nThe API request uses exact camelCase and a `campaign` wrapper:\n\n<!-- sent-campaign-request -->\n```json\n{\n  \"campaign\": {\n    \"name\": \"Acme account notifications\",\n    \"description\": \"Account and delivery notifications for opted-in customers.\",\n    \"type\": \"App\",\n    \"useCases\": [\n      {\n        \"messagingUseCaseUs\": \"ACCOUNT_NOTIFICATION\",\n        \"sampleMessages\": [\n          \"Acme Example: Your account preference was updated. Reply STOP to opt out.\"\n        ]\n      }\n    ],\n    \"volume\": \"2000\",\n    \"messageFlow\": \"Customers opt in in account settings before notifications begin.\",\n    \"privacyPolicyLink\": \"https://example.com/privacy\",\n    \"termsAndConditionsLink\": \"https://example.com/terms\",\n    \"optinMessage\": \"Acme Example: You are subscribed. Reply STOP to opt out.\",\n    \"optoutMessage\": \"Acme Example: You are unsubscribed and will receive no more messages.\",\n    \"helpMessage\": \"Acme Example: Visit https://example.com/support for help.\",\n    \"optinKeywords\": \"START,YES\",\n    \"optoutKeywords\": \"STOP,UNSUBSCRIBE\",\n    \"helpKeywords\": \"HELP,INFO\"\n  },\n  \"sandbox\": true\n}\n```\n\nValidate it with:\n\n```bash\npython scripts/validate_campaign_payload.py campaign.json\n```\n\n## API use cases\n\nSupport all 13 current values:\n\n`MARKETING`, `ACCOUNT_NOTIFICATION`, `CUSTOMER_CARE`, `FRAUD_ALERT`, `TWO_FA`, `DELIVERY_NOTIFICATION`, `SECURITY_ALERT`, `M2M`, `MIXED`, `HIGHER_EDUCATION`, `POLLING_VOTING`, `PUBLIC_SERVICE_ANNOUNCEMENT`, and `LOW_VOLUME`.\n\nEach use case structurally accepts 1–5 samples, each no longer than 1,024 characters. The compliance layer requires at least two samples for marketing and mixed traffic, including low-volume mixed. Keep that policy distinction visible instead of pretending OpenAPI requires two for all traffic.\n\n## Volume and status\n\n`volume` is optional and, when supplied, is a numeric string. Values below `\"2000\"` use the documented low-volume tier; `\"2000\"` is the boundary to the next tier.\n\nCampaign responses currently expose statuses `SENT_CREATED`, `ACTIVE`, and `EXPIRED`, plus `submittedToTCR`. Preserve unknown future status strings. Do not confuse a successful Sent record creation with TCR submission or carrier activation.\n\n## Safe workflow\n\n1. Confirm this is US A2P 10DLC traffic and the actual sending business is identified.\n2. Select brand/campaign inheritance.\n3. Validate the versioned evidence packet.\n4. Create or confirm the profile brand.\n5. Translate evidence into the exact camelCase campaign request.\n6. Validate locally and use `sandbox: true`.\n7. Show the payload and obtain confirmation before a real create/update/delete.\n8. Store profile ID, campaign ID, `submittedToTCR`, raw status, and review evidence.\n9. Complete the profile with required `webHookUrl` only after prerequisites are ready.\n\nNever use real consumer data in fixtures or samples. Use [references/tcr-use-cases.md](references/tcr-use-cases.md) for classification and [references/10dlc-rejection-remediation.md](references/10dlc-rejection-remediation.md) for failures.\n"
}

SHA-256: d5103d2b98f1114becc7d746d9a2e3f0233e842553f6ae54dd72b014e3250a8e