---
title: "Dry-run a caller identity before creating it"
method: POST
path: "/v1/branded-calling/identities/preflight"
tags: ["Branded Calling"]
---

# Dry-run a caller identity before creating it

`POST /v1/branded-calling/identities/preflight`

Validates the exact body `POST /v1/branded-calling/identities` takes and runs
the same deterministic lints the review runs on it without creating anything,
with the same codes and fields the queued identity's findings carry. A `block`
finding is what the review would bounce (two references sharing a phone, a
reference inside the business, an invalid timezone); a `warn` finding slows
vetting (a display name that does not read as the business, a call reason
outside the carrier catalogue, a public-mailbox authorizer, a logo that does
not answer). `ok` is true when there is no `block`.

## Request body

- object — Same body as createBrandedCallingIdentity.
  - `enterpriseId` string, required
  - `displayName` string, required
  - `callReasons` string[], required
  - `logoUrl` string
  - `authorizer` object, required
    - `name` string, required
    - `email` string, email, required
  - `references` BrandedCallingReferences, required
    - `business` BrandedCallingReference[], required
      - `fullName` string, required
      - `jobTitle` string
      - `organization` string
      - `relationshipToRegistrant` string
      - `phoneNumber` string, required — E.164 with a leading +.
      - `email` string, email, required
      - `timezone` string, required — IANA timezone id, e.g. America/New_York.
    - `financial` BrandedCallingReference, required — A person the carrier vetting team phones to confirm the business. Business references are senior contacts at a vendor, partner or client; the financial reference is a CPA or a bank contact. Calls are placed in the reference's local 8am-9pm window.
      - `fullName` string, required
      - `jobTitle` string
      - `organization` string
      - `relationshipToRegistrant` string
      - `phoneNumber` string, required — E.164 with a leading +.
      - `email` string, email, required
      - `timezone` string, required — IANA timezone id, e.g. America/New_York.

## Response `200`

The findings; nothing was created.

- object
  - `ok` boolean — True when no finding is a block.
  - `findings` object[]
    - `code` 'display-name-mismatch' | 'call-reasons-manual' | 'authorizer-free-mail' | 'authorizer-domain-mismatch' | 'reference-phone-duplicate' | 'reference-internal' | 'reference-financial-free-mail' | 'reference-timezone-invalid' | 'logo-unreachable'
    - `severity` 'block' | 'warn'
    - `field` string — The body field the finding is about, e.g. references.financial.email.
    - `message` string

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Business not found

## Changes

- **2026-09-30** `16a7b9d5373e` — 1 info
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `400`
- **2026-09-29** `698a0d89ab62` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/branded-calling/identities/preflight/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/f92af0e169c1?raw)
