Authentication and scope
Send an admin-scoped API key or a claimed agent’s API key in theX-API-Key header. Unclaimed agents cannot use these endpoints. You can also manage registration in the Inkbox Console.
These operations act on the key’s organization, even when you use an agent-scoped key. Activation and resubmission affect all eligible local US phone numbers in that organization, including numbers belonging to other agents. Do not pass an organization ID or identity ID.
All paths below start with https://inkbox.ai/api/v1/compliance.
Brand and campaign JSON request fields use snake_case. Their response fields use camelCase, such as
brandId, identityStatus, campaignId, and campaignStatus. Evidence and activation responses use the exact names shown below.
Registration workflow
- Register your brand and retain its
brandId. - Check the brand until verification completes. Complete any requested verification in the Console.
- Upload a screenshot if you need a public URL showing how recipients opt in.
- Submit a campaign using the brand’s UUID as
brand_id. - Check
campaignStatusandfailureReasonswhile the campaign is reviewed. - Once approved, select your campaign with
PATCH /campaign/active. - Wait for each phone number’s
sms_statusto becomereadybefore sending.
201 response confirms submission, not approval. See the 10DLC guide for registration requirements.
Register a brand
422.
Required fields
Supported
vertical values: PROFESSIONAL, REAL_ESTATE, HEALTHCARE, HUMAN_RESOURCES, ENERGY, ENTERTAINMENT, RETAIL, TRANSPORTATION, AGRICULTURE, INSURANCE, POSTAL, EDUCATION, HOSPITALITY, FINANCIAL, POLITICAL, GAMBLING, LEGAL, CONSTRUCTION, NGO, MANUFACTURING, GOVERNMENT, TECHNOLOGY, and COMMUNICATION.
Conditional and optional fields
Supported
stock_exchange values: NYSE, NASDAQ, AMEX, AMX, ASX, B3, BME, BSE, FRA, ICEX, JPX, JSE, KRX, LON, NSE, OMX, SEHK, SSE, STO, SWX, SZSE, TSX, TWSE, and VSE.
Example
The values below are fictional. Replace them with your registered business details before submitting.Response (201)
Returns a brand object. Fields you will use in the registration workflow include:
An existing brand returns
409 with detail.error: "brand_already_exists".
Check brand status
404 with detail.error: "brand_not_found".
Sole-proprietor phone verification and other requested verification steps remain available through the Console or an admin-scoped integration. Those separate verification endpoints, along with brand/campaign update and delete endpoints, require an admin-scoped API key or the Console.
Upload opt-in evidence
file part of a multipart/form-data request. The image must be no larger than 5 MiB (5,242,880 bytes) or 16 million pixels.
201:
message_flow to show the opt-in experience. There is no separate evidence field in the campaign request.
Register a campaign
422.
Required fields
Supported
usecase values: ACCOUNT_NOTIFICATION, AGENTS_FRANCHISES, CARRIER_EXEMPT, CHARITY, CUSTOMER_CARE, DELIVERY_NOTIFICATION, EMERGENCY, FRAUD_ALERT, HIGHER_EDUCATION, K12_EDUCATION, LOW_VOLUME, MARKETING, MIXED, POLITICAL, POLLING_VOTING, PROXY, PUBLIC_SAFETY_RESTRICTED, PUBLIC_SERVICE_ANNOUNCEMENT, SECURITY_ALERT, SOCIAL, SWEEPSTAKE, 2FA, UCAAS_LOW, M2M, SOLE_PROPRIETOR, TRIAL, and UCAAS_HIGH. Registry eligibility still applies to each use case.
Optional fields
Example
Replacebrand_id with the UUID returned when you registered your brand. Replace the example content and URLs with your actual messaging flow.
Response (201)
Returns a campaign object. Important fields include:
An existing campaign returns
409 with detail.error: "campaign_already_exists". Use resubmission to replace an existing campaign.
Check campaign status
404 with detail.error: "campaign_not_found".
Approval, campaign selection, and number readiness are separate states.
campaignStatus describes approval; /campaign/active describes your organization’s selection; each number’s sms_status describes whether it is ready to send.
Resubmit a campaign
POST /campaign. This is not a partial update. For example, save your corrected JSON as campaign.json:
201 with a new campaign object and a new campaignId. Your local numbers return to Inkbox’s default campaign while the replacement is reviewed. Check its status and select your campaign again after approval. If no campaign exists to replace, the endpoint returns 404.
Do not blindly retry registration or resubmission after a network timeout. First retrieve the current campaign and check whether the submission succeeded. Resubmission creates a replacement, rather than updating the same campaign ID.
Read campaign selection
200):
active: true means your organization selected its own campaign. false means it selected Inkbox’s default. This does not confirm that every number has finished switching. If no customer campaign exists, this endpoint returns 404.
Change campaign selection
active selects your campaign (true) or Inkbox’s default (false). Activating requires a verified brand and a campaign with MNO_PROVISIONED status. If readiness has not yet been confirmed, the endpoint returns 409 with detail.error: "customer_campaign_not_ready"; check status again before retrying.
Response (202):
409 sender_sms_pending.
Errors
Registration conflict responses contain
detail.error and detail.message. Upload errors may instead contain a string in detail. Validation errors can use an array of field errors. Inspect the response body rather than assuming one error shape for every endpoint.
