{"id":"88c074c4-f6a0-4880-828a-4ff53e6743a3","shortId":"JzgQg6","kind":"skill","title":"telnyx-10dlc-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx 10DLC - Python\n\n## Installation\n\n```bash\npip install telnyx\n```\n\n## Setup\n\n```python\nimport os\nfrom telnyx import Telnyx\n\nclient = Telnyx(\n    api_key=os.environ.get(\"TELNYX_API_KEY\"),  # This is the default and can be omitted\n)\n```\n\nAll examples below assume `client` is already initialized as shown above.\n\n## Error Handling\n\nAll API calls can fail with network errors, rate limits (429), validation errors (422),\nor authentication errors (401). Always handle errors in production code:\n\n```python\nimport telnyx\n\ntry:\n    telnyx_brand = client.messaging_10dlc.brand.create(\n        country=\"US\",\n        display_name=\"ABC Mobile\",\n        email=\"support@example.com\",\n        entity_type=\"PRIVATE_PROFIT\",\n        vertical=\"TECHNOLOGY\",\n    )\nexcept telnyx.APIConnectionError:\n    print(\"Network error — check connectivity and retry\")\nexcept telnyx.RateLimitError:\n    import time\n    time.sleep(1)  # Check Retry-After header for actual delay\nexcept telnyx.APIStatusError as e:\n    print(f\"API error {e.status_code}: {e.message}\")\n    if e.status_code == 422:\n        print(\"Validation error — check required fields and formats\")\n```\n\nCommon error codes: `401` invalid API key, `403` insufficient permissions,\n`404` resource not found, `422` validation error (check field formats),\n`429` rate limited (retry with exponential backoff).\n\n## Important Notes\n\n- **Pagination:** List methods return an auto-paginating iterator. Use `for item in page_result:` to iterate through all pages automatically.\n\n## Operational Caveats\n\n- 10DLC is sequential: create the brand first, then submit the campaign, then attach messaging infrastructure such as the messaging profile.\n- Registration calls are not enough by themselves. Messaging cannot use the campaign until the assignment step completes successfully.\n- Treat registration status fields as part of the control flow. Do not assume the campaign is send-ready until the returned status fields confirm it.\n\n## Reference Use Rules\n\nDo not invent Telnyx parameters, enums, response fields, or webhook fields.\n\n- If the parameter, enum, or response field you need is not shown inline in this skill, read [references/api-details.md](references/api-details.md) before writing code.\n- Before using any operation in `## Additional Operations`, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas).\n- Before reading or matching webhook fields beyond the inline examples, read [the webhook payload reference](references/api-details.md#webhook-payload-fields).\n\n## Core Tasks\n\n### Create a brand\n\nBrand registration is the entrypoint for any US A2P 10DLC campaign flow.\n\n`client.messaging_10dlc.brand.create()` — `POST /10dlc/brand`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `entity_type` | object | Yes | Entity type behind the brand. |\n| `display_name` | string | Yes | Display name, marketing name, or DBA name of the brand. |\n| `country` | string | Yes | ISO2 2 characters country code. |\n| `email` | string | Yes | Valid email address of brand support contact. |\n| `vertical` | object | Yes | Vertical or industry segment of the brand. |\n| `company_name` | string | No | (Required for Non-profit/private/public) Legal company name. |\n| `first_name` | string | No | First name of business contact. |\n| `last_name` | string | No | Last name of business contact. |\n| ... | | | +16 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\ntelnyx_brand = client.messaging_10dlc.brand.create(\n    country=\"US\",\n    display_name=\"ABC Mobile\",\n    email=\"support@example.com\",\n    entity_type=\"PRIVATE_PROFIT\",\n    vertical=\"TECHNOLOGY\",\n)\nprint(telnyx_brand.identity_status)\n```\n\nPrimary response fields:\n- `telnyx_brand.brand_id`\n- `telnyx_brand.identity_status`\n- `telnyx_brand.status`\n- `telnyx_brand.display_name`\n- `telnyx_brand.state`\n- `telnyx_brand.alt_business_id`\n\n### Submit a campaign\n\nCampaign submission is the compliance-critical step that determines whether traffic can be provisioned.\n\n`client.messaging_10dlc.campaign_builder.submit()` — `POST /10dlc/campaignBuilder`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `brand_id` | string (UUID) | Yes | Alphanumeric identifier of the brand associated with this ca... |\n| `description` | string | Yes | Summary description of this campaign. |\n| `usecase` | string | Yes | Campaign usecase. |\n| `age_gated` | boolean | No | Age gated message content in campaign. |\n| `auto_renewal` | boolean | No | Campaign subscription auto-renewal option. |\n| `direct_lending` | boolean | No | Direct lending or loan arrangement |\n| ... | | | +29 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\ntelnyx_campaign_csp = client.messaging_10dlc.campaign_builder.submit(\n    brand_id=\"BXXXXXX\",\n    description=\"Two-factor authentication messages\",\n    usecase=\"2FA\",\n    sample_messages=[\"Your verification code is {{code}}\"],\n)\nprint(telnyx_campaign_csp.brand_id)\n```\n\nPrimary response fields:\n- `telnyx_campaign_csp.campaign_id`\n- `telnyx_campaign_csp.brand_id`\n- `telnyx_campaign_csp.campaign_status`\n- `telnyx_campaign_csp.submission_status`\n- `telnyx_campaign_csp.failure_reasons`\n- `telnyx_campaign_csp.status`\n\n### Assign a messaging profile to a campaign\n\nMessaging profile assignment is the practical handoff from registration to send-ready messaging infrastructure.\n\n`client.messaging_10dlc.phone_number_assignment_by_profile.assign()` — `POST /10dlc/phoneNumberAssignmentByProfile`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `messaging_profile_id` | string (UUID) | Yes | The ID of the messaging profile that you want to link to the... |\n| `campaign_id` | string (UUID) | Yes | The ID of the campaign you want to link to the specified mes... |\n| `tcr_campaign_id` | string (UUID) | No | The TCR ID of the shared campaign you want to link to the sp... |\n\n```python\nresponse = client.messaging_10dlc.phone_number_assignment_by_profile.assign(\n    messaging_profile_id=\"4001767e-ce0f-4cae-9d5f-0d5e636e7809\",\n    campaign_id=\"CXXX001\",\n)\nprint(response.messaging_profile_id)\n```\n\nPrimary response fields:\n- `response.messaging_profile_id`\n- `response.campaign_id`\n- `response.task_id`\n- `response.tcr_campaign_id`\n\n---\n\n### Webhook Verification\n\nTelnyx signs webhooks with Ed25519. Each request includes `telnyx-signature-ed25519`\nand `telnyx-timestamp` headers. Always verify signatures in production:\n\n```python\n# In your webhook handler (e.g., Flask — use raw body, not parsed JSON):\n@app.route(\"/webhooks\", methods=[\"POST\"])\ndef handle_webhook():\n    payload = request.get_data(as_text=True)  # raw body as string\n    headers = dict(request.headers)\n    try:\n        event = client.webhooks.unwrap(payload, headers=headers)\n    except Exception as e:\n        print(f\"Webhook verification failed: {e}\")\n        return \"Invalid signature\", 400\n    # Signature valid — event is the parsed webhook payload\n    print(f\"Received event: {event.data.event_type}\")\n    return \"OK\", 200\n```\n\n## Webhooks\n\nThese webhook payload fields are inline because they are part of the primary integration path.\n\n### Campaign Status Update\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `brandId` | string | Brand ID associated with the campaign. |\n| `campaignId` | string | The ID of the campaign. |\n| `createDate` | string | Unix timestamp when campaign was created. |\n| `cspId` | string | Alphanumeric identifier of the CSP associated with this campaign. |\n| `isTMobileRegistered` | boolean | Indicates whether the campaign is registered with T-Mobile. |\n| `type` | enum: TELNYX_EVENT, REGISTRATION, MNO_REVIEW, TELNYX_REVIEW, NUMBER_POOL_PROVISIONED, NUMBER_POOL_DEPROVISIONED, TCR_EVENT, VERIFIED |  |\n| `description` | string | Description of the event. |\n| `status` | enum: ACCEPTED, REJECTED, DORMANT, success, failed | The status of the campaign. |\n\nIf you need webhook fields that are not listed inline here, read [the webhook payload reference](references/api-details.md#webhook-payload-fields) before writing the handler.\n\n---\n\n## Important Supporting Operations\n\nUse these when the core tasks above are close to your flow, but you need a common variation or follow-up step.\n\n### Get Brand\n\nInspect the current state of an existing brand registration.\n\n`client.messaging_10dlc.brand.retrieve()` — `GET /10dlc/brand/{brandId}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `brand_id` | string (UUID) | Yes |  |\n\n```python\nbrand = client.messaging_10dlc.brand.retrieve(\n    \"brandId\",\n)\nprint(brand)\n```\n\nPrimary response fields:\n- `brand.status`\n- `brand.state`\n- `brand.alt_business_id`\n- `brand.alt_business_id_type`\n- `brand.assigned_campaigns_count`\n- `brand.brand_id`\n\n### Qualify By Usecase\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.messaging_10dlc.campaign_builder.brand.qualify_by_usecase()` — `GET /10dlc/campaignBuilder/brand/{brandId}/usecase/{usecase}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `usecase` | string | Yes |  |\n| `brand_id` | string (UUID) | Yes |  |\n\n```python\nresponse = client.messaging_10dlc.campaign_builder.brand.qualify_by_usecase(\n    usecase=\"CUSTOMER_CARE\",\n    brand_id=\"brandId\",\n)\nprint(response.annual_fee)\n```\n\nPrimary response fields:\n- `response.annual_fee`\n- `response.max_sub_usecases`\n- `response.min_sub_usecases`\n- `response.mno_metadata`\n- `response.monthly_fee`\n- `response.quarterly_fee`\n\n### Create New Phone Number Campaign\n\nCreate or provision an additional resource when the core tasks do not cover this flow.\n\n`client.messaging_10dlc.phone_number_campaigns.create()` — `POST /10dlc/phone_number_campaigns`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `phone_number` | string (E.164) | Yes | The phone number you want to link to a specified campaign. |\n| `campaign_id` | string (UUID) | Yes | The ID of the campaign you want to link to the specified pho... |\n\n```python\nphone_number_campaign = client.messaging_10dlc.phone_number_campaigns.create(\n    campaign_id=\"4b300178-131c-d902-d54e-72d90ba1620j\",\n    phone_number=\"+18005550199\",\n)\nprint(phone_number_campaign.campaign_id)\n```\n\nPrimary response fields:\n- `phone_number_campaign.assignment_status`\n- `phone_number_campaign.brand_id`\n- `phone_number_campaign.campaign_id`\n- `phone_number_campaign.created_at`\n- `phone_number_campaign.failure_reasons`\n- `phone_number_campaign.phone_number`\n\n### Get campaign\n\nInspect the current state of an existing campaign registration.\n\n`client.messaging_10dlc.campaign.retrieve()` — `GET /10dlc/campaign/{campaignId}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `campaign_id` | string (UUID) | Yes |  |\n\n```python\ntelnyx_campaign_csp = client.messaging_10dlc.campaign.retrieve(\n    \"campaignId\",\n)\nprint(telnyx_campaign_csp.brand_id)\n```\n\nPrimary response fields:\n- `telnyx_campaign_csp.status`\n- `telnyx_campaign_csp.age_gated`\n- `telnyx_campaign_csp.auto_renewal`\n- `telnyx_campaign_csp.billed_date`\n- `telnyx_campaign_csp.brand_display_name`\n- `telnyx_campaign_csp.brand_id`\n\n### List Brands\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.messaging_10dlc.brand.list()` — `GET /10dlc/brand`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `sort` | enum (assignedCampaignsCount, -assignedCampaignsCount, brandId, -brandId, createdAt, ...) | No | Specifies the sort order for results. |\n| `page` | integer | No |  |\n| `records_per_page` | integer | No | number of records per page. |\n| ... | | | +6 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\npage = client.messaging_10dlc.brand.list()\npage = page.records[0]\nprint(page.identity_status)\n```\n\nPrimary response fields:\n- `page.page`\n- `page.records`\n- `page.total_records`\n\n### Get Brand Feedback By Id\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.messaging_10dlc.brand.get_feedback()` — `GET /10dlc/brand/feedback/{brandId}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `brand_id` | string (UUID) | Yes |  |\n\n```python\nresponse = client.messaging_10dlc.brand.get_feedback(\n    \"brandId\",\n)\nprint(response.brand_id)\n```\n\nPrimary response fields:\n- `response.brand_id`\n- `response.category`\n\n---\n\n## Additional Operations\n\nUse the core tasks above first. The operations below are indexed here with exact SDK methods and required params; use [references/api-details.md](references/api-details.md) for full optional params, response schemas, and lower-frequency webhook payloads.\nBefore using any operation below, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas) so you do not guess missing fields.\n\n| Operation | SDK method | Endpoint | Use when | Required params |\n|-----------|------------|----------|----------|-----------------|\n| Get Brand SMS OTP Status | `client.messaging_10dlc.brand.get_sms_otp_by_reference()` | `GET /10dlc/brand/smsOtp/{referenceId}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `reference_id` |\n| Update Brand | `client.messaging_10dlc.brand.update()` | `PUT /10dlc/brand/{brandId}` | Inspect the current state of an existing brand registration. | `entity_type`, `display_name`, `country`, `email`, +2 more |\n| Delete Brand | `client.messaging_10dlc.brand.delete()` | `DELETE /10dlc/brand/{brandId}` | Inspect the current state of an existing brand registration. | `brand_id` |\n| Resend brand 2FA email | `client.messaging_10dlc.brand.resend_2fa_email()` | `POST /10dlc/brand/{brandId}/2faEmail` | Create or provision an additional resource when the core tasks do not cover this flow. | `brand_id` |\n| List External Vettings | `client.messaging_10dlc.brand.external_vetting.list()` | `GET /10dlc/brand/{brandId}/externalVetting` | Fetch the current state before updating, deleting, or making control-flow decisions. | `brand_id` |\n| Order Brand External Vetting | `client.messaging_10dlc.brand.external_vetting.order()` | `POST /10dlc/brand/{brandId}/externalVetting` | Create or provision an additional resource when the core tasks do not cover this flow. | `evp_id`, `vetting_class`, `brand_id` |\n| Import External Vetting Record | `client.messaging_10dlc.brand.external_vetting.imports()` | `PUT /10dlc/brand/{brandId}/externalVetting` | Modify an existing resource without recreating it. | `evp_id`, `vetting_id`, `brand_id` |\n| Revet Brand | `client.messaging_10dlc.brand.revet()` | `PUT /10dlc/brand/{brandId}/revet` | Modify an existing resource without recreating it. | `brand_id` |\n| Get Brand SMS OTP Status by Brand ID | `client.messaging_10dlc.brand.retrieve_sms_otp_status()` | `GET /10dlc/brand/{brandId}/smsOtp` | Fetch the current state before updating, deleting, or making control-flow decisions. | `brand_id` |\n| Trigger Brand SMS OTP | `client.messaging_10dlc.brand.trigger_sms_otp()` | `POST /10dlc/brand/{brandId}/smsOtp` | Create or provision an additional resource when the core tasks do not cover this flow. | `pin_sms`, `success_sms`, `brand_id` |\n| Verify Brand SMS OTP | `client.messaging_10dlc.brand.verify_sms_otp()` | `PUT /10dlc/brand/{brandId}/smsOtp` | Modify an existing resource without recreating it. | `otp_pin`, `brand_id` |\n| List Campaigns | `client.messaging_10dlc.campaign.list()` | `GET /10dlc/campaign` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Accept Shared Campaign | `client.messaging_10dlc.campaign.accept_sharing()` | `POST /10dlc/campaign/acceptSharing/{campaignId}` | Create or provision an additional resource when the core tasks do not cover this flow. | `campaign_id` |\n| Get Campaign Cost | `client.messaging_10dlc.campaign.usecase.get_cost()` | `GET /10dlc/campaign/usecase/cost` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Update campaign | `client.messaging_10dlc.campaign.update()` | `PUT /10dlc/campaign/{campaignId}` | Inspect the current state of an existing campaign registration. | `campaign_id` |\n| Deactivate campaign | `client.messaging_10dlc.campaign.deactivate()` | `DELETE /10dlc/campaign/{campaignId}` | Inspect the current state of an existing campaign registration. | `campaign_id` |\n| Submit campaign appeal for manual review | `client.messaging_10dlc.campaign.submit_appeal()` | `POST /10dlc/campaign/{campaignId}/appeal` | Create or provision an additional resource when the core tasks do not cover this flow. | `appeal_reason`, `campaign_id` |\n| Get Campaign Mno Metadata | `client.messaging_10dlc.campaign.get_mno_metadata()` | `GET /10dlc/campaign/{campaignId}/mnoMetadata` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| Get campaign operation status | `client.messaging_10dlc.campaign.get_operation_status()` | `GET /10dlc/campaign/{campaignId}/operationStatus` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| Get OSR campaign attributes | `client.messaging_10dlc.campaign.osr.get_attributes()` | `GET /10dlc/campaign/{campaignId}/osr/attributes` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| Get Sharing Status | `client.messaging_10dlc.campaign.get_sharing_status()` | `GET /10dlc/campaign/{campaignId}/sharing` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| List shared partner campaigns | `client.messaging_10dlc.partner_campaigns.list_shared_by_me()` | `GET /10dlc/partnerCampaign/sharedByMe` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Get Sharing Status | `client.messaging_10dlc.partner_campaigns.retrieve_sharing_status()` | `GET /10dlc/partnerCampaign/{campaignId}/sharing` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| List Shared Campaigns | `client.messaging_10dlc.partner_campaigns.list()` | `GET /10dlc/partner_campaigns` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Get Single Shared Campaign | `client.messaging_10dlc.partner_campaigns.retrieve()` | `GET /10dlc/partner_campaigns/{campaignId}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `campaign_id` |\n| Update Single Shared Campaign | `client.messaging_10dlc.partner_campaigns.update()` | `PATCH /10dlc/partner_campaigns/{campaignId}` | Modify an existing resource without recreating it. | `campaign_id` |\n| Get Assignment Task Status | `client.messaging_10dlc.phone_number_assignment_by_profile.retrieve_status()` | `GET /10dlc/phoneNumberAssignmentByProfile/{taskId}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `task_id` |\n| Get Phone Number Status | `client.messaging_10dlc.phone_number_assignment_by_profile.list_phone_number_status()` | `GET /10dlc/phoneNumberAssignmentByProfile/{taskId}/phoneNumbers` | Fetch the current state before updating, deleting, or making control-flow decisions. | `task_id` |\n| List phone number campaigns | `client.messaging_10dlc.phone_number_campaigns.list()` | `GET /10dlc/phone_number_campaigns` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Get Single Phone Number Campaign | `client.messaging_10dlc.phone_number_campaigns.retrieve()` | `GET /10dlc/phone_number_campaigns/{phoneNumber}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `phone_number` |\n| Create New Phone Number Campaign | `client.messaging_10dlc.phone_number_campaigns.update()` | `PUT /10dlc/phone_number_campaigns/{phoneNumber}` | Modify an existing resource without recreating it. | `phone_number`, `campaign_id`, `phone_number` |\n| Delete Phone Number Campaign | `client.messaging_10dlc.phone_number_campaigns.delete()` | `DELETE /10dlc/phone_number_campaigns/{phoneNumber}` | Remove, detach, or clean up an existing resource. | `phone_number` |\n\n---\n\nFor exhaustive optional parameters, full response schemas, and complete webhook payloads, see [references/api-details.md](references/api-details.md).","tags":["telnyx","10dlc","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-10dlc-python","topic-agent-skills","topic-ai-coding-agent","topic-claude-code","topic-cpaas","topic-cursor","topic-iot","topic-llm","topic-sdk","topic-sip","topic-sms","topic-speech-to-text","topic-telephony"],"categories":["ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/team-telnyx/ai/telnyx-10dlc-python","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add team-telnyx/ai","source_repo":"https://github.com/team-telnyx/ai","install_from":"skills.sh"}},"qualityScore":"0.533","qualityRationale":"deterministic score 0.53 from registry signals: · indexed on github topic:agent-skills · 167 github stars · SKILL.md body (20,809 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T12:54:38.953Z","embedding":null,"createdAt":"2026-04-18T22:05:46.361Z","updatedAt":"2026-04-22T12:54:38.953Z","lastSeenAt":"2026-04-22T12:54:38.953Z","tsv":"'+16':446 '+18005550199':1171 '+2':1478 '+29':568 '+6':1285 '/10dlc/brand':359,994,1253,1461,1484,1505,1530,1554,1584,1604,1629,1655,1687 '/10dlc/brand/feedback':1328 '/10dlc/brand/smsotp':1440 '/10dlc/campaign':1203,1705,1766,1783,1805,1835,1861,1886,1911 '/10dlc/campaign/acceptsharing':1724 '/10dlc/campaign/usecase/cost':1749 '/10dlc/campaignbuilder':507 '/10dlc/campaignbuilder/brand':1048 '/10dlc/partner_campaigns':1981,2000,2023 '/10dlc/partnercampaign':1958 '/10dlc/partnercampaign/sharedbyme':1938 '/10dlc/phone_number_campaigns':1117,2091,2111,2135,2156 '/10dlc/phonenumberassignmentbyprofile':638,2041,2067 '/2faemail':1507 '/appeal':1807 '/externalvetting':1532,1556,1586 '/mnometadata':1837 '/operationstatus':1863 '/osr/attributes':1888 '/phonenumbers':2069 '/private/public':424 '/revet':1606 '/sharing':1913,1960 '/smsotp':1631,1657,1689 '/usecase':1050 '/webhooks':770 '0':1296 '0d5e636e7809':711 '1':109 '10dlc':3,6,193,354 '131c':1165 '2':391 '200':825 '2fa':589,1499,1502 '400':808 '4001767e':707 '4001767e-ce0f-4cae-9d5f-0d5e636e7809':706 '401':67,144 '403':148 '404':151 '422':63,132,155 '429':60,161 '4b300178':1164 '4b300178-131c-d902-d54e-72d90ba1620j':1163 '4cae':709 '72d90ba1620j':1168 '9d5f':710 'a2p':353 'abc':85,460 'accept':920,1718 'actual':116 'addit':298,1104,1353,1512,1561,1662,1730,1812 'address':400 'age':539,543 'alphanumer':517,873 'alreadi':43 'alway':68,751 'api':23,27,51,124,146 'app.route':769 'appeal':1798,1803,1823 'arrang':567 'assign':227,614,623,2035 'assignedcampaignscount':1260,1261 'associ':522,852,878 'assum':40,243 'attach':205 'attribut':1882,1884 'authent':65,586 'auto':176,549,556 'auto-pagin':175 'auto-renew':555 'automat':190 'avail':1241,1707,1751,1940,1983,2093 'backoff':167 'bash':9 'behind':370 'beyond':326 'bodi':765,783 'boolean':541,551,561,883 'brand':79,198,344,345,372,386,402,414,454,512,521,579,850,982,990,1000,1006,1010,1059,1072,1239,1308,1334,1430,1458,1470,1481,1493,1495,1498,1523,1546,1549,1576,1598,1601,1614,1617,1622,1645,1648,1677,1680,1699 'brand.alt':1016,1019 'brand.assigned':1023 'brand.brand':1026 'brand.state':1015 'brand.status':1014 'brandid':848,995,1008,1049,1074,1262,1263,1329,1343,1462,1485,1506,1531,1555,1585,1605,1630,1656,1688 'busi':435,444,485,1017,1020 'bxxxxxx':581 'ca':525 'call':52,214 'campaign':203,224,245,355,489,490,533,537,548,553,576,620,662,671,681,692,712,730,842,855,862,868,881,887,929,1024,1099,1137,1138,1147,1159,1161,1191,1199,1209,1216,1702,1720,1741,1744,1763,1775,1777,1780,1792,1794,1797,1825,1828,1851,1854,1877,1881,1902,1927,1932,1974,1978,1997,2015,2020,2032,2088,2108,2132,2146,2153 'campaignid':856,1204,1219,1725,1767,1784,1806,1836,1862,1887,1912,1959,2001,2024 'cannot':221 'care':1071 'caveat':192 'ce0f':708 'charact':392 'check':100,110,136,158 'choos':1244,1710,1754,1943,1986,2096 'class':1575 'clean':2161 'client':21,41 'client.messaging_10dlc.brand.create':80,357,455 'client.messaging_10dlc.brand.delete':1482 'client.messaging_10dlc.brand.external_vetting.imports':1582 'client.messaging_10dlc.brand.external_vetting.list':1528 'client.messaging_10dlc.brand.external_vetting.order':1552 'client.messaging_10dlc.brand.get':1325,1341,1434 'client.messaging_10dlc.brand.list':1251,1293 'client.messaging_10dlc.brand.resend':1501 'client.messaging_10dlc.brand.retrieve':992,1007,1624 'client.messaging_10dlc.brand.revet':1602 'client.messaging_10dlc.brand.trigger':1651 'client.messaging_10dlc.brand.update':1459 'client.messaging_10dlc.brand.verify':1683 'client.messaging_10dlc.campaign.accept':1721 'client.messaging_10dlc.campaign.deactivate':1781 'client.messaging_10dlc.campaign.get':1831,1857,1907 'client.messaging_10dlc.campaign.list':1703 'client.messaging_10dlc.campaign.osr.get':1883 'client.messaging_10dlc.campaign.retrieve':1201,1218 'client.messaging_10dlc.campaign.submit':1802 'client.messaging_10dlc.campaign.update':1764 'client.messaging_10dlc.campaign.usecase.get':1746 'client.messaging_10dlc.campaign_builder.brand.qualify':1044,1066 'client.messaging_10dlc.campaign_builder.submit':505,578 'client.messaging_10dlc.partner_campaigns.list':1933,1979 'client.messaging_10dlc.partner_campaigns.retrieve':1954,1998 'client.messaging_10dlc.partner_campaigns.update':2021 'client.messaging_10dlc.phone_number_assignment_by_profile.assign':636,702 'client.messaging_10dlc.phone_number_assignment_by_profile.list':2062 'client.messaging_10dlc.phone_number_assignment_by_profile.retrieve':2038 'client.messaging_10dlc.phone_number_campaigns.create':1115,1160 'client.messaging_10dlc.phone_number_campaigns.delete':2154 'client.messaging_10dlc.phone_number_campaigns.list':2089 'client.messaging_10dlc.phone_number_campaigns.retrieve':2109 'client.messaging_10dlc.phone_number_campaigns.update':2133 'client.webhooks.unwrap':791 'close':966 'code':73,127,131,143,292,394,594,596 'common':141,974 'compani':415,426 'complet':229,2176 'complianc':495 'compliance-crit':494 'confirm':255 'connect':101 'contact':404,436,445 'content':546 'control':239,1041,1322,1452,1543,1642,1848,1874,1899,1924,1971,2012,2053,2080,2123 'control-flow':1040,1321,1451,1542,1641,1847,1873,1898,1923,1970,2011,2052,2079,2122 'core':340,962,1108,1357,1516,1565,1666,1734,1816 'cost':1745,1747 'count':1025 'countri':81,387,393,456,1476 'cover':1112,1520,1569,1670,1738,1820 'creat':196,342,870,1095,1100,1508,1557,1658,1726,1808,2128 'created':863 'createdat':1264 'critic':496 'csp':577,877,1217 'cspid':871 'current':985,1033,1194,1314,1444,1465,1488,1535,1634,1770,1787,1840,1866,1891,1916,1963,2004,2045,2072,2115 'custom':1070 'cxxx001':714 'd54e':1167 'd902':1166 'data':778 'date':1232 'dba':382 'deactiv':1779 'decis':1043,1324,1454,1545,1644,1850,1876,1901,1926,1973,2014,2055,2082,2125 'def':773 'default':32 'delay':117 'delet':1037,1318,1448,1480,1483,1539,1638,1782,1844,1870,1895,1920,1967,2008,2049,2076,2119,2150,2155 'deprovis':908 'descript':363,511,526,530,582,642,847,912,914,999,1055,1121,1208,1257,1333 'detach':2159 'determin':499 'dict':787 'direct':559,563 'display':83,373,377,458,1234,1474 'dormant':922 'e':121,798,804 'e.164':1125 'e.g':761 'e.message':128 'e.status':126,130 'ed25519':738,745 'email':87,395,399,462,1477,1500,1503 'endpoint':1424 'enough':217 'entiti':89,364,368,464,1472 'entrypoint':349 'enum':265,274,895,919,1259 'error':48,57,62,66,70,99,125,135,142,157 'event':790,811,820,897,910,917 'event.data.event':821 'evp':1572,1594 'exact':1368 'exampl':38,329 'except':95,104,118,795,796 'exhaust':2169 'exist':989,1198,1246,1469,1492,1589,1609,1692,1712,1756,1774,1791,1945,1988,2027,2098,2139,2164 'exponenti':166 'extern':1526,1550,1579 'f':123,800,818 'factor':585 'fail':54,803,924 'fee':1077,1082,1092,1094 'feedback':1309,1326,1342 'fetch':1031,1312,1442,1533,1632,1838,1864,1889,1914,1961,2002,2043,2070,2113 'field':138,159,234,254,267,270,277,325,339,475,602,721,830,845,934,950,1013,1080,1177,1225,1302,1349,1420 'first':199,428,432,1360 'flask':762 'flow':240,356,969,1042,1114,1323,1453,1522,1544,1571,1643,1672,1740,1822,1849,1875,1900,1925,1972,2013,2054,2081,2124 'follow':978 'follow-up':977 'format':140,160 'found':154 'frequenc':1386 'full':1378,2172 'gate':540,544,1228 'get':981,993,1047,1190,1202,1252,1307,1327,1429,1439,1529,1616,1628,1704,1743,1748,1827,1834,1853,1860,1879,1885,1904,1910,1937,1951,1957,1980,1994,1999,2034,2040,2058,2066,2090,2104,2110 'guess':1418 'handl':49,69,774 'handler':760,954 'handoff':627 'header':114,750,786,793,794 'id':477,486,513,580,599,604,606,645,650,663,668,682,688,705,713,718,724,726,728,731,851,859,1001,1018,1021,1027,1060,1073,1139,1144,1162,1174,1181,1183,1210,1222,1237,1311,1335,1346,1351,1456,1496,1524,1547,1573,1577,1595,1597,1599,1615,1623,1646,1678,1700,1742,1778,1795,1826,1852,1878,1903,1928,1975,2016,2033,2057,2084,2147 'identifi':518,874 'import':15,19,75,106,168,955,1578 'includ':741 'index':1365 'indic':884 'industri':410 'infrastructur':207,635 'initi':44 'inlin':283,328,832,939 'inspect':983,1192,1240,1463,1486,1706,1750,1768,1785,1939,1982,2092 'instal':8,11 'insuffici':149 'integ':1273,1278 'integr':840 'invalid':145,806 'invent':262 'iso2':390 'istmobileregist':882 'item':181 'iter':178,186 'json':768 'key':24,28,147 'last':437,441 'legal':425 'lend':560,564 'limit':59,163 'link':659,675,696,1133,1151 'list':171,938,1238,1525,1701,1929,1976,2085 'loan':566 'lower':1385 'lower-frequ':1384 'make':1039,1320,1450,1541,1640,1846,1872,1897,1922,1969,2010,2051,2078,2121 'manual':1800 'market':379 'match':323 'mes':679 'messag':206,211,220,545,587,591,616,621,634,643,653,703 'metadata':1090,1830,1833 'method':172,771,1370,1423 'miss':1419 'mno':899,1829,1832 'mobil':86,461,893 'modifi':1587,1607,1690,2025,2137 'mutat':1249,1715,1759,1948,1991,2101 'name':84,374,378,380,383,416,427,429,433,438,442,459,482,1235,1475 'need':279,932,972 'network':56,98 'new':1096,2129 'non':422 'non-profit':421 'none':1717,1761,1950,1993,2103 'note':169 'number':903,906,1098,1123,1129,1158,1170,1189,1280,2060,2064,2087,2107,2127,2131,2145,2149,2152,2167 'object':366,406 'ok':824 'omit':36 'oper':191,296,299,957,1354,1362,1392,1421,1855,1858 'option':303,308,447,558,569,1286,1379,1397,1402,2170 'optional-paramet':302,307,1396,1401 'order':1269,1548 'os':16 'os.environ.get':25 'osr':1880 'otp':1432,1436,1619,1626,1650,1653,1682,1685,1697 'page':183,189,1272,1277,1284,1292,1294 'page.identity':1298 'page.page':1303 'page.records':1295,1304 'page.total':1305 'pagin':170,177 'param':448,570,1287,1373,1380,1428 'paramet':264,273,304,309,360,508,639,996,1052,1118,1205,1254,1330,1398,1403,2171 'pars':767,814 'part':236,836 'partner':1931 'patch':2022 'path':841 'payload':333,338,776,792,816,829,944,949,1388,2178 'per':1276,1283 'permiss':150 'pho':1155 'phone':1097,1122,1128,1157,1169,2059,2063,2086,2106,2126,2130,2144,2148,2151,2166 'phone_number_campaign.assignment':1178 'phone_number_campaign.brand':1180 'phone_number_campaign.campaign':1173,1182 'phone_number_campaign.created':1184 'phone_number_campaign.failure':1186 'phone_number_campaign.phone':1188 'phonenumb':2112,2136,2157 'pin':1673,1698 'pip':10 'pool':904,907 'post':358,506,637,772,1116,1504,1553,1654,1723,1804 'practic':626 'primari':473,600,719,839,1011,1078,1175,1223,1300,1347 'print':97,122,133,470,597,715,799,817,1009,1075,1172,1220,1297,1344 'privat':91,466 'product':72,755 'profil':212,617,622,644,654,704,717,723 'profit':92,423,467 'provis':504,905,1102,1510,1559,1660,1728,1810 'put':1460,1583,1603,1686,1765,2134 'python':4,7,14,74,452,574,700,756,1005,1064,1156,1214,1291,1339 'qualifi':1028 'rate':58,162 'raw':764,782 'read':287,300,321,330,941,1394 'readi':249,633 'reason':612,1187,1824 'receiv':819 'record':1275,1282,1306,1581 'recreat':1592,1612,1695,2030,2142 'refer':257,334,945,1438,1455 'referenceid':1441 'references/api-details.md':288,289,306,316,335,450,451,572,573,946,1289,1290,1375,1376,1400,1410,2180,2181 'regist':889 'registr':213,232,346,629,898,991,1200,1471,1494,1776,1793 'reject':921 'remov':2158 'renew':550,557,1230 'request':740 'request.get':777 'request.headers':788 'requir':137,362,419,510,641,998,1054,1120,1207,1256,1332,1372,1427 'resend':1497 'resourc':152,1105,1242,1247,1513,1562,1590,1610,1663,1693,1708,1713,1731,1752,1757,1813,1941,1946,1984,1989,2028,2094,2099,2140,2165 'respons':266,276,313,318,474,601,701,720,1012,1065,1079,1176,1224,1301,1340,1348,1381,1407,1412,2173 'response-schema':312,317,1406,1411 'response.annual':1076,1081 'response.brand':1345,1350 'response.campaign':725 'response.category':1352 'response.max':1083 'response.messaging':716,722 'response.min':1086 'response.mno':1089 'response.monthly':1091 'response.quarterly':1093 'response.task':727 'response.tcr':729 'result':184,1271 'retri':103,112,164 'retry-aft':111 'return':173,252,805,823 'revet':1600 'review':900,902,1801 'rule':259 'sampl':590 'schema':314,319,1382,1408,1413,2174 'sdk':1369,1422 'section':305,315,1399,1409 'see':2179 'segment':411 'send':248,632 'send-readi':247,631 'sequenti':195 'setup':13 'share':691,1719,1722,1905,1908,1930,1934,1952,1955,1977,1996,2019 'shown':46,282 'sign':735 'signatur':744,753,807,809 'singl':1995,2018,2105 'skill':286 'skill-telnyx-10dlc-python' 'sms':1431,1435,1618,1625,1649,1652,1674,1676,1681,1684 'sort':1258,1268 'source-team-telnyx' 'sp':699 'specifi':678,1136,1154,1266 'state':986,1034,1195,1315,1445,1466,1489,1536,1635,1771,1788,1841,1867,1892,1917,1964,2005,2046,2073,2116 'status':233,253,472,479,608,610,843,918,926,1179,1299,1433,1620,1627,1856,1859,1906,1909,1953,1956,2037,2039,2061,2065 'step':228,497,980 'string':375,388,396,417,430,439,514,527,535,646,664,683,785,849,857,864,872,913,1002,1057,1061,1124,1140,1211,1336 'sub':1084,1087 'submiss':491 'submit':201,487,1796 'subscript':554 'success':230,923,1675 'summari':529 'support':403,956 'support@example.com':88,463 't-mobil':891 'task':341,963,1109,1358,1517,1566,1667,1735,1817,2036,2056,2083 'taskid':2042,2068 'tcr':680,687,909 'technolog':94,469 'telnyx':2,5,12,18,20,22,26,76,78,263,453,575,734,743,748,896,901,1215 'telnyx-10dlc-python':1 'telnyx-signature-ed25519':742 'telnyx-timestamp':747 'telnyx.apiconnectionerror':96 'telnyx.apistatuserror':119 'telnyx.ratelimiterror':105 'telnyx_brand.alt':484 'telnyx_brand.brand':476 'telnyx_brand.display':481 'telnyx_brand.identity':471,478 'telnyx_brand.state':483 'telnyx_brand.status':480 'telnyx_campaign_csp.age':1227 'telnyx_campaign_csp.auto':1229 'telnyx_campaign_csp.billed':1231 'telnyx_campaign_csp.brand':598,605,1221,1233,1236 'telnyx_campaign_csp.campaign':603,607 'telnyx_campaign_csp.failure':611 'telnyx_campaign_csp.status':613,1226 'telnyx_campaign_csp.submission':609 'text':780 'time':107 'time.sleep':108 'timestamp':749,866 'topic-agent-skills' 'topic-ai-coding-agent' 'topic-claude-code' 'topic-cpaas' 'topic-cursor' 'topic-iot' 'topic-llm' 'topic-sdk' 'topic-sip' 'topic-sms' 'topic-speech-to-text' 'topic-telephony' 'traffic':501 'treat':231 'tri':77,789 'trigger':1647 'true':781 'two':584 'two-factor':583 'type':90,361,365,369,465,509,640,822,846,894,997,1022,1053,1119,1206,1255,1331,1473 'unix':865 'updat':844,1036,1317,1447,1457,1538,1637,1762,1843,1869,1894,1919,1966,2007,2017,2048,2075,2118 'us':82,352,457 'use':179,222,258,294,763,958,1355,1374,1390,1425 'usecas':534,538,588,1030,1046,1051,1056,1068,1069,1085,1088 'uuid':515,647,665,684,1003,1062,1141,1212,1337 'valid':61,134,156,398,810 'variat':975 'verif':593,733,802 'verifi':752,911,1679 'vertic':93,405,408,468 'vet':1527,1551,1574,1580,1596 'want':657,673,694,1131,1149 'webhook':269,324,332,337,732,736,759,775,801,815,826,828,933,943,948,1387,2177 'webhook-payload-field':336,947 'whether':500,885 'without':1591,1611,1694,2029,2141 'write':291,952 'yes':367,376,389,397,407,516,528,536,648,666,1004,1058,1063,1126,1142,1213,1338","prices":[{"id":"3c042368-dba6-4e67-bab9-b5e08207a004","listingId":"88c074c4-f6a0-4880-828a-4ff53e6743a3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"team-telnyx","category":"ai","install_from":"skills.sh"},"createdAt":"2026-04-18T22:05:46.361Z"}],"sources":[{"listingId":"88c074c4-f6a0-4880-828a-4ff53e6743a3","source":"github","sourceId":"team-telnyx/ai/telnyx-10dlc-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-10dlc-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:46.361Z","lastSeenAt":"2026-04-22T12:54:38.953Z"}],"details":{"listingId":"88c074c4-f6a0-4880-828a-4ff53e6743a3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-10dlc-python","github":{"repo":"team-telnyx/ai","stars":167,"topics":["agent-skills","ai","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk","sip","sms","speech-to-text","telephony","telnyx","tts","twilio-migration","voice-agents","voice-ai","webrtc","windsurf"],"license":"mit","html_url":"https://github.com/team-telnyx/ai","pushed_at":"2026-04-21T22:09:49Z","description":"Official one-stop shop for AI Agents and developers building with Telnyx.","skill_md_sha":"59c8f196d9e3ed3a41e1c55d9a2c00e019a99274","skill_md_path":"skills/telnyx-10dlc-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-10dlc-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-10dlc-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-10dlc-python"},"updatedAt":"2026-04-22T12:54:38.953Z"}}