API pentru Analize și Rapoarte
Aceste endpoint-uri de tip read-only vă permit să extrageți activitatea contului dvs. în propriile tablouri de bord și rapoarte: numărul de evenimente de mesagerie, consumul de credite, cheltuielile AI și aceleași diagrame și perspective pe care le afișează tabloul de bord din aplicație. Acest ghid acoperă:
- Rezumat — contoare de volum de mesaje (trimise, livrate, citite, răspunsuri, rezervări, contacte create, credite).
- Credite — un registru detaliat, paginat, al utilizării creditelor, cu totaluri și defalcări.
- Cost AI — un total zilnic al cheltuielilor AI.
- Serie de metrici — o serie temporală pregătită pentru diagrame pentru una sau mai multe metrici, grupate pe campanie, canal, Agent AI sau număr.
- Rezultatele conversațiilor — modul în care s-au încheiat conversațiile, după eticheta de rezultat atribuită de AI.
- Perspectivele tabloului de bord și Perspectivele AI ale tabloului de bord — datele complete din spatele tabloului de bord din aplicație, inclusiv rezumatele scrise de AI.
- Activitatea entității — cronologia unui singur contact, oportunități sau sarcini.
- Numărul agregat de evenimente — o formă legacy, camelCase, a Rezumatului, păstrată pentru integrările existente.
Fiecare endpoint de pe această pagină necesită un domeniu exact, nu ambele: transmiteți cel mult unul dintre campaign_id (legacy) sau agent_id acolo unde endpoint-ul îl acceptă. Trimiterea ambelor returnează 400, iar un id care nu se află în contul dvs. returnează 404 în loc de 403, astfel încât id-urile altor conturi să rămână imposibil de ghicit.
Toate căile de mai jos sunt relative la URL-ul de bază al API-ului:
https://api.youraiconnector.com/v1
Fiecare cerere trebuie autentificată. Consultați Autentificare pentru cele patru metode acceptate. Exemplele de aici utilizează antetul X-API-Key (și o formă de parametru de interogare pentru cURL).
Interval de date
Toate cele trei endpoint-uri acceptă aceleași filtre opționale de dată:
| Parametru | Descriere |
|---|---|
from |
Începutul intervalului, YYYY-MM-DD, inclusiv. Implicit este acum 30 de zile. |
to |
Sfârșitul intervalului, YYYY-MM-DD, inclusiv. Implicit este ziua de azi. |
Datele sunt interpretate în UTC. Intervalul implicit este de ultimele 30 de zile și este limitat la 366 de zile — un interval mai mare va returna 400. from nu trebuie să fie după to.
Indicatorul truncated
Endpoint-urile Rezumat și Credite limitează numărul de înregistrări pe care o singură cerere le scanează. Dacă intervalul dvs. este suficient de încărcat pentru a atinge acea limită, răspunsul include "truncated": true. Când îl vedeți, cifrele se bazează pe o scanare parțială — restrângeți intervalul de date (sau navigați prin pagini cu o fereastră mai mică) pentru a obține cifre complete.
Notă: Cifrele privind costurile și tokenurile sunt incluse doar pentru apelurile AI facturate prin propriile chei API ale furnizorului. Atunci când cifrele de cost sunt ascunse pentru contul dvs., răspunsul setează "costs_redacted": true, iar câmpurile de cost sunt returnate ca zero.
Rezumat volum mesaje
Returnează contoare agregate pentru evenimentele de mesagerie din contul dvs., atât ca totaluri pe interval, cât și ca serie zilnică. Fiecare zi din interval apare în by_date — zilele fără activitate sunt completate cu zero. Filtrați opțional pentru o singură campanie cu campaign_id.
GET /analytics/summary
| Parametru | Obligatoriu | Descriere |
|---|---|---|
from |
Nu | Începutul intervalului, YYYY-MM-DD. |
to |
Nu | Sfârșitul intervalului, YYYY-MM-DD. |
campaign_id |
Nu | Numără doar evenimentele care aparțin acestei campanii. |
cURL
curl "https://api.youraiconnector.com/v1/analytics/summary?from=2026-05-01&to=2026-05-31&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ from: "2026-05-01", to: "2026-05-31" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/summary?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/summary",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"from": "2026-05-01", "to": "2026-05-31"},
)
data = res.json()
Răspuns
{
"success": true,
"from": "2026-05-01",
"to": "2026-05-31",
"totals": {
"total": 1240,
"sent": 800,
"delivered": 760,
"read": 540,
"replied": 210,
"booked": 35,
"contact_created": 120,
"credits_spent": 412.5,
"credits_recharged": 500
},
"by_date": [
{
"date": "2026-05-01",
"total": 40,
"sent": 25,
"delivered": 24,
"read": 18,
"replied": 7,
"booked": 1,
"contact_created": 4,
"credits_spent": 13.5,
"credits_recharged": 0
}
],
"truncated": false
}
Fiecare intrare din by_date are aceleași câmpuri de contorizare ca totals, plus un date.
Dacă transmiți un campaign_id care nu aparține contului tău, răspunsul va fi 404 cu { "success": false, "error": "Campaign not found" }.
Utilizarea creditelor
Returnează utilizarea creditelor pe intervalul specificat: o listă paginată de înregistrări individuale, plus totalurile pe interval și defalcări pe motiv și pe campanie.
GET /analytics/credits
| Parametru | Obligatoriu | Descriere |
|---|---|---|
from |
Nu | Începutul intervalului, YYYY-MM-DD. |
to |
Nu | Sfârșitul intervalului, YYYY-MM-DD. |
campaign_id |
Nu | Include doar utilizarea atribuită acestei campanii. |
limit |
Nu | Dimensiunea paginii pentru records, 1–100. Valoarea implicită este 50. |
cursor |
Nu | Transmite next_cursor din pagina anterioară pentru a prelua pagina următoare. |
Ajustări vs. consum: Modificările de sold, cum ar fi bonusurile, reînnoirile de plan și corecțiile, sunt excluse din
totalsși din defalcări — acestea nu reprezintă un consum real. Ele apar în continuare în listarecords, marcate cu"is_adjustment": true.
Totalurile și defalcările apar doar pe prima pagină (când nu este furnizat niciun cursor). Pe paginile ulterioare, totals, by_reason, by_reason_cost și by_campaign sunt returnate ca null — doar matricea records continuă. Acest lucru evită scanarea întregului interval pentru fiecare pagină.
cURL
curl "https://api.youraiconnector.com/v1/analytics/credits?from=2026-05-01&to=2026-05-31&limit=50&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({
from: "2026-05-01",
to: "2026-05-31",
limit: "50",
});
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/credits?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
// To page: pass data.next_cursor as ?cursor on the next request, until it is null.
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/credits",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"from": "2026-05-01", "to": "2026-05-31", "limit": 50},
)
data = res.json()
# To page: pass data["next_cursor"] as cursor on the next request, until it is None.
Răspuns (prima pagină)
{
"success": true,
"from": "2026-05-01",
"to": "2026-05-31",
"totals": {
"credits_used": 412.5,
"cost_usd": 1.284512,
"records": 318
},
"by_reason": {
"AI Message": 380.0,
"Campaign Message": 32.5
},
"by_reason_cost": {
"AI Message": 1.284512,
"Campaign Message": 0
},
"by_campaign": {
"Spring Promo": 250.0,
"Reactivation": 162.5
},
"records": [
{
"id": "rec_abc123",
"amount": 1,
"timestamp": "2026-05-31T14:02:11.000Z",
"reason": "AI Message",
"is_adjustment": false,
"campaign_id": "campaign123",
"campaign_name": "Spring Promo",
"contact_id": "contact456",
"contact_name": "Jane Smith",
"credit_type": "ai",
"custom_keys_used": false,
"description": null,
"cost_usd": 0,
"input_tokens": 0,
"output_tokens": 0,
"cache_read_tokens": 0,
"cache_creation_tokens": 0,
"ai_model": null,
"request_id": null,
"is_test": false
}
],
"next_cursor": "rec_abc123",
"costs_redacted": false,
"truncated": false
}
Note de teren:
amount— credite taxate pentru înregistrare. Zero pentru înregistrările facturate către propria cheie API de furnizor.is_adjustment—truepentru modificările de sold (excluse din totaluri/defalcări).cost_usd,input_tokens,output_tokens,cache_read_tokens,cache_creation_tokens,ai_model,request_id— completate doar pentru înregistrările facturate către propria cheie API de furnizor; zero saunullîn caz contrar.is_test—truepentru rulările de test/playground, care nu sunt niciodată facturate.next_cursor— cursorul pentru pagina următoare saunullcând nu mai există înregistrări.
Centralizator costuri AI
Returnează centralizatorul cheltuielilor AI pe zi pentru contul tău. Această funcție citește totalurile zilnice pre-agregate, deci este rapidă chiar și pe intervale lungi. Fiecare zi din interval apare în days — zilele fără activitate sunt completate cu zero.
GET /analytics/ai-cost
| Parametru | Obligatoriu | Descriere |
|---|---|---|
from |
Nu | Începutul intervalului, YYYY-MM-DD. |
to |
Nu | Sfârșitul intervalului, YYYY-MM-DD. |
cURL
curl "https://api.youraiconnector.com/v1/analytics/ai-cost?from=2026-05-01&to=2026-05-31&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ from: "2026-05-01", to: "2026-05-31" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/ai-cost?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/ai-cost",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"from": "2026-05-01", "to": "2026-05-31"},
)
data = res.json()
Răspuns
{
"success": true,
"from": "2026-05-01",
"to": "2026-05-31",
"totals": {
"total_usd": 12.4821,
"byok_usd": 12.4821,
"platform_usd": 0,
"calls": 4210
},
"days": [
{
"date": "2026-05-01",
"total_usd": 0.4012,
"byok_usd": 0.4012,
"platform_usd": 0,
"input_usd": 0.18,
"output_usd": 0.19,
"cache_creation_usd": 0.02,
"cache_read_usd": 0.0112,
"calls": 140,
"by_provider": { "anthropic": 0.4012 }
}
],
"costs_redacted": false
}
Note de teren:
byok_usd— cheltuieli facturate către propriile chei API ale furnizorului tău.platform_usd— partea din cheltuieli care a fost rulată pe platformă în loc de propria cheie.input_usd,output_usd,cache_creation_usd,cache_read_usd— componentele de cost care alcătuiesctotal_usd.by_provider— cheltuieli în USD grupate după numele furnizorului AI.- Cifrele în USD sunt returnate doar conturilor care își folosesc propria cheie de furnizor. Pentru conturile care plătesc prin credite, fiecare câmp USD este zero, iar
costs_redactedestetrue(numărul de apeluri rămâne vizibil).
Serie de metrici
Returnează una sau mai multe serii temporale de metrici într-un singur apel, grupate opțional pe până la două dimensiuni — endpoint-ul pentru a lega o diagramă. O singură cerere poate răspunde la „trimise și răspunsuri pe zi, pe canal, pentru această campanie” fără a face un apel per campanie.
GET /analytics/series
Fiecare răspuns conține o matrice labels (axa timpului, completată cu zero pe tot intervalul) și o intrare în series per grup, fiecare conținând o matrice per metrică solicitată aliniată la labels. Seriile de după limit nu sunt eliminate — ele se comprimă în other_bucket, calculat ca totalul intervalului minus seria returnată, astfel încât o diagramă redată să însumeze întotdeauna cifrele dvs. reale; truncated este true ori de câte ori se întâmplă acest lucru.
De unde provin cifrele: sent, delivered, read și replied provin din înregistrările mesajelor, care conțin canalul și numărul de trimitere. booked, contact_created și credits_spent provin din fluxul de evenimente, care nu conține niciun număr de trimitere, deci acele metrici ajung în bucket-ul null-number atunci când grupați după number.
| Parametru | Obligatoriu | Descriere |
|---|---|---|
from |
Nu | Începutul intervalului, YYYY-MM-DD. Implicit: acum 30 de zile. |
to |
Nu | Sfârșitul intervalului, YYYY-MM-DD. Implicit: astăzi. |
metrics |
Nu | Listă separată prin virgulă din sent, ai_sent, human_sent, delivered, read, replied, booked, contact_created, credits_spent. Implicit: sent,replied. O metrică necunoscută returnează 400. |
group_by |
Nu | Listă separată prin virgulă de până la două dimensiuni din date, campaign, channel, agent, number. date este acceptat, dar nu are niciun efect — fiecare răspuns conține deja axa timpului. Omiteți pentru o singură serie la nivel de cont. |
granularity |
Nu | day (implicit), week sau month. Bucket-urile săptămânale încep luni, cele lunare pe data de 1. |
limit |
Nu | Câte serii să returneze înainte ca restul să se comprime în other_bucket, 1–50. Implicit: 12. |
campaign_id |
Nu | Numărați doar activitatea aparținând acestei campanii. Legacy; preferați agent_id. |
agent_id |
Nu | Numărați doar activitatea aparținând acestui Agent AI. |
channel |
Nu | Numărați doar activitatea pe acest canal, de exemplu whatsapp. |
Intervalul de date al acestui endpoint este limitat la 92 de zile (mai strict decât limita de 366 de zile utilizată în altă parte pe această pagină).
cURL
curl "https://api.youraiconnector.com/v1/analytics/series?from=2026-05-01&to=2026-05-31&metrics=sent,replied,booked&group_by=campaign,channel&limit=10&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({
from: "2026-05-01",
to: "2026-05-31",
metrics: "sent,replied,booked",
group_by: "campaign,channel",
limit: "10",
});
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/series?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/series",
headers={"X-API-Key": "YOUR_API_KEY"},
params={
"from": "2026-05-01",
"to": "2026-05-31",
"metrics": "sent,replied,booked",
"group_by": "campaign,channel",
"limit": 10,
},
)
data = res.json()
Răspuns
{
"success": true,
"from": "2026-05-01",
"to": "2026-05-31",
"granularity": "day",
"labels": ["2026-05-01", "2026-05-02"],
"group_by": ["campaign", "channel"],
"metrics": ["sent", "replied", "booked"],
"series": [
{
"key": {
"campaign_id": "campaign123",
"campaign_name": "Spring Promo",
"channel": "whatsapp"
},
"total": 812,
"metrics": {
"sent": [40, 35],
"replied": [12, 9],
"booked": [2, 1]
}
}
],
"other_bucket": {
"series_count": 6,
"total": 340,
"metrics": {
"sent": [18, 20],
"replied": [5, 6],
"booked": [0, 1]
}
},
"truncated": true
}
Note de teren:
key— identitatea unei serii. Sunt prezente doar cheile pentru dimensiunilegroup_bysolicitate; o dimensiune a cărei valoare este necunoscută pentru un rând (un mesaj fără campanie, un eveniment fără canal) revine canullîn loc să fie eliminată, astfel încât seriile să însumeze în continuare totalurile.other_bucket—nullcând nimic nu a fost comprimat.- Acest endpoint returnează
503cu"error_code": "analytics_unavailable"atunci când baza de date de raportare nu poate oferi un răspuns pentru contul dvs., în loc de un200plin de zerouri — o diagramă cu zerouri ar fi interpretată ca fapt.
Rezultatele conversațiilor
Returnează modul în care s-au încheiat conversațiile pe un interval de date: un număr zilnic pentru fiecare etichetă de rezultat atribuită de AI, plus totalurile pe interval pentru răspunsuri, rezervări, transferuri către un operator uman și conversații pe care AI-ul nu le-a clasificat niciodată.
GET /analytics/outcomes
Transmiteți group_by=tag pentru a comprima axa timpului și a obține doar totalurile pe interval per etichetă — în acel mod labels este gol și matricea counts a fiecărei etichete este goală, în timp ce total este încă populat.
| Parametru | Obligatoriu | Descriere |
|---|---|---|
from |
Nu | Începutul intervalului, YYYY-MM-DD. Implicit: acum 30 de zile. |
to |
Nu | Sfârșitul intervalului, YYYY-MM-DD. Implicit: astăzi. |
campaign_id |
Nu | Numără doar conversațiile cu contactele aflate în prezent în această campanie. Depășit; preferați agent_id. |
agent_id |
Nu | Numără doar rezultatele care aparțin acestui Agent AI. |
group_by |
Nu | date (implicit) păstrează numărătorile pe zi; tag restrânge la totalurile pe interval. |
Intervalul de date al acestui endpoint este limitat la 92 de zile.
cURL
curl "https://api.youraiconnector.com/v1/analytics/outcomes?from=2026-05-01&to=2026-05-31&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ from: "2026-05-01", to: "2026-05-31" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/outcomes?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/outcomes",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"from": "2026-05-01", "to": "2026-05-31"},
)
data = res.json()
Răspuns
{
"success": true,
"from": "2026-05-01",
"to": "2026-05-31",
"group_by": "date",
"labels": ["2026-05-01", "2026-05-02"],
"by_tag": [
{ "tag": "interested", "total": 84, "counts": [3, 5] },
{ "tag": "not_interested", "total": 40, "counts": [1, 2] },
{ "tag": null, "total": 12, "counts": [0, 1] }
],
"totals": {
"sessions": 260,
"replied": 210,
"booked": 35,
"human_alerted": 18,
"unresolved": 12
}
}
Note de teren:
by_tag[].tag—nullpentru conversațiile cărora AI-ul nu le-a atribuit niciodată o etichetă de rezultat.totals.human_alerted— conversații transferate către un operator uman; acest lucru este înregistrat la fiecare transfer și nu a fost afișat anterior de niciun endpoint.- Aceeași postură
503/analytics_unavailableca seria Metric atunci când baza de date de raportare nu poate oferi un răspuns.
Informații din tablou de bord
Returnează întregul payload al tabloului de bord pentru un interval de date într-un singur apel: o hartă termică a ratei de răspuns pe zi a săptămânii și oră, clasamentul campaniilor, volumul pe canal, totaluri exacte pe conexiune, defalcări ale metricilor pe zi (la nivel de cont, pe canal și pe număr), proveniența contactelor, timpul de răspuns în inbox și un flux de activitate recentă. Acesta este cel mai bogat payload de raportare din API — alimentează direct tabloul de bord din aplicație.
GET /analytics/dashboard-insights
| Parametru | Obligatoriu | Descriere |
|---|---|---|
startDate |
Da | Începutul intervalului, YYYY-MM-DD. |
endDate |
Da | Sfârșitul intervalului, YYYY-MM-DD. |
campaignId |
Nu | Include doar activitatea care aparține acestei campanii (se acceptă și campaign_id). Depășit; preferați agent_id. |
agent_id |
Nu | Include doar activitatea care aparține acestui Agent AI (se acceptă și agentId). În cadrul domeniului de aplicare al unui agent, clasamentul campaniilor este construit doar din activitatea acelui agent. |
Acest endpoint utilizează startDate/endDate (nu from/to) deoarece își împarte implementarea cu tabloul de bord din aplicație. Intervalul este limitat la 92 de zile și este ajustat, nu respins, atunci când este mai mare.
Null înseamnă indisponibil, nu zero. Mai multe blocuri (
numberStats,channelDailySeries,metricDailyBreakdown,contactsByCountry) sunt calculate din baza de date de raportare și returneazănullatunci când aceasta nu poate oferi un răspuns pentru contul dumneavoastră. Nu redați un blocnullca pe un grafic gol.
cURL
curl "https://api.youraiconnector.com/v1/analytics/dashboard-insights?startDate=2026-05-01&endDate=2026-05-31&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ startDate: "2026-05-01", endDate: "2026-05-31" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/dashboard-insights?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/dashboard-insights",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"startDate": "2026-05-01", "endDate": "2026-05-31"},
)
data = res.json()
Răspuns (prescurtat — acest payload este mare; consultați Referința API pentru schema completă)
{
"success": true,
"data": {
"heatmap": {
"buckets": [
{ "weekday": 1, "hour": 9, "sent": 12, "replied": 5, "replyRate": 0.42 }
]
},
"topCampaigns": [
{ "campaignId": "campaign123", "name": "Spring Promo", "sent": 420, "replied": 180, "booked": 22, "replyRate": 0.43, "creditsSpent": 210.5 }
],
"channelVolume": [
{ "channel": "whatsapp", "sent": 800, "received": 540, "lastMessageAt": "2026-05-31T14:02:11.000Z" }
],
"inboxSla": { "medianFirstResponseMs": 92000, "sampleSize": 140 },
"activityFeed": [
{ "id": "evt_1", "kind": "booked", "at": "2026-05-31T14:02:11.000Z", "contactId": "contact456", "contactName": "Jane Smith", "campaignId": "campaign123", "campaignName": "Spring Promo", "label": "Jane Smith booked an appointment" }
],
"numberStats": null,
"channelDailySeries": null,
"metricDailyBreakdown": null,
"contactsByCountry": null,
"ai_human_split": null
}
}
Note de teren:
heatmap.buckets[].weekday—0este duminică până la6care este sâmbătă.numberStats,channelDailySeries,metricDailyBreakdown,contactsByCountry,ai_human_split— fiecare este în mod independentnullatunci când baza de date de raportare este indisponibilă pentru contul dumneavoastră; toate celelalte blocuri returnează în continuare date.
Informații AI din tablou de bord
Returnează trei scurte informații scrise de AI despre mesajele contului pe un interval de date: un succes, un aspect de urmărit și un sfat — propoziții pe care le puteți insera direct într-un raport, în loc de cifre pe care trebuie să le interpretați. Generate exclusiv din metricile de mesagerie ale contului.
GET /analytics/dashboard-ai-insights
| Parametru | Obligatoriu | Descriere |
|---|---|---|
startDate |
Da | Începutul intervalului, YYYY-MM-DD. |
endDate |
Da | Sfârșitul intervalului, YYYY-MM-DD. |
Acest endpoint este la nivel de cont — nu necesită un domeniu de campanie sau agent.
cURL
curl "https://api.youraiconnector.com/v1/analytics/dashboard-ai-insights?startDate=2026-05-01&endDate=2026-05-31&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ startDate: "2026-05-01", endDate: "2026-05-31" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/dashboard-ai-insights?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/dashboard-ai-insights",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"startDate": "2026-05-01", "endDate": "2026-05-31"},
)
data = res.json()
Răspuns
{
"success": true,
"data": {
"insights": [
{ "tone": "win", "title": "Reply rate is up", "detail": "Your reply rate climbed to 43% this period, up from 36% the period before." },
{ "tone": "watch", "title": "Bookings slowed midweek", "detail": "Wednesday bookings dropped to a third of Monday's, worth a look at your Wednesday follow-up timing." },
{ "tone": "tip", "title": "Re-send to non-repliers", "detail": "212 contacts received a message but never replied — a short follow-up template often recovers 10-15% of them." }
]
}
}
Lipsa startDate sau endDate returnează 400.
Cronologia activității entității
Returnează activitatea unui singur contact, unei tranzacții sau a unei sarcini sub forma unei cronologii, cu cele mai recente elemente primele: ce s-a întâmplat și când, incluzând mesaje, programări, notițe și schimbări de stare. Folosiți-l pentru a răspunde la întrebarea „ce s-a întâmplat cu această persoană” fără a combina mai multe endpoint-uri de listare.
GET /analytics/entity-activity
| Parametru | Obligatoriu | Descriere |
|---|---|---|
entityType |
Da | contact, deal sau task. |
entityId |
Da | ID-ul înregistrării a cărei cronologie trebuie returnată. |
cURL
curl "https://api.youraiconnector.com/v1/analytics/entity-activity?entityType=contact&entityId=contact456&apiKey=YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ entityType: "contact", entityId: "contact456" });
const res = await fetch(`https://api.youraiconnector.com/v1/analytics/entity-activity?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/analytics/entity-activity",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"entityType": "contact", "entityId": "contact456"},
)
data = res.json()
Răspuns
{
"success": true,
"data": {
"items": [
{
"id": "evt_9",
"kind": "appointment_booked",
"at": "2026-05-31T14:02:11.000Z",
"label": "Booked an appointment for June 3",
"detail": "Consultation call, 30 minutes"
},
{
"id": "evt_8",
"kind": "message_replied",
"at": "2026-05-31T13:58:02.000Z",
"label": "Replied: \"Yes, that time works\""
}
]
}
}
Un entityType/entityId lipsă sau invalid returnează 400. O entitate care nu există în contul dumneavoastră returnează 404, astfel încât ID-urile altor conturi rămân imposibil de ghicit.
Număr total de evenimente agregate (legacy)
Returnează aceleași numărători agregate de evenimente ca Rezumatul volumului de mesaje, dar în formatul camelCase (contactCreated în loc de contact_created, byDate în loc de by_date) pe care au fost construite unele integrări mai vechi. Preferați /analytics/summary pentru integrări noi — acest endpoint există doar pentru ca tabloul de bord din aplicație și API-ul să partajeze aceeași implementare.
GET /analytics/aggregate
| Parametru | Obligatoriu | Descriere |
|---|---|---|
startDate |
Nu | Începutul intervalului, dată sau dată-timp ISO. Implicit este aceeași fereastră pe care o folosește /analytics/summary. |
endDate |
Nu | Sfârșitul intervalului, dată sau dată-timp ISO. |
campaignId |
Nu | Numără doar evenimentele care aparțin acestei campanii (este acceptat și campaign_id). Legacy; preferați agent_id. |
agent_id |
Nu | Numără doar evenimentele care aparțin acestui Agent AI (este acceptat și agentId). |
cURL
curl "https://api.youraiconnector.com/v1/analytics/aggregate?startDate=2026-05-01&endDate=2026-05-31&apiKey=YOUR_API_KEY"
Răspuns
{
"success": true,
"data": {
"from": "2026-05-01",
"to": "2026-05-31",
"total": 1240,
"byAnalyticType": {
"total": 1240,
"sent": 800,
"delivered": 760,
"read": 540,
"replied": 210,
"booked": 35,
"contactCreated": 120,
"creditsSpent": 412.5,
"creditsRecharged": 500
},
"byDate": [
{ "date": "2026-05-01", "byAnalyticType": { "total": 40, "sent": 25, "delivered": 24, "read": 18, "replied": 7, "booked": 1, "contactCreated": 4, "creditsSpent": 13.5, "creditsRecharged": 0 } }
]
}
}
Rollup pentru sub-conturi de agenție
Erori API Analytics
Endpoint-urile Analytics returnează plicul de eroare standard:
{
"success": false,
"error": "Date range too large. Maximum is 366 days."
}
Pe un endpoint de analiză, un format de dată invalid sau o fereastră în afara intervalului returnează 400, iar un campaign_id sau agent_id necunoscut returnează 404. Trimiterea ambelor campaign_id și agent_id pe un endpoint care acceptă oricare dintre ele este, de asemenea, o eroare 400 — transmiteți cel mult unul. Endpoint-urile de raportare doar pentru PG (Serii de metrici, Rezultate conversații, Rollup agenție) returnează 503 cu "error_code": "analytics_unavailable" în loc de un 200 plin de zerouri atunci când baza de date de raportare nu poate oferi un răspuns pentru contul dumneavoastră — reîncercați în scurt timp. Codurile partajate pe care le poate returna orice endpoint — 401, 403 (planul dumneavoastră nu include acces API sau, în cazul rollup-ului de agenție, contul dumneavoastră nu este de tip Agenție/Dev), 429 (limită de rată) și 500 — sunt listate cu instrucțiuni de reîncercare în Erori și Paginare.
Pașii următori
- Autentificare — cele patru modalități de autentificare a unei cereri.
- Erori și limite de rată — coduri de stare și limita de 300 cereri/min.
- API Campanii — campaniile după care pot fi filtrate aceste cifre.