๐Ÿ“Š Dashboard ๐Ÿ“ž Calls โ˜Ž๏ธ Numbers ๐Ÿ“ Scripts โœจ AI Tools ๐Ÿ’ณ Billing ๐Ÿ“ˆ Reports โš™ Settings ๐Ÿ” API Keys ๐Ÿ“š API Docs โšก AI Ads Sign up โ† Back to ShuiLink
๐Ÿ“ž ShuiLink AI Voice API ยท v1

AI phone answering. By API.

List your phone numbers, fetch live call transcripts, summarize completed conversations, and trigger outbound voice messages โ€” all over plain REST + JSON. The same engine that runs ShuiLink-managed numbers, exposed to your tools.

๐Ÿ›  What you can build

A few patterns we built this for. If your idea isn't here, email us.

๐Ÿ“ฒ

CRM auto-logging

Drop every call summary, transcript, and booking outcome straight into HubSpot, Salesforce, or your own CRM.

๐Ÿ—“

Calendar integrations

When a customer books on a call, push the appointment to Google Calendar / Cal.com / your scheduling tool.

๐Ÿ””

Lead alerts

Slack or SMS your team the second a hot lead calls in โ€” with the AI's qualification summary attached.

๐Ÿ“Š

Custom reporting

Pipe call metrics into your data warehouse, finance system, or BI tool of choice.

๐ŸŒ

Multilingual call centers

One API, dozens of languages. Route Spanish callers to a Spanish script, Mandarin to Mandarin, automatically.

๐Ÿ“ž

Outbound campaigns

Trigger reminder calls, appointment confirmations, or re-engagement campaigns from a webhook.

๐Ÿš€ Quickstart

Get your first response in under 60 seconds.

1

Create an account

Sign up with email + password or Google. New accounts land in pending-approval and need admin promotion before they can call the API.

Sign up โ†’
2

Generate an API key

Go to the Keys page โ†’ click + Create key โ†’ pick a tier โ†’ copy the raw key. It's only shown once, so save it somewhere safe.

sl_e332f39d5878f54d140b6ee1537fdfe8f7906cec53ab92f6b8c22301634bda80
โ””โ”€โ”ดโ”€โ”€ 64 hex characters โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
3

Make your first call

List all phone numbers across your authorized account:

curl https://voice.shuilink.com/api/v1/numbers/ \
  -H "Authorization: Bearer sl_YOUR_KEY"

๐Ÿ” Authentication

All API requests must include your API key in the Authorization header.

Authorization: Bearer sl_e332f39d5878...

Alternative headers accepted: X-Api-Key: sl_.... Avoid query params (?api_key=) โ€” they leak into server logs and browser history.

Keys are 67-character strings prefixed with sl_. We store only the SHA-256 hash โ€” if you lose a key, you must revoke and generate a new one. The same key works for both ads and voice endpoints.

๐Ÿ“Š Rate limits

Limits are enforced per-key. Every response carries headers so you can self-throttle.

TierDaily limitPer-minuteMax keysBest for
Free 100 req / day 10 req / min 2 active Try it out, prototypes
Pro 10,000 req / day 100 req / min 5 active Production, 1โ€“10 phone numbers
Enterprise Unlimited Unlimited 20 active White-label, SLA, dedicated support

Response headers

Every successful response includes these. Watch X-RateLimit-Remaining to back off before you 429.

X-Tier: pro
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9837

โš ๏ธ Errors

All errors return JSON with a single error field describing the problem.

StatusWhenWhat to do
401Missing or invalid API keyCheck Authorization header. Key revoked? Generate a new one.
403Key valid but account pending approvalEmail voice@shuilink.com to request access.
405Wrong HTTP method (e.g. POST to GET endpoint)Check the endpoint reference below.
422Tier max-keys reached on createRevoke an old key or upgrade tier.
429Daily quota exceededWait until UTC midnight reset, or upgrade tier.
500Upstream provider error (Twilio, Vapi)Retry with exponential backoff. Status persists โ†’ email us.

Example 429 body:

{
  "error": "Daily quota of 100 requests reached for tier free.",
  "reason": "DAILY_QUOTA_EXCEEDED"
}

โ˜Ž๏ธ Numbers

List, provision, and configure the phone numbers handled by your AI receptionist.

Returns every phone number connected to your account, with its provider, assigned script, and last-active timestamp.

Query parameters

(none in v1 โ€” filtering coming in v1.1)

Example response

{
  "version": "v1",
  "fetched_at": "2026-05-25T00:34:06.105Z",
  "numbers": [
    {
      "id": "num_01HPQR...",
      "phone_number": "+15551234567",
      "provider": "twilio",
      "script_id": "scr_hibachi_booking",
      "status": "active",
      "last_call_at": "2026-05-25T00:18:42.000Z"
    }
  ]
}

Body

{
  "provider": "twilio",
  "phone_number": "+15551234567",
  "script_id": "scr_hibachi_booking"
}

๐Ÿ“ž Calls

Inspect inbound and outbound calls, including duration, outcome, and recording URL.

Example response

[
  {
    "id": "call_01HPQR...",
    "from": "+15555550142",
    "to": "+15551234567",
    "started_at": "2026-05-25T00:14:32.000Z",
    "duration_s": 154,
    "ai_handled": true,
    "booking_created": true,
    "recording_url": "https://recordings.shuilink.com/...",
    "cost_usd": 0.18
  }
]

Body

{
  "call_id": "call_01HPQR...",
  "language_hint": "en"
}

๐Ÿ“ Transcripts

Get the full conversation text, turn by turn, with timestamps.

{
  "call_id": "call_01HPQR...",
  "language": "en",
  "turns": [
    { "t_s": 0,  "speaker": "ai",     "text": "Hi, thanks for calling Kobe Hibachi!" },
    { "t_s": 4,  "speaker": "caller", "text": "I'd like to book a chef for June 15." },
    { "t_s": 9,  "speaker": "ai",     "text": "How many guests?" }
  ]
}

๐Ÿ“‹ Scripts

Read and edit the call scripts your AI receptionist follows.

[
  { "id": "scr_hibachi_booking", "name": "Hibachi โ€” Booking",
    "industry": "hibachi-catering", "languages": ["en", "es"] }
]

๐Ÿง  AI summaries

Generate scripts from a business description and summarize completed calls.

Body

{
  "business": "Kobe Hibachi Catering",
  "industry": "hibachi-catering",
  "tone": "warm",
  "languages": ["en", "es", "zh"]
}

Example response

{
  "greeting": "Hi, thanks for calling Kobe Hibachi!...",
  "qualifying_questions": ["What date?", "How many guests?", "..."],
  "objection_handling": [...],
  "closing": "Perfect โ€” I've got you down for..."
}

Body

{
  "call_id": "call_01HPQR..."
}

๐Ÿ“ค Outbound calls

Trigger outbound voice messages โ€” reminders, confirmations, re-engagement. Pro+ only.

Body

{
  "from": "+15551234567",
  "to": "+15555550142",
  "script_id": "scr_appointment_reminder",
  "variables": { "appointment_date": "June 15, 6 PM" }
}

Ready to start automating?

Free tier doesn't need a credit card. You'll have a working API key in 60 seconds.

Sign up free โ†’