დეველოპერის დოკუმენტაცია

TapTime REST API

წაიკითხეთ და განაახლეთ მაგიდის ჯავშნები და ვიზიტები, წაიკითხეთ შეკვეთები და ლოიალობის ბარათები, გამოკითხეთ მოვლენების დალაგებული ნაკადი და მიიღეთ ხელმოწერილი ვებჰუკები — თქვენი CRM-იდან, POS-იდან, მონაცემთა საცავიდან ან ავტომატიზაციის პლატფორმიდან. ეს გვერდი სრული ცნობარია; კონვერსიების თვალყურის სახელმძღვანელო კი ხსნის, რისთვის გამოგადგებათ.

საბაზისო URLhttps://api.tapti.me AuthBearer token ფორმატიJSON რატომ უნდა გამოიყენოთ

ყველა მოთხოვნას სჭირდება კომპანიის API გასაღები (პანელში: ინტეგრაციები → Webhooks & API), რომელიც უნდა გაიგზავნოს Authorization: Bearer tt_live_….-ის სახით. პასუხები და შეცდომები JSON ფორმატშია.

დადასტურებული ჯავშნები შეიცვალა თარიღის შემდეგ
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer tt_live_…"

ავთენტიფიკაცია

ყველა მოთხოვნა გადასცემს კომპანიის API გასაღებს, როგორც მფლობელის ტოკენს. შექმენით ერთი პანელიდან — ინტეგრაციები → ვებჰუკები და API → REST API გასაღებები — სადაც ის მხოლოდ ერთხელ ჩანს და ინახება მხოლოდ სერვერის მხარეს, როგორც SHA-256 ჰეში; დაკარგული გასაღები გაუქმდება და შეიცვლება და არა აღდგება. კომპანიას შეუძლია ჰქონდეს 10-მდე აქტიური გასაღები.

  • მხოლოდ წაკითხვის გასაღებებს შეუძლიათ ყველა GET ენდპოინტის გამოძახება, ასევე ვებჰუკების გამოწერა და გამოწერის გაუქმება — გამოწერა ვერაფერს გამოგიგზავნით ისეთს, რისი წაკითხვაც გასაღებს ისედაც არ შეეძლო.
  • წაკითხვა-ჩაწერის გასაღებებს ასევე შეუძლიათ ჯავშნის სტატუსის შეცვლა POST-მოთხოვნით; მხოლოდ წაკითხვის გასაღები ამ მარშრუტებზე 403 Forbidden-ს იღებს.
  • გასაღები ერთ კომპანიას ეკუთვნის — ყოველი სია და მოძიება უკვე მასზეა შეზღუდული, companyId პარამეტრი არ არსებობს.

სიჩქარის ლიმიტები

50 მოთხოვნა წუთში თითო გასაღებზე, მოცურავე ფანჯრით, ყველა ენდპოინტისთვის საერთო. გადაჭარბებისას ბრუნდება 429 Too Many Requests; დაელოდეთ და ხელახლა სცადეთ, ნაცვლად უფრო ხშირი გამოკითხვისა — ან გამოიწერეთ ვებჰუკი და გამოკითხვა საერთოდ შეწყვიტეთ.

საბოლოო წერტილები

GET /v1/company მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

მიიღეთ მიმდინარე კომპანია

კომპანია, რომელსაც გასაღები ეკუთვნის, და რა შეუძლია თავად გასაღებს.

GET /v1/company/reservations მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

ჯავშნების სია

ჯგუფისთვის მაგიდების დაჯავშნა, უძველესი დაწყების დროის მიხედვით — ან, როდესაც დაყენებულია updatedSince, უძველესი განახლების მიხედვით.

პარამეტრიTypeმნიშვნელობა
status string მძიმით გამოყოფილი: განსახილველი, დადასტურებული, დასწრებული, დასრულებული, არმომცხადებელი, გაუქმებული. გაუქმებული აერთიანებს გაუქმების ორივე მიზეზს.
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 მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

შეხვედრების სია

ჯავშნების მსგავსი ფორმა და ფილტრები შეხვედრების მოდულისთვის.

პარამეტრიTypeმნიშვნელობა
status string მძიმით გამოყოფილი: დასამტკიცებელი, დადასტურებული, დასრულებული, არ_მოსულა, გაუქმებული.
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} მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

დაჯავშნეთ

ერთი შენიშვნა, იმავე ფორმატში, როგორც webhooks-ს მოაქვს, თავისი მიკუთვნებით. 404, როდესაც id არ ეკუთვნის გასაღების კომპანიას.

GET /v1/company/appointments/{id} მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

ჩაეწერეთ ვიზიტზე

ერთი ჩანაწერი, იგივე ფორმა და წესები, რაც დაჯავშნის მოძიებისას.

POST /v1/company/reservations/{id}/status მხოლოდ წაკითხვა და ჩაწერა

ჯავშნის სტატუსის შეცვლა

დადასტურება, დასმა, დასრულება, არმოსვლის აღნიშვნა, გაუქმება ან ხელახლა გახსნა — იწვევს იმავე ვებჰუკებს და კონვერსიებს, როგორც დაფაზე შეცვლისას. JSON სხეული: {"status": "..."}.

პარამეტრიTypeმნიშვნელობა
status string, required ერთ-ერთი: განხილვის პროცესში, დადასტურებული, დასმული, დასრულებული, არმომცხადებელი, გაუქმებული (მიღებულია ასევე canceled და canceled_by_venue).
POST /v1/company/appointments/{id}/status მხოლოდ წაკითხვა და ჩაწერა

შეხვედრის სტატუსის შეცვლა

იგივე, რაც დაჯავშნის ბოლო წერტილი, დასმული მდგომარეობის გარეშე.

პარამეტრიTypeმნიშვნელობა
status string, required ერთ-ერთი: მიმდინარე, დადასტურებული, დასრულებული, არმომცხადებელი, გაუქმებული (ასევე მიიღება გაუქმებული და ობიექტის_მიერ_გაუქმებული).
GET /v1/company/events მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

მოვლენების ნაკადის გამოკითხვა

ყოველი ჯავშნის, შეკვეთისა და ლოიალობის მოვლენა, უძველესიდან დაწყებული — იგივე ნაკადი, საიდანაც ვებჰუკები იგზავნება. გადაეცით ბოლო ნანახი კურსორი after-ად, რომ მხოლოდ ახალი მიიღოთ, და type, რომ მხოლოდ გარკვეული სახეობის მოვლენები მიიღოთ.

პარამეტრიTypeმნიშვნელობა
after integer cursor ბოლო დამუშავებული მოვლენის კურსორი. გამოტოვეთ, რომ თავიდან დაიწყოთ.
type string მძიმით გამოყოფილი მოვლენის ტიპები ან ოჯახები: booking.confirmed,order.placed, ან order, loyalty.*. გამოტოვეთ ყველა მოვლენისთვის.
limit integer გვერდის ზომა, 1–100. ნაგულისხმევი 50.
GET /v1/company/orders მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

შეკვეთების სია

სტუმრების მაგიდის, თან წასაღები და მიტანის შეკვეთები და სალაროში გატარებული ყოველი გაყიდვა, უძველესიდან დაწყებული — ან, თუ paidSince მითითებულია, გადახდის რიგით. შეკვეთა, რომელიც ჯერ კიდევ წინასწარ გადახდას ელოდება, სიაში არ შედის.

პარამეტრიTypeმნიშვნელობა
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 სტატუსით აქვს და მის გვერდით ახალი აქტიური ბარათი; customer.id წევრის ID-ა.

პარამეტრიTypeმნიშვნელობა
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 მხოლოდ წასაკითხად ან წასაკითხად და ჩასაწერად

ლოიალობის ჯილდოების სია

ბარათის შევსებით მოპოვებული ჯილდოები — კოდით, მოქმედების ვადითა და იმის მითითებით, გამოყენებულია თუ არა.

პარამეტრიTypeმნიშვნელობა
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": "…"} ფორმატიც მიიღება.

პარამეტრიTypeმნიშვნელობა
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 და ცხრილი დაჯავშნისთვის, სერვისი და სპეციალისტი ვიზიტისთვის. ეს ზუსტად ისაა, რასაც webhook-ი აწვდის, ამიტომ მიმღები, რომელიც ერთს მართავს, მეორესაც მართავს.

მიიღეთ /v1/company/reservations/4821 → მონაცემები
{
  "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. შეინახეთ ყველაზე მაღალი დამუშავებული cursor და გადაეცით ის 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_…"

ვებჰუკები

შექმენით ენდპოინტი განყოფილებაში ინტეგრაციები → Webhooks & API — ან დააკავშირეთ Zapier, Make, n8n ან Pipedream განყოფილებაში ინტეგრაციები → ავტომატიზაცია — და TapTime ხელმოწერილ JSON მოვლენას POST-ით გამოგიგზავნით იმ წამს, როცა ჯავშანი, შეკვეთა ან ლოიალობის ბარათი შეიცვლება. მოვლენებს თითოეული ენდპოინტისთვის თავად ირჩევთ. კომპანიას შეიძლება ჰქონდეს ჯამში 50-მდე ვებჰუკი, პოსტბექი, ჩატი და ავტომატიზაციის კავშირი.

სათაურიმნიშვნელობა
TapTime-Eventღონისძიების ტიპი, მაგ. booking.confirmed.
TapTime-Event-Idღონისძიების სტაბილური იდენტიფიკატორი — გამოიყენეთ მისი გამეორებული მიწოდების დედუპლიკაციისთვის.
TapTime-Deliveryამ კონკრეტული მიწოდების მცდელობის იდენტიფიკატორი.
TapTime-Signaturet=<unix time>,v1=<hex HMAC-SHA256 of "t.rawBody">, დამოწმებული სათავისო საიდუმლო გასაღებით.
  • ნებისმიერი 2xx პასუხი მიჩნეულია მიწოდებულად; არ-2xx პასუხი ან დროის ამოწურვა ხელახლა განიხილება გაზრდილი ინტერვალებით (1 წთ, 5 წთ, 15 წთ, 1 სთ, 3 სთ, 6 სთ, 12 სთ) 8 მცდელობამდე — 410-ის შემთხვევაში ხელახალი მცდელობა შეწყდება.
  • გადამისამართებები არ სრულდება.
  • პროდუქციაში URL მისამართი უნდა იყოს HTTPS და არ უნდა მიუთითებდეს კერძო ან ლუპბექ მისამართზე.
  • მიწოდება სულ მცირე ერთხელ ხდება: ყოველთვის შეამოწმეთ ხელმოწერა და გააუქმეთ TapTime-Event-Id-ზე დუბლიკატი.
პოსტი · 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));

ვებჰუკების გამოწერები

ავტომატიზაციის პლატფორმები ტრიგერებს API-ით რთავენ და თიშავენ, ნაცვლად იმისა, რომ მომხმარებელს URL-ის ჩასმა სთხოვონ („REST hooks“): გააგზავნეთ POST-ით პლატფორმის საკუთარი URL სასურველ მოვლენებთან ერთად, შეინახეთ დაბრუნებული 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"]}'

პოსტბექები

GET ან POST მოთხოვნა თქვენი ტრეკერის საკუთარ URL-ზე შევსებული მაკროებით — იმ პლატფორმებისთვის, რომლებიც JSON ვებჰუკების ნაცვლად query-string პოსტბექებს იყენებენ. შეკვეთისთვის {value} შეკვეთის ღირებულებაა ჩაის ფულის გარეშე, {order_id} კი — მისი id.

Postback 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>" }.

Statusშეცდომამნიშვნელობა
401 unauthorized ავტორიზაციის ჰედერი არ არის, ან გასაღები არამართებულია ან გაუქმებულია.
403 forbidden მხოლოდ წაკითხვის გასაღები, რომელსაც წერის სამიზნე (სტატუსის ცვლილება) ეწოდება.
404 not_found იმ ID-ით არცერთი ჯავშანი არ ეკუთვნის გასაღების კომპანიას.
409 conflict სტატუსის ცვლილება მაგიდას ან სლოტს ორმაგად დაჯავშნიდა; არაფერი შეცვლილა.
422 invalid_status სტატუსის ველის მნიშვნელობა არ არის ამ დაჯავშნის ტიპისთვის დაშვებულ მნიშვნელობებს შორის.
422 invalid_type მოვლენების ნაკადის type პარამეტრი არცერთ მოვლენის ტიპს ან ოჯახს არ ასახელებს.
422 invalid_url გამოწერის URL არ არის საჯარო https მისამართი.
429 rate_limited ამ გასაღებისთვის წუთში 50-ზე მეტი მოთხოვნა. შეანელეთ და ხელახლა სცადეთ.
გჭირდება გასაღები?

API-ზე წვდომა, ვებჰუკები და ავტომატიზაციისა და ჩატის ინტეგრაციები ყველა მოდულში შედის — დამატებითი საფასურისა და ცალკე დეველოპერის გეგმის გარეშე.

დაიწყეთ უფასო საცდელი პერიოდი