KaiCalls Signup API

The Signup API from KaiCalls — 1 operation(s) for signup.

GitHub OpenAPI

Operations 1

POST /v1/signup Public, unauthenticated signup entry point — no bearer key or session required. #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/kaicalls-com:kaicalls-com-signup-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

kaicalls-com-signup-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: KaiCalls Public Signup API
  version: '2026-06-05'
  description: Machine-readable surface for KaiCalls external developers and client agents.
servers:
- url: https://www.kaicalls.com/api
security:
- bearerAuth: []
tags:
- name: Signup
paths:
  /v1/signup:
    post:
      summary: Public, unauthenticated signup entry point — no bearer key or session required.
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/signupOtpRequest'
              - $ref: '#/components/schemas/signupOtpVerify'
              - $ref: '#/components/schemas/signupPayment'
            examples:
              requestCode:
                summary: Email a verification code for a browser preview
                value:
                  business_name: Acme Contractors
                  email: owner@example.com
                  activation_mode: otp
                  api_key_scopes:
                  - agents:read
                  - agents:write
                  - calls:read
                  - calls:write
              verifyCode:
                summary: Repeat the same scopes with the emailed code
                value:
                  business_name: Acme Contractors
                  email: owner@example.com
                  activation_mode: otp
                  api_key_scopes:
                  - agents:read
                  - agents:write
                  - calls:read
                  - calls:write
                  challenge_id: returned-challenge-id
                  otp_code: '123456'
              payment:
                summary: Create checkout for paid carrier activation
                value:
                  business_name: Acme Contractors
                  email: owner@example.com
                  activation_mode: payment
      responses:
        '200':
          description: 'otp mode, step 1: { status: ''otp_sent'', challenge_id, expires_in_seconds }. otp mode, step 2: status: ''preview_ready'', api_key, business_id, agent_id, phone_number: null, dashboard_url, trial_ends_at: null, trial_minutes_included: 0, provisioning_deferred: true, payment_capture: ''required_for_carrier_activation''. payment mode: api_key, business_id, agent_id: null, phone_number: null, dashboard_url, trial_ends_at: null, provisioning_deferred: true, payment_capture (''stripe_checkout'' | ''manual''), and a checkout_url when Stripe Checkout is available.'
        '400':
          description: validation_error — missing/invalid business_name or email; invalid plan_id in payment mode; invalid, empty, unknown, wildcard or platform-only api_key_scopes, or api_key_scopes supplied in payment mode.
        '401':
          description: otp_invalid — otp mode only; the submitted otp_code was wrong, expired, or already consumed.
        '402':
          description: payment_required — payment mode only, when x402 is enabled and no valid payment proof was supplied; response includes the x402 payment requirements/challenge. Also payment_invalid (402) if a supplied payment proof fails verification.
        '409':
          description: email_exists — an account with this email already exists.
        '429':
          description: rate_limited — more than 5 signups from this IP in the last hour (both modes), or (otp mode only) more than 3 OTP requests/hour for the IP or email, or more than 3 completed signups/30 days from the IP.
        '500':
          description: internal_error — account/business/API-key creation failed; email_error (otp mode only) — failed to send the verification code.
      tags:
      - Signup
      operationId: postV1Signup
      x-operation-id-source: derived
components:
  schemas:
    signupOtpVerify:
      title: 'Signup: verify email and provision the account'
      type: object
      required:
      - business_name
      - email
      - challenge_id
      - otp_code
      properties:
        business_name:
          type: string
          minLength: 1
        email:
          type: string
          format: email
        business_type:
          type: string
        website:
          type: string
        phone_forward_to:
          type: string
          description: Owner forwarding phone number, preferably E.164.
        phone:
          type: string
          description: Fallback owner phone when phone_forward_to is absent.
        referral_code:
          type: string
        via:
          type: string
        attribution:
          type: object
          additionalProperties: true
        how_heard:
          type: string
        api_key_scopes:
          type: array
          minItems: 1
          items:
            type: string
            enum:
            - workspaces:read
            - workspaces:write
            - numbers:read
            - numbers:write
            - agents:read
            - agents:write
            - communication-runs:read
            - communication-runs:write
            - calls:read
            - calls:write
            - sms:read
            - sms:write
            - webhooks:read
            - webhooks:write
            - events:read
            - events:replay
            - lifecycle:write
            - leads:read
            - leads:write
            - emails:read
            - emails:write
            - sdr:read
            - sdr:write
            - evals:read
            - evals:write
            - appointments:read
            - appointments:write
            - knowledge:read
            - knowledge:write
            - products:read
            - products:write
            - integrations:write
            - billing:read
            - billing:write
            - call_evidence:read
            - call_evidence:write
            - support:write
          default:
          - workspaces:read
          - numbers:read
          - agents:read
          - communication-runs:read
          - calls:read
          - sms:read
          - webhooks:read
          - events:read
          description: 'OTP mode only: optional explicit scopes for the new business-scoped key. Omit for read-only defaults. Request customer write scopes such as agents:write and calls:write when needed. Unknown, wildcard, empty, and platform-only scopes are rejected. Send the same scopes in both OTP requests; the email challenge is bound to the normalized scope set.'
        activation_mode:
          type: string
          const: otp
          default: otp
        challenge_id:
          type: string
          minLength: 1
        otp_code:
          type: string
          pattern: ^\d{6}$
        replay_token:
          type: string
          description: Returned replay proof for an idempotent retry.
    signupOtpRequest:
      title: 'Signup: request an email verification code'
      type: object
      required:
      - business_name
      - email
      properties:
        business_name:
          type: string
          minLength: 1
        email:
          type: string
          format: email
        business_type:
          type: string
        website:
          type: string
        phone_forward_to:
          type: string
          description: Owner forwarding phone number, preferably E.164.
        phone:
          type: string
          description: Fallback owner phone when phone_forward_to is absent.
        referral_code:
          type: string
        via:
          type: string
        attribution:
          type: object
          additionalProperties: true
        how_heard:
          type: string
        api_key_scopes:
          type: array
          minItems: 1
          items:
            type: string
            enum:
            - workspaces:read
            - workspaces:write
            - numbers:read
            - numbers:write
            - agents:read
            - agents:write
            - communication-runs:read
            - communication-runs:write
            - calls:read
            - calls:write
            - sms:read
            - sms:write
            - webhooks:read
            - webhooks:write
            - events:read
            - events:replay
            - lifecycle:write
            - leads:read
            - leads:write
            - emails:read
            - emails:write
            - sdr:read
            - sdr:write
            - evals:read
            - evals:write
            - appointments:read
            - appointments:write
            - knowledge:read
            - knowledge:write
            - products:read
            - products:write
            - integrations:write
            - billing:read
            - billing:write
            - call_evidence:read
            - call_evidence:write
            - support:write
          default:
          - workspaces:read
          - numbers:read
          - agents:read
          - communication-runs:read
          - calls:read
          - sms:read
          - webhooks:read
          - events:read
          description: 'OTP mode only: optional explicit scopes for the new business-scoped key. Omit for read-only defaults. Request customer write scopes such as agents:write and calls:write when needed. Unknown, wildcard, empty, and platform-only scopes are rejected. Send the same scopes in both OTP requests; the email challenge is bound to the normalized scope set.'
        activation_mode:
          type: string
          const: otp
          default: otp
      not:
        anyOf:
        - required:
          - challenge_id
        - required:
          - otp_code
    signupPayment:
      title: 'Signup: paid carrier activation'
      type: object
      required:
      - business_name
      - email
      - activation_mode
      not:
        required:
        - api_key_scopes
      properties:
        business_name:
          type: string
          minLength: 1
        email:
          type: string
          format: email
        business_type:
          type: string
        website:
          type: string
        phone_forward_to:
          type: string
          description: Owner forwarding phone number, preferably E.164.
        phone:
          type: string
          description: Fallback owner phone when phone_forward_to is absent.
        referral_code:
          type: string
        via:
          type: string
        attribution:
          type: object
          additionalProperties: true
        how_heard:
          type: string
        activation_mode:
          type: string
          const: payment
        plan_id:
          type: string
          description: Current plan name or allowed Stripe price ID; defaults to the entry public plan.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'KaiCalls API key. Per-operation scope requirements are published on each operation as `x-required-scopes` — a scope string, or a nested `{ allOf: [...] }` / `{ anyOf: [...] }` expression. An operation with no `x-required-scopes` requires a valid key but no particular scope.'
      x-scopes:
      - workspaces:read
      - workspaces:write
      - numbers:read
      - numbers:write
      - agents:read
      - agents:write
      - communication-runs:read
      - communication-runs:write
      - calls:read
      - calls:write
      - sms:read
      - sms:write
      - webhooks:read
      - webhooks:write
      - events:read
      - events:replay
      - lifecycle:write
      - leads:read
      - leads:write
      - emails:read
      - emails:write
      - sdr:read
      - sdr:write
      - evals:read
      - evals:write
      - appointments:read
      - appointments:write
      - knowledge:read
      - knowledge:write
      - products:read
      - products:write
      - integrations:write
      - approvals:write
      - concierge:write
      - billing:read
      - billing:write
      - call_evidence:read
      - call_evidence:write
      - support:write
    sessionAuth:
      type: apiKey
      in: cookie
      name: sb-access-token
      description: Authenticated dashboard session cookie. Used by first-party flows that mint or manage API keys.