{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/honkio-ca/json-schema/honkio-ca-toll-free-verification-schema.json",
  "title": "TollFreeVerification",
  "description": "A toll-free verification application: the numbers it covers, the business behind them and where it stands.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/honkio-ca-openapi.json#/components/schemas/TollFreeVerification",
  "type": "object",
  "additionalProperties": true,
  "required": [
    "id",
    "status",
    "phone_numbers",
    "application",
    "fee_cents",
    "payment_url",
    "paid_at",
    "refunded_at",
    "reviewer_note",
    "carrier_status",
    "carrier_rejection_reason",
    "submitted_at",
    "decided_at",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "DRAFT",
        "AWAITING_PAYMENT",
        "IN_REVIEW",
        "CHANGES_REQUESTED",
        "SUBMITTED",
        "APPROVED",
        "REJECTED",
        "DECLINED",
        "CANCELLED"
      ],
      "description": "DRAFT, then AWAITING_PAYMENT, IN_REVIEW (HonkIO staff), SUBMITTED (with the carrier) and APPROVED. CHANGES_REQUESTED and REJECTED (by the carrier) can be edited and submitted again, and a REJECTED one can be withdrawn (CANCELLED); DECLINED (by HonkIO) and CANCELLED are final."
    },
    "phone_numbers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true,
        "required": [
          "id",
          "phone_number"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "phone_number": {
            "type": "string"
          }
        }
      }
    },
    "application": {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "business_name",
        "doing_business_as",
        "entity_type",
        "business_registration_number",
        "business_address",
        "contact",
        "website",
        "use_case",
        "use_case_summary",
        "sample_messages",
        "opt_in_workflow",
        "opt_in_image_urls",
        "opt_in_confirmation_message",
        "help_message",
        "privacy_policy_url",
        "terms_url",
        "monthly_volume",
        "age_gated",
        "additional_information"
      ],
      "properties": {
        "business_name": {
          "type": "string"
        },
        "doing_business_as": {
          "type": [
            "string",
            "null"
          ]
        },
        "entity_type": {
          "type": "string",
          "enum": [
            "SOLE_PROPRIETOR",
            "PRIVATE_PROFIT",
            "PUBLIC_PROFIT",
            "NON_PROFIT",
            "GOVERNMENT"
          ]
        },
        "business_registration_number": {
          "type": "string"
        },
        "business_address": {
          "type": "object",
          "additionalProperties": true,
          "required": [
            "line1",
            "city",
            "province",
            "postal_code"
          ],
          "properties": {
            "line1": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "province": {
              "type": "string"
            },
            "postal_code": {
              "type": "string"
            }
          }
        },
        "contact": {
          "type": "object",
          "additionalProperties": true,
          "required": [
            "first_name",
            "last_name",
            "email",
            "phone"
          ],
          "properties": {
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "email": {
              "type": "string"
            },
            "phone": {
              "type": "string"
            }
          }
        },
        "website": {
          "type": "string"
        },
        "use_case": {
          "type": "string",
          "enum": [
            "2FA",
            "App Notifications",
            "Appointments",
            "Auctions",
            "Auto Repair Services",
            "Bank Transfers",
            "Billing",
            "Booking Confirmations",
            "Business Updates",
            "COVID-19 Alerts",
            "Career Training",
            "Chatbot",
            "Conversational / Alerts",
            "Courier Services & Deliveries",
            "Emergency Alerts",
            "Events & Planning",
            "Financial Services",
            "Fraud Alerts",
            "Fundraising",
            "General Marketing",
            "General School Updates",
            "HR / Staffing",
            "Healthcare Alerts",
            "Housing Community Updates",
            "Insurance Services",
            "Job Dispatch",
            "Legal Services",
            "Mixed",
            "Motivational Reminders",
            "Notary Notifications",
            "Order Notifications",
            "Political",
            "Public Works",
            "Real Estate Services",
            "Religious Services",
            "Repair and Diagnostics Alerts",
            "Rewards Program",
            "Surveys",
            "System Alerts",
            "Voting Reminders",
            "Waitlist Alerts",
            "Webinar Reminders",
            "Workshop Alerts"
          ]
        },
        "use_case_summary": {
          "type": "string"
        },
        "sample_messages": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "opt_in_workflow": {
          "type": "string"
        },
        "opt_in_image_urls": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "opt_in_confirmation_message": {
          "type": "string"
        },
        "help_message": {
          "type": "string"
        },
        "privacy_policy_url": {
          "type": "string"
        },
        "terms_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "monthly_volume": {
          "type": "string",
          "enum": [
            "10",
            "100",
            "1,000",
            "10,000",
            "100,000",
            "250,000",
            "500,000",
            "750,000",
            "1,000,000",
            "5,000,000",
            "10,000,000+"
          ]
        },
        "age_gated": {
          "type": "boolean"
        },
        "additional_information": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "The application as stored: every field, with the business number, postal code and phone normalized."
    },
    "fee_cents": {
      "type": "integer",
      "description": "The verification fee for this application, in cents CAD."
    },
    "payment_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "While AWAITING_PAYMENT: the dashboard page where the fee is paid. Null otherwise."
    },
    "paid_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "refunded_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "reviewer_note": {
      "type": [
        "string",
        "null"
      ],
      "description": "What HonkIO staff asked to change, or why they declined the application."
    },
    "carrier_status": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "pending",
        "action_needed",
        "approved",
        "rejected",
        null
      ],
      "description": "Where the carrier's review stands once it has the application: pending, action_needed (the carrier asked HonkIO a question; nothing for you to do yet), approved or rejected. Null before it is submitted."
    },
    "carrier_rejection_reason": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why the carrier rejected the application, when it did."
    },
    "submitted_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "decided_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "When the carrier approved or rejected it."
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  }
}