Ontwikkelaars

Openbare API Beta

Bou werkspasie-integrasies met veilige API-sleutels met bestekke en 'n stabiele JSON-kontrak met weergawes.

Maak die interaktiewe API-verwysing oop

Vinnige begin

  1. 01

    Maak API-sleutels oop

    Maak Instellings oop, kies Ontwikkelaar, vind API-sleutels en kies dan Skep sleutel. Eienaars en admins kan sleutels skep.

  2. 02

    Skep 'n API-sleutel

    Voer 'n Naam in, kies Verval oor dae, kies Kanaaltoegang as Alle kanale of Gekose kanale, en kies die minimum bestekke wat jou integrasie nodig het onder Bestekke. 'n Versoek slaag net wanneer die sleutel die presiese hulpbronaksie het wat die eindpunt vereis. Kies Skep sleutel.

  3. 03

    Stoor jou API-sleutel

    Die volle sleutel word een keer gewys. Kopieer dit na jou geheimbestuurder en kies dan Ek het dit gestoor.

  4. 04

    Stuur die sleutel

    Gebruik 'n Bearer-token, of stuur dieselfde waarde in x-api-key. Sit nooit sleutels in navraagstringe of blaaierkode nie.

cURL

curl https://www.usesonny.com/api/v1/contacts?limit=25 \
  --header "Authorization: Bearer sonny_your_key"

Sleutels bly veilig

Sleutelsekuriteit
Sleutels gebruik 'n sonny_-voorvoegsel, 64 lukrake karakters, eenrigting-hashing in rus, verstelbare verstryking en 'n limiet van 600 versoeke/minuut per sleutel. 'n Sleutel is aan een werkspasie gebind.
Om een te herroep, kies die asblik-knoppie langsaan. Bevestig Herroep API-sleutel? deur Skrap te kies. Dit stop die sleutel onmiddellik.
Magtiging by elke oproep
Sonny verifieer die hash en bestek, en gaan dan weer die skepper se aktiewe werkspasielidmaatskap, rol en faktureringstatus na. Om daardie gebruiker te verwyder of te deaktiveer, deaktiveer hul sleutels onmiddellik.
Gekose kanale word vir elke REST API- en MCP-oproep afgedwing. Eindpunte vir kontakte, eienskappe, etikette en webhook-bestuur vereis toegang tot alle kanale. Vormskepping kan contacts:write met conversations:write op gekose kanale gebruik; losstaande kontakeindpunte bly vir die hele werkspasie.

Bestekke

  • contacts:read
  • contacts:write
  • tags:read
  • tags:write
  • conversations:read
  • conversations:write
  • messages:read
  • messages:write
  • messages:send
  • webhooks:read
  • webhooks:write
  • kb:read
  • kb:write
  • csat:read
  • attachments:write
  • members:read
  • contact-memory:read
  • contact-memory:write
  • reporting:read

Hulpbronne

Kontakte
Bestuur kontakte, getikte eienskappe, filters op presiese waardes en kliëntherinneringe. Argiveer 'n kontak, of vee dit permanent uit met al sy gesprekke vir databeskermingsversoeke.
Bronne
Ontdek opgestelde bronne en of elkeen klets, e-pos of albei ondersteun.
Gesprekke
Skep navrae uit vorms, filtreer wat aandag nodig het, wys agente of spanne toe, sluimer, etiketteer en werk in groepe by.
Sinkronisering
Herspeel duursame werkspasieveranderinge en skrappingsrekords met 'n gestoorde wyser.
Lede en spanne
Ontdek toewysbare spanmaats, beskikbaarheid en effektiewe kanaaltoegang.
Verslae
Lees ondersteunings-, span-, KI-, kennis-, potensiële-kliënt- en beskikbaarheidsverslae.
Boodskappe
Lees boodskapgeskiedenis en uittreksels uit aanhegsels, laai privaat lêers op, voeg interne notas by, en stuur of wysig kliëntantwoorde.
Webhooks
Bestuur eindpunte, intekeninge, toetse, aflewerings en herprobeerslae.
Kennisbasis
Skep, lees, werk by en skrap hulpsentrum-artikels en -kategorieë per bron.
Kliëntetevredenheid
Lees CSAT-tellings vir die werkspasie, elke kanaal en elke gesprek, en lys individuele graderings gefiltreer volgens graderingswaarde, opmerking, toegewysde of tydvenster.

Gebruik Sonny vanuit 'n KI-hulpmiddel

Sonny MCP stel elke openbare API-bewerking as 'n hulpmiddel beskikbaar. Kliënte koppel deur met OAuth 2.1 aan te meld — of met 'n API-sleutel met bestekke — en elke oproep behou dieselfde bestekke, werkspasiegrense en besigheidsreëls.

Lees die gids tot Sonny MCP

Antwoorde en foute

Versamelingsantwoorde gebruik data en sluit paginering in waar van toepassing. Elke antwoord sluit x-request-id in; jy mag 'n veilige versoek-ID verskaf en Sonny sal dit terugstuur. Foute gee 'n veilige boodskap terug sonder om sensitiewe implementeringsbesonderhede bloot te lê.

{
  "error": {
    "type": "validation_error",
    "message": "Invalid email address",
    "requestId": "req_01J..."
  }
}
400
Ongeldige invoer, JSON, navraag of wyser.
401
Ontbrekende, ongeldige, verstreke of onbestekte API-sleutel.
402
Die werkspasie se faktureringstatus blokkeer hierdie versoek.
403
Die sleutelskepper se werkspasierol word nie toegelaat nie.
404
Die hulpbron bestaan nie in die sleutel se werkspasie nie.
409
Die versoek bots met 'n bestaande hulpbron.
410
Sinkroniseringswyser het verval. Laai die huidige toestand en herspeel vanaf 'n nuwe wyser.
413
Die oplaai oorskry die toegelate grootte.
422
Die bron het geen e-poskanaal nie of 'n ingediende veldwaarde is ongeldig.
429
Die tempolimiet per sleutel is oorskry.
500
'n Onverwagte fout het voorgekom. Probeer weer met die versoek-ID.
503
Die agterstand in webhook-aflewering is versadig. Probeer later weer.

Tempolimiete

Elke API-sleutel mag tot 600 versoeke per minuut maak. Elke antwoord rapporteer die huidige venster deur die standaard RateLimit-Limit-, RateLimit-Remaining- en RateLimit-Reset-kopstukke, sodat kliënte hulself kan rem in plaas van te raai. Wanneer die limiet oorskry word, gee die API 429 terug met 'n Retry-After-kopstuk — wag soveel sekondes voordat jy weer probeer.

Weergawes en uitfasering

Die API se weergawe is in die URL-pad (/api/v1). Binne 'n weergawe maak ons net byvoegende veranderinge — nuwe eindpunte, nuwe opsionele velde, nuwe enum-waardes. Brekende veranderinge kom as 'n nuwe weergawe, en voordat enige v1-eindpunt uitgefaseer word, gee ons minstens ses maande kennis: op hierdie bladsy, per e-pos aan werkspasie-eienaars met aktiewe API-sleutels, en via Deprecation- en Sunset-kopstukke op geraakte eindpunte.

Wysig 'n gestuurde antwoord

  1. Gee jou API-sleutel of MCP-verbinding die bestekke messages:read en messages:send en toegang tot die antwoord se kanaal.
  2. Lees die gesprek se boodskappe en kopieer die ID van 'n menslike antwoord wat jy gestuur het. 'n API-sleutel tree op as sy skepper; OAuth tree op as die gekoppelde spanmaat.
  3. Stuur die vervangingsteks met die versoek hieronder, of roep edit_message in MCP met conversationId, messageId en body.
  4. Gaan die teruggegewe boodskap na. Sy ID, aanhegsels, leesbewys en oorspronklike stuurtyd bly dieselfde.
curl --request PATCH \
  https://www.usesonny.com/api/v1/conversations/conversation_1/messages/message_1 \
  --header "Authorization: Bearer sonny_your_key" \
  --header "Content-Type: application/json" \
  --data '{"body":"The corrected reply"}'

Wysiging korrigeer die transkripsie en gekoppelde kletskliënte. Dit stuur nie nog 'n e-pos of kennisgewing nie, en e-posse wat reeds afgelewer is, bly onveranderd. Net jou eie menslike kliëntantwoorde kan gewysig word; inkomende boodskappe, botantwoorde, interne notas en ander spanmaats se antwoorde kan nie. Wag totdat hangende e-posaflewering klaar is voordat jy wysig. Vervangingsteks moet 1–50 000 karakters bevat; vorige HTML en skakelvoorskoue word skoongemaak. Integrasies ontvang 'n message.updated-webhook en sinkroniseringsgebeurtenis. Om net na nuwer boodskap-ID's te peil, sal nie wysigings vind nie; gebruik die duursame sinkroniseringsvoer.

Skep 'n gesprek vanuit 'n vorm

Stuur 'n vormvoorlegging na POST /api/v1/conversations. Sonny vind of skep die kontak volgens e-pos, stoor die antwoorde en maak 'n inkomende gesprek oop op jou gekose bron se e-poskanaal. Die kanaal se span, toewysingsreëls en kennisgewings geld. Agente antwoord per e-pos.

  1. Skep 'n sleutel met conversations:write en contacts:write. Jy kan dit tot die kliënt se gekose kanale beperk. Vind die bron-ID met GET /api/v1/sources, wat ook conversations:read nodig het.
  2. Voeg in n8n 'n HTTP Request-nodus by: metode POST, URL https://www.usesonny.com/api/v1/conversations. Stoor die sleutel in 'n Header Auth-geloofsbrief: Authorization met waarde Bearer sonny_your_key.
  3. Skakel Send Body aan, kies JSON en Using JSON, skakel dan die hele JSON-veld na Expression en plak hierdie voorbeeld. Vervang die bron-ID en koppel die invoervelde aan jou vorm. Gebruik die vorm se stabiele, unieke voorleggings-ID sodat 'n herprobeerslag dieselfde waarde gebruik.
{{ {
  sourceId: "YOUR_CLIENT_SOURCE_ID",
  contact: { email: $json.email, name: $json.name },
  subject: "Website enquiry",
  message: $json.message,
  fields: {
    Company: String($json.company ?? ""),
    Budget: String($json.budget ?? ""),
    Service: String($json.service ?? "")
  },
  externalId: "website-form-" + $json.submissionId
} }}

Vir meer nodusopsies, sien die n8n HTTP Request-gids. Die ekwivalente MCP-hulpmiddel is create_conversation, met dieselfde vrag en toestemmings.

Nuwe veldname word teks-eienskappe. Bestaande getal-, URL-, datum- en keusevelde moet geldige stringwaardes ontvang; 'n slegte waarde gee 422 terug wat die veld noem en stoor niks nie. Datums aanvaar ISO-datums of tydstempels; keusewaardes moet by 'n opsie pas. Tot 50 velde word aanvaar, met name tot 100 karakters en waardes tot 5 000. Eienskappe verskyn op die kontak en in die gesprek se kantbalk. Albei boodskapliggame behou 'n kopie van die antwoorde, ook wanneer jy die opsionele htmlMessage verskaf.

Die opsionele tags aanvaar tot 20 bestaande werkspasie-etiket-ID's. Die antwoord bevat conversation, 'n contact-opsomming, message en deduplicated. Nuwe voorleggings gee 201 terug. Om externalId op dieselfde bron te hergebruik, gee 200 terug met die oorspronklike ID's en deduplicated: true; veranderde inhoud word geïgnoreer. Sonder 'n eksterne ID skep elke oproep 'n nuwe gesprek. Aanhegsels by skepping en KI-outo-antwoorde word nie ondersteun nie.

Agentwerkvloeie

Sorteer, tree op en bly gesinkroniseer

REST en MCP deel dieselfde toestemmings en werkvloeie. Geloofsbriewe kan net jou huidige kanaaltoegang vernou; om 'n kanaal uit jou lidmaatskap te verwyder, verwyder dit ook uit jou integrasies.

Vind gesprekke wat aandag nodig het

Filtreer volgens awaitingReply, unread, unassigned, assigneeId, agentGroupId, snoozed, priority of tagIds. Awaiting reply ignoreer interne notas; unread is spesifiek vir die geverifieerde spanmaat. Unassigned beteken geen individuele toegewysde nie, selfs as 'n span toegewys is. Etikette pas by enige verskafte ID.

GET /api/v1/conversations?status=open&awaitingReply=true&compact=true&sort=waitingSince&direction=asc

Sorteer volgens waitingSince, lastMessageAt, createdAt of besigheidsprioriteit met direction asc of desc. ID's breek gelykopuitslae. Weggelate filters behou compact=false en snoozed=any. REST se tagIds aanvaar ID's geskei deur kommas; MCP aanvaar ook 'n skikking. waitingSince begin by die eerste inkomende boodskap ná die laaste antwoord; opvolgboodskappe en interne notas stel dit nie terug nie. Laat hierdie skandering van die wagtou volgens 'n skedule loop, selfs wanneer geen webhook aankom nie, sodat ou drade weer opduik.

Haal in sonder om die inkassie weer te lees

Gebruik GET /api/v1/sync met conversations:read. Die duursame voer sluit gespreksveranderinge, etikette, boodskappe, kontakeienskappe, herinneringe en skrappingsrekords in. Elke vrag vereis ook sy eie leesbestek: boodskapliggame het messages:read nodig en herinneringe het contact-memory:read nodig. Beperkte geloofsbriewe ontvang net toegelate kanale.

  1. Begin sonder 'n wyser, volg nextCursor totdat hasMore false is, en stoor daardie wyser.
  2. Lees die huidige gespreks-/kontaklyste en enige geskiedenis wat jy vir jou aanvanklike toestand nodig het.
  3. Herspeel vanaf die gestoorde wyser om veranderinge tydens daardie lees vas te vang. Verwerk elke bladsy en stoor dan nextCursor.

Ontdubbel volgens gebeurtenis-id: herspeel is minstens een keer, so stroomaf-aksies het hul eie beskerming teen duplikate nodig. 'n Versoek sonder 'n wyser dek die laaste uur, nie 'n volledige momentopname nie. Gebeurtenisse word 30 dae lank behou; HTTP 410 resync_required beteken laai weer van voor af. Laai ook van voor af nadat bestekke of kanaaltoegang verbreed is. Gebruik limit tot 100 en maxBodyChars tot 10 000 (verstek 500). Stel compact=true vir boodskap-textPreview/textTruncated-velde beperk tot 200 karakters in plaas van body/bodyTruncated. Webhooks kan 'n agent wakker maak; die voer bly beskikbaar sonder webhook-intekeninge of wanneer webhook-aflewering agter is.

Teken kontroles een keer aan en deel die resultaat

Voordat jy 'n ondersoek herhaal, lees list_conversation_checks (GET /api/v1/conversations/{conversationId}/checks). Stoor 'n resultaat met record_conversation_check (PUT na dieselfde pad), en verskaf key, result, checkedBy en 'n opsionele reference vir die kaart-ID of URL. Byvoorbeeld: key=product-version, result=Shopstar Go verified, checkedBy=Engineer, reference=card-X. Sonny teken die geverifieerde actorId en checkedAt-tydstempel aan. Om 'n key te hergebruik, vervang net daardie kontrole; dit is huidige toestand, nie 'n geskiedenislog nie. Lees vereis conversations:read en skryf vereis conversations:write, albei beperk tot die gesprek se kanaal. Hierdie oproepe stuur nie 'n antwoord nie en merk nie die verkoper as beantwoord nie.

Wys toe en werk werk in groepe by

Ontdek aktiewe, toewysbare spanmaats en spanne met GET /api/v1/members and /teams (members:read). Antwoorde sluit beskikbaarheid en effektiewe kanaaltoegang in, sonder e-posadresse. Gebruik conversations:write om status, priority, assigneeId, agentGroupId, snoozedUntil, snoozedUntilReply, addTagIds of removeTagIds te verander.

POST /api/v1/conversations/batch
{
  "conversationIds": ["conversation_1", "conversation_2"],
  "updates": { "agentGroupId": "team_1", "assignment": "round_robin" }
}

Om die beurt kies 'n beskikbare spanlid wat toegang tot die gesprek se kanaal het. Sonder 'n geskikte lid gee 'n enkele bywerking 409 terug en misluk 'n groepitem. Elke groep aanvaar tot 100 unieke ID's en pas een patch atomies per gesprek toe. Ondersoek elke { id, ok, error? }-resultaat; sommige items kan misluk. Groepe gebruik die huidige versoekgebaseerde tempolimiet, sonder geweegde heffing volgens aantal items.

Deel kliëntkonteks met Sonny AI

Lys, stoor en verwyder kontakherinneringe met contact-memory:read/write. Verskaf albei contactId en 'n toeganklike sourceId; die kontak moet 'n gesprek op daardie bron hê. Gestoorde feite gebruik dieselfde validering, duplikaathantering en limiete as die app en word as handmatige herinneringe aangeteken.

Lees eienskapdefinisies by /api/v1/properties en lees of stel waardes by /api/v1/contacts/{contactId}/properties. MCP stel list_properties, get_contact_properties en set_contact_property beskikbaar. Hierdie vereis contacts:read/write en toegang tot alle kanale. Stel presies een propertyId of propertyName, met 'n stringwaarde of null om dit skoon te maak. Teks-, getal-, URL-, datum- en keusewaardes word teen die velddefinisie gevalideer.

PUT /api/v1/contacts/contact_1/properties
{ "propertyName": "Plan", "value": "Pro" }

GET /api/v1/contacts?property[Plan]=Pro

Eienskapfilters pas by presiese gestoorde strings; verskeie eienskappe moet almal pas. Waardes wat deur die API geskryf is, word in Co-Pilot en die outo-antwoorder as API-data gemerk. Bestaande reëls vir geverifieerde kliënte en bronne geld steeds. Gewone handmatige interne veldwaardes bly uit hierdie KI-konteks uitgesluit.

Lees dieselfde verslae as jou span

Roep GET /api/v1/reporting/{kind} met reporting:read. Soorte is overview, volume, response-times, agents, sources, tags, csat, ai, knowledge, leads en online-hours. Overview kombineer tellings, reaksietye en CSAT. Filters is period (1–365 dae, verstek 30), gepaarde from/to-datums (to is eksklusief), granularity (day/month), source, assigneeId en tagId. Source aanvaar all, all-chat, all-email, website:{id} of email:{id}.

Verslae gebruik die paneelbord se navrae en huidige toegangskontroles. Knowledge gebruik datums en toegelate kanale, onafhanklik van die gekose bron, toegewysde of etiket. Online hours meet toeganklike spanmaats se teenwoordigheid in die werkspasie; sy gesprekstellings bly tot kanale beperk. Bestaande /csat-eindpunte behou hul aparte csat:read-bestek en kan 'n ander populasie beskryf.

Stuur lêers met antwoorde of interne notas

Gee attachments:write en laai 'n lêer van tot 25 MB vir 'n gesprek op. POST /api/v1/attachments neem multipart-velde file en conversationId. Die antwoord bevat 'n id en expiresAt. Gee binne een uur tot 10 attachmentIds aan 'n antwoord of nota deur. Elke oplaai is aan jou gebruiker en gesprek gebind en kan net een keer gebruik word. Ongebruikte oplaaie word ná verstryking opgeruim.

POST /api/v1/conversations/conversation_1/reply
{ "attachmentIds": ["upload_1"] }

Antwoorde vereis messages:send; interne notas vereis messages:write en bereik nooit kliënte nie. Boodskappe met net aanhegsels word ondersteun. E-posantwoorde sluit lêers in binne die e-pos se groottebegroting en aflaaiskakels vir die res; e-posse vir vanlyn-kletse sluit lêerskakels in. Skakels in e-posse bly bruikbaar terwyl die aanhegsel bestaan, sodat ontvangers hulle later kan oopmaak. Om die e-pos aan te stuur, deel toegang tot daardie lêers. Gaan emailDeliveryStatus na vir afleweringsmislukkings.

Gemagtigde boodskaplesings sluit downloadUrl, downloadExpiresAt, aiStatus, aiDescription en aiExtractedText in, plus videoTranscripts vir gekoppelde video's (Loom, Vimeo en ander). Aflaaiskakels hou 15 minute; lees die boodskap weer vir vars skakels. Nuwe API-/MCP-oplaaie het privaat berging. Ouer aanhegsels bly openbaar en word as access=legacy_public gemerk: hul oorspronklike URL verval nie. Om 'n boodskap te lees, begin die lees van sy beelde wanneer die werkspasie Sonny AI het. Beeldlesings en videotranskripsies is kort nadat 'n boodskap aankom klaar: terwyl enige nog loop, begin die antwoord met readsInProgress, waarvan nextStep die presiese oproep gee om te maak. Gee waitSeconds (tot 30) deur om in een versoek daarvoor te wag. Widget- en intydse boodskappe vir kliënte bevat nooit uittreksels of transkripsies nie.

Verken die volledige versoek- en antwoordkontrakte

Kennisbasis

Sinkroniseer vanuit 'n eksterne bron

Sinkroniseer artikels en kategorieë met stabiele eksterne ID's, voer Markdown of HTML in, laai beelde op, stel volgorde en bestuur lesergehore. Om 'n upsert te herhaal, werk die bestaande inhoud by.

  1. Kies jou kanaal se sourceId en gee kb:read en kb:write. Hou die API-sleutel op jou bediener en beperk sy Kanaaltoegang.
  2. Skep die kategorie en sinkroniseer dan 'n artikel as 'n konsep. Hersien sy formatering en toegang voordat jy publiseer.
  3. Stel hulpsentrumtoegang op, publiseer en toets die lesersaansig. Gebruik paginering en stabiele eksterne ID's vir latere opdaterings.
Volg die volledige REST-sinkroniseringsgids

Bestuur kliëntgehore

Skep groepe uit geverifieerde kliënteienskappe en pas hulle toe op 'n hulpsentrum, kategorie of artikel. Alle oorgeërfde beperkings moet pas. API- en MCP-geloofsbriewe tree as personeel binne hul bestekke op; kyk na 'n voorskou en toets 'n werklike kliëntsessie om lesertoegang na te gaan.

Stel hulpsentrum-gehore op en toets hulle

Verwante dokumentasie