mittis.docs API reference Console

#10DLC registration

US carriers require application-to-person (A2P) texting from local 10-digit numbers to be registered with The Campaign Registry. You register two things:

  • A brand: the legal business behind the messages.
  • A campaign: the use case. What you send, how people opt in, and sample messages.

Until a campaign is approved and a number is attached to it, live sends from that number are rejected. Test mode needs no registration, so build your integration first.

#In the console

The console walks you through it at app.mittis.ai:

  1. Register your brand. Enter your legal business name, entity type, tax ID, address, website and support contact. The legal name and tax ID must match your official records exactly. The website must be live over HTTPS and clearly belong to the business.
  2. Draft the campaign. Pick a use case and describe your messaging. The console's AI assist drafts a compliant brand and campaign description, opt-in flow and sample messages from your business details, and scores the approval likelihood with a list of what to improve. Nothing is submitted until you submit it.
  3. Publish consent and policy pages. Reviewers check that you have a clear opt-in, a privacy policy and messaging terms. The console can host these for you.
  4. Submit. Approval is asynchronous. A campaign moves through draft, submitted, dca_review and then approved or rejected. A brand is draft, submitted, approved or rejected. A rejected brand can be corrected and resubmitted.
  5. Attach numbers. Once the campaign is approved, assign each number to it.

Optional external vetting of a brand raises campaign acceptance and carrier throughput.

#Through the API

bash
# Register a brand and its first campaign together
curl https://api.mittis.ai/v1/registrations \
  -H "Authorization: Bearer $MITTIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brand": {
      "legalName": "Riverside Plumbing LLC",
      "entityType": "PRIVATE_PROFIT",
      "ein": "12-3456789",
      "website": "https://riversideplumbing.example"
    },
    "campaign": {
      "name": "Appointments and updates",
      "useCase": "MIXED",
      "description": "Appointment reminders, booking confirmations and customer-care replies to customers who opted in.",
      "sampleMessages": ["Hi Sam, your appointment is confirmed for Tuesday at 2pm. Reply STOP to opt out."],
      "optInDetails": "Customers check an SMS consent box on our booking form or text us first."
    }
  }'

Only brand.legalName and the five campaign fields shown (name, useCase, description, sampleMessages, optInDetails) are required by the API; the rest raise the approval rate. The exact shape of every field is in the reference for POST /v1/registrations.

EndpointPurpose
POST /v1/onboarding/draftAI-assist: draft a brand and campaign. Nothing is registered.
POST /v1/onboarding/predictAI-assist: score an edited draft and list what to improve.
POST /v1/registrationsRegister a brand and campaign in one call.
POST /v1/brands, POST /v1/campaignsRegister a brand, or a campaign under an existing brand.
GET /v1/campaigns/{id}Poll the campaign status.
POST /v1/brands/{id}/resubmitResubmit a corrected brand.
POST /v1/brands/{id}/vettingRequest external vetting.
POST /v1/numbers/{id}/assignAttach a number to an approved campaign (campaignId: null unlinks).

#Tips that prevent rejections

  • Match the legal name and tax ID to your official records character for character.
  • Use a business email on your own domain, not a free mailbox provider.
  • Show a clear consent checkbox or call to action wherever you collect numbers, and honor STOP.
  • Do not use public link shorteners in messages; use your own domain.
  • Toll-free numbers do not use 10DLC. They go through toll-free verification.