Katram pieprasījumam nepieciešama uzņēmuma API atslēga (panelī Integrācijas → Webhooks un API), kas tiek nosūtīta kā Authorization: Bearer tt_live_…. Atbildes un kļūdas ir JSON formātā.
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
-H "Authorization: Bearer tt_live_…"
Autentifikācija
Katrs pieprasījums satur uzņēmuma API atslēgu kā bearer marķieri. Izveidojiet to panelī — Integrācijas → Webhooks un API → REST API atslēgas —, kur tā tiek parādīta vienreiz un serverī tiek glabāta tikai kā SHA-256 jaucējvērtība; pazaudēta atslēga tiek atsaukta un aizstāta, nevis atjaunota. Uzņēmumam var būt līdz 10 aktīvām atslēgām.
- Tikai lasīšanas atslēgas var izsaukt katru GET galapunktu, kā arī abonēt un atteikties no webhooks — abonements nesūta neko, ko atslēga jau nevarētu nolasīt.
- Lasīšanas un rakstīšanas atslēgas var arī ar POST mainīt rezervācijas statusu; tikai lasīšanas atslēga šajos maršrutos saņem 403 Forbidden.
- Atslēga pieder vienam uzņēmumam — katrs saraksts un vaicājums jau ir ierobežots ar to, parametra companyId nav.
Pieprasījumu ierobežojumi
50 pieprasījumi minūtē uz vienu atslēgu, slīdošā logā, kopīgi visiem galapunktiem. Pārsniedzot tiek atgriezts 429 Too Many Requests; pagaidiet un mēģiniet vēlreiz, nevis vaicājiet biežāk — vai abonējiet webhook un pārtrauciet vaicāšanu.
Galapunkti
/v1/company
Tikai lasīšana vai lasīšana un rakstīšana
Iegūt pašreizējo uzņēmumu
Uzņēmums, kuram pieder atslēga, un ko atslēga pati var darīt.
/v1/company/reservations
Tikai lasīšana vai lasīšana un rakstīšana
Rezervāciju saraksts
Uzņēmuma galdiņu rezervācijas, sākot ar agrāko sākuma laiku — vai, ja iestatīts updatedSince, sākot ar agrāk atjaunināto.
| Parametrs | Tips | Nozīme |
|---|---|---|
status |
string | Atdalīti ar komatu: pending, confirmed, seated, completed, no_show, cancelled. cancelled atbilst abiem atcelšanas iemesliem. |
branchId |
integer | Ierobežot ar vienu filiāli. |
from |
ISO 8601 datums un laiks | Tikai rezervācijas, kas sākas šajā laikā vai vēlāk (UTC, ja nobīde nav norādīta). |
to |
ISO 8601 datums un laiks | Tikai rezervācijas, kas sākas pirms šī laika. |
updatedSince |
ISO 8601 datums un laiks | Tikai rezervācijas, kas mainītas kopš šī laika; pārslēdz kārtošanu uz updatedAt augošā secībā, sinhronizācijai. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
page |
integer | Lapas numurs, sākot no 1. Noklusējums 1. |
/v1/company/appointments
Tikai lasīšana vai lasīšana un rakstīšana
Pierakstu saraksts
Tāda pati struktūra un filtri kā rezervācijām, moduļa Pieraksti vajadzībām.
| Parametrs | Tips | Nozīme |
|---|---|---|
status |
string | Atdalīti ar komatu: pending, confirmed, completed, no_show, cancelled. |
branchId |
integer | Ierobežot ar vienu filiāli. |
from |
ISO 8601 datums un laiks | Tikai pieraksti, kas sākas šajā laikā vai vēlāk. |
to |
ISO 8601 datums un laiks | Tikai pieraksti, kas sākas pirms šī laika. |
updatedSince |
ISO 8601 datums un laiks | Tikai pieraksti, kas mainīti kopš šī laika; kārto pēc updatedAt augošā secībā. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
page |
integer | Lapas numurs, sākot no 1. Noklusējums 1. |
/v1/company/reservations/{id}
Tikai lasīšana vai lasīšana un rakstīšana
Iegūt rezervāciju
Viena rezervācija tādā pašā struktūrā, kādā to nogādā webhooks, ar tās atribūciju. 404, ja id nepieder atslēgas uzņēmumam.
/v1/company/appointments/{id}
Tikai lasīšana vai lasīšana un rakstīšana
Iegūt pierakstu
Viens pieraksts, ar tādu pašu struktūru un noteikumiem kā rezervācijas vaicājumam.
/v1/company/reservations/{id}/status
Tikai lasīšana un rakstīšana
Mainīt rezervācijas statusu
Apstiprināt, apsēdināt, pabeigt, atzīmēt kā neierašanos, atcelt vai atvērt no jauna — izsauc tos pašus webhooks un konversijas kā statusa maiņa tablo. JSON pamatteksts: {"status": "..."}.
| Parametrs | Tips | Nozīme |
|---|---|---|
status |
string, obligāts | Viens no: pending, confirmed, seated, completed, no_show, cancelled (pieņem arī canceled un canceled_by_venue). |
/v1/company/appointments/{id}/status
Tikai lasīšana un rakstīšana
Mainīt pieraksta statusu
Tāpat kā rezervācijas galapunkts, bet bez statusa seated.
| Parametrs | Tips | Nozīme |
|---|---|---|
status |
string, obligāts | Viens no: pending, confirmed, completed, no_show, cancelled (pieņem arī canceled un canceled_by_venue). |
/v1/company/events
Tikai lasīšana vai lasīšana un rakstīšana
Vaicāt notikumu plūsmu
Katrs rezervācijas, pasūtījuma un lojalitātes notikums, sākot ar agrāko — tā pati plūsma, no kuras veidojas webhooks. Nododiet pēdējo redzēto kursoru kā after, lai saņemtu tikai jauno, un type, lai saņemtu tikai noteiktus veidus.
| Parametrs | Tips | Nozīme |
|---|---|---|
after |
integer kursors | Kursors no pēdējā apstrādātā notikuma. Izlaidiet, lai sāktu no sākuma. |
type |
string | Ar komatu atdalīti notikumu veidi vai grupas: booking.confirmed,order.placed vai order, loyalty.*. Izlaidiet, lai saņemtu visus notikumus. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
/v1/company/orders
Tikai lasīšana vai lasīšana un rakstīšana
Pasūtījumu saraksts
Viesu pasūtījumi pie galdiņa, līdzņemšanai un ar piegādi, kā arī katrs pie kases reģistrētais pārdevums, sākot ar agrāko — vai, ja iestatīts paidSince, apmaksas secībā. Pasūtījums, kas vēl gaida priekšapmaksu, netiek iekļauts.
| Parametrs | Tips | Nozīme |
|---|---|---|
status |
string | Atdalīti ar komatu: open, paid. |
source |
string | customer (veicis viesis) vai staff (reģistrējis darbinieks). |
fulfilment |
string | Atdalīti ar komatu: dine_in, takeaway, delivery. |
branchId |
integer | Ierobežot ar vienu filiāli. |
from |
ISO 8601 datums un laiks | Tikai pasūtījumi, kas izveidoti šajā laikā vai vēlāk. |
to |
ISO 8601 datums un laiks | Tikai pasūtījumi, kas izveidoti pirms šī laika. |
paidSince |
ISO 8601 datums un laiks | Tikai pasūtījumi, kas apmaksāti kopš šī laika; kārto pēc paidAt augošā secībā, pārdošanas datu sinhronizācijai. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
page |
integer | Lapas numurs, sākot no 1. Noklusējums 1. |
/v1/company/orders/{id}
Tikai lasīšana vai lasīšana un rakstīšana
Iegūt pasūtījumu
Viens pasūtījums ar tā pozīcijām, summām un atribūciju, tādā struktūrā, kādā to nogādā pasūtījumu webhooks.
/v1/company/loyalty/programs
Tikai lasīšana vai lasīšana un rakstīšana
Lojalitātes programmu saraksts
Katra zīmogu kartes programma: nosaukums, statuss, nepieciešamais zīmogu skaits, balva un kur tā ir spēkā.
/v1/company/loyalty/cards
Tikai lasīšana vai lasīšana un rakstīšana
Lojalitātes karšu saraksts
Dalībnieku kartes lojalitātes objekta struktūrā. Dalībniekam, kurš aizpildījis karti, tā ir completed, un blakus ir jauna aktīva karte; customer.id ir dalībnieks.
| Parametrs | Tips | Nozīme |
|---|---|---|
programId |
integer | Ierobežot ar vienu programmu. |
customerId |
integer | Ierobežot ar vienu dalībnieku. |
status |
string | Atdalīti ar komatu: active, completed. |
updatedSince |
ISO 8601 datums un laiks | Tikai kartes, kurām kopš šī laika pievienots zīmogs vai kuras pabeigtas; kārto pēc updatedAt augošā secībā. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
page |
integer | Lapas numurs, sākot no 1. Noklusējums 1. |
/v1/company/loyalty/rewards
Tikai lasīšana vai lasīšana un rakstīšana
Lojalitātes balvu saraksts
Balvas, kas nopelnītas, aizpildot karti, ar to kodu, derīguma termiņu un informāciju, vai tās ir izmantotas.
| Parametrs | Tips | Nozīme |
|---|---|---|
programId |
integer | Ierobežot ar vienu programmu. |
customerId |
integer | Ierobežot ar vienu dalībnieku. |
status |
string | Atdalīti ar komatu: issued, redeemed, expired. |
from |
ISO 8601 datums un laiks | Tikai balvas, kas izsniegtas šajā laikā vai vēlāk. |
to |
ISO 8601 datums un laiks | Tikai balvas, kas izsniegtas pirms šī laika. |
limit |
integer | Lapas izmērs, 1–100. Noklusējums 50. |
page |
integer | Lapas numurs, sākot no 1. Noklusējums 1. |
/v1/company/webhooks
Tikai lasīšana vai lasīšana un rakstīšana
Webhook abonementu saraksts
Abonementi, kurus izveidoja šī atslēga. Panelī pievienotie webhooks šeit netiek rādīti.
/v1/company/webhooks
Tikai lasīšana vai lasīšana un rakstīšana
Abonēt webhook
Sāk sūtīt notikumus uz URL — to izsauc automatizācijas platformas lietotne, kad lietotājs ieslēdz trigeri. Atgriež abonementu un tā parakstīšanas noslēpumu, vienreiz. JSON pamatteksts: {"url": "…", "events": ["order.placed"]}; tiek pieņemts arī Zapier formāts {"target_url": "…", "event": "…"}.
| Parametrs | Tips | Nozīme |
|---|---|---|
url |
string, obligāts | https adrese, uz kuru sūtīt (pieņem arī target_url). |
events |
virkņu masīvs, obligāts | Notikumu veidi, grupas, piemēram, order.* vai loyalty, vai * visam (pieņem arī event, vienam veidam). |
description |
string | Nosaukums, kas tiek rādīts panelī. Pēc noklusējuma — platforma un atslēgas nosaukums. |
/v1/company/webhooks/{id}
Tikai lasīšana vai lasīšana un rakstīšana
Atteikties no webhook
Pārtrauc sūtīšanu uz šīs atslēgas izveidotu abonementu. Atgriež 204. Atslēgas atsaukšana noņem arī visus tās abonementus.
Rezervācijas objekts
Rezervācija un pieraksts tiek atgriezti vienā kopīgā struktūrā: kind, id, status, source, guestInitiated, startsAt/endsAt/timezone (filiāles laika josla), currency, company, branch, guest, attribution, conversionId, createdAt/updatedAt — kā arī partySize un table rezervācijai, service un specialist pierakstam. Tas ir tieši tas, ko nogādā webhook, tāpēc saņēmējs, kas apstrādā vienu, apstrādā abus.
{
"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…" }
}
}
Pasūtījuma objekts
Pasūtījums vienmēr ir vienā struktūrā, lai kur Jūs to sastaptu — REST API, pasūtījumu webhooks, notikumu plūsmā: kind ("order"), id, number (čeka numurs, ko izsauc darbinieki), status (open vai paid), source (customer vai staff), guestInitiated, fulfilment, table, label, deliveryAddress, note, currency, timezone, company, branch, customer (lojalitātes dalībnieks, ja darbinieki to identificējuši), items (name, variant, quantity, unitPriceCents, subtotalCents), itemCount, subtotalCents, discountCents, deliveryFeeCents, tipCents, totalCents, valueCents (pasūtījuma vērtība bez dzeramnaudas — skaitlis, ko ziņo konversijas), paymentMethod, servedBy, conversionId, createdAt, paidAt un attribution. Naudas summas vienmēr ir mazākajās vienībās.
{
"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…" }
}
}
Lojalitātes objekts
Katram lojalitātes notikumam, kartei un balvai ir viena struktūra: kind ("loyalty"), id (karte), timezone, company, branch (kur tas notika, ja tāda ir), program (id, name, stampsRequired, rewardTitle), customer (id, name, phone, locale), card (id, status, stampsCount, stampsRequired, stampsToReward, createdAt), stamp (zīmogam: source, issuedBy, createdAt) un reward (balvai: code, title, status, expiresAt, redeemedAt, redeemedBy), kā arī conversionId — id, ar kuru tiek ziņota lojalitātes programmas pievienošanās.
{
"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…"
}
Notikumu plūsma
Katra rinda ir { id, cursor, type, createdAt, previousStatus, data }. data satur objektu zem atslēgas, ko nosaka notikuma prefikss: data.booking, data.order vai data.loyalty. Saglabājiet augstāko apstrādāto kursoru un nododiet to atpakaļ kā after — tas nekad neizlaiž un neatkārto rindu, tāpēc pēc avārijas var droši turpināt. Ignorējiet veidus, kurus neapstrādājat: var tikt pievienoti jauni.
| Notikuma veids | Nozīme |
|---|---|
booking.requested | Viesis pieprasīja rezervāciju, kas gaida Jūsu apstiprinājumu. |
booking.confirmed | Rezervācija ir apstiprināta — izveidota jau apstiprināta vai vēlāk apstiprināta no darbinieku puses. |
booking.cancelled | Atcēla viesis vai uzņēmums; status norāda, kurš. |
booking.no_show | Viesis neieradās. |
booking.completed | Apmeklējums ir beidzies. |
order.placed | Viesa pasūtījums sasniedza uzņēmumu — no lapas, galdiņa QR koda, līdzņemšanai vai ar piegādi; pēc apmaksas, ja uzņēmums pieprasa priekšapmaksu. |
order.paid | Jebkurš pasūtījums apmaksāts, ieskaitot pie kases reģistrētos pārdevumus. |
loyalty.member_joined | Klients saņēma savu pirmo zīmogu programmā. |
loyalty.stamp_added | Kartei tika pievienots zīmogs. |
loyalty.reward_issued | Karte tika aizpildīta un tās balva izsniegta. |
loyalty.reward_redeemed | Balva tika izsniegta viesim. |
curl "https://api.tapti.me/v1/company/events?after=998&limit=100" \
-H "Authorization: Bearer tt_live_…"
Webhooks
Izveidojiet galapunktu sadaļā Integrācijas → Webhooks un API — vai pieslēdziet Zapier, Make, n8n vai Pipedream sadaļā Integrācijas → Automatizācija —, lai TapTime ar POST nosūtītu parakstītu JSON notikumu tajā brīdī, kad mainās rezervācija, pasūtījums vai lojalitātes karte. Notikumus izvēlaties katram galapunktam. Uzņēmumam var būt kopā līdz 50 webhooks, postbacks, tērzēšanas un automatizācijas savienojumu.
| Galvene | Nozīme |
|---|---|
TapTime-Event | Notikuma veids, piem., booking.confirmed. |
TapTime-Event-Id | Notikuma stabils id — izmantojiet to, lai atfiltrētu atkārtoti nosūtītu piegādi. |
TapTime-Delivery | Šī konkrētā piegādes mēģinājuma id. |
TapTime-Signature | t=<unix time>,v1=<hex HMAC-SHA256 of "t.rawBody">, parakstīts ar galapunkta paša noslēpumu. |
- Jebkura 2xx atbilde tiek uzskatīta par piegādātu; atbilde, kas nav 2xx, vai noildze tiek atkārtota ar pieaugošu intervālu (1m, 5m, 15m, 1h, 3h, 6h, 12h) līdz 8 mēģinājumiem — 410 aptur atkārtošanu.
- Pāradresācijām netiek sekots.
- Ražošanas vidē URL jābūt HTTPS, un tas nedrīkst norādīt uz privātu vai loopback adresi.
- Piegāde notiek vismaz vienreiz: vienmēr pārbaudiet parakstu un atfiltrējiet dublikātus pēc 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 abonementi
Automatizācijas platformas ieslēdz un izslēdz trigerus caur API, nevis lūdz lietotājam ielīmēt URL (“REST hooks”): ar POST nosūtiet platformas URL ar vajadzīgajiem notikumiem, saglabājiet atgriezto id un ar DELETE dzēsiet to, kad trigeris tiek izslēgts. Abonements ir parasts parakstīts webhook — tas redzams panelī, atzīmēts ar atslēgu, kas to izveidoja.
- Atslēga redz un noņem tikai savus izveidotos abonementus; atslēgas atsaukšana noņem tos visus.
- Adreses domēnos hooks.zapier.com, make.com un pipedream.net tiek atpazītas un parādītas ar platformas nosaukumu; jebkura cita https adrese ir parasts webhook.
- Parakstīšanas noslēpums tiek atgriezts vienreiz, atbildē uz POST; īpašnieks to var atkal apskatīt panelī.
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 vai POST pieprasījums uz Jūsu izsekotāja URL ar aizpildītiem makro, platformām, kas izmanto vaicājuma virknes postbacks, nevis JSON webhooks. Pasūtījumam {value} ir pasūtījuma vērtība bez dzeramnaudas un {order_id} — tā id.
https://tracker.example/postback
?cid={click_id}&event={event}&status={status}
&payout={value}&cur={currency}
Pieejamie vietturi
{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}
Kļūdas
Katra kļūda ir JSON: { "error": "<code>", "message": "<human-readable>" }.
| Statuss | kļūda | Nozīme |
|---|---|---|
| 401 | unauthorized |
Trūkst galvenes Authorization, vai atslēga ir nederīga vai atsaukta. |
| 403 | forbidden |
Tikai lasīšanas atslēga izsauca rakstīšanas galapunktu (statusa maiņu). |
| 404 | not_found |
Atslēgas uzņēmumam nepieder neviena rezervācija ar šādu id. |
| 409 | conflict |
Statusa maiņa radītu dubultu galdiņa vai laika rezervāciju; nekas netika mainīts. |
| 422 | invalid_status |
Pamatteksta status vērtība nav viena no pieļaujamajām šim rezervācijas veidam. |
| 422 | invalid_type |
Notikumu plūsmas type nenorāda nevienu notikumu veidu vai grupu. |
| 422 | invalid_url |
Abonementa URL nav publiska https adrese. |
| 429 | rate_limited |
Vairāk nekā 50 pieprasījumi minūtē šai atslēgai. Samaziniet tempu un mēģiniet vēlreiz. |
API piekļuve, webhooks un automatizācijas un tērzēšanas integrācijas ir iekļautas katrā modulī — bez papildu maksas, bez atsevišķa izstrādātāju plāna.
Sākt bezmaksas izmēģinājumu