---
title: "Pre-check a carrier registration"
method: POST
path: "/v1/sms/registrations/preflight"
tags: ["SMS"]
---

# Pre-check a carrier registration

`POST /v1/sms/registrations/preflight`

Dry-run of `POST /v1/sms/registrations` for 10DLC: validates and
composes the exact brand/campaign payloads a submission would store
(branding, disclosures, auto-replies), runs deterministic compliance
lints plus an AI reviewer over them, and returns the findings WITHOUT
creating anything. Use it to fix issues before submitting; `block`
severity findings indicate a near-certain carrier rejection.

## Request body

- object
  - `registrationType` 'standard_10dlc' | 'sole_prop_10dlc', required
  - `phoneNumbers` string[]
  - `brand` object, required — Same shape as the registration `brand`.
  - `campaign` object, required — Same shape as the registration `campaign`.
  - `messagingBrandName` string

## Response `200`

Composed payloads + findings.

- object
  - `composed` object — The exact payloads a submission would store (post-branding, disclosures appended, auto-replies generated).
    - `brand` object
    - `campaign` object
  - `advisories` object[]
    - `field` string, nullable — The payload field the finding is about, when attributable.
    - `code` string, nullable — Stable rule id for deterministic findings; absent on AI findings.
    - `concern` string
    - `severity` 'block' | 'warn'
  - `verdict` 'pass' | 'warn' | 'fail' | 'unreviewed'
  - `aiUnavailable` boolean — True when the AI portion of the check could not run; advisories then contain only deterministic findings.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/d0ab3b4eb0ae/schema)
