Hail · Schema

VerificationResponse

A carrier verification: its state and the name of the person or company it is for. No other personal data.

Artificial IntelligenceCommunicationsPhoneSMSEmail

Properties

Name Type Description
id string Unique identifier for this verification.
country_code string ISO alpha-2 country code.
number_type string Kind of number: 'local', 'mobile', 'toll_free', or 'national'.
subject_type string 'person' or 'business'.
subject_name object Name of the person or company this verification is for, taken from the form (for example the business name, or the first and last name). Null when unknown.
purpose string 'number': permission to buy a number in this country. 'sms': registration to text US numbers from a US number.
state string 'awaiting_review', 'submitting', 'submitted', 'approved', 'rejected', or 'cancelled'.
rejection_reason object Why it was rejected. Null unless rejected.
created_at string When the verification was created.
updated_at string When it last changed.
submitted_at object When it was submitted to the carrier.
approved_at object When the carrier approved it.
confirmation object For a person's US texting registration: 'code' when you must enter the code the carrier texted (POST /verifications/{id}/confirm), 'reply' when you must answer the carrier's text, null when nothing is
step object For a US texting registration that is not yet approved or rejected: 'confirm_identity' while the person must confirm (see `confirmation`), 'filing' while Hail files the details with the carriers, 'car
campaign_accepted boolean The carrier accepted the SMS campaign; this alone does not mean a number is ready to send.
runtime_ready object True when required runtime configuration was verified, false while setup retries, null when not independently tracked.
cancellable boolean True when `DELETE /v1/verifications/{id}` accepts this verification now.
identity_confirmed boolean True on a person's newest US texting registration when it is cancelled, or rejected and not yet dismissed, and the person stays confirmed: the next filing with the same first name, last name, email an
waiting_for_credit boolean True when a US texting registration waits for credit: its next step, filing the campaign, has a carrier fee your balance does not cover. Nothing is filed until it does. Add credit; Hail goes on at its
credit_needed_cents object The credit this registration still needs before Hail files its campaign, in US cents; null when `waiting_for_credit` is false. Per registration, not a running total: the first waiting registration sho
View JSON Schema on GitHub

JSON Schema

hail-so-verification-response-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/hail-so/json-schema/hail-so-verification-response-schema.json",
  "title": "VerificationResponse",
  "description": "A carrier verification: its state and the name of the person or\ncompany it is for. No other personal data.",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/hail-so-openapi.json#/components/schemas/VerificationResponse",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "title": "Id",
      "description": "Unique identifier for this verification."
    },
    "country_code": {
      "type": "string",
      "title": "Country Code",
      "description": "ISO alpha-2 country code."
    },
    "number_type": {
      "type": "string",
      "title": "Number Type",
      "description": "Kind of number: 'local', 'mobile', 'toll_free', or 'national'."
    },
    "subject_type": {
      "type": "string",
      "title": "Subject Type",
      "description": "'person' or 'business'."
    },
    "subject_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Subject Name",
      "description": "Name of the person or company this verification is for, taken from the form (for example the business name, or the first and last name). Null when unknown."
    },
    "purpose": {
      "type": "string",
      "title": "Purpose",
      "description": "'number': permission to buy a number in this country. 'sms': registration to text US numbers from a US number."
    },
    "state": {
      "type": "string",
      "title": "State",
      "description": "'awaiting_review', 'submitting', 'submitted', 'approved', 'rejected', or 'cancelled'."
    },
    "rejection_reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Rejection Reason",
      "description": "Why it was rejected. Null unless rejected."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "title": "Created At",
      "description": "When the verification was created."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "title": "Updated At",
      "description": "When it last changed."
    },
    "submitted_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Submitted At",
      "description": "When it was submitted to the carrier."
    },
    "approved_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Approved At",
      "description": "When the carrier approved it."
    },
    "confirmation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Confirmation",
      "description": "For a person's US texting registration: 'code' when you must enter the code the carrier texted (POST /verifications/{id}/confirm), 'reply' when you must answer the carrier's text, null when nothing is pending."
    },
    "step": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "confirm_identity",
            "filing",
            "carrier_review",
            "runtime_setup",
            "needs_information"
          ]
        },
        {
          "type": "null"
        }
      ],
      "title": "Step",
      "description": "For a US texting registration that is not yet approved or rejected: 'confirm_identity' while the person must confirm (see `confirmation`), 'filing' while Hail files the details with the carriers, 'carrier_review' once the carriers are reviewing them (1 to 7 business days), or runtime_setup when accepted but required messaging responses still need configuration; needs_information when the existing sender needs current campaign evidence before filing. Null otherwise."
    },
    "campaign_accepted": {
      "type": "boolean",
      "title": "Campaign Accepted",
      "description": "The carrier accepted the SMS campaign; this alone does not mean a number is ready to send.",
      "default": false
    },
    "runtime_ready": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Runtime Ready",
      "description": "True when required runtime configuration was verified, false while setup retries, null when not independently tracked."
    },
    "cancellable": {
      "type": "boolean",
      "title": "Cancellable",
      "description": "True when `DELETE /v1/verifications/{id}` accepts this verification now.",
      "default": false
    },
    "identity_confirmed": {
      "type": "boolean",
      "title": "Identity Confirmed",
      "description": "True on a person's newest US texting registration when it is cancelled, or rejected and not yet dismissed, and the person stays confirmed: the next filing with the same first name, last name, email and mobile needs no code and has no submission fee. Dismiss a rejected registration first. Ignore it on older registrations.",
      "default": false
    },
    "waiting_for_credit": {
      "type": "boolean",
      "title": "Waiting For Credit",
      "description": "True when a US texting registration waits for credit: its next step, filing the campaign, has a carrier fee your balance does not cover. Nothing is filed until it does. Add credit; Hail goes on at its next check.",
      "default": false
    },
    "credit_needed_cents": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Credit Needed Cents",
      "description": "The credit this registration still needs before Hail files its campaign, in US cents; null when `waiting_for_credit` is false. Per registration, not a running total: the first waiting registration shows the carrier's campaign fee less the credit left after the registrations already covered (more when the balance is short), each later one its whole fee. Add the sum over every registration with `waiting_for_credit` true, and one top-up lets them all go. It follows the balance, so read it again before you pay."
    }
  },
  "type": "object",
  "required": [
    "id",
    "country_code",
    "number_type",
    "subject_type",
    "purpose",
    "state",
    "created_at",
    "updated_at"
  ]
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/hail-so-verification-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.