{"id":"b849af2a-8bd9-4518-8a78-bf3b54abeb05","shortId":"VgTz9N","kind":"skill","title":"telnyx-10dlc-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx 10DLC - Ruby\n\n## Installation\n\n```bash\ngem install telnyx\n```\n\n## Setup\n\n```ruby\nrequire \"telnyx\"\n\nclient = Telnyx::Client.new(\n  api_key: ENV[\"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```ruby\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)\nputs(telnyx_brand)\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:** Use `.auto_paging_each` for automatic iteration: `page.auto_paging_each { |item| puts item.id }`.\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```ruby\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)\n\nputs(telnyx_brand)\n```\n\nPrimary response fields:\n- `telnyx_brand.brandId`\n- `telnyx_brand.identityStatus`\n- `telnyx_brand.status`\n- `telnyx_brand.displayName`\n- `telnyx_brand.state`\n- `telnyx_brand.altBusinessId`\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```ruby\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)\n\nputs(telnyx_campaign_csp)\n```\n\nPrimary response fields:\n- `telnyx_campaign_csp.campaignId`\n- `telnyx_campaign_csp.brandId`\n- `telnyx_campaign_csp.campaignStatus`\n- `telnyx_campaign_csp.submissionStatus`\n- `telnyx_campaign_csp.failureReasons`\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```ruby\nresponse = client.messaging_10dlc.phone_number_assignment_by_profile.assign(\n  messaging_profile_id: \"4001767e-ce0f-4cae-9d5f-0d5e636e7809\"\n    campaign_id: \"CXXX001\",\n)\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.messagingProfileId`\n- `response.campaignId`\n- `response.taskId`\n- `response.tcrCampaignId`\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```ruby\n# In your webhook handler (e.g., Sinatra — use raw body):\npost \"/webhooks\" do\n  payload = request.body.read\n  headers = {\n    \"telnyx-signature-ed25519\" => request.env[\"HTTP_TELNYX_SIGNATURE_ED25519\"],\n    \"telnyx-timestamp\" => request.env[\"HTTP_TELNYX_TIMESTAMP\"],\n  }\n  begin\n    event = client.webhooks.unwrap(payload, headers)\n  rescue => e\n    halt 400, \"Invalid signature: #{e.message}\"\n  end\n  # Signature valid — event is the parsed webhook payload\n  puts \"Received event: #{event.data.event_type}\"\n  status 200\nend\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```ruby\nbrand = client.messaging_10dlc.brand.retrieve(\"BXXX001\")\n\nputs(brand)\n```\n\nPrimary response fields:\n- `brand.status`\n- `brand.state`\n- `brand.altBusinessId`\n- `brand.altBusinessIdType`\n- `brand.assignedCampaignsCount`\n- `brand.brandId`\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```ruby\nresponse = client.messaging_10dlc.campaign_builder.brand.qualify_by_usecase(\"usecase\", brand_id: \"brandId\")\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.annualFee`\n- `response.maxSubUsecases`\n- `response.minSubUsecases`\n- `response.mnoMetadata`\n- `response.monthlyFee`\n- `response.quarterlyFee`\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```ruby\nphone_number_campaign = client.messaging_10dlc.phone_number_campaigns.create(\n  campaign_id: \"4b300178-131c-d902-d54e-72d90ba1620j\",\n  phone_number: \"+18005550199\"\n)\n\nputs(phone_number_campaign)\n```\n\nPrimary response fields:\n- `phone_number_campaign.assignmentStatus`\n- `phone_number_campaign.brandId`\n- `phone_number_campaign.campaignId`\n- `phone_number_campaign.createdAt`\n- `phone_number_campaign.failureReasons`\n- `phone_number_campaign.phoneNumber`\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```ruby\ntelnyx_campaign_csp = client.messaging_10dlc.campaign.retrieve(\"CXXX001\")\n\nputs(telnyx_campaign_csp)\n```\n\nPrimary response fields:\n- `telnyx_campaign_csp.status`\n- `telnyx_campaign_csp.ageGated`\n- `telnyx_campaign_csp.autoRenewal`\n- `telnyx_campaign_csp.billedDate`\n- `telnyx_campaign_csp.brandDisplayName`\n- `telnyx_campaign_csp.brandId`\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```ruby\npage = client.messaging_10dlc.brand.list\n\nputs(page)\n```\n\nPrimary response fields:\n- `page.page`\n- `page.records`\n- `page.totalRecords`\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```ruby\nresponse = client.messaging_10dlc.brand.get_feedback(\"BXXX001\")\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.brandId`\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","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-10dlc-ruby","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-ruby","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,032 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:39.064Z","embedding":null,"createdAt":"2026-04-18T22:05:47.275Z","updatedAt":"2026-04-22T12:54:39.064Z","lastSeenAt":"2026-04-22T12:54:39.064Z","tsv":"'+16':390 '+18005550199':1070 '+2':1360 '+29':507 '+6':1174 '/10dlc/brand':303,912,1142,1343,1366,1387,1412,1436,1466,1486,1511,1537,1569 '/10dlc/brand/feedback':1212 '/10dlc/brand/smsotp':1322 '/10dlc/campaign':1097,1587,1648,1665,1687,1717,1743,1768,1793 '/10dlc/campaign/acceptsharing':1606 '/10dlc/campaign/usecase/cost':1631 '/10dlc/campaignbuilder':446 '/10dlc/campaignbuilder/brand':958 '/10dlc/partner_campaigns':1863,1882,1905 '/10dlc/partnercampaign':1840 '/10dlc/partnercampaign/sharedbyme':1820 '/10dlc/phone_number_campaigns':1016,1973,1993,2017,2038 '/10dlc/phonenumberassignmentbyprofile':573,1923,1949 '/2faemail':1389 '/appeal':1689 '/externalvetting':1414,1438,1468 '/mnometadata':1719 '/operationstatus':1745 '/osr/attributes':1770 '/phonenumbers':1951 '/private/public':368 '/revet':1488 '/sharing':1795,1842 '/smsotp':1513,1539,1571 '/usecase':960 '/webhooks':694 '0d5e636e7809':646 '10dlc':3,6,137,298 '131c':1064 '2':335 '200':742 '2fa':528,1381,1384 '400':723 '4001767e':642 '4001767e-ce0f-4cae-9d5f-0d5e636e7809':641 '401':64,95 '403':99 '404':102 '422':60,106 '429':57,112 '4b300178':1063 '4b300178-131c-d902-d54e-72d90ba1620j':1062 '4cae':644 '72d90ba1620j':1067 '9d5f':645 'a2p':297 'abc':79,404 'accept':838,1600 'addit':242,1003,1235,1394,1443,1544,1612,1694 'address':344 'age':478,482 'alphanumer':456,791 'alreadi':40 'alway':65,678 'api':20,24,48,97 'appeal':1680,1685,1705 'arrang':506 'assign':171,549,558,1917 'assignedcampaignscount':1149,1150 'associ':461,770,796 'assum':37,187 'attach':149 'attribut':1764,1766 'authent':62,525 'auto':123,488,495 'auto-renew':494 'automat':127 'avail':1130,1589,1633,1822,1865,1975 'backoff':118 'bash':9 'begin':715 'behind':314 'beyond':270 'bodi':692 'boolean':480,490,500,801 'brand':73,91,142,288,289,316,330,346,358,398,416,451,460,518,768,900,908,918,924,928,969,980,1128,1192,1218,1312,1340,1352,1363,1375,1377,1380,1405,1428,1431,1458,1480,1483,1496,1499,1504,1527,1530,1559,1562,1581 'brand.altbusinessid':934 'brand.altbusinessidtype':935 'brand.assignedcampaignscount':936 'brand.brandid':937 'brand.state':933 'brand.status':932 'brandid':766,913,959,982,1151,1152,1213,1344,1367,1388,1413,1437,1467,1487,1512,1538,1570 'busi':379,388 'bxxx001':926,1227 'bxxxxxx':520 'ca':464 'call':49,158 'campaign':147,168,189,299,428,429,472,476,487,492,515,538,555,597,606,616,627,647,760,773,780,786,799,805,847,998,1036,1037,1046,1058,1060,1074,1085,1093,1103,1110,1116,1584,1602,1623,1626,1645,1657,1659,1662,1674,1676,1679,1707,1710,1733,1736,1759,1763,1784,1809,1814,1856,1860,1879,1897,1902,1914,1970,1990,2014,2028,2035 'campaignid':774,1098,1607,1649,1666,1688,1718,1744,1769,1794,1841,1883,1906 'cannot':165 'caveat':136 'ce0f':643 'charact':336 'check':109 'choos':1133,1592,1636,1825,1868,1978 'class':1457 'clean':2043 'client':17,38 'client.messaging_10dlc.brand.create':74,301,399 'client.messaging_10dlc.brand.delete':1364 'client.messaging_10dlc.brand.external_vetting.imports':1464 'client.messaging_10dlc.brand.external_vetting.list':1410 'client.messaging_10dlc.brand.external_vetting.order':1434 'client.messaging_10dlc.brand.get':1209,1225,1316 'client.messaging_10dlc.brand.list':1140,1182 'client.messaging_10dlc.brand.resend':1383 'client.messaging_10dlc.brand.retrieve':910,925,1506 'client.messaging_10dlc.brand.revet':1484 'client.messaging_10dlc.brand.trigger':1533 'client.messaging_10dlc.brand.update':1341 'client.messaging_10dlc.brand.verify':1565 'client.messaging_10dlc.campaign.accept':1603 'client.messaging_10dlc.campaign.deactivate':1663 'client.messaging_10dlc.campaign.get':1713,1739,1789 'client.messaging_10dlc.campaign.list':1585 'client.messaging_10dlc.campaign.osr.get':1765 'client.messaging_10dlc.campaign.retrieve':1095,1112 'client.messaging_10dlc.campaign.submit':1684 'client.messaging_10dlc.campaign.update':1646 'client.messaging_10dlc.campaign.usecase.get':1628 'client.messaging_10dlc.campaign_builder.brand.qualify':954,976 'client.messaging_10dlc.campaign_builder.submit':444,517 'client.messaging_10dlc.partner_campaigns.list':1815,1861 'client.messaging_10dlc.partner_campaigns.retrieve':1836,1880 'client.messaging_10dlc.partner_campaigns.update':1903 'client.messaging_10dlc.phone_number_assignment_by_profile.assign':571,637 'client.messaging_10dlc.phone_number_assignment_by_profile.list':1944 'client.messaging_10dlc.phone_number_assignment_by_profile.retrieve':1920 'client.messaging_10dlc.phone_number_campaigns.create':1014,1059 'client.messaging_10dlc.phone_number_campaigns.delete':2036 'client.messaging_10dlc.phone_number_campaigns.list':1971 'client.messaging_10dlc.phone_number_campaigns.retrieve':1991 'client.messaging_10dlc.phone_number_campaigns.update':2015 'client.new':19 'client.webhooks.unwrap':717 'close':884 'code':70,94,236,338,533,535 'common':92,892 'compani':359,370 'complet':173,2058 'complianc':434 'compliance-crit':433 'confirm':199 'contact':348,380,389 'content':485 'control':183,951,1206,1334,1425,1524,1730,1756,1781,1806,1853,1894,1935,1962,2005 'control-flow':950,1205,1333,1424,1523,1729,1755,1780,1805,1852,1893,1934,1961,2004 'core':284,880,1007,1239,1398,1447,1548,1616,1698 'cost':1627,1629 'countri':75,331,337,400,1358 'cover':1011,1402,1451,1552,1620,1702 'creat':140,286,788,994,999,1390,1439,1540,1608,1690,2010 'created':781 'createdat':1153 'critic':435 'csp':516,539,795,1111,1117 'cspid':789 'current':903,943,1088,1198,1326,1347,1370,1417,1516,1652,1669,1722,1748,1773,1798,1845,1886,1927,1954,1997 'cxxx001':649,1113 'd54e':1066 'd902':1065 'dba':326 'deactiv':1661 'decis':953,1208,1336,1427,1526,1732,1758,1783,1808,1855,1896,1937,1964,2007 'default':29 'delet':947,1202,1330,1362,1365,1421,1520,1664,1726,1752,1777,1802,1849,1890,1931,1958,2001,2032,2037 'deprovis':826 'descript':307,450,465,469,521,577,765,830,832,917,965,1020,1102,1146,1217 'detach':2041 'determin':438 'direct':498,502 'display':77,317,321,402,1356 'dormant':840 'e':721 'e.164':1024 'e.g':688 'e.message':726 'ed25519':665,672,702,707 'email':81,339,343,406,1359,1382,1385 'end':727,743 'endpoint':1306 'enough':161 'entiti':83,308,312,408,1354 'entrypoint':293 'enum':209,218,813,837,1148 'env':22 'error':45,54,59,63,67,93,108 'event':716,730,738,815,828,835 'event.data.event':739 'evp':1454,1476 'exact':1250 'exampl':35,273 'exhaust':2051 'exist':907,1092,1135,1351,1374,1471,1491,1574,1594,1638,1656,1673,1827,1870,1909,1980,2021,2046 'exponenti':117 'extern':1408,1432,1461 'factor':524 'fail':51,842 'feedback':1193,1210,1226 'fetch':941,1196,1324,1415,1514,1720,1746,1771,1796,1843,1884,1925,1952,1995 'field':110,178,198,211,214,221,269,283,419,542,654,748,763,852,868,931,987,1077,1120,1187,1232,1302 'first':143,372,376,1242 'flow':184,300,887,952,1013,1207,1335,1404,1426,1453,1525,1554,1622,1704,1731,1757,1782,1807,1854,1895,1936,1963,2006 'follow':896 'follow-up':895 'format':111 'found':105 'frequenc':1268 'full':1260,2054 'gate':479,483 'gem':10 'get':899,911,957,1084,1096,1141,1191,1211,1311,1321,1411,1498,1510,1586,1625,1630,1709,1716,1735,1742,1761,1767,1786,1792,1819,1833,1839,1862,1876,1881,1916,1922,1940,1948,1972,1986,1992 'guess':1300 'halt':722 'handl':46,66 'handler':687,872 'handoff':562 'header':677,698,719 'http':704,712 'id':452,519,580,585,598,603,617,623,640,648,769,777,919,970,981,1038,1043,1061,1104,1195,1219,1338,1378,1406,1429,1455,1459,1477,1479,1481,1497,1505,1528,1560,1582,1624,1660,1677,1708,1734,1760,1785,1810,1857,1898,1915,1939,1966,2029 'identifi':457,792 'import':119,873,1460 'includ':668 'index':1247 'indic':802 'industri':354 'infrastructur':151,570 'initi':41 'inlin':227,272,750,857 'inspect':901,1086,1129,1345,1368,1588,1632,1650,1667,1821,1864,1974 'instal':8,11 'insuffici':100 'integ':1162,1167 'integr':758 'invalid':96,724 'invent':206 'iso2':334 'istmobileregist':800 'item':132 'item.id':134 'iter':128 'key':21,25,98 'last':381,385 'legal':369 'lend':499,503 'limit':56,114 'link':594,610,631,1032,1050 'list':856,1127,1407,1583,1811,1858,1967 'loan':505 'lower':1267 'lower-frequ':1266 'make':949,1204,1332,1423,1522,1728,1754,1779,1804,1851,1892,1933,1960,2003 'manual':1682 'market':323 'match':267 'mes':614 'messag':150,155,164,484,526,530,551,556,569,578,588,638 'metadata':1712,1715 'method':1252,1305 'miss':1301 'mno':817,1711,1714 'mobil':80,405,811 'modifi':1469,1489,1572,1907,2019 'mutat':1138,1597,1641,1830,1873,1983 'name':78,318,322,324,327,360,371,373,377,382,386,403,1357 'need':223,850,890 'network':53 'new':995,2011 'non':366 'non-profit':365 'none':1599,1643,1832,1875,1985 'note':120 'number':821,824,997,1022,1028,1057,1069,1073,1169,1942,1946,1969,1989,2009,2013,2027,2031,2034,2049 'object':310,350 'omit':33 'oper':135,240,243,875,1236,1244,1274,1303,1737,1740 'option':247,252,391,497,508,1175,1261,1279,1284,2052 'optional-paramet':246,251,1278,1283 'order':1158,1430 'osr':1762 'otp':1314,1318,1501,1508,1532,1535,1564,1567,1579 'page':124,130,1161,1166,1173,1181,1184 'page.auto':129 'page.page':1188 'page.records':1189 'page.totalrecords':1190 'pagin':121 'param':392,509,1176,1255,1262,1310 'paramet':208,217,248,253,304,447,574,914,962,1017,1099,1143,1214,1280,1285,2053 'pars':733 'part':180,754 'partner':1813 'patch':1904 'path':759 'payload':277,282,696,718,735,747,862,867,1270,2060 'per':1165,1172 'permiss':101 'pho':1054 'phone':996,1021,1027,1056,1068,1072,1941,1945,1968,1988,2008,2012,2026,2030,2033,2048 'phone_number_campaign.assignmentstatus':1078 'phone_number_campaign.brandid':1079 'phone_number_campaign.campaignid':1080 'phone_number_campaign.createdat':1081 'phone_number_campaign.failurereasons':1082 'phone_number_campaign.phonenumber':1083 'phonenumb':1994,2018,2039 'pin':1555,1580 'pool':822,825 'post':302,445,572,693,1015,1386,1435,1536,1605,1686 'practic':561 'primari':417,540,652,757,929,985,1075,1118,1185,1230 'privat':85,410 'product':69,682 'profil':156,552,557,579,589,639 'profit':86,367,411 'provis':443,823,1001,1392,1441,1542,1610,1692 'put':89,133,414,536,650,736,927,983,1071,1114,1183,1228,1342,1465,1485,1568,1647,2016 'qualifi':938 'rate':55,113 'raw':691 'read':231,244,265,274,859,1276 'readi':193,568 'reason':1706 'receiv':737 'record':1164,1171,1463 'recreat':1474,1494,1577,1912,2024 'refer':201,278,863,1320,1337 'referenceid':1323 'references/api-details.md':232,233,250,260,279,394,395,511,512,864,1178,1179,1257,1258,1282,1292,2062,2063 'regist':807 'registr':157,176,290,564,816,909,1094,1353,1376,1658,1675 'reject':839 'remov':2040 'renew':489,496 'request':667 'request.body.read':697 'request.env':703,711 'requir':15,306,363,449,576,916,964,1019,1101,1145,1216,1254,1309 'rescu':720 'resend':1379 'resourc':103,1004,1131,1136,1395,1444,1472,1492,1545,1575,1590,1595,1613,1634,1639,1695,1823,1828,1866,1871,1910,1976,1981,2022,2047 'respons':210,220,257,262,418,541,636,651,653,930,975,984,986,1076,1119,1186,1224,1229,1231,1263,1289,1294,2055 'response-schema':256,261,1288,1293 'response.annualfee':988 'response.brandid':1233 'response.campaignid':656 'response.category':1234 'response.maxsubusecases':989 'response.messagingprofileid':655 'response.minsubusecases':990 'response.mnometadata':991 'response.monthlyfee':992 'response.quarterlyfee':993 'response.taskid':657 'response.tcrcampaignid':658 'result':1160 'retri':115 'return':196 'revet':1482 'review':818,820,1683 'rubi':4,7,14,71,396,513,635,683,923,974,1055,1108,1180,1223 'rule':203 'sampl':529 'schema':258,263,1264,1290,1295,2056 'sdk':1251,1304 'section':249,259,1281,1291 'see':2061 'segment':355 'send':192,567 'send-readi':191,566 'sequenti':139 'setup':13 'share':626,1601,1604,1787,1790,1812,1816,1834,1837,1859,1878,1901 'shown':43,226 'sign':662 'signatur':671,680,701,706,725,728 'sinatra':689 'singl':1877,1900,1987 'skill':230 'skill-telnyx-10dlc-ruby' 'sms':1313,1317,1500,1507,1531,1534,1556,1558,1563,1566 'sort':1147,1157 'source-team-telnyx' 'sp':634 'specifi':613,1035,1053,1155 'state':904,944,1089,1199,1327,1348,1371,1418,1517,1653,1670,1723,1749,1774,1799,1846,1887,1928,1955,1998 'status':177,197,741,761,836,844,1315,1502,1509,1738,1741,1788,1791,1835,1838,1919,1921,1943,1947 'step':172,436,898 'string':319,332,340,361,374,383,453,466,474,581,599,618,767,775,782,790,831,920,967,971,1023,1039,1105,1220 'submiss':430 'submit':145,426,1678 'subscript':493 'success':174,841,1557 'summari':468 'support':347,874 'support@example.com':82,407 't-mobil':809 'task':285,881,1008,1240,1399,1448,1549,1617,1699,1918,1938,1965 'taskid':1924,1950 'tcr':615,622,827 'technolog':88,413 'telnyx':2,5,12,16,18,23,72,90,207,397,415,514,537,661,670,675,700,705,709,713,814,819,1109,1115 'telnyx-10dlc-ruby':1 'telnyx-signature-ed25519':669,699 'telnyx-timestamp':674,708 'telnyx_brand.altbusinessid':425 'telnyx_brand.brandid':420 'telnyx_brand.displayname':423 'telnyx_brand.identitystatus':421 'telnyx_brand.state':424 'telnyx_brand.status':422 'telnyx_campaign_csp.agegated':1122 'telnyx_campaign_csp.autorenewal':1123 'telnyx_campaign_csp.billeddate':1124 'telnyx_campaign_csp.branddisplayname':1125 'telnyx_campaign_csp.brandid':544,1126 'telnyx_campaign_csp.campaignid':543 'telnyx_campaign_csp.campaignstatus':545 'telnyx_campaign_csp.failurereasons':547 'telnyx_campaign_csp.status':548,1121 'telnyx_campaign_csp.submissionstatus':546 'timestamp':676,710,714,784 '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':440 'treat':175 'trigger':1529 'two':523 'two-factor':522 'type':84,305,309,313,409,448,575,740,764,812,915,963,1018,1100,1144,1215,1355 'unix':783 'updat':762,946,1201,1329,1339,1420,1519,1644,1725,1751,1776,1801,1848,1889,1899,1930,1957,2000 'us':76,296,401 'use':122,166,202,238,690,876,1237,1256,1272,1307 'usecas':473,477,527,940,956,961,966,978,979 'uuid':454,582,600,619,921,972,1040,1106,1221 'valid':58,107,342,729 'variat':893 'verif':532,660 'verifi':679,829,1561 'vertic':87,349,352,412 'vet':1409,1433,1456,1462,1478 'want':592,608,629,1030,1048 'webhook':213,268,276,281,659,663,686,734,744,746,851,861,866,1269,2059 'webhook-payload-field':280,865 'whether':439,803 'without':1473,1493,1576,1911,2023 'write':235,870 'yes':311,320,333,341,351,455,467,475,583,601,922,968,973,1025,1041,1107,1222","prices":[{"id":"07dbfcb8-e5eb-4fe4-aaed-58b303c26c08","listingId":"b849af2a-8bd9-4518-8a78-bf3b54abeb05","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:47.275Z"}],"sources":[{"listingId":"b849af2a-8bd9-4518-8a78-bf3b54abeb05","source":"github","sourceId":"team-telnyx/ai/telnyx-10dlc-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-10dlc-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:47.275Z","lastSeenAt":"2026-04-22T12:54:39.064Z"}],"details":{"listingId":"b849af2a-8bd9-4518-8a78-bf3b54abeb05","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-10dlc-ruby","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":"6421e2d33df4c6564d6f3209392c6e5cd9698477","skill_md_path":"skills/telnyx-10dlc-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-10dlc-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-10dlc-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-10dlc-ruby"},"updatedAt":"2026-04-22T12:54:39.064Z"}}