Finn Voice API
Programmatisk åtkomst — autentisering, endpoints, webhooks.
Finn Voice API
FinnAPI är samma yta som vår instrumentpanel använder. Bygg röstagenter, starta kampanjer, inta analyser - allt programmatiskt.
Den här guiden får dig till din första live API samtal i ~ 5 minuter.
Quickstart (3 steg)
1. Ta en API nyckel
Dashboard → Inställningar → Integrationer → API Keys → Generera nyckel.
Du får två nyckelnivåer:
fnn_test_*- Sandbox. Ingen operatör fakturering, inga riktiga ratt. Använd för utveckling.fnn_live_*- produktion. Riktiga samtal, riktiga pengar.
Nycklar är org-scoped och ärver din plans kursgränser + kvoter.
2. sätt miljövariabler
export FINN_API_KEY=fnn_test_xxxxxxxxxxxxxxxxxxxx
export FINN_BASE_URL=https://stage-api.hirefinn.ai/v1
För produktion, byta till:
export FINN_BASE_URL=https://api.hirefinn.ai/v1
Gör ditt första samtal
Lista ditt finns:
curl $FINN_BASE_URL/finns \
-H "Authorization: Bearer $FINN_API_KEY"
Förväntat svar:
{
"data": [
{
"id": "fn_abc123",
"name": "MBBS Callflow",
"voice_id": "voice_warm_indian_f",
"language": "en-IN",
"created_at": "2026-04-12T10:30:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 50,
"total": 1,
"has_more": false
}
}
Done. Du pratar med API.
Base URL
Miljö | URL |
|--------
| Produktion | https://api.hirefinn.ai/v1 |
| Steg | https://stage-api.hirefinn.ai/v1 |
Alla endpoints är versionerade under /v1. Breaking ändrar fartyg under en ny vägprefix (/v2, /v3); additiva fält rulla in i den aktuella versionen.
Autentisering
Varje begäran behöver en API-nyckel i Authorization-rubriken:
Authorization: Bearer fnn_live_xxxxxxxxxxxxxxxxxxxx
Nyckelhantering
- Generera i Dashboard → Inställningar → Integrationer → API Keys.
- *Rotate - samma skärm. Gamla nyckel återkallas omedelbart på bekräftelse.
- ** Återkalla** – ögonblick. Alla begäranden om flygning med hjälp av den återkallade nyckeln misslyckas med
401. - Scope - nycklar är org-scoped. Använd separata nycklar per miljö, per service.
Bästa praxis
- Lagra nycklar i miljövariabler eller en hemlig chef. Begå aldrig till källa.
- Använd
fnn_test_*för CI och lokal dev. Produktionsuppgifter bör aldrig se en utvecklare laptop. - Rotera kvartalsvis även utan en incident.
- Granska vilken nyckel som skapats som resurs via
created_by_key_idfältet på de flesta resurser.
Kodexempel
Hit samma slutpunkt på tre språk.
cURL
curl https://api.hirefinn.ai/v1/finns \
-H "Authorization: Bearer $FINN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Aria — Dental Reminders",
"voice_id": "voice_warm_indian_f",
"language": "en-IN",
"system_prompt": "You are Aria, a friendly...",
"welcome_message": "Hi, this is Aria from Smile Dental..."
}'
Nod / TypeScript
import { Finn } from "@finn-voice/sdk";
const finn = new Finn({ apiKey: process.env.FINN_API_KEY });
const agent = await finn.finns.create({
name: "Aria — Dental Reminders",
voice_id: "voice_warm_indian_f",
language: "en-IN",
system_prompt: "You are Aria, a friendly...",
welcome_message: "Hi, this is Aria from Smile Dental...",
});
console.log(agent.id);
Python
from finn_voice import Finn
finn = Finn(api_key=os.environ["FINN_API_KEY"])
agent = finn.finns.create(
name="Aria — Dental Reminders",
voice_id="voice_warm_indian_f",
language="en-IN",
system_prompt="You are Aria, a friendly...",
welcome_message="Hi, this is Aria from Smile Dental...",
)
print(agent.id)
Svarsformat
Varje framgångsrikt svar slår nyttolast i ett konsekvent kuvert.
Enkel resurs
{
"data": {
"id": "fn_abc123",
"name": "MBBS Callflow",
"created_at": "2026-04-12T10:30:00Z"
}
}
Lista List
{
"data": [ /* array of resources */ ],
"pagination": {
"page": 1,
"per_page": 50,
"total": 312,
"has_more": true
}
}
Timestamps
Alla tidsstämplar är ISO-8601 UTC (2026-05-22T14:30:00Z).
IDs
Resurs-ID prefixeras efter typ för grep-ability:
Prefix | Resurs |
|--------
| fn_ | Finn (röstagent) |
| aud_ | Audience |
| dep_ | Utplacering |
| cal_ | Ring |
| ph_ | Telefonnummer |
| whk_ | Webhook abonnemang |
Paginering
List endpoints accepterar:
?page=2&per_page=100
pagestandarder till 1.per_pagestandarder till 50, max 200.- Response inkluderar
pagination.has_more- närtrue, stegpageoch återhämtning.
Cursor paginering för hög kardinalitets endpoints (samtal, utskrifter):
?cursor=eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0yMlQxMjowMDowMFoifQ&per_page=100
Cursor är ogenomskinlig - passera den tillbaka som-är att hämta nästa sida.
Filtrera & sortering
De flesta list endpoints support:
?filter[status]=active&filter[call_type]=outbound&sort=-created_at
filter[field]=value- exakt match. Vissa fält accepterar matriser:filter[status]=active,paused.sort=field- uppstigning. Prefix med-för nedstigning. Koma-separat multipel:sort=-created_at,name.
Idempotens
Skicka en unik Idempotency-Key rubrik på POST förfrågningar som skapar resurser. Finn deduplicerar återkallade förfrågningar inom 24 timmar.
curl https://api.hirefinn.ai/v1/deployments \
-H "Authorization: Bearer $FINN_API_KEY" \
-H "Idempotency-Key: campaign-may-cohort-3-attempt-1" \
-d '{ "finn_id": "fn_abc123", ... }'
Om du retry med samma nyckel får du det cachade svaret från det första samtalet - ingen dubblettresurs skapad.
Fel
JSON kuvert:
{
"error": {
"type": "validation_error",
"code": "missing_field",
"message": "phone_number_id is required",
"field": "phone_number_id",
"request_id": "req_xy12abc"
}
}
Inkludera request_id i någon supportbiljett - det är så vi spårar ditt samtal genom våra loggar.
Statuskoder
Status | Betydelse | Retry
|----------
| 400 | Validationsfel - nyttolast form fel | Nej |
| 401 | API nyckel saknas/ogiltig | Nej |
| 403 | Avslutad till olika org / plannivå | Nej |
| 404 | Resurs som inte finns | Nej |
| 409 | Konflikt (duplicera namn, telefon redan bunden) | Nej |
| 422 | Business-rule refuse (överensstämmelse, kvot) | Nej |
| 429 | Rate limited | Yes - Respekt Retry-After |
| 5xx | Server sida | Ja - exponentiell backoff |
Vanliga felkoder
| Kod | När |
|--------
| missing_field | Obligatoriskt fält frånvarande från nyttolast |
| invalid_field | Fältet närvarande men värdet ogiltigt |
| not_authenticated | Bärare token saknas |
| invalid_token | Token återkallad eller missbildad |
| forbidden_scope | Token har inte tillgång till denna resurs |
| quota_exceeded | Plan limit hit |
| rate_limited | För många förfrågningar per sekund |
| compliance_block | Begäran som avvisas genom reglerna om efterlevnad
| wallet_insufficient | Inte tillräckligt med krediter för att starta utplacering |
Rate limits
Plan | RPS | Daglig | |---------- Starter | 5 | 5 000 | Pro | 25 | 50 000 | Tillväxt | 100 | 250.000 | Enterprise | Förhandlat | Förhandlat |
Att slå gränsen returnerar 429 med rubriker:
Retry-After: 12
X-RateLimit-Limit: 25
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1716391823
Respekt Retry-After (andra) eller tillbaka exponentiellt på 5xx.
Resurser vid en blick
| Resurs | Slutpunkt | Beskrivning |
|----------
finländare | /v1/finns | Voice agents |
| Publikationer | /v1/audiences | Kontaktlistor |
| Telefonnummer | /v1/phone-numbers | Ägda + hyrda DID |
| Utplaceringar | /v1/deployments | Kampanjer + inkommande bindningar |
| Samtal | /v1/calls | individuella samtalsregister |
| Röster | /v1/voices | Tillgängliga TTS-röster |
| Webhooks | /v1/webhooks | Evenemangsabonnemang |
Plånbok | /v1/wallet/{orgId} | Balans + transaktioner |
Webhooks
Prenumerera på händelser. POST skulle till din URL med HMAC-SHA256 signatur i X-Finn-Signature.
Registrera
curl https://api.hirefinn.ai/v1/webhooks \
-H "Authorization: Bearer $FINN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/finn-webhook",
"events": ["call.completed", "deployment.completed"],
"secret": "whsec_yourSecretHere"
}'
Event payload
{
"id": "evt_2H4abc",
"type": "call.completed",
"created_at": "2026-05-22T14:30:00Z",
"data": {
"call_id": "cal_xyz789",
"deployment_id": "dep_xyz789",
"duration_seconds": 142,
"outcome": "qualified",
"recording_url": "https://...",
"transcript_url": "https://..."
}
}
Verifiera signatur (nod)
import crypto from "crypto";
function verify(req: Request, secret: string): boolean {
const sig = req.headers.get("X-Finn-Signature") || "";
const body = req.body; // raw bytes!
const expected = crypto
.createHmac("sha256", secret)
.update(body)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}
Event katalog
Event | Eldar när |
|--------
| call.started | Carrier plockade upp uppmaningen |
| call.completed | Call avslutades (någon anledning) |
| call.transferred | Varm överföring till människa |
| deployment.started | Kampanjen började ringa |
| deployment.paused | Manuellt pausad |
| deployment.completed | Audience utmattad |
| wallet.low_balance | Balans sjönk under konfigurerad tröskel
| wallet.topup_complete | Framgångsrik laddning avgjorde |
| compliance.action_required | Manuell översyn behövs |
Tillförlitlighet
- Retries on
5xx/ timeout: 5 försök över ~ 10 minuter med exponentiell backoff. - Beställningen är bäst, inte garanterad - använd tidsstämplar + idempotent hanterare.
- Använd instrumentpanelens webhook-logg för att spela misslyckade leveranser.
SDKs
Officiell:
- Nod / TypeScript -
npm install @finn-voice/sdk- fullt skriven, retry inbyggd - Python –
pip install finn-voice– synkronisera + asynkunder
Gemenskap (som inte stöds):
- GoRuby****** – länkar i repo README
Alla SDKs linda REST-ytan 1:1, hantera retries och skeppstyper för varje resurs.
OpenAPI spec
Maskinläsbara spec lever på:
https://api.hirefinn.ai/openapi.json
Använd den för att skapa kunder på något språk, validera förfrågningsorgan i CI eller importera till Postman:
Postman → File → Import → Link → https://api.hirefinn.ai/openapi.json
Testa lokalt
För lokal webhook utveckling:
# Forward Finn webhooks to your dev machine
ngrok http 3000
# Or use the Finn CLI's built-in tunnel
finn webhooks listen --forward-to http://localhost:3000/webhook
CLI stubbar också API svar så att du kan skriva integrationstest utan en levande nyckel.
Versioning
- Path versioning –
/v1,/v2. Breaking förändringar får ett nytt prefix. - Sunset window - minst 12 månader mellan avskrivningar och borttagning.
- Header opt-in för beta-funktioner:
X-Finn-Beta: enable=workflow-canvas-v2
Prenumerera på Changelog för avskrivningskalendern.
Begränsningar och kvoter
| Begränsning | Värde | |-------- Max samtidiga utplaceringar | Per plan (5 Starter → obegränsad Enterprise) | Max publik storlek | 5M rader | Max system snabb längd | 32K tecken | Max webhook URL längd | 2048 tecken | | Webhook nyttolast max storlek | 1 MB | | Inspelning lagring | 90 dagar standard, konfigurerbar per plan | | API nyckelliv | Obestämd (roterar manuellt) |
Nästa steg
- Bygga en agent -- prova Skapa en Finn genomgående end-to-end via API.
- Låt en kampanj – använd Deployments doc som recept.
- ** Om din CRM********************************************************************************************************************************************************************************************************************************************************.
- Tune for cost – läs Wallet & AI Credits] för att förstå pulsbillingsmodellen.
Stuck? [email protected] - inkludera request_id från felsvaret om du har en.
Was this page helpful?
Still stuck or have feedback?
Email [email protected] or use the chat bubble in the bottom-right corner — it's a Finn that knows the Academy cold.