Izstrādātāju dokumentācija

TapTime REST API

Lasiet un atjauniniet galdiņu rezervācijas un pierakstus, lasiet pasūtījumus un lojalitātes kartes, vaicājiet sakārtoto notikumu plūsmu un saņemiet parakstītus webhooks — no sava CRM, kases sistēmas, datu noliktavas vai automatizācijas platformas. Šī lapa ir pilna dokumentācija; konversiju uzskaites ceļvedis skaidro, kāpēc to izmantot.

Bāzes URLhttps://api.tapti.me AutentifikācijaBearer token FormātsJSON Kāpēc to izmantot

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ā.

Apstiprinātās rezervācijas, kas mainītas kopš datuma
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

GET /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.

GET /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.

ParametrsTipsNozī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.
GET /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.

ParametrsTipsNozī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.
GET /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.

GET /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.

POST /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": "..."}.

ParametrsTipsNozīme
status string, obligāts Viens no: pending, confirmed, seated, completed, no_show, cancelled (pieņem arī canceled un canceled_by_venue).
POST /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.

ParametrsTipsNozīme
status string, obligāts Viens no: pending, confirmed, completed, no_show, cancelled (pieņem arī canceled un canceled_by_venue).
GET /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.

ParametrsTipsNozī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.
GET /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.

ParametrsTipsNozī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.
GET /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.

GET /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ā.

GET /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.

ParametrsTipsNozī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.
GET /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.

ParametrsTipsNozī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.
GET /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.

POST /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": "…"}.

ParametrsTipsNozī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.
DELETE /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.

GET /v1/company/reservations/4821 → data
{
  "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.

GET /v1/company/orders/9170 → data
{
  "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.

GET /v1/company/loyalty/cards → data[0]
{
  "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 veidsNozīme
booking.requestedViesis pieprasīja rezervāciju, kas gaida Jūsu apstiprinājumu.
booking.confirmedRezervācija ir apstiprināta — izveidota jau apstiprināta vai vēlāk apstiprināta no darbinieku puses.
booking.cancelledAtcēla viesis vai uzņēmums; status norāda, kurš.
booking.no_showViesis neieradās.
booking.completedApmeklējums ir beidzies.
order.placedViesa 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.paidJebkurš pasūtījums apmaksāts, ieskaitot pie kases reģistrētos pārdevumus.
loyalty.member_joinedKlients saņēma savu pirmo zīmogu programmā.
loyalty.stamp_addedKartei tika pievienots zīmogs.
loyalty.reward_issuedKarte tika aizpildīta un tās balva izsniegta.
loyalty.reward_redeemedBalva tika izsniegta viesim.
Uzturiet sinhronizāciju ar notikumu plūsmu
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.

GalveneNozīme
TapTime-EventNotikuma veids, piem., booking.confirmed.
TapTime-Event-IdNotikuma 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-Signaturet=<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.
POST · application/json · booking.confirmed
{
  "id": "evt_9f3c2a7e1b",
  "type": "booking.confirmed",
  "createdAt": "2026-09-12T19:02:11+03:00",
  "test": false,
  "data": { "booking": { "kind": "reservation", "id": 4821, "status": "confirmed", "…": "…" } }
}
Pārbaudiet parakstu (Node.js)
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ī.
Abonējiet URL jauniem pasūtījumiem
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.

Postback URL ar vietturiem · GET vai POST
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>" }.

StatusskļūdaNozī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.
Vajadzīga atslēga?

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