Kiekvienai užklausai reikia įmonės API rakto (valdymo skyde Integracijos → Webhooks ir API), siunčiamo kaip Authorization: Bearer tt_live_…. Atsakymai ir klaidos pateikiami JSON formatu.
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
-H "Authorization: Bearer tt_live_…"
Autentifikacija
Kiekvienoje užklausoje siunčiamas įmonės API raktas kaip bearer žetonas. Jį sukursite valdymo skyde — Integracijos → Webhooks ir API → REST API raktai — kur jis parodomas vieną kartą, o serveryje saugomas tik kaip SHA-256 maiša; prarastas raktas atšaukiamas ir pakeičiamas, o ne atkuriamas. Įmonė gali turėti iki 10 aktyvių raktų.
- Tik skaitymo raktai gali kviesti visus GET galinius taškus ir gali prenumeruoti bei atšaukti webhooks — prenumerata nesiunčia nieko, ko raktas ir taip negalėtų perskaityti.
- Skaitymo ir rašymo raktai taip pat gali siųsti POST rezervacijos būsenos pakeitimui; tik skaitymo raktas šiuose maršrutuose gauna 403 Forbidden.
- Raktas priklauso vienai įmonei — kiekvienas sąrašas ir paieška jau apriboti ja, companyId parametro nėra.
Užklausų limitai
50 užklausų per minutę vienam raktui, slenkančiu langu, bendrai visiems galiniams taškams. Viršijus limitą grąžinama 429 Too Many Requests; palaukite ir bandykite iš naujo, užuot užklausę dažniau — arba užsiprenumeruokite webhook ir nustokite užklausinėti.
Galiniai taškai
/v1/company
Tik skaitymo arba skaitymo ir rašymo
Gauti dabartinę įmonę
Įmonė, kuriai priklauso raktas, ir ką pats raktas gali daryti.
/v1/company/reservations
Tik skaitymo arba skaitymo ir rašymo
Rezervacijų sąrašas
Įmonės stalų rezervacijos, pirmiausia anksčiausiai prasidedančios — arba, kai nurodytas updatedSince, pirmiausia anksčiausiai atnaujintos.
| Parametras | Tipas | Reikšmė |
|---|---|---|
status |
string | Atskirta kableliais: pending, confirmed, seated, completed, no_show, cancelled. cancelled atitinka abi atšaukimo priežastis. |
branchId |
integer | Apriboti vienu filialu. |
from |
ISO 8601 datetime | Tik rezervacijos, prasidedančios šiuo metu arba vėliau (UTC, jei poslinkis nenurodytas). |
to |
ISO 8601 datetime | Tik rezervacijos, prasidedančios prieš šį laiką. |
updatedSince |
ISO 8601 datetime | Tik rezervacijos, pakeistos nuo šio laiko; rikiavimas perjungiamas į updatedAt didėjimo tvarka, sinchronizavimui. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
page |
integer | Puslapio numeris nuo 1. Numatytasis 1. |
/v1/company/appointments
Tik skaitymo arba skaitymo ir rašymo
Vizitų sąrašas
Ta pati struktūra ir filtrai kaip rezervacijų, modulio „Vizitai“ duomenims.
| Parametras | Tipas | Reikšmė |
|---|---|---|
status |
string | Atskirta kableliais: pending, confirmed, completed, no_show, cancelled. |
branchId |
integer | Apriboti vienu filialu. |
from |
ISO 8601 datetime | Tik rezervacijos, prasidedančios šiuo metu arba vėliau. |
to |
ISO 8601 datetime | Tik rezervacijos, prasidedančios prieš šį laiką. |
updatedSince |
ISO 8601 datetime | Tik rezervacijos, pakeistos nuo šio laiko; rikiuojama pagal updatedAt didėjimo tvarka. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
page |
integer | Puslapio numeris nuo 1. Numatytasis 1. |
/v1/company/reservations/{id}
Tik skaitymo arba skaitymo ir rašymo
Gauti rezervaciją
Viena rezervacija, ta pačia struktūra, kokia ją perduoda webhooks, su jos priskyrimu. 404, kai id nepriklauso rakto įmonei.
/v1/company/appointments/{id}
Tik skaitymo arba skaitymo ir rašymo
Gauti vizitą
Vienas vizitas, ta pati struktūra ir taisyklės kaip rezervacijos paieškai.
/v1/company/reservations/{id}/status
Tik skaitymo ir rašymo
Keisti rezervacijos būseną
Patvirtinkite, pasodinkite, užbaikite, pažymėkite neatvykimą, atšaukite arba atidarykite iš naujo — paleidžiami tie patys webhooks ir konversijos kaip keičiant būseną lentoje. JSON turinys: {"status": "..."}.
| Parametras | Tipas | Reikšmė |
|---|---|---|
status |
string, privalomas | Viena iš: pending, confirmed, seated, completed, no_show, cancelled (taip pat priimami canceled ir canceled_by_venue). |
/v1/company/appointments/{id}/status
Tik skaitymo ir rašymo
Keisti vizito būseną
Tas pats kaip rezervacijos galinis taškas, tik be būsenos seated.
| Parametras | Tipas | Reikšmė |
|---|---|---|
status |
string, privalomas | Viena iš: pending, confirmed, completed, no_show, cancelled (taip pat priimami canceled ir canceled_by_venue). |
/v1/company/events
Tik skaitymo arba skaitymo ir rašymo
Užklausti įvykių srautą
Kiekvienas rezervacijos, užsakymo ir lojalumo įvykis, pirmiausia seniausi — tas pats srautas, iš kurio formuojami webhooks. Paskutinį matytą žymeklį perduokite kaip after, kad gautumėte tik naujus įvykius, o type — kad gautumėte tik tam tikras rūšis.
| Parametras | Tipas | Reikšmė |
|---|---|---|
after |
integer cursor | Paskutinio apdoroto įvykio žymeklis. Praleiskite, kad pradėtumėte nuo pradžios. |
type |
string | Kableliais atskirti įvykių tipai arba šeimos: booking.confirmed,order.placed arba order, loyalty.*. Praleiskite, kad gautumėte visus įvykius. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
/v1/company/orders
Tik skaitymo arba skaitymo ir rašymo
Užsakymų sąrašas
Svečių užsakymai prie stalo, išsinešti ir su pristatymu bei kiekvienas kasoje užregistruotas pardavimas, pirmiausia seniausi — arba, kai nurodytas paidSince, apmokėjimo tvarka. Užsakymas, vis dar laukiantis išankstinio apmokėjimo, neįtraukiamas.
| Parametras | Tipas | Reikšmė |
|---|---|---|
status |
string | Atskirta kableliais: open, paid. |
source |
string | customer (pateikė svečias) arba staff (užregistravo personalas). |
fulfilment |
string | Atskirta kableliais: dine_in, takeaway, delivery. |
branchId |
integer | Apriboti vienu filialu. |
from |
ISO 8601 datetime | Tik užsakymai, sukurti šiuo metu arba vėliau. |
to |
ISO 8601 datetime | Tik užsakymai, sukurti prieš šį laiką. |
paidSince |
ISO 8601 datetime | Tik užsakymai, apmokėti nuo šio laiko; rikiuojama pagal paidAt didėjimo tvarka, pardavimų sinchronizavimui. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
page |
integer | Puslapio numeris nuo 1. Numatytasis 1. |
/v1/company/orders/{id}
Tik skaitymo arba skaitymo ir rašymo
Gauti užsakymą
Vienas užsakymas su eilutėmis, sumomis ir priskyrimu, ta pačia struktūra, kokia jį perduoda užsakymų webhooks.
/v1/company/loyalty/programs
Tik skaitymo arba skaitymo ir rašymo
Lojalumo programų sąrašas
Kiekviena štampų kortelės programa: pavadinimas, būsena, reikalingų štampų skaičius, prizas ir kur jis galioja.
/v1/company/loyalty/cards
Tik skaitymo arba skaitymo ir rašymo
Lojalumo kortelių sąrašas
Narių kortelės, lojalumo objekto struktūra. Narys, užpildęs kortelę, turi ją su būsena completed ir šalia naują aktyvią; customer.id — tai narys.
| Parametras | Tipas | Reikšmė |
|---|---|---|
programId |
integer | Apriboti viena programa. |
customerId |
integer | Apriboti vienu nariu. |
status |
string | Atskirta kableliais: active, completed. |
updatedSince |
ISO 8601 datetime | Tik kortelės, pažymėtos štampu arba užbaigtos nuo šio laiko; rikiuojama pagal updatedAt didėjimo tvarka. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
page |
integer | Puslapio numeris nuo 1. Numatytasis 1. |
/v1/company/loyalty/rewards
Tik skaitymo arba skaitymo ir rašymo
Lojalumo prizų sąrašas
Prizai, gauti užpildžius kortelę, su kodu, galiojimo pabaiga ir informacija, ar jie panaudoti.
| Parametras | Tipas | Reikšmė |
|---|---|---|
programId |
integer | Apriboti viena programa. |
customerId |
integer | Apriboti vienu nariu. |
status |
string | Atskirta kableliais: issued, redeemed, expired. |
from |
ISO 8601 datetime | Tik prizai, išduoti šiuo metu arba vėliau. |
to |
ISO 8601 datetime | Tik prizai, išduoti prieš šį laiką. |
limit |
integer | Puslapio dydis, 1–100. Numatytasis 50. |
page |
integer | Puslapio numeris nuo 1. Numatytasis 1. |
/v1/company/webhooks
Tik skaitymo arba skaitymo ir rašymo
Webhook prenumeratų sąrašas
Šio rakto sukurtos prenumeratos. Valdymo skyde pridėti webhooks čia nerodomi.
/v1/company/webhooks
Tik skaitymo arba skaitymo ir rašymo
Prenumeruoti webhook
Pradeda siųsti įvykius adresu — tai, ką automatizavimo platformos programėlė iškviečia, kai naudotojas įjungia trigerį. Grąžina prenumeratą ir jos pasirašymo slaptą raktą, vieną kartą. JSON turinys: {"url": "…", "events": ["order.placed"]}; Zapier formatas {"target_url": "…", "event": "…"} taip pat priimamas.
| Parametras | Tipas | Reikšmė |
|---|---|---|
url |
string, privalomas | https adresas, kuriuo siunčiama (taip pat priimamas target_url). |
events |
array of strings, privalomas | Įvykių tipai, šeimos, pvz., order.* arba loyalty, arba * viskam (vienam įvykiui taip pat priimamas event). |
description |
string | Valdymo skyde rodomas pavadinimas. Numatytasis — platforma ir rakto pavadinimas. |
/v1/company/webhooks/{id}
Tik skaitymo arba skaitymo ir rašymo
Atšaukti webhook prenumeratą
Nustoja siųsti šio rakto sukurtai prenumeratai. Grąžina 204. Atšaukus raktą, pašalinamos ir visos jo prenumeratos.
Rezervacijos objektas
Rezervacija ir vizitas pateikiami viena bendra struktūra: kind, id, status, source, guestInitiated, startsAt/endsAt/timezone (paties filialo laiko juosta), currency, company, branch, guest, attribution, conversionId, createdAt/updatedAt — bei partySize ir table rezervacijai, service ir specialist vizitui. Tai lygiai tai, ką pristato webhook, todėl gavėjas, apdorojantis vieną, apdoros ir kitą.
{
"data": {
"kind": "reservation",
"id": 4821,
"status": "confirmed",
"source": "online",
"guestInitiated": true,
"startsAt": "2026-09-12T20:00:00+03:00",
"endsAt": "2026-09-12T21:30:00+03:00",
"timezone": "Asia/Baku",
"currency": "AZN",
"company": { "id": 12, "name": "Cafe Aroma", "slug": "cafe-aroma", "country": "AZ" },
"branch": { "id": 3, "name": "Nizami st." },
"partySize": 4,
"table": { "id": 9, "label": "T3" },
"guest": { "name": "Maria K.", "phone": "…", "email": "…" },
"locale": "en",
"note": null,
"conversionId": "tt3f9c…",
"createdAt": "2026-09-10T08:12:04+00:00",
"updatedAt": "2026-09-12T20:00:03+00:00",
"attribution": { "channel": "widget", "utmSource": "instagram", "gclid": null, "fbclid": "IwAR2…" }
}
}
Užsakymo objektas
Užsakymas visur pateikiamas viena struktūra — REST API, užsakymų webhooks, įvykių sraute: kind ("order"), id, number (numeris, kurį iškviečia personalas), status (open arba paid), source (customer arba staff), guestInitiated, fulfilment, table, label, deliveryAddress, note, currency, timezone, company, branch, customer (lojalumo narys, kai personalas jį identifikavo), items (name, variant, quantity, unitPriceCents, subtotalCents), itemCount, subtotalCents, discountCents, deliveryFeeCents, tipCents, totalCents, valueCents (užsakymo vertė be arbatpinigių — skaičius, kurį praneša konversijos), paymentMethod, servedBy, conversionId, createdAt, paidAt ir attribution. Sumos visada nurodomos smulkiaisiais vienetais.
{
"data": {
"kind": "order",
"id": 9170,
"number": 42,
"status": "paid",
"source": "customer",
"guestInitiated": true,
"fulfilment": "takeaway",
"table": null,
"label": "Ana",
"currency": "EUR",
"branch": { "id": 3, "name": "Vitosha Blvd" },
"customer": { "id": 311, "name": "Ana", "phone": "…" },
"items": [
{ "menuItemId": 88, "name": "Flat white", "variant": "Large",
"quantity": 2, "unitPriceCents": 450, "subtotalCents": 900 }
],
"itemCount": 2,
"subtotalCents": 900,
"discountCents": 0,
"deliveryFeeCents": 0,
"tipCents": 100,
"totalCents": 1000,
"valueCents": 900,
"paymentMethod": "online",
"conversionId": "tt81ad…",
"createdAt": "2026-09-12T12:04:10+03:00",
"paidAt": "2026-09-12T12:05:02+03:00",
"attribution": { "channel": "web", "utmSource": "google", "gclid": "Cj0K…" }
}
}
Lojalumo objektas
Kiekvienas lojalumo įvykis, kortelė ir prizas turi vieną struktūrą: kind ("loyalty"), id (kortelė), timezone, company, branch (kur tai įvyko, jei yra), program (id, name, stampsRequired, rewardTitle), customer (id, name, phone, locale), card (id, status, stampsCount, stampsRequired, stampsToReward, createdAt), stamp (štampui: source, issuedBy, createdAt) ir reward (prizui: code, title, status, expiresAt, redeemedAt, redeemedBy), taip pat conversionId — id, kuriuo pranešama apie lojalumo registraciją.
{
"kind": "loyalty",
"id": 5120,
"program": { "id": 4, "name": "Coffee card", "stampsRequired": 8, "rewardTitle": "Free coffee" },
"customer": { "id": 311, "name": "Ana", "phone": "…", "locale": "bg" },
"card": { "id": 5120, "status": "active", "stampsCount": 5,
"stampsRequired": 8, "stampsToReward": 3 },
"branch": { "id": 3, "name": "Vitosha Blvd" },
"stamp": { "source": "qr_scan", "issuedBy": "Ivan", "createdAt": "…" },
"reward": null,
"conversionId": "tt5c02…"
}
Įvykių srautas
Kiekviena eilutė yra { id, cursor, type, createdAt, previousStatus, data }. data saugo objektą po raktu, kurį nurodo įvykio priešdėlis: data.booking, data.order arba data.loyalty. Išsaugokite didžiausią apdorotą cursor ir perduokite jį atgal kaip after — jis niekada nepraleidžia ir nepakartoja eilutės, todėl saugu tęsti po gedimo. Ignoruokite neapdorojamus tipus: gali būti pridėta naujų.
| Įvykio tipas | Reikšmė |
|---|---|
booking.requested | Svečias pateikė rezervacijos užklausą, laukiančią Jūsų patvirtinimo. |
booking.confirmed | Rezervacija patvirtinta — sukurta iškart patvirtinta arba vėliau patvirtinta personalo. |
booking.cancelled | Atšaukė svečias arba vieta; status nurodo, kas. |
booking.no_show | Svečias neatvyko. |
booking.completed | Vizitas baigtas. |
order.placed | Svečio užsakymas pasiekė vietą — iš puslapio, stalo QR kodo, išsinešti ar su pristatymu; po apmokėjimo, kai vieta ima apmokėjimą iš anksto. |
order.paid | Bet koks užsakymas apmokėtas, įskaitant kasoje užregistruotus pardavimus. |
loyalty.member_joined | Klientas gavo pirmąjį štampą programoje. |
loyalty.stamp_added | Į kortelę pridėtas štampas. |
loyalty.reward_issued | Kortelė užpildyta ir išduotas jos prizas. |
loyalty.reward_redeemed | Prizas įteiktas. |
curl "https://api.tapti.me/v1/company/events?after=998&limit=100" \
-H "Authorization: Bearer tt_live_…"
Webhooks
Sukurkite galinį tašką skiltyje Integracijos → Webhooks ir API — arba prijunkite Zapier, Make, n8n ar Pipedream skiltyje Integracijos → Automatizavimas — ir TapTime išsiųs pasirašytą JSON įvykį tą pačią akimirką, kai pasikeičia rezervacija, užsakymas ar lojalumo kortelė. Įvykius pasirenkate kiekvienam galiniam taškui. Įmonė iš viso gali turėti iki 50 webhooks, postbacks, pokalbių ir automatizavimo jungčių.
| Antraštė | Reikšmė |
|---|---|
TapTime-Event | Įvykio tipas, pvz., booking.confirmed. |
TapTime-Event-Id | Pastovus įvykio id — naudokite jį pakartotinio pristatymo dublikatams pašalinti. |
TapTime-Delivery | Šio konkretaus pristatymo bandymo id. |
TapTime-Signature | t=<unix time>,v1=<hex HMAC-SHA256 of "t.rawBody">, pasirašyta paties galinio taško slaptu raktu. |
- Bet koks 2xx atsakymas laikomas pristatytu; ne 2xx atsakymas arba laiko viršijimas kartojamas su atidėjimu (1m, 5m, 15m, 1h, 3h, 6h, 12h) iki 8 bandymų — 410 sustabdo kartojimą.
- Peradresavimai nesekami.
- Produkcinėje aplinkoje URL turi būti HTTPS ir negali rodyti į privatų ar loopback adresą.
- Pristatymas vyksta bent kartą: visada tikrinkite parašą ir šalinkite dublikatus pagal TapTime-Event-Id.
{
"id": "evt_9f3c2a7e1b",
"type": "booking.confirmed",
"createdAt": "2026-09-12T19:02:11+03:00",
"test": false,
"data": { "booking": { "kind": "reservation", "id": 4821, "status": "confirmed", "…": "…" } }
}
const [t, v1] = req.headers["taptime-signature"]
.split(",").map(part => part.split("=")[1]);
const expected = crypto
.createHmac("sha256", process.env.TAPTIME_WEBHOOK_SECRET)
.update(`${t}.${rawBody}`)
.digest("hex");
const valid = crypto.timingSafeEqual(
Buffer.from(expected), Buffer.from(v1));
Webhook prenumeratos
Automatizavimo platformos įjungia ir išjungia trigerius per API, užuot prašiusios naudotojo įklijuoti URL („REST hooks“): siųskite POST su platformos URL ir norimais įvykiais, išsaugokite grąžintą id ir siųskite DELETE, kai trigeris išjungiamas. Prenumerata yra įprastas pasirašytas webhook — ji rodoma valdymo skyde, pažymėta ją sukūrusiu raktu.
- Raktas mato ir šalina tik savo sukurtas prenumeratas; atšaukus raktą, pašalinamos visos jos.
- Adresai hooks.zapier.com, make.com ir pipedream.net atpažįstami ir rodomi su platformos pavadinimu; bet kuris kitas https adresas yra paprastas webhook.
- Pasirašymo slaptas raktas grąžinamas vieną kartą, atsakyme į POST; savininkas gali jį vėl parodyti valdymo skyde.
curl -X POST "https://api.tapti.me/v1/company/webhooks" \
-H "Authorization: Bearer tt_live_…" -H "Content-Type: application/json" \
-d '{"url": "https://hooks.zapier.com/hooks/catch/123/abc/", "events": ["order.placed"]}'
Postbacks
GET arba POST užklausa į Jūsų sekimo sistemos URL su užpildytais makrokomandų kintamaisiais — platformoms, naudojančioms užklausos eilutės postbacks, o ne JSON webhooks. Užsakymui {value} yra užsakymo vertė be arbatpinigių, o {order_id} — jo id.
https://tracker.example/postback
?cid={click_id}&event={event}&status={status}
&payout={value}&cur={currency}
Galimi kintamieji
{event}{event_id}{status}{booking_id}{booking_type}{order_id}{customer_id}{conversion_id}{value}{currency}{party_size}{branch_id}{timestamp}{utm_source}{utm_medium}{utm_campaign}{utm_term}{utm_content}{gclid}{fbclid}{msclkid}{ttclid}{click_id}
Klaidos
Kiekviena klaida pateikiama JSON formatu: { "error": "<code>", "message": "<human-readable>" }.
| Būsena | klaida | Reikšmė |
|---|---|---|
| 401 | unauthorized |
Trūksta Authorization antraštės arba raktas neteisingas ar atšauktas. |
| 403 | forbidden |
Tik skaitymo raktas iškvietė rašymo galinį tašką (būsenos keitimą). |
| 404 | not_found |
Rakto įmonei nepriklauso rezervacija su tokiu id. |
| 409 | conflict |
Būsenos pakeitimas dvigubai užimtų stalą ar laiką; niekas nepakeista. |
| 422 | invalid_status |
status reikšmė nėra viena iš šiam rezervacijos tipui priimamų reikšmių. |
| 422 | invalid_type |
Įvykių srauto type neatitinka jokio įvykio tipo ar šeimos. |
| 422 | invalid_url |
Prenumeratos URL nėra viešas https adresas. |
| 429 | rate_limited |
Daugiau nei 50 užklausų per minutę šiam raktui. Sulėtinkite ir bandykite iš naujo. |
API prieiga, webhooks bei automatizavimo ir pokalbių integracijos įtrauktos į kiekvieną modulį — be papildomo mokesčio, be atskiro programuotojų plano.
Pradėti nemokamą bandymą