Әзірлеушілерге арналған құжаттама

TapTime REST API

Үстел брондаулары мен жазылуларды оқып, жаңартыңыз, тапсырыстар мен адалдық карталарын оқыңыз, реттелген оқиғалар ағынын сұраңыз және қолтаңбасы бар вебхуктарды қабылдаңыз — өз CRM, POS жүйеңізден, деректер қоймаңыздан немесе автоматтандыру платформасынан. Бұл бет — толық анықтама; оны не үшін қолдану керегін конверсияны бақылау жөніндегі нұсқаулық түсіндіреді.

Негізгі URLhttps://api.tapti.me АвторизацияBearer token ФорматJSON Не үшін керек

Әр сұрауға 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 қайтарылады; жиірек сұраудың орнына біраз күтіп, қайталап көріңіз — немесе вебхукқа жазылып, сұрауды мүлде тоқтатыңыз.

Эндпоинттар

GET /v1/company Тек оқу немесе оқу және жазу

Ағымдағы компанияны алу

Кілт тиесілі компания және кілттің өзі не істей алатыны.

GET /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.
GET /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.
GET /v1/company/reservations/{id} Тек оқу немесе оқу және жазу

Бір үстел брондауын алу

Бір үстел брондауы — вебхуктар жеткізетін пішінде, атрибуциясымен бірге. id кілттің компаниясына тиесілі болмаса, 404.

GET /v1/company/appointments/{id} Тек оқу немесе оқу және жазу

Бір жазылуды алу

Бір жазылу — үстел брондауымен бірдей пішін мен ережелер.

POST /v1/company/reservations/{id}/status Тек оқу және жазу

Үстел брондауының күйін өзгерту

Растау, үстелге отырғызу, аяқтау, «келмеді» деп белгілеу, болдырмау немесе қайта ашу — тақтада өзгерткендегідей вебхуктар мен конверсияларды іске қосады. JSON денесі: {"status": "..."}.

ПараметрТүріМағынасы
status string, required Мыналардың бірі: pending, confirmed, seated, completed, no_show, cancelled (canceled және canceled_by_venue да қабылданады).
POST /v1/company/appointments/{id}/status Тек оқу және жазу

Жазылу күйін өзгерту

Үстел брондауының эндпоинтімен бірдей, тек seated күйі жоқ.

ПараметрТүріМағынасы
status string, required Мыналардың бірі: pending, confirmed, completed, no_show, cancelled (canceled және canceled_by_venue да қабылданады).
GET /v1/company/events Тек оқу немесе оқу және жазу

Оқиғалар ағынын сұрау

Барлық брондау, тапсырыс және адалдық оқиғалары, ең ескісінен бастап — вебхуктар да дәл осы ағыннан алынады. Тек жаңаларын алу үшін соңғы көрген курсорыңызды after ретінде, тек кейбір түрлерін алу үшін type параметрін жіберіңіз.

ПараметрТүріМағынасы
after integer cursor Соңғы өңделген оқиғаңыздың курсоры. Басынан бастау үшін көрсетпеңіз.
type string Үтірмен бөлінген оқиға түрлері немесе топтары: booking.confirmed,order.placed немесе order, loyalty.*. Барлық оқиға үшін көрсетпеңіз.
limit integer Бет өлшемі, 1–100. Әдепкі мәні 50.
GET /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.
GET /v1/company/orders/{id} Тек оқу немесе оқу және жазу

Бір тапсырысты алу

Бір тапсырыс — позицияларымен, сомаларымен және атрибуциясымен, тапсырыс вебхуктары жеткізетін пішінде.

GET /v1/company/loyalty/programs Тек оқу немесе оқу және жазу

Адалдық бағдарламаларының тізімі

Барлық мөр картасы бағдарламалары: атауы, күйі, қажетті мөрлер саны, сыйақы және ол қай жерде қолданылатыны.

GET /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.
GET /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.
GET /v1/company/webhooks Тек оқу немесе оқу және жазу

Вебхук жазылымдарының тізімі

Осы кілт жасаған жазылымдар. Панельде қосылған вебхуктар мұнда көрсетілмейді.

POST /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 Панельде көрсетілетін атау. Әдепкі бойынша платформа мен кілттің атауы.
DELETE /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. Бұл дәл вебхук жеткізетін дерек, сондықтан біреуін өңдей алатын қабылдағыш екеуін де өңдейді.

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

Тапсырыс объектісі

Тапсырыс қай жерде кездессе де — 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. Ақша сомалары әрдайым ұсақ бірліктермен (тиынмен) беріледі.

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

Адалдық объектісі

Әр адалдық оқиғасы, картасы және сыйақысы бір пішінге ие: 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-мен жіберіледі.

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

Оқиғалар ағыны

Әр жол: { 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-Signaturet=<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 бойынша сүзіңіз.
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", "…": "…" } }
}
Қолтаңбаны тексеру (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));

Вебхук жазылымдары

Автоматтандыру платформалары пайдаланушыдан URL қоюды сұраудың орнына триггерлерді API арқылы қосып-өшіреді («REST hooks»): платформаның өз URL мекенжайын қажетті оқиғалармен POST етіңіз, қайтарылған id-ді сақтаңыз және триггер өшірілгенде оны DELETE етіңіз. Жазылым — қолтаңбасы бар кәдімгі вебхук: ол панельде өзін жасаған кілттің белгісімен көрінеді.

  • Кілт тек өзі жасаған жазылымдарды көріп, өшіре алады; кілттің күші жойылса, олардың бәрі өшіріледі.
  • hooks.zapier.com, make.com және pipedream.net мекенжайлары танылады және платформа атауымен көрсетіледі; кез келген басқа https мекенжай кәдімгі вебхук болып саналады.
  • Қолтаңба кілті POST жауабында бір рет қайтарылады; иесі оны панельде қайта көре алады.
URL мекенжайын жаңа тапсырыстарға жазу
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-і.

Айнымалылары бар постбэк URL · GET немесе POST
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, вебхуктар, автоматтандыру және чат интеграциялары әр модульге кіреді — қосымша ақысыз және бөлек әзірлеуші тарифінсіз.

Тегін сынақты бастау