API-referanse
Bygg egendefinerte integrasjoner med Asyntai REST API
Betalt abonnement kreves: API-tilgang er tilgjengelig på Starter-, Standard- og Pro-abonnementene. Se priser
Oversikt
The Asyntai API allows you to integrate AI-powered customer support into any application. Send messages and receive intelligent responses grounded in your website content and knowledge base.
Autentisering
All API requests require authentication using your API key. You can get your API key from the API Settings page.
Inkluder API-nøkkelen din i forespørsler ved hjelp av en av disse metodene:
- Authorization-header (anbefalt):
Authorization: Bearer YOUR_API_KEY - X-API-Key-header:
X-API-Key: YOUR_API_KEY
Hold API-nøkkelen din hemmelig. Alle som har nøkkelen din kan få tilgang til kontoen din via API-et. Aldri eksponer den i kode på klientsiden.
Basis-URL
https://asyntai.com/api/v1/
Endepunkter
POST /chat/
Send en melding og motta et AI-generert svar.
Forespørselskropp
{
"message": "What are your business hours?",
"session_id": "user_123", // optional
"website_id": 1 // optional
}
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
message |
string | Ja | Brukerens melding som sendes til AI-en |
session_id |
string | Nei | Unik identifikator for samtalen. Bruk samme session_id for å bevare samtalehistorikken. |
website_id |
integer | Nei | Spesifikk nettsted-ID. Hvis ikke oppgitt, brukes hovednettstedet ditt. |
Svar
{
"success": true,
"response": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
"session_id": "user_123"
}
Eksempel (cURL)
curl -X POST https://asyntai.com/api/v1/chat/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "What are your business hours?", "session_id": "user_123"}'
Eksempel (Python)
import requests
response = requests.post(
"https://asyntai.com/api/v1/chat/",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"message": "What are your business hours?",
"session_id": "user_123"
}
)
data = response.json()
print(data["response"])
Eksempel (JavaScript)
const response = await fetch("https://asyntai.com/api/v1/chat/", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
message: "What are your business hours?",
session_id: "user_123"
})
});
const data = await response.json();
console.log(data.response);
GET /websites/
List opp alle nettsteder tilknyttet kontoen din.
Svar
{
"success": true,
"websites": [
{
"id": 1,
"name": "My Website",
"domain": "example.com",
"is_primary": true
}
]
}
Eksempel (cURL)
curl https://asyntai.com/api/v1/websites/ \
-H "Authorization: Bearer YOUR_API_KEY"
POST /websites/
Create a new AI agent. This does the same thing as adding a website in your dashboard: it makes the agent, reads your site, and writes the first draft of the AI instructions.
Use this to set up customers from your own software. You get back the widget ID and the code to put on the website.
Forespørselskropp
| Felt | Type | Beskrivelse |
|---|---|---|
domain |
string | Required. The website address, for example example.com |
name |
string | Optional. A display name for the agent. Useful when one website has several agents. |
crawl |
boolean | Optional, true by default. Set it to false to create the agent without reading the website. Nothing is crawled and no instructions are written. |
force |
boolean | Optional, false by default. Set it to true to add a website you already have. The copy is stored with a number after it. |
Svar
{
"success": true,
"website": {
"id": 42,
"domain": "example.com",
"name": "Support agent",
"widget_id": "asyntai_ab12cd34ef56",
"is_primary": true,
"crawl_started": true,
"instructions_status": "generating",
"job_id": "8f2c1e90-..."
},
"embed_code": "<script>...</script>"
}
Eksempel (cURL)
curl -X POST https://asyntai.com/api/v1/websites/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com", "name": "Support agent"}'
Reading a website takes a few minutes, so this call answers straight away. Check when the agent is ready with the next endpoint.
Errors
| Code | Meaning |
|---|---|
403 |
You have reached the number of websites your plan allows. The answer tells you the limit. |
409 |
Your account already has this website. Send force as true to add it again. |
GET /websites/{id}/
Get one website and see whether it is ready. Use this after you create an agent, to wait until the website has been read and the AI instructions are written.
Svar
{
"success": true,
"website": {
"id": 42,
"domain": "example.com",
"name": "Support agent",
"widget_id": "asyntai_ab12cd34ef56",
"is_primary": true,
"created_at": "2026-08-11T09:12:00+00:00",
"ready": true,
"instructions": {
"status": "completed",
"has_instructions": true,
"characters": 3421
},
"crawl": {
"job_id": "8f2c1e90-...",
"status": "completed",
"pages_crawled": 47,
"pages_found": 50,
"max_pages": 50,
"completed_at": "2026-08-11T09:15:31+00:00",
"error": ""
},
"knowledge_items": 47
},
"embed_code": "<script>...</script>"
}
The ready field is true when nothing is still running. A crawl that failed also counts as ready, because it has finished. Look at the crawl status to see what happened.
Eksempel (cURL)
curl https://asyntai.com/api/v1/websites/42/ \
-H "Authorization: Bearer YOUR_API_KEY"
GET PATCH /websites/{id}/settings/
Read or change the chat widget settings for one website. These are the same settings you see on the Customize page: colours, the name of the assistant, the first message, lead capture, and everything else.
Reading the settings
A GET request returns every setting with its current value, plus a locked list. Locked shows the settings your plan cannot change, and which plans they need.
{
"success": true,
"settings": {
"ai_support_name": "AI Assistant",
"widget_color": "#0B0D10",
"initial_message": "Hi, how can I help you?",
"hide_branding": false,
"...": "..."
},
"locked": {
"hide_branding": ["pro", "enterprise"],
"widget_style": ["pro", "enterprise"]
}
}
Changing the settings
A PATCH request changes only the settings you send. Everything you leave out stays as it is.
curl -X PATCH https://asyntai.com/api/v1/websites/42/settings/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ai_support_name": "Ava", "widget_color": "#0f172a", "use_emoji": true}'
{
"success": true,
"updated": ["ai_support_name", "use_emoji", "widget_color"],
"settings": { "...": "..." },
"locked": { "...": "..." }
}
Plans
Each setting needs its own plan, the same as in the dashboard. For example, hiding the Asyntai branding needs the Pro plan, and voice input needs Standard.
| Plan needed | Innstillinger | Examples |
|---|---|---|
| Any paid plan | 25 | widget_color, ai_support_name, initial_message |
| Starter og høyere | 22 | profile_picture, conversation_starters_enabled |
| Standard og høyere | 25 | speech_to_text_enabled, image_vision_enabled, escalation_enabled |
| Pro | 6 | hide_branding, widget_style |
If you send a setting your plan does not allow, the whole request is refused with code 403 and nothing is saved. The same happens if any value is wrong, for example a colour that is not a hex code. Your settings never end up half changed.
GET PUT /websites/{id}/instructions/
Read or replace the AI instructions for one website. These are the rules that tell the assistant who it is, what it may say, and what it must not say. They are the same instructions you edit in the dashboard.
Reading
{
"success": true,
"instructions": "You are the support agent for Acme Tools...",
"characters": 1979,
"version": 7,
"mode": "instructions",
"ask_questions": true,
"generation_status": "completed",
"being_edited_by": null
}
Replacing
A PUT request replaces the whole text, the same as saving in the dashboard. There is no append mode. To add a paragraph, read the instructions, add your text, then write it back.
curl -X PUT https://asyntai.com/api/v1/websites/42/instructions/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"instructions": "You are the support agent for Acme Tools...", "version": 7}'
Forespørselskropp
| Felt | Type | Beskrivelse |
|---|---|---|
instructions |
string | Required. The complete new text. It replaces everything that was there. |
version |
number | Optional but recommended. The version you read. If somebody changed the instructions since then, your write is refused instead of overwriting their work. |
mode |
string | Optional. Either instructions or general. |
ask_questions |
boolean | Optional. Whether the assistant asks a follow-up question at the end of its answers. |
force |
boolean | Optional, false by default. Needed only when your new text is less than half the length of the current text. |
How your instructions are protected
Instructions can take hours to write, so a write can be refused to protect them:
| Code | Meaning |
|---|---|
400 |
Your new text is less than half the length of the current text. This catches a script that sends empty or cut-off text over instructions somebody spent hours on. Send force as true if you meant it. |
409 |
The instructions changed after you read them. Read them again, apply your change, then write. |
423 |
Somebody is editing the instructions in the dashboard right now. The answer tells you who. Try again in a couple of minutes. |
Every change also saves a copy of the previous text, so an earlier version can always be restored from the dashboard.
GET /conversations/
Hent samtalehistorikk for en spesifikk økt.
Spørringsparametre
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
session_id |
string | Ja | Økt-ID-en for å hente historikk for |
limit |
integer | Nei | Maks antall meldinger å returnere (standard: 50, maks: 100) |
Svar
{
"success": true,
"session_id": "user_123",
"messages": [
{
"role": "user",
"content": "What are your business hours?",
"timestamp": "2024-01-15T10:30:00Z"
},
{
"role": "assistant",
"content": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
"timestamp": "2024-01-15T10:30:01Z",
"sender_type": "ai",
"agent_name": null,
"response_time_ms": 1840.5
}
]
}
Et spørsmål og svaret lagres i én post, så begge har samme timestamp. Ikke trekk det ene fra det andre for å måle svarhastigheten, for resultatet blir alltid null. Bruk response_time_ms, som er den reelle tiden svaret tok, i millisekunder.
sender_type er ai når chatboten svarte, og human når en av agentene dine overtok chatten. agent_name inneholder visningsnavnet til den agenten.
Eksempel (cURL)
curl "https://asyntai.com/api/v1/conversations/?session_id=user_123&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
GET /sessions/
List opp de nyeste chat-øktene dine. Bruk dette for å finne økt-ID-er, som du deretter kan sende til /conversations/ for å hente hele meldingshistorikken.
Spørringsparametre
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
limit |
integer | Nei | Antall nylige økter å returnere (standard: 20, maks: 100) |
website_id |
string | Nei | Filtrer økter etter en spesifikk nettsted-ID |
source |
string | Nei | Filtrer etter sesjonskilde: widget, api, whatsapp, instagram, messenger, gorgias, freshchat, zapier |
since |
string | Nei | Bare økter der siste melding er på eller etter denne ISO-datoen, for eksempel 2024-01-15 |
before |
string | Nei | Bare økter der siste melding er før denne ISO-datoen eller dato og tid. Bruk den til å bla bakover, se nedenfor. |
Svar
{
"success": true,
"sessions": [
{
"session_id": "session_abc123def",
"source": "widget",
"message_count": 5,
"first_message": "What are your business hours?",
"first_message_at": "2024-01-15T10:30:00Z",
"last_message_at": "2024-01-15T10:35:00Z",
"first_response_time_ms": 1840.5,
"first_human_response_at": null,
"started_at": "2024-01-15T10:29:58Z",
"ended_at": "2024-01-15T10:41:12Z",
"taken_over_at": null,
"page_url": "https://example.com/pricing",
"country": "Germany",
"category": "Pricing",
"website_domain": "example.com"
}
]
}
Tidsstempelfelter for rapportering
| Felt | Beskrivelse |
|---|---|
started_at |
Når den besøkende åpnet chatten. Bare tilgjengelig for widget-økter, fordi økter som opprettes via API-et aldri åpner en widget. |
first_message_at |
Når den første meldingen i samtalen ble lagret. |
first_response_time_ms |
Hvor lang tid det første svaret tok, i millisekunder. Bruk dette for første svartid. |
first_human_response_at |
Når en av agentene dine sendte det første svaret. Verdien er null når chatboten håndterte hele samtalen. |
taken_over_at |
Når en agent overtok chatten fra chatboten. |
last_message_at |
Når den siste meldingen i samtalen ble lagret. |
ended_at |
Når den besøkende forlot chatten. En chat har ingen løst eller lukket tilstand, fordi en besøkende alltid kan komme tilbake og stille et nytt spørsmål. |
Alle tidsstempler er i UTC og bruker ISO 8601-formatet. Du kan ikke endre tidssonen. Konverter verdiene i ditt eget rapporteringsverktøy.
Andre felt for rapportering
| Felt | Beskrivelse |
|---|---|
page_url |
Siden den besøkende var på da chatten startet. Kun tilgjengelig for widget-økter. |
country |
Landet til den besøkende, fra IP-adressen på chattidspunktet. Kun tilgjengelig for widget-økter. |
category |
Emnet fra chatkategorier. Tomt når funksjonen er av eller den daglige jobben ennå ikke har merket denne chatten. |
Eksempel (cURL)
curl "https://asyntai.com/api/v1/sessions/?since=2024-01-01&limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"
Bla gjennom historikken
Ett kall returnerer høyst 100 økter, nyeste først. For å lese lenger tilbake tar du last_message_at for den siste økten på siden og sender den som before i neste kall. Gjenta til et kall returnerer en tom liste.
import requests
url = "https://asyntai.com/api/v1/sessions/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"since": "2024-01-01", "limit": 100}
sessions = []
while True:
page = requests.get(url, headers=headers, params=params).json()["sessions"]
if not page:
break
sessions.extend(page)
params["before"] = page[-1]["last_message_at"]
print(len(sessions), "sessions since 2024-01-01")
GET /leads/
Hent innsamlede leads — e-postadresser og telefonnumre sendt inn av besøkende under chatsamtaler.
Spørringsparametre
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
limit |
integer | Nei | Antall leads som skal returneres (standard: 50, maks: 100) |
website_id |
string | Nei | Filtrer leads etter en spesifikk nettsted-ID |
since |
string | Nei | Kun leads som startet på eller etter denne ISO-datoen, for eksempel 2024-01-15 |
before |
string | Nei | Kun leads som startet før denne ISO-datoen eller dette tidspunktet. Bruk det til å bla bakover gjennom hele historikken. |
Svar
{
"success": true,
"leads": [
{
"session_id": "session_abc123def",
"email": "[email protected]",
"phone": "+1234567890",
"page_url": "https://example.com/pricing",
"started_at": "2024-01-15T10:30:00Z"
}
]
}
| Felt | Type | Beskrivelse |
|---|---|---|
session_id |
string | Chat-sesjons-ID. Send dette til /conversations/ for å se fullstendig chathistorikk. |
email |
streng eller null | E-postadresse oppgitt av den besøkende, eller null hvis ikke innsamlet |
phone |
streng eller null | Telefonnummer oppgitt av den besøkende, eller null hvis ikke innsamlet |
page_url |
streng eller null | Side-URL-en der den besøkende chattet |
started_at |
string | ISO 8601 tidsstempel for når chatøkten startet |
Eksempel (cURL)
curl "https://asyntai.com/api/v1/leads/?limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
Eksempel (Python)
import requests
response = requests.get(
"https://asyntai.com/api/v1/leads/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"limit": 20}
)
leads = response.json()["leads"]
for lead in leads:
print(f"{lead['email'] or ''} | {lead['phone'] or ''}")
GET /tickets/
Hent supportsaker med tidsstemplene du trenger for å måle behandlingstider: når saken kom inn, når noen tok den, når den ble besvart første gang, og når den ble løst.
Spørringsparametre
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
limit |
integer | Nei | Antall saker som returneres (standard: 50, maks: 100) |
website_id |
string | Nei | Filtrer saker etter nettsted-ID eller etter nettstedets domene, for eksempel example.com |
name |
string | Nei | Filtrer etter en hvilken som helst del av besøkendes navn, for eksempel anna |
status |
string | Nei | Filtrer etter status: open, in_progress, resolved eller closed |
since |
string | Nei | Bare saker opprettet på denne ISO-datoen eller senere, for eksempel 2024-01-15 |
before |
string | Nei | Bare saker opprettet før denne ISO-datoen eller dato og tid. Bruk den til å bla bakover, se nedenfor. |
Svar
{
"success": true,
"tickets": [
{
"ticket_number": "TKT-00001",
"session_id": "session_abc123def",
"status": "resolved",
"priority": "medium",
"subject": "Cannot complete checkout",
"visitor_email": "[email protected]",
"visitor_name": "Anna Novak",
"page_url": "https://example.com/checkout",
"website_id": 12,
"channel": "session",
"assigned_to": "[email protected]",
"created_at": "2024-01-15T10:30:00Z",
"first_assigned_at": "2024-01-15T10:41:00Z",
"first_response_at": "2024-01-15T11:02:00Z",
"resolved_at": "2024-01-15T12:20:00Z"
}
]
}
| Felt | Type | Beskrivelse |
|---|---|---|
ticket_number |
string | Saksnummeret som vises i dashbordet ditt |
session_id |
string | Chatøkten saken kom fra. Send den til /conversations/ for å lese hele samtalen bak saken. |
visitor_name |
streng eller null | Navnet på den besøkende, eller null hvis den besøkende ikke oppga et |
status |
string | En av: open, in_progress, resolved, closed |
priority |
string | En av: low, medium, high |
channel |
string | Hvor samtalen kom fra, for eksempel session for nettpraten |
assigned_to |
streng eller null | Teammedlemmet som har saken, eller null hvis ingen tok den |
created_at |
string | Når saken ble opprettet |
first_assigned_at |
streng eller null | Når noen først tok saken. Null hvis ingen har gjort det. |
first_response_at |
streng eller null | Når det første svaret ble sendt fra Asyntai. Null hvis det ikke er sendt svar fra Asyntai. |
resolved_at |
streng eller null | Når saken ble merket som løst. Null så lenge den er åpen. |
Vi ser bare svar som er sendt fra Asyntai. Hvis teamet ditt svarer en besøkende fra sin egen innboks, ser vi det aldri, og first_response_at forblir tomt selv om den besøkende fikk svar. Husk det før du regner ut gjennomsnitt.
Alle tidsstempler er i UTC og bruker ISO 8601-formatet. Saker opprettet før denne funksjonen har verken first_assigned_at eller first_response_at, fordi de tidene aldri ble registrert.
Eksempel (cURL)
curl "https://asyntai.com/api/v1/tickets/?status=resolved&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
Eksempel (Python)
import requests
from datetime import datetime
response = requests.get(
"https://asyntai.com/api/v1/tickets/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"since": "2024-01-01", "limit": 100}
)
for ticket in response.json()["tickets"]:
if ticket["first_response_at"]:
created = datetime.fromisoformat(ticket["created_at"])
replied = datetime.fromisoformat(ticket["first_response_at"])
print(ticket["ticket_number"], replied - created)
Bla gjennom historikken
Ett kall returnerer høyst 100 saker, nyeste først. For å lese lenger tilbake tar du created_at for den siste saken på siden og sender den som before i neste kall. Gjenta til et kall returnerer en tom liste.
import requests
url = "https://asyntai.com/api/v1/tickets/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"since": "2024-01-01", "limit": 100}
tickets = []
while True:
page = requests.get(url, headers=headers, params=params).json()["tickets"]
if not page:
break
tickets.extend(page)
params["before"] = page[-1]["created_at"]
print(len(tickets), "tickets since 2024-01-01")
GET /account/
Hent kontoinformasjon og bruksstatistikk.
Svar
{
"success": true,
"account": {
"email": "[email protected]",
"plan": "starter",
"messages_used": 150,
"messages_limit": 800
}
}
Eksempel (cURL)
curl https://asyntai.com/api/v1/account/ \
-H "Authorization: Bearer YOUR_API_KEY"
Flere nettsteder? Kunnskapsbase-endepunkter bruker som standard hovednettstedet ditt. Hvis du har flere nettsteder, send website_id for å målrette en bestemt. Du finner nettsted-ID-ene dine ved å bruke GET /websites/.
Daglige opplastingsgrenser: Opplastinger til kunnskapsbasen (tekst, URL, regneark) er underlagt en daglig tegngrense basert på abonnementet ditt. Dette gjelder totalt innhold lastet opp via alle kunnskapsbase-endepunkter per dag.
| Abonnement | Tegn/dag |
|---|---|
| Starter | 300 000 |
| Standard | 1 500 000 |
| Pro | 6 000 000 |
GET /knowledge/
List opp oppføringene i kunnskapsbasen din. Dette er innholdskildene AI-chatboten din bruker for å svare på spørsmål.
Spørringsparametre
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
limit |
integer | Nei | Antall oppføringer å returnere (standard: 50, maks: 100) |
website_id |
string | Nei | Filtrer etter nettsted-ID (bruker hovednettstedet ditt som standard) |
Svar
{
"success": true,
"entries": [
{
"id": "abc-123-def",
"type": "text",
"title": "Business Hours",
"description": "Manual text content (150 words)",
"created_at": "2024-01-15T10:30:00Z"
},
{
"id": "ghi-456-jkl",
"type": "url",
"title": "About Us - Example",
"description": "Content from https://example.com/about",
"created_at": "2024-01-14T09:00:00Z"
}
]
}
Eksempel (cURL)
curl "https://asyntai.com/api/v1/knowledge/?limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
POST /knowledge/text/
Legg til egendefinert tekstinnhold i kunnskapsbasen din. AI-en vil bruke dette til å svare på besøkendes spørsmål.
Forespørselskropp
{
"title": "Return Policy",
"content": "We offer a 30-day return policy on all items. Items must be unused and in original packaging. Refunds are processed within 5-7 business days.",
"website_id": "123"
}
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
title |
string | Ja | En tittel for denne kunnskapsoppføringen |
content |
string | Ja | Tekstinnholdet (minimum 10 tegn) |
website_id |
string | Nei | Målnettsted (bruker hovednettstedet ditt som standard) |
Svar
{
"success": true,
"id": "abc-123-def",
"title": "Return Policy",
"chunks_created": 1
}
Eksempel (cURL)
curl -X POST "https://asyntai.com/api/v1/knowledge/text/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Return Policy", "content": "We offer a 30-day return policy..."}'
POST /knowledge/url/
Legg til en nettside i kunnskapsbasen din. Innholdet hentes og trekkes ut automatisk.
Forespørselskropp
{
"url": "https://example.com/faq",
"website_id": "123"
}
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
url |
string | Ja | URL-en å hente innhold fra |
website_id |
string | Nei | Målnettsted (bruker hovednettstedet ditt som standard) |
Svar
{
"success": true,
"id": "abc-123-def",
"title": "FAQ - Example",
"url": "https://example.com/faq",
"chunks_created": 5
}
Eksempel (cURL)
curl -X POST "https://asyntai.com/api/v1/knowledge/url/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/faq"}'
POST /knowledge/spreadsheet/
Last opp et CSV- eller Excel-regneark (.xlsx) til kunnskapsbasen din. Hver rad blir en separat kunnskapsoppføring, ideelt for produktkataloger, FAQ-lister, pristabeller og kataloger.
Forespørsel
Send som multipart/form-data (filopplasting), ikke JSON.
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
file |
fil | Ja | En .csv- eller .xlsx-fil. Første rad må være kolonneoverskrifter. Maks rader per opplasting: Starter 500, Standard 2 000, Pro 10 000. Overskytende rader avkortes. |
website_id |
string | Nei | Målnettsted (bruker hovednettstedet ditt som standard) |
Svar
{
"success": true,
"id": "abc-123-def",
"title": "products.csv",
"rows_processed": 15,
"chunks_created": 15
}
Eksempel (cURL)
curl -X POST "https://asyntai.com/api/v1/knowledge/spreadsheet/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "[email protected]"
GET /knowledge/{id}/
Les én oppføring i kunnskapsbasen, inkludert teksten som er lagret for den. Verdien id kommer fra svaret på GET /knowledge/.
Innhold returneres for oppføringene du selv har lagt til: tekst, filer, regneark, enkelt-URL-er og videoer. En nettstedsgjennomgang vises i listen, men sidene returneres ikke, fordi kilden er ditt eget offentlige nettsted. I så fall er content lik null, og feltet reason forklarer hvorfor.
Svar
{
"success": true,
"id": "abc-123-def",
"type": "text",
"title": "Business Hours",
"description": "Manual text content (150 words)",
"created_at": "2024-01-15T10:30:00Z",
"chunks_count": 3,
"content": "We are open Monday to Friday, 9am to 5pm...",
"content_available": true,
"char_count": 43
}
Eksempel (cURL)
curl "https://asyntai.com/api/v1/knowledge/abc-123-def/" \
-H "Authorization: Bearer YOUR_API_KEY"
DELETE /knowledge/{id}/
Slett en kunnskapsbase-oppføring. id finnes i svaret fra GET /knowledge/.
Svar
{
"success": true,
"message": "Knowledge base entry deleted"
}
Eksempel (cURL)
curl -X DELETE "https://asyntai.com/api/v1/knowledge/abc-123-def/" \
-H "Authorization: Bearer YOUR_API_KEY"
Tips: Du kan også administrere webhooks fra API-innstillinger siden uten å skrive noe kode.
GET /webhooks/
List opp de registrerte webhookene dine.
Svar
{
"success": true,
"webhooks": [
{
"id": "abc-123-def",
"url": "https://example.com/webhook",
"events": ["message.received", "escalation.requested"],
"is_active": true,
"created_at": "2024-01-15T10:30:00Z"
}
]
}
Eksempel (cURL)
curl "https://asyntai.com/api/v1/webhooks/" \
-H "Authorization: Bearer YOUR_API_KEY"
POST /webhooks/
Registrer en ny webhook for å motta sanntidsvarsler om hendelser.
Tilgjengelige hendelser
| Hendelse | Beskrivelse |
|---|---|
message.received |
En besøkende sendte en melding og mottok et svar |
conversation.started |
En ny chat-økt ble startet |
escalation.requested |
AI-en utløste en eskalering til en menneskelig agent |
takeover.started |
En menneskelig agent overtok en chat-økt |
Forespørselskropp
{
"url": "https://example.com/webhook",
"events": ["message.received", "escalation.requested"],
"website_id": "123"
}
| Parameter | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
url |
string | Ja | HTTPS-URL-en for å motta webhook POST-forespørsler |
events |
array | Ja | Liste over hendelser å abonnere på (se tabellen ovenfor) |
website_id |
string | Nei | Målnettsted (bruker hovednettstedet ditt som standard) |
Svar
{
"success": true,
"webhook": {
"id": "abc-123-def",
"url": "https://example.com/webhook",
"events": ["message.received", "escalation.requested"],
"secret": "whsec_abc123...",
"created_at": "2024-01-15T10:30:00Z"
}
}
Verifisering av webhooks: Hver webhook inkluderer en secret (vises kun ved opprettelse). Hver POST til URL-en din inkluderer en X-Webhook-Signature header — en HMAC-SHA256 av forespørselskroppen signert med hemmeligheten din.
Eksempel (cURL)
curl -X POST "https://asyntai.com/api/v1/webhooks/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/webhook", "events": ["message.received"]}'
DELETE /webhooks/{id}/
Slett en webhook. id finnes i svaret fra GET /webhooks/.
Svar
{
"success": true,
"message": "Webhook deleted"
}
Eksempel (cURL)
curl -X DELETE "https://asyntai.com/api/v1/webhooks/abc-123-def/" \
-H "Authorization: Bearer YOUR_API_KEY"
Feilsvar
Alle feilsvar følger dette formatet:
{
"success": false,
"error": "Error message describing what went wrong"
}
| Statuskode | Beskrivelse |
|---|---|
400 |
Ugyldig forespørsel - Ugyldige parametre eller manglende påkrevde felter |
401 |
Ikke autorisert - Ugyldig eller manglende API-nøkkel |
429 |
For mange forespørsler - Meldingsgrensen er nådd for abonnementet ditt |
503 |
Tjeneste utilgjengelig - AI-tjenesten er midlertidig utilgjengelig |
Hastighetsgrenser
API-bruk er begrenset av abonnementet ditt:
- Free: 50 meldinger/måned
- Starter ($39/mnd): 800 meldinger/måned
- Standard ($139/mnd): 15 000 meldinger/måned
- Pro ($449/mnd): 50 000 meldinger/måned
Trenger du hjelp?
If you have any questions or run into issues, contact us at [email protected].