Arendaja dokumentatsioon

TapTime REST API

Loe ja uuenda lauabroneeringuid ja ajabroneeringuid, loe tellimusi ja püsikliendikaarte, päri järjestatud sündmuste voogu ja võta vastu allkirjastatud veebihaake – oma CRM-ist, kassasüsteemist, andmeladust või automatiseerimisplatvormilt. See leht on täielik viide; konversioonide jälgimise juhend selgitab, miks seda kasutada.

Baas-URLhttps://api.tapti.me AutentimineBearer token VormingJSON Miks seda kasutada

Iga päring vajab ettevõtte API-võtit (paneelis Integratsioonid → Veebihaagid ja API), mis saadetakse kujul Authorization: Bearer tt_live_…. Vastused ja vead on JSON-vormingus.

Kinnitatud lauabroneeringud, mida on pärast kuupäeva muudetud
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer tt_live_…"

Autentimine

Iga päring kannab ettevõtte API-võtit bearer-tokenina. Loo see paneelis – Integratsioonid → Veebihaagid ja API → REST API võtmed –, kus seda näidatakse üks kord ja serveris hoitakse ainult selle SHA-256 räsi; kadunud võti tühistatakse ja asendatakse, seda ei taastata. Ettevõttel võib olla kuni 10 aktiivset võtit.

  • Lugemisõigusega võtmed saavad kutsuda iga GET-otspunkti ning tellida ja tühistada veebihaake – tellimus ei saada midagi, mida võti poleks niigi lugeda saanud.
  • Lugemis- ja kirjutamisõigusega võtmed saavad lisaks POST-päringuga muuta broneeringu olekut; lugemisõigusega võti saab neil marsruutidel vastuseks 403 Forbidden.
  • Võti kuulub ühele ettevõttele – iga loend ja päring on juba selle ettevõttega piiratud, companyId parameetrit ei ole.

Päringupiirangud

50 päringut minutis võtme kohta, libiseva aknaga, ühine kõigile otspunktidele. Piirangu ületamisel tagastatakse 429 Too Many Requests; oota ja proovi uuesti, selle asemel et kiiremini pärida – või telli veebihaak ja lõpeta pärimine.

Otspunktid

GET /v1/company Lugemisõigus või lugemis- ja kirjutamisõigus

Hangi praegune ettevõte

Ettevõte, kellele võti kuulub, ja mida võti ise teha saab.

GET /v1/company/reservations Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle lauabroneeringud

Ettevõtte lauabroneeringud, varaseima algusajaga esimesena – või kui updatedSince on määratud, varaseima muutmisajaga esimesena.

ParameeterTüüpTähendus
status string Komadega eraldatud: pending, confirmed, seated, completed, no_show, cancelled. cancelled vastab mõlemale tühistamise põhjusele.
branchId integer Piira ühe filiaaliga.
from ISO 8601 datetime Ainult broneeringud, mis algavad sel ajal või hiljem (UTC, kui nihet pole antud).
to ISO 8601 datetime Ainult broneeringud, mis algavad enne seda aega.
updatedSince ISO 8601 datetime Ainult broneeringud, mida on pärast seda aega muudetud; sorteerib sünkroniseerimiseks updatedAt järgi kasvavalt.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
page integer Lehe number alates 1-st. Vaikimisi 1.
GET /v1/company/appointments Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle ajabroneeringud

Sama kuju ja filtrid nagu lauabroneeringutel, ajabroneeringute mooduli jaoks.

ParameeterTüüpTähendus
status string Komadega eraldatud: pending, confirmed, completed, no_show, cancelled.
branchId integer Piira ühe filiaaliga.
from ISO 8601 datetime Ainult broneeringud, mis algavad sel ajal või hiljem.
to ISO 8601 datetime Ainult broneeringud, mis algavad enne seda aega.
updatedSince ISO 8601 datetime Ainult broneeringud, mida on pärast seda aega muudetud; sorteerib updatedAt järgi kasvavalt.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
page integer Lehe number alates 1-st. Vaikimisi 1.
GET /v1/company/reservations/{id} Lugemisõigus või lugemis- ja kirjutamisõigus

Hangi lauabroneering

Üks lauabroneering samal kujul, nagu veebihaagid seda edastavad, koos omistamisega. 404, kui id ei kuulu võtme ettevõttele.

GET /v1/company/appointments/{id} Lugemisõigus või lugemis- ja kirjutamisõigus

Hangi ajabroneering

Üks ajabroneering, sama kuju ja reeglitega nagu lauabroneeringu päring.

POST /v1/company/reservations/{id}/status Ainult lugemis- ja kirjutamisõigus

Muuda lauabroneeringu olekut

Kinnita, istuta, lõpeta, märgi ilmumata jäänuks, tühista või ava uuesti – käivitab samad veebihaagid ja konversioonid nagu muutmine broneeringute tahvlil. JSON-keha: {"status": "..."}.

ParameeterTüüpTähendus
status string, required Üks järgmistest: pending, confirmed, seated, completed, no_show, cancelled (aktsepteeritakse ka canceled ja canceled_by_venue).
POST /v1/company/appointments/{id}/status Ainult lugemis- ja kirjutamisõigus

Muuda ajabroneeringu olekut

Sama mis lauabroneeringu otspunkt, ilma seated olekuta.

ParameeterTüüpTähendus
status string, required Üks järgmistest: pending, confirmed, completed, no_show, cancelled (aktsepteeritakse ka canceled ja canceled_by_venue).
GET /v1/company/events Lugemisõigus või lugemis- ja kirjutamisõigus

Päri sündmuste voogu

Iga broneeringu-, tellimuse- ja püsikliendisündmus, vanim esimesena – sama voog, millest veebihaagid lõigatakse. Anna viimane nähtud kursor parameetris after, et saada ainult uued, ja type, et saada ainult teatud liigid.

ParameeterTüüpTähendus
after integer cursor Viimase töödeldud sündmuse kursor. Jäta ära, et alustada algusest.
type string Komadega eraldatud sündmuste tüübid või perekonnad: booking.confirmed,order.placed või order, loyalty.*. Jäta ära, et saada kõik sündmused.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
GET /v1/company/orders Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle tellimused

Külaliste laua-, kaasa- ja kullertellimused ning iga kassas löödud müük, vanim esimesena – või kui paidSince on määratud, tasumise järjekorras. Tellimus, mis ootab veel ettemaksu, jäetakse välja.

ParameeterTüüpTähendus
status string Komadega eraldatud: open, paid.
source string customer (esitas külaline) või staff (lõi töötaja).
fulfilment string Komadega eraldatud: dine_in, takeaway, delivery.
branchId integer Piira ühe filiaaliga.
from ISO 8601 datetime Ainult tellimused, mis on loodud sel ajal või hiljem.
to ISO 8601 datetime Ainult tellimused, mis on loodud enne seda aega.
paidSince ISO 8601 datetime Ainult tellimused, mis on tasutud pärast seda aega; sorteerib müügi sünkroniseerimiseks paidAt järgi kasvavalt.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
page integer Lehe number alates 1-st. Vaikimisi 1.
GET /v1/company/orders/{id} Lugemisõigus või lugemis- ja kirjutamisõigus

Hangi tellimus

Üks tellimus koos ridade, summade ja omistamisega, samal kujul nagu tellimuste veebihaagid seda edastavad.

GET /v1/company/loyalty/programs Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle püsikliendiprogrammid

Iga templikaardi programm: nimi, olek, vajalike templite arv, auhind ja kus see kehtib.

GET /v1/company/loyalty/cards Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle püsikliendikaardid

Liikmete kaardid püsikliendiprogrammi objekti kujul. Liikmel, kes kaardi täitis, on see lõpetatud ja selle kõrval uus aktiivne kaart; customer.id on liige.

ParameeterTüüpTähendus
programId integer Piira ühe programmiga.
customerId integer Piira ühe liikmega.
status string Komadega eraldatud: active, completed.
updatedSince ISO 8601 datetime Ainult kaardid, millele on pärast seda aega lisatud tempel või mis on lõpetatud; sorteerib updatedAt järgi kasvavalt.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
page integer Lehe number alates 1-st. Vaikimisi 1.
GET /v1/company/loyalty/rewards Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle püsikliendiauhinnad

Kaardi täitmisega teenitud auhinnad koos koodi, aegumise ja selle teabega, kas need on lunastatud.

ParameeterTüüpTähendus
programId integer Piira ühe programmiga.
customerId integer Piira ühe liikmega.
status string Komadega eraldatud: issued, redeemed, expired.
from ISO 8601 datetime Ainult auhinnad, mis on väljastatud sel ajal või hiljem.
to ISO 8601 datetime Ainult auhinnad, mis on väljastatud enne seda aega.
limit integer Lehe suurus, 1–100. Vaikimisi 50.
page integer Lehe number alates 1-st. Vaikimisi 1.
GET /v1/company/webhooks Lugemisõigus või lugemis- ja kirjutamisõigus

Loetle veebihaakide tellimused

Selle võtmega tehtud tellimused. Paneelis lisatud veebihaake siin ei näidata.

POST /v1/company/webhooks Lugemisõigus või lugemis- ja kirjutamisõigus

Telli veebihaak

Alustab sündmuste saatmist URL-ile – seda kutsub automatiseerimisplatvormi rakendus, kui kasutaja päästiku sisse lülitab. Tagastab tellimuse ja selle allkirjastamise saladuse, üks kord. JSON-keha: {"url": "…", "events": ["order.placed"]}; aktsepteeritakse ka Zapieri kuju {"target_url": "…", "event": "…"}.

ParameeterTüüpTähendus
url string, required https-aadress, kuhu saata (aktsepteeritakse ka target_url).
events array of strings, required Sündmuste tüübid, perekonnad nagu order.* või loyalty, või * kõige jaoks (ühe jaoks aktsepteeritakse ka event).
description string Paneelis kuvatav nimi. Vaikimisi platvormi ja võtme nimi.
DELETE /v1/company/webhooks/{id} Lugemisõigus või lugemis- ja kirjutamisõigus

Tühista veebihaagi tellimus

Lõpetab saatmise selle võtmega tehtud tellimusele. Tagastab 204. Võtme tühistamine eemaldab ka kõik selle tellimused.

Broneeringu objekt

Lauabroneering ja ajabroneering väljastatakse ühisel kujul: kind, id, status, source, guestInitiated, startsAt/endsAt/timezone (filiaali enda ajavöönd), currency, company, branch, guest, attribution, conversionId, createdAt/updatedAt – lisaks partySize ja table lauabroneeringul ning service ja specialist ajabroneeringul. See on täpselt see, mida veebihaak edastab, nii et vastuvõtja, mis käsitleb üht, käsitleb mõlemat.

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…" }
  }
}

Tellimuse objekt

Tellimus väljastatakse ühel kujul, kus iganes sellega kokku puutud – REST API, tellimuste veebihaagid, sündmuste voog: kind ("order"), id, number (tšeki number, mille töötajad välja hüüavad), status (open või paid), source (customer või staff), guestInitiated, fulfilment, table, label, deliveryAddress, note, currency, timezone, company, branch, customer (püsikliendiprogrammi liige, kui töötaja ta tuvastas), items (name, variant, quantity, unitPriceCents, subtotalCents), itemCount, subtotalCents, discountCents, deliveryFeeCents, tipCents, totalCents, valueCents (tellimuse väärtus ilma jootrahata – number, mida konversioonid raporteerivad), paymentMethod, servedBy, conversionId, createdAt, paidAt ja attribution. Summad on alati väikseimates rahaühikutes.

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…" }
  }
}

Püsikliendiprogrammi objekt

Iga püsikliendisündmus, kaart ja auhind on ühel kujul: kind ("loyalty"), id (kaart), timezone, company, branch (kus see juhtus, kui on), program (id, name, stampsRequired, rewardTitle), customer (id, name, phone, locale), card (id, status, stampsCount, stampsRequired, stampsToReward, createdAt), stamp (templi puhul: source, issuedBy, createdAt) ja reward (auhinna puhul: code, title, status, expiresAt, redeemedAt, redeemedBy), lisaks conversionId – id, mille all püsikliendiprogrammiga liitumist raporteeritakse.

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…"
}

Sündmuste voog

Iga rida on { id, cursor, type, createdAt, previousStatus, data }. data sisaldab subjekti võtme all, mille nimetab sündmuse eesliide: data.booking, data.order või data.loyalty. Salvesta suurim töödeldud cursor ja anna see tagasi parameetris after – see ei jäta kunagi rida vahele ega korda seda, nii et pärast krahhi on ohutu jätkata. Ignoreeri tüüpe, mida sa ei käsitle: uusi võidakse lisada.

Sündmuse tüüpTähendus
booking.requestedKülaline küsis broneeringut, mis ootab sinu kinnitust.
booking.confirmedBroneering on kinnitatud – loodi kinnitatuna või kinnitas hiljem töötaja.
booking.cancelledTühistas külaline või koht; status näitab, kumb.
booking.no_showKülaline ei tulnud.
booking.completedKülastus on lõppenud.
order.placedKülalise tellimus jõudis kohani – lehelt, laua QR-koodist, kaasa- või kullertellimusena; pärast makset, kui koht võtab selle ette.
order.paidMis tahes tellimus on tasutud, sealhulgas kassas löödud müük.
loyalty.member_joinedKlient sai programmis oma esimese templi.
loyalty.stamp_addedKaardile lisati tempel.
loyalty.reward_issuedKaart täideti ja selle auhind väljastati.
loyalty.reward_redeemedAuhind anti üle.
Püsi sündmuste vooga sünkroonis
curl "https://api.tapti.me/v1/company/events?after=998&limit=100" \
  -H "Authorization: Bearer tt_live_…"

Veebihaagid

Loo otspunkt jaotises Integratsioonid → Veebihaagid ja API – või ühenda Zapier, Make, n8n või Pipedream jaotises Integratsioonid → Automatiseerimine –, et TapTime saadaks POST-päringuga allkirjastatud JSON-sündmuse kohe, kui broneering, tellimus või püsikliendikaart muutub. Sündmused valid iga otspunkti jaoks eraldi. Ettevõttel võib kokku olla kuni 50 veebihaaki, postbacki, vestlust ja automatiseerimisühendust.

PäisTähendus
TapTime-EventSündmuse tüüp, nt booking.confirmed.
TapTime-Event-IdSündmuse püsiv id – kasuta seda korduvalt saadetud edastuse duplikaatide eemaldamiseks.
TapTime-DeliverySelle konkreetse edastuskatse id.
TapTime-Signaturet=<unix time>,v1=<hex HMAC-SHA256 of "t.rawBody">, allkirjastatud otspunkti enda saladusega.
  • Iga 2xx vastust loetakse edastatuks; mitte-2xx vastust või aegumist proovitakse uuesti kasvavate vahedega (1m, 5m, 15m, 1h, 3h, 6h, 12h) kuni 8 korda – vastus 410 lõpetab kordamise.
  • Ümbersuunamisi ei järgita.
  • Tootmiskeskkonnas peab URL olema HTTPS ega tohi osutada privaatsele ega loopback-aadressile.
  • Edastus toimub vähemalt üks kord: kontrolli alati allkirja ja eemalda duplikaadid TapTime-Event-Id järgi.
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", "…": "…" } }
}
Kontrolli allkirja (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));

Veebihaakide tellimused

Automatiseerimisplatvormid lülitavad päästikuid sisse ja välja API kaudu, selle asemel et paluda kasutajal URL kleepida („REST hooks“): saada POST-päringuga platvormi enda URL koos soovitud sündmustega, hoia tagastatud id alles ja kustuta see DELETE-päringuga, kui päästik välja lülitatakse. Tellimus on tavaline allkirjastatud veebihaak – see kuvatakse paneelis ja on märgitud võtmega, mis selle lõi.

  • Võti näeb ja eemaldab ainult enda tehtud tellimusi; võtme tühistamine eemaldab need kõik.
  • Aadressid domeenidel hooks.zapier.com, make.com ja pipedream.net tuvastatakse ja kuvatakse platvormi nimega; mis tahes muu https-aadress on tavaline veebihaak.
  • Allkirjastamise saladus tagastatakse üks kord, POST-päringu vastuses; omanik saab selle paneelis uuesti nähtavaks teha.
Telli URL uute tellimuste jaoks
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"]}'

Postbackid

GET- või POST-päring sinu jälgija enda URL-ile täidetud makrodega – platvormidele, mis kasutavad päringustringiga postbacke, mitte JSON-veebihaake. Tellimuse puhul on {value} tellimuse väärtus ilma jootrahata ja {order_id} selle id.

Postbacki URL kohatäitjatega · GET või POST
https://tracker.example/postback
  ?cid={click_id}&event={event}&status={status}
  &payout={value}&cur={currency}

Saadaolevad kohatäitjad

  • {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}

Vead

Iga viga on JSON: { "error": "<code>", "message": "<human-readable>" }.

OlekvigaTähendus
401 unauthorized Päis Authorization puudub või võti on vigane või tühistatud.
403 forbidden Lugemisõigusega võti kutsus kirjutamisotspunkti (oleku muutmine).
404 not_found Selle id-ga broneeringut võtme ettevõttes ei ole.
409 conflict Oleku muutmine broneeriks laua või aja topelt; midagi ei muudetud.
422 invalid_status Keha väärtus status ei ole selle broneeringutüübi lubatud väärtuste hulgas.
422 invalid_type Sündmuste voo type ei nimeta ühtegi sündmuse tüüpi ega perekonda.
422 invalid_url Tellimuse URL ei ole avalik https-aadress.
429 rate_limited Selle võtmega on tehtud üle 50 päringu minutis. Aeglusta ja proovi uuesti.
Vajad võtit?

API-juurdepääs, veebihaagid ning automatiseerimis- ja vestlusintegratsioonid on iga mooduliga kaasas – ilma lisatasuta, ilma eraldi arendajapaketita.

Alusta tasuta prooviperioodi