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.
openapi: 3.2.0
info:
title: KaiCalls Public Owner Phone 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: Owner Phone
paths:
/v1/owner-phone:
post:
summary: Save the owner's own mobile and ring it first before the secretary answers…
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- business_id
properties:
business_id:
type: string
owner_phone:
type: string
ring_first:
type: boolean
declined:
type: boolean
contact_name:
type: string
contact_email:
type: string
phone_number:
type: string
description: 'With ring_first_numbers: the business line (E.164) whose calls ring the group first.'
ring_first_numbers:
type: array
minItems: 1
maxItems: 5
items:
type: string
description: US numbers in ring order. Each rings in turn before the secretary answers.
ring_first_timeout_seconds:
type: integer
minimum: 5
maximum: 60
description: Seconds each number rings. Defaults to the line's current setting (20).
ring_first_answer_confirmation:
type: boolean
description: 'With ring_first_numbers: require each recipient to press 1 privately before connecting. Voicemail or no acceptance advances to the next contact, then the secretary. Applies to Twilio ring-first ingress, including a governed forwarding target. Omitted preserves the existing choice; new lines default false.'
acknowledge_forwarding_risk:
type: boolean
description: Save anyway when a number may forward back into this line (returned as 409 requires_forwarding_confirmation).
responses:
'200':
description: Owner phone saved (and ring-first applied when requested)
'400':
description: Invalid input
'404':
description: phone_number is not an active line on this business
'409':
description: Forwarding loop, or a forwarding warning needing confirmation
'502':
description: Ring-first saved but the carrier did not accept the change; retry
x-required-scopes: numbers:write
tags:
- Owner Phone
operationId: postV1OwnerPhone
x-operation-id-source: derived
components:
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.