Әр сұрауға Authorization: Bearer tt_live_… түрінде компанияның API кілті (панельдегі Интеграциялар → Вебхуктар және API) қажет. Жауаптар мен қателер JSON пішімінде.
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
-H "Authorization: Bearer tt_live_…"
Аутентификация
Әр сұрау компанияның API кілтін bearer токен ретінде жібереді. Кілтті панельдегі Интеграциялар → Вебхуктар және API → REST API кілттері бөлімінде жасаңыз: ол тек бір рет көрсетіледі және серверде тек SHA-256 хэші ретінде сақталады; жоғалған кілт қалпына келтірілмейді — оның күші жойылып, жаңасымен ауыстырылады. Компанияда 10-ға дейін белсенді кілт болуы мүмкін.
- Тек оқуға арналған кілттер барлық GET эндпоинттарын шақыра алады, сондай-ақ вебхуктарға жазылып, жазылымнан шыға алады — жазылым кілт өзі оқи алмайтын ештеңені жібермейді.
- Оқу және жазу кілттері бұған қоса брондау күйін POST арқылы өзгерте алады; тек оқуға арналған кілт бұл маршруттарда 403 Forbidden жауабын алады.
- Кілт бір компанияға тиесілі — әр тізім мен сұрау сол компаниямен шектелген, companyId параметрі жоқ.
Сұрау шектері
Әр кілтке минутына 50 сұрау, сырғымалы терезе бойынша, барлық эндпоинттарға ортақ. Шектен асса, 429 Too Many Requests қайтарылады; жиірек сұраудың орнына біраз күтіп, қайталап көріңіз — немесе вебхукқа жазылып, сұрауды мүлде тоқтатыңыз.
Эндпоинттар
/v1/company
Тек оқу немесе оқу және жазу
Ағымдағы компанияны алу
Кілт тиесілі компания және кілттің өзі не істей алатыны.
/v1/company/reservations
Тек оқу немесе оқу және жазу
Үстел брондауларының тізімі
Компанияның үстел брондаулары, ең ерте басталатынынан бастап — updatedSince берілсе, ең бұрын жаңартылғанынан бастап.
| Параметр | Түрі | Мағынасы |
|---|---|---|
status |
string | Үтірмен бөлінген: pending, confirmed, seated, completed, no_show, cancelled. cancelled болдырмаудың екі себебін де қамтиды. |
branchId |
integer | Тек бір филиал. |
from |
ISO 8601 datetime | Тек осы уақытта немесе одан кейін басталатын брондаулар (ығысу көрсетілмесе, UTC). |
to |
ISO 8601 datetime | Тек осы уақытқа дейін басталатын брондаулар. |
updatedSince |
ISO 8601 datetime | Тек осы уақыттан бері өзгерген брондаулар; синхрондау үшін сұрыптауды updatedAt бойынша өсу ретіне ауыстырады. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
page |
integer | Бет нөмірі, 1-ден басталады. Әдепкі мәні 1. |
/v1/company/appointments
Тек оқу немесе оқу және жазу
Жазылулар тізімі
«Жазылулар» модулі үшін — үстел брондауларымен бірдей пішін мен сүзгілер.
| Параметр | Түрі | Мағынасы |
|---|---|---|
status |
string | Үтірмен бөлінген: pending, confirmed, completed, no_show, cancelled. |
branchId |
integer | Тек бір филиал. |
from |
ISO 8601 datetime | Тек осы уақытта немесе одан кейін басталатын брондаулар. |
to |
ISO 8601 datetime | Тек осы уақытқа дейін басталатын брондаулар. |
updatedSince |
ISO 8601 datetime | Тек осы уақыттан бері өзгерген брондаулар; updatedAt бойынша өсу ретімен сұрыпталады. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
page |
integer | Бет нөмірі, 1-ден басталады. Әдепкі мәні 1. |
/v1/company/reservations/{id}
Тек оқу немесе оқу және жазу
Бір үстел брондауын алу
Бір үстел брондауы — вебхуктар жеткізетін пішінде, атрибуциясымен бірге. id кілттің компаниясына тиесілі болмаса, 404.
/v1/company/appointments/{id}
Тек оқу немесе оқу және жазу
Бір жазылуды алу
Бір жазылу — үстел брондауымен бірдей пішін мен ережелер.
/v1/company/reservations/{id}/status
Тек оқу және жазу
Үстел брондауының күйін өзгерту
Растау, үстелге отырғызу, аяқтау, «келмеді» деп белгілеу, болдырмау немесе қайта ашу — тақтада өзгерткендегідей вебхуктар мен конверсияларды іске қосады. JSON денесі: {"status": "..."}.
| Параметр | Түрі | Мағынасы |
|---|---|---|
status |
string, required | Мыналардың бірі: pending, confirmed, seated, completed, no_show, cancelled (canceled және canceled_by_venue да қабылданады). |
/v1/company/appointments/{id}/status
Тек оқу және жазу
Жазылу күйін өзгерту
Үстел брондауының эндпоинтімен бірдей, тек seated күйі жоқ.
| Параметр | Түрі | Мағынасы |
|---|---|---|
status |
string, required | Мыналардың бірі: pending, confirmed, completed, no_show, cancelled (canceled және canceled_by_venue да қабылданады). |
/v1/company/events
Тек оқу немесе оқу және жазу
Оқиғалар ағынын сұрау
Барлық брондау, тапсырыс және адалдық оқиғалары, ең ескісінен бастап — вебхуктар да дәл осы ағыннан алынады. Тек жаңаларын алу үшін соңғы көрген курсорыңызды after ретінде, тек кейбір түрлерін алу үшін type параметрін жіберіңіз.
| Параметр | Түрі | Мағынасы |
|---|---|---|
after |
integer cursor | Соңғы өңделген оқиғаңыздың курсоры. Басынан бастау үшін көрсетпеңіз. |
type |
string | Үтірмен бөлінген оқиға түрлері немесе топтары: booking.confirmed,order.placed немесе order, loyalty.*. Барлық оқиға үшін көрсетпеңіз. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
/v1/company/orders
Тек оқу немесе оқу және жазу
Тапсырыстар тізімі
Қонақтардың үстелден, өзімен алып кетуге және жеткізуге берген тапсырыстары мен кассада өткізілген барлық сатылым, ең ескісінен бастап — paidSince берілсе, төленген ретімен. Алдын ала төлемін күтіп тұрған тапсырыс тізімге кірмейді.
| Параметр | Түрі | Мағынасы |
|---|---|---|
status |
string | Үтірмен бөлінген: open, paid. |
source |
string | customer (қонақ берген) немесе staff (қызметкер өткізген). |
fulfilment |
string | Үтірмен бөлінген: dine_in, takeaway, delivery. |
branchId |
integer | Тек бір филиал. |
from |
ISO 8601 datetime | Тек осы уақытта немесе одан кейін жасалған тапсырыстар. |
to |
ISO 8601 datetime | Тек осы уақытқа дейін жасалған тапсырыстар. |
paidSince |
ISO 8601 datetime | Тек осы уақыттан бері төленген тапсырыстар; сатылымдарды синхрондау үшін paidAt бойынша өсу ретімен сұрыпталады. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
page |
integer | Бет нөмірі, 1-ден басталады. Әдепкі мәні 1. |
/v1/company/orders/{id}
Тек оқу немесе оқу және жазу
Бір тапсырысты алу
Бір тапсырыс — позицияларымен, сомаларымен және атрибуциясымен, тапсырыс вебхуктары жеткізетін пішінде.
/v1/company/loyalty/programs
Тек оқу немесе оқу және жазу
Адалдық бағдарламаларының тізімі
Барлық мөр картасы бағдарламалары: атауы, күйі, қажетті мөрлер саны, сыйақы және ол қай жерде қолданылатыны.
/v1/company/loyalty/cards
Тек оқу немесе оқу және жазу
Адалдық карталарының тізімі
Мүшелердің карталары, адалдық объектісінің пішінінде. Картасын толтырған мүшеде ол completed күйінде болады және жанында жаңа active карта ашылады; customer.id — мүше.
| Параметр | Түрі | Мағынасы |
|---|---|---|
programId |
integer | Тек бір бағдарлама. |
customerId |
integer | Тек бір мүше. |
status |
string | Үтірмен бөлінген: active, completed. |
updatedSince |
ISO 8601 datetime | Тек осы уақыттан бері мөр басылған немесе аяқталған карталар; updatedAt бойынша өсу ретімен сұрыпталады. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
page |
integer | Бет нөмірі, 1-ден басталады. Әдепкі мәні 1. |
/v1/company/loyalty/rewards
Тек оқу немесе оқу және жазу
Адалдық сыйақыларының тізімі
Картаны толтырып алынған сыйақылар — коды, жарамдылық мерзімі және берілген-берілмегені көрсетіледі.
| Параметр | Түрі | Мағынасы |
|---|---|---|
programId |
integer | Тек бір бағдарлама. |
customerId |
integer | Тек бір мүше. |
status |
string | Үтірмен бөлінген: issued, redeemed, expired. |
from |
ISO 8601 datetime | Тек осы уақытта немесе одан кейін берілген сыйақылар. |
to |
ISO 8601 datetime | Тек осы уақытқа дейін берілген сыйақылар. |
limit |
integer | Бет өлшемі, 1–100. Әдепкі мәні 50. |
page |
integer | Бет нөмірі, 1-ден басталады. Әдепкі мәні 1. |
/v1/company/webhooks
Тек оқу немесе оқу және жазу
Вебхук жазылымдарының тізімі
Осы кілт жасаған жазылымдар. Панельде қосылған вебхуктар мұнда көрсетілмейді.
/v1/company/webhooks
Тек оқу немесе оқу және жазу
Вебхукқа жазылу
URL мекенжайына оқиғаларды жіберуді бастайды — пайдаланушы триггерді қосқанда автоматтандыру платформасының қолданбасы дәл осыны шақырады. Жазылымды және оның қолтаңба кілтін бір рет қайтарады. JSON денесі: {"url": "…", "events": ["order.placed"]}; Zapier-дің {"target_url": "…", "event": "…"} пішімі де қабылданады.
| Параметр | Түрі | Мағынасы |
|---|---|---|
url |
string, required | Жіберілетін https мекенжайы (target_url да қабылданады). |
events |
array of strings, required | Оқиға түрлері, order.* немесе loyalty сияқты топтар, не бәрі үшін * (бір оқиға үшін event те қабылданады). |
description |
string | Панельде көрсетілетін атау. Әдепкі бойынша платформа мен кілттің атауы. |
/v1/company/webhooks/{id}
Тек оқу немесе оқу және жазу
Вебхук жазылымын тоқтату
Осы кілт жасаған жазылымға жіберуді тоқтатады. 204 қайтарады. Кілттің күші жойылса, оның барлық жазылымы да өшіріледі.
Брондау объектісі
Үстел брондауы мен жазылу бір ортақ пішінде қайтарылады: kind, id, status, source, guestInitiated, startsAt/endsAt/timezone (филиалдың өз уақыт белдеуі), currency, company, branch, guest, attribution, conversionId, createdAt/updatedAt — оған қоса үстел брондауында partySize және table, жазылуда service және specialist. Бұл дәл вебхук жеткізетін дерек, сондықтан біреуін өңдей алатын қабылдағыш екеуін де өңдейді.
{
"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…" }
}
}
Тапсырыс объектісі
Тапсырыс қай жерде кездессе де — REST API, тапсырыс вебхуктары немесе оқиғалар ағыны — бір пішінде қайтарылады: kind ("order"), id, number (қызметкерлер шақыратын чек нөмірі), status (open немесе paid), source (customer немесе staff), guestInitiated, fulfilment, table, label, deliveryAddress, note, currency, timezone, company, branch, customer (қызметкер анықтаса, адалдық бағдарламасының мүшесі), items (name, variant, quantity, unitPriceCents, subtotalCents), itemCount, subtotalCents, discountCents, deliveryFeeCents, tipCents, totalCents, valueCents (шайпұлсыз тапсырыс құны — конверсияларда жіберілетін сан), paymentMethod, servedBy, conversionId, createdAt, paidAt және attribution. Ақша сомалары әрдайым ұсақ бірліктермен (тиынмен) беріледі.
{
"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…" }
}
}
Адалдық объектісі
Әр адалдық оқиғасы, картасы және сыйақысы бір пішінге ие: kind ("loyalty"), id (карта), timezone, company, branch (оқиға болған жер, егер бар болса), program (id, name, stampsRequired, rewardTitle), customer (id, name, phone, locale), card (id, status, stampsCount, stampsRequired, stampsToReward, createdAt), stamp (мөр үшін: source, issuedBy, createdAt) және reward (сыйақы үшін: code, title, status, expiresAt, redeemedAt, redeemedBy), сондай-ақ conversionId — адалдыққа тіркелу осы id-мен жіберіледі.
{
"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…"
}
Оқиғалар ағыны
Әр жол: { id, cursor, type, createdAt, previousStatus, data }. data оқиға префиксі атаған кілттің астында нысанды сақтайды: data.booking, data.order немесе data.loyalty. Өңделген ең үлкен курсорыңызды сақтап, оны after ретінде қайтарыңыз — ол ешқашан жолды өткізіп жібермейді және қайталамайды, сондықтан іркілістен кейін қауіпсіз жалғастыруға болады. Өзіңіз өңдемейтін түрлерді елемеңіз: жаңалары қосылуы мүмкін.
| Оқиға түрі | Мағынасы |
|---|---|
booking.requested | Қонақ растауыңызды күтетін брондау сұрады. |
booking.confirmed | Брондау расталды — бірден расталған күйде жасалды немесе кейін қызметкер растады. |
booking.cancelled | Қонақ немесе мекеме болдырмады; кім екенін status көрсетеді. |
booking.no_show | Қонақ келмеді. |
booking.completed | Келу аяқталды. |
order.placed | Қонақтың тапсырысы мекемеге жетті — беттен, үстелдегі QR кодтан, өзімен алып кетуге немесе жеткізуге; мекеме алдын ала төлем алса, төлемнен кейін. |
order.paid | Кез келген тапсырыс төленді, соның ішінде кассада өткізілген сатылымдар. |
loyalty.member_joined | Клиент бағдарламадағы алғашқы мөрін алды. |
loyalty.stamp_added | Картаға мөр қосылды. |
loyalty.reward_issued | Карта толтырылып, сыйақы берілді. |
loyalty.reward_redeemed | Сыйақы қолға тапсырылды. |
curl "https://api.tapti.me/v1/company/events?after=998&limit=100" \
-H "Authorization: Bearer tt_live_…"
Вебхуктар
Интеграциялар → Вебхуктар және API бөлімінде эндпоинт жасаңыз — немесе Интеграциялар → Автоматтандыру бөлімінде Zapier, Make, n8n не Pipedream қосыңыз — сонда брондау, тапсырыс немесе адалдық картасы өзгерген сәтте TapTime қолтаңбасы бар JSON оқиғасын POST етеді. Оқиғаларды әр эндпоинт үшін бөлек таңдайсыз. Компанияда барлығы 50-ге дейін вебхук, постбэк, чат және автоматтандыру қосылымы болуы мүмкін.
| Тақырып | Мағынасы |
|---|---|
TapTime-Event | Оқиға түрі, мысалы booking.confirmed. |
TapTime-Event-Id | Оқиғаның тұрақты id-і — қайта жіберілген жеткізудің телнұсқасын сүзу үшін қолданыңыз. |
TapTime-Delivery | Дәл осы жеткізу әрекетінің id-і. |
TapTime-Signature | t=<unix уақыты>,v1=<"t.rawBody" мәнінің hex HMAC-SHA256 қолтаңбасы>, эндпоинттің өз құпия кілтімен қол қойылған. |
- Кез келген 2xx жауабы жеткізілді деп есептеледі; 2xx емес жауап немесе timeout аралықты ұлғайта отырып (1 мин, 5 мин, 15 мин, 1 сағ, 3 сағ, 6 сағ, 12 сағ) 8 ретке дейін қайталанады — 410 қайталауды тоқтатады.
- Қайта бағыттауларға өтпейді.
- Production ортасында URL HTTPS болуы тиіс және жеке немесе loopback мекенжайға бағытталмауы керек.
- Жеткізу кемінде бір рет кепілдендіріледі: қолтаңбаны әрқашан тексеріп, телнұсқаларды 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));
Вебхук жазылымдары
Автоматтандыру платформалары пайдаланушыдан URL қоюды сұраудың орнына триггерлерді API арқылы қосып-өшіреді («REST hooks»): платформаның өз URL мекенжайын қажетті оқиғалармен POST етіңіз, қайтарылған id-ді сақтаңыз және триггер өшірілгенде оны DELETE етіңіз. Жазылым — қолтаңбасы бар кәдімгі вебхук: ол панельде өзін жасаған кілттің белгісімен көрінеді.
- Кілт тек өзі жасаған жазылымдарды көріп, өшіре алады; кілттің күші жойылса, олардың бәрі өшіріледі.
- hooks.zapier.com, make.com және pipedream.net мекенжайлары танылады және платформа атауымен көрсетіледі; кез келген басқа https мекенжай кәдімгі вебхук болып саналады.
- Қолтаңба кілті POST жауабында бір рет қайтарылады; иесі оны панельде қайта көре алады.
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"]}'
Постбэктер
JSON вебхуктардың орнына query-string постбэктермен жұмыс істейтін платформалар үшін трекеріңіздің өз URL мекенжайына макростары толтырылған GET немесе POST сұрауы. Тапсырыс үшін {value} — шайпұлсыз тапсырыс құны, ал {order_id} — оның id-і.
https://tracker.example/postback
?cid={click_id}&event={event}&status={status}
&payout={value}&cur={currency}
Қолжетімді айнымалылар
{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}
Қателер
Әр қате JSON түрінде: { "error": "<code>", "message": "<human-readable>" }.
| Күйі | қате | Мағынасы |
|---|---|---|
| 401 | unauthorized |
Authorization тақырыбы жоқ немесе кілт жарамсыз не күші жойылған. |
| 403 | forbidden |
Тек оқуға арналған кілт жазу эндпоинтін шақырды (күйді өзгерту). |
| 404 | not_found |
Кілттің компаниясында мұндай id-і бар брондау жоқ. |
| 409 | conflict |
Күйді өзгерту үстелді немесе уақытты екі рет брондап қояр еді; ештеңе өзгертілмеді. |
| 422 | invalid_status |
Денедегі status мәні осы брондау түріне рұқсат етілген мәндердің бірі емес. |
| 422 | invalid_type |
Оқиғалар ағынындағы type ешбір оқиға түріне немесе тобына сәйкес келмейді. |
| 422 | invalid_url |
Жазылым URL мекенжайы ашық https мекенжайы емес. |
| 429 | rate_limited |
Бұл кілтпен бір минутта 50-ден астам сұрау жіберілді. Жылдамдықты азайтып, қайталап көріңіз. |
API, вебхуктар, автоматтандыру және чат интеграциялары әр модульге кіреді — қосымша ақысыз және бөлек әзірлеуші тарифінсіз.
Тегін сынақты бастау