DZ Burger API
The backend for the DZ Burger apps: menu, checkout, Coffee Club, special occasions,
delivery tracking and notifications. 74 endpoints.
This page is a reference only. It can't sign in or send requests: the browser blocks every network request from it.
- Base URL
https://api.dzburger.fortranpay.com: HTTPS only. WebSockets use wss://.
- Format
- JSON request and response bodies (
Content-Type: application/json), except the OAuth endpoints, which take form-encoded bodies.
- Language
- Send
Accept-Language: tk, ru or en. Menu texts, labels, notifications and error messages follow it. Default: English.
- Money
- Integers in minor units (teňňe):
8200 = 82 TMT. Fields end in _minor; most responses add a formatted *_text. There is no tax.
- Time
- Timestamps are RFC 3339 (
2026-10-17T02:35:09Z). Dates are YYYY-MM-DD in Turkmenistan time (UTC+5): birthdays, bookings, daily drinks, opening hours.
- IDs
- UUIDs, except readable slugs for stores, categories, menu items and options (
double-dz-smash, extra_patty).
- Pagination
- Lists that can grow return
next_cursor; pass it as before for the next page. Empty means the last page.
- Idempotency
POST /v1/orders accepts an Idempotency-Key header so retries never charge twice.
- Request ID
- Every response has an
X-Request-ID header; errors repeat it as request_id. Quote it when reporting a problem.
- Rate limits
- 20 requests/s per IP (bursts of 40); sign-in and sign-up endpoints 20 per minute. Over the limit:
429 with Retry-After.
Authentication
The API uses OAuth 2.0 with opaque bearer tokens. A token is a random string with nothing inside it:
the server looks it up on every request, so signing out, changing the password, deleting the account or a stolen refresh token cuts access immediately.
- Sign in with email and password, Google or Apple, or create an account. You get an
access_token (dza_…, 1 hour) and a refresh_token (dzr_…, 60 days).
- Call the API with
Authorization: Bearer dza_….
- On
401 invalid_token, refresh once with the refresh token and retry. Save the new refresh token: each one works only once. If refreshing fails with invalid_grant, show the sign-in screen.
- Sign out by revoking the refresh token.
Store tokens in the iOS Keychain / Android Keystore. Never refresh concurrently: queue requests while one refresh is in flight.
Clients
Each app sends its client_id: dz-ios, dz-android, dz-web, dz-staff, dz-courier. A refresh token only works with the client it was issued to.
Scopes and roles
| Scope | Allows | Granted to roles |
app | Customer endpoints | everyone |
staff | /v1/staff/*, /v1/admin/menu/* | staff, admin |
courier | /v1/courier/* | courier, admin |
admin | /v1/admin/users/*, creating menu items | admin |
Without a scope parameter a sign-in gets every scope its role allows. The customer app can ask for scope=app so a staff member's phone can't reach staff endpoints from it.
Endpoints check the scope (403 insufficient_scope) and the user's current role (403 forbidden).
When the server is unreachable
If the sign-in service is briefly down, authenticated calls return 503 unavailable, never 401. Keep the tokens and retry; don't sign the user out.
Errors
Errors use HTTP status codes and a JSON body with a stable code for the app's logic and a message ready to show the user, in the request language.
details carries the values inserted into the message, e.g. which item is sold out.
{
"error": {
"code": "item_unavailable",
"message": "«Double DZ Smash» häzir elýeterli däl.",
"details": { "item": "Double DZ Smash" },
"request_id": "3ba91b2bc8d85d3f"
}
}
The OAuth endpoints (/oauth/*) answer errors in the OAuth format instead:
{ "error": "invalid_grant", "error_description": "E-poçta ýa-da açar söz nädogry." }
| Status | Meaning |
| 400 | Malformed request (bad JSON) or rejected value (OAuth: invalid_grant, …) |
| 401 | Not signed in, or token invalid / expired / revoked |
| 402 | Payment failed at the bank |
| 403 | Signed in, but not allowed |
| 404 | Doesn't exist, or isn't yours |
| 409 | Conflicts with the current state (sold out, already used, wrong order status…) |
| 422 | A field is invalid; details.field names it for validation |
| 429 | Rate limited; see Retry-After |
| 5xx | Server or dependency problem; safe to retry later |
All error codes
Messages shown in : switch language in the top bar. {placeholders} are filled from details.
| Code | Message |
bad_request | The request is invalid.Некорректный запрос.Haýyş nädogry. |
birthdate_locked | Birthdate can only be set once. Contact us to change it.Дату рождения можно указать только один раз. Для изменения свяжитесь с нами.Doglan senäni diňe bir gezek girizip bolýar. Üýtgetmek üçin biziň bilen habarlaşyň. |
birthday_perk_unavailable | The free birthday cake is available around your birthday.Бесплатный торт доступен в дни вашего дня рождения.Mugt tort doglan günüňiziň töwereginde elýeterli. |
birthday_perk_used | You've already enjoyed this year's birthday cake.Вы уже получили торт в этом году.Bu ýylky doglan gün tortuňyzy eýýäm aldyňyz. |
booking_not_editable | This booking can no longer be changed.Это бронирование уже нельзя изменить.Bu brony indi üýtgedip bolmaýar. |
booking_too_far | Bookings open {days} days ahead.Бронирование доступно на {days} дней вперёд.Bron {days} gün öňünden açylýar. |
booking_too_soon | Please book at least {hours} hours before the event.Бронируйте не позднее чем за {hours} ч до события.Çäräden azyndan {hours} sagat öň bron ediň. |
card_exists | This card is already saved.Эта карта уже сохранена.Bu kart eýýäm ýatda saklanan. |
card_expired | This card has expired.Срок действия карты истёк.Kartyň möhleti geçdi. |
conflict | This action conflicts with the current state.Действие невозможно в текущем состоянии.Bu amal häzirki ýagdaýda mümkin däl. |
delivery_taken | Another courier has already taken this delivery.Эту доставку уже взял другой курьер.Bu eltip bermäni başga kurýer aldy. |
drink_already_used | {drink} has already been used today.«{drink}» сегодня уже использован.«{drink}» şu gün eýýäm ulanyldy. |
drink_not_in_plan | {drink} isn't included in this plan.«{drink}» не входит в этот тариф.«{drink}» bu meýilnama girmeýär. |
email_taken | An account with this email already exists.Аккаунт с таким email уже существует.Bu e-poçta bilen hasap eýýäm bar. |
forbidden | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
insufficient_funds | There are not enough funds on the card.Недостаточно средств на карте.Kartda serişde ýeterlik däl. |
insufficient_scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
internal | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
invalid_birthdate | Enter a valid birthdate.Введите корректную дату рождения.Dogry doglan senäni giriziň. |
invalid_birthday_code | This code is invalid, expired, or already used.Этот код недействителен, истёк или уже использован.Bu kod nädogry, möhleti geçen ýa-da eýýäm ulanylan. |
invalid_card_number | Check the card number.Проверьте номер карты.Kartyň belgisini barlaň. |
invalid_client | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
invalid_credentials | Wrong email or password.Неверный email или пароль.E-poçta ýa-da açar söz nädogry. |
invalid_cvv | Check the CVV code.Проверьте CVV-код.CVV kody barlaň. |
invalid_email | Enter a valid email address.Введите корректный email.Dogry e-poçta salgysyny giriziň. |
invalid_modifiers | Please check the options for {item}.Проверьте опции для «{item}».«{item}» üçin goşmaçalary barlaň. |
invalid_phone | Enter a valid phone number.Введите корректный номер телефона.Dogry telefon belgisini giriziň. |
invalid_qr | The QR code is invalid or expired. Ask the guest to refresh it.QR-код недействителен или истёк. Попросите гостя обновить его.QR kod nädogry ýa-da möhleti geçen. Myhmandan ony täzelemegini haýyş ediň. |
invalid_reset_code | The code is invalid or has expired.Код неверный или истёк.Kod nädogry ýa-da möhleti geçen. |
invalid_scope | The requested access is not allowed for this account.Запрошенный доступ не разрешён для этого аккаунта.Soralan rugsat bu hasap üçin berilmeýär. |
invalid_social_token | Could not verify your {provider} sign-in.Не удалось подтвердить вход через {provider}.{provider} arkaly girişi tassyklap bolmady. |
invalid_status_transition | The order can't go from {from} to {to}.Нельзя перевести заказ из «{from}» в «{to}».Sargydy «{from}» ýagdaýyndan «{to}» ýagdaýyna geçirip bolmaýar. |
invalid_token | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
item_unavailable | {item} is not available right now.«{item}» сейчас недоступен.«{item}» häzir elýeterli däl. |
min_delivery_order | Minimum order for delivery is {amount}.Минимальная сумма заказа для доставки — {amount}.Eltip bermek üçin iň az sargyt {amount}. |
no_subscription | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
not_found | Not found.Не найдено.Tapylmady. |
order_not_cancellable | This order can no longer be cancelled.Этот заказ уже нельзя отменить.Bu sargydy indi ýatyryp bolmaýar. |
out_of_delivery_zone | This address is outside our delivery area.Адрес вне зоны доставки.Bu salgy eltip bermek zolagymyzdan daşarda. |
password_too_long | Password is too long.Пароль слишком длинный.Açar söz gaty uzyn. |
password_too_short | Password must be at least 8 characters.Пароль должен содержать не менее 8 символов.Açar söz azyndan 8 nyşandan ybarat bolmaly. |
payment_declined | The bank declined the payment.Банк отклонил платёж.Bank tölegi kabul etmedi. |
payment_method_not_allowed | This payment method isn't available for this order.Этот способ оплаты недоступен для заказа.Bu töleg usuly bu sargyt üçin elýeterli däl. |
provider_disabled | {provider} sign-in is not available.Вход через {provider} недоступен.{provider} arkaly giriş elýeterli däl. |
rate_limited | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
receipt_unavailable | The receipt will be available once the order is paid.Чек будет доступен после оплаты заказа.Çek sargyt tölenenden soň elýeterli bolar. |
request_pending | This request is already being processed.Этот запрос уже обрабатывается.Bu haýyş eýýäm işlenýär. |
slot_unavailable | This time is fully booked. Please choose another.Это время уже занято. Выберите другое.Bu wagt doly bron edildi. Başga wagt saýlaň. |
store_closed | This restaurant is closed right now.Ресторан сейчас закрыт.Restoran häzir ýapyk. |
subscription_exists | You already have an active subscription.У вас уже есть активная подписка.Siziň işjeň abunaňyz eýýäm bar. |
too_many_guests | Up to {max} guests per booking.Не более {max} гостей на бронирование.Bir bron üçin iň köp {max} myhman. |
unauthorized | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
unavailable | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
unsupported_grant_type | This sign-in method is not supported.Этот способ входа не поддерживается.Bu giriş usuly goldanmaýar. |
validation | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
wrong_password | Current password is incorrect.Текущий пароль неверный.Häzirki açar söz nädogry. |
Realtime
Live delivery tracking: WebSocket
wss://…/v1/deliveries/order/{orderID}/live with the bearer token (or ?access_token= where headers can't be set). Messages are JSON text frames:
type | When | Fields |
snapshot | First message | Same as the tracking snapshot: status, ETA, courier position, route path |
location | Every few seconds while the courier moves | lat, lng, heading, status, eta_at, at |
status | assigned, picked_up, delivered, cancelled | status, eta_at, at |
The server pings every 25 s and closes normally after delivered or cancelled. Reconnect with backoff on other closes; the snapshot catches you up. Draw with Apple MapKit on iOS and Mapbox/Google Maps on Android (WGS84).
In-app notifications: Server-Sent Events
GET /v1/notifications/stream while the app is open; push notifications cover the background.
Push notifications
Register the device token with POST /v1/devices after sign-in and remove it on sign-out. Pushes carry data deep links, e.g. {"screen": "order_tracking", "order_id": "…"}; screens: order, order_tracking, occasion, coffee_club, birthday_celebration.
Birthday screen (BDUI)
GET /v1/me/birthday/celebration returns the screen as data so it can change without an app release.
Render components top to bottom with theme colours; skip unknown component types. cache_seconds says how long the screen may be reused.
| Component | Props |
confetti | colors[], intensity (high/low), repeat |
animation | asset (bundled animation name: birthday_cake, gift_box), loop, height |
title | text, style (display/headline) |
text | text, style |
perk_card | icon, title, subtitle, status, valid_until |
countdown | target_date, days |
date_picker | max, required; its id is the field name for submit |
button | text, style (primary/secondary) + action |
Actions: navigate (route + params, e.g. route menu with apply_birthday_cake=true), submit (send fields to method endpoint, then run then), reload.
States: available, redeemed, upcoming, no_birthdate.
Sign-in (OAuth 2.0)
Identity is an OAuth 2.0 authorization server. The apps are public clients:
they send their client_id and have no secret. Token endpoints take
application/x-www-form-urlencoded bodies (JSON is accepted too) and answer errors in the
OAuth format, {"error": "...", "error_description": "..."}. See Authentication
for the full flow.
POST
/oauth/token
OAuth client
Sign in with email and password
Resource-owner password grant (RFC 6749 §4.3), for the first-party apps only.
Body (application/x-www-form-urlencoded)
grant_typerequiredstring |
password |
usernamerequiredstring |
Email address (case-insensitive) |
passwordrequiredstring |
Password |
client_idrequiredstring |
dz-ios, dz-android, dz-web, dz-staff or dz-courier |
scopestring |
Space-separated subset of app staff courier admin. Omit to get everything the account's role allows. |
Request
POST /oauth/token HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=aylar%40example.com&password=supersecret&client_id=dz-ios
Responses
200 OK Signed in
{
"access_token": "dza_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"scope": "app",
"is_new_user": false,
"user": {
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": null,
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
}
Fields
access_tokenstring |
Opaque bearer token, dza_ + 43 characters. Send as Authorization: Bearer …. |
token_typestring |
Always Bearer |
expires_ininteger |
Seconds until the access token expires (default 3600) |
refresh_tokenstring |
Opaque, dzr_…, valid 60 days, rotates on every use. Store securely (Keychain / Keystore). |
scopestring |
Granted scopes, space-separated |
is_new_userboolean |
True when this call created the account |
userobject |
The signed-in user (same as GET /v1/me) |
Errors
| Status | Code | When | Message |
| 400 |
invalid_grant |
Wrong email or password, or the account has no password (signed up with Google/Apple) | Wrong email or password.Неверный email или пароль.E-poçta ýa-da açar söz nädogry. |
| 400 |
invalid_scope |
Asked for a scope the account's role doesn't allow | The requested access is not allowed for this account.Запрошенный доступ не разрешён для этого аккаунта.Soralan rugsat bu hasap üçin berilmeýär. |
| 400 |
invalid_request |
grant_type missing | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 400 |
unsupported_grant_type |
Unknown grant_type | This sign-in method is not supported.Этот способ входа не поддерживается.Bu giriş usuly goldanmaýar. |
| 401 |
invalid_client |
Unknown client_id | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/oauth/token
OAuth client
Refresh the access token
Refresh-token grant (RFC 6749 §6). Every refresh returns a new refresh token;
store it and discard the old one. Reusing an old refresh token more than 30 seconds after it was
replaced is treated as theft and signs that session out everywhere. A refresh token only works
with the client_id it was issued to.
Body (application/x-www-form-urlencoded)
grant_typerequiredstring |
refresh_token |
refresh_tokenrequiredstring |
The latest refresh token (dzr_…) |
client_idrequiredstring |
Same client the token was issued to |
Request
POST /oauth/token HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS&client_id=dz-ios
Responses
200 OK New token pair
{
"access_token": "dza_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"scope": "app",
"is_new_user": false,
"user": {
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": null,
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
}
Errors
| Status | Code | When | Message |
| 400 |
invalid_grant |
Refresh token unknown, expired, revoked, reused, or from another client: sign in again | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 401 |
invalid_client |
Unknown client_id | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/oauth/token
OAuth client
Sign in with Google or Apple
Token exchange (RFC 8693). The app signs the user in with the native Google Sign-In or
Sign in with Apple SDK and sends the resulting ID token; the server verifies it with
Google/Apple and returns DZ tokens. The provider is recognised from the token. An existing account
with the same verified email is linked automatically; otherwise an account is created
(is_new_user: true).
Body (application/x-www-form-urlencoded)
grant_typerequiredstring |
urn:ietf:params:oauth:grant-type:token-exchange |
subject_tokenrequiredstring |
ID token from the Google or Apple SDK |
subject_token_typerequiredstring |
urn:ietf:params:oauth:token-type:id_token |
client_idrequiredstring |
App client ID |
noncestring |
The raw nonce the app passed to the SDK, if any; checked against the token |
full_namestring |
Apple shares the user's name only on the very first sign-in; send it then |
langstring |
tk, ru or en for a new account (default: Accept-Language) |
scopestring |
As for the password grant |
Request
POST /oauth/token HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&subject_token=eyJhbGciOiJSUzI1NiIs...&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aid_token&client_id=dz-ios&full_name=Aylar%20Annayeva
Responses
200 OK Signed in (new or existing account)
{
"access_token": "dza_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"scope": "app",
"is_new_user": true,
"user": {
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": null,
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
}
Errors
| Status | Code | When | Message |
| 400 |
invalid_grant |
Token invalid, expired, for another app, or nonce mismatch | Could not verify your {provider} sign-in.Не удалось подтвердить вход через {provider}.{provider} arkaly girişi tassyklap bolmady. |
| 400 |
invalid_grant |
That provider isn't configured on the server | {provider} sign-in is not available.Вход через {provider} недоступен.{provider} arkaly giriş elýeterli däl. |
| 400 |
invalid_request |
Wrong subject_token_type | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 401 |
invalid_client |
Unknown client_id | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
| 409 |
invalid_request |
The provider's (unverified) email belongs to another account | An account with this email already exists.Аккаунт с таким email уже существует.Bu e-poçta bilen hasap eýýäm bar. |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/oauth/revoke
OAuth client
Sign out (revoke a token)
Token revocation (RFC 7009). Revoke the refresh token to sign out: the
whole session ends and its access tokens stop working immediately. Revoking an access token
invalidates only that token. The response is always 200, even for unknown tokens.
Body (application/x-www-form-urlencoded)
tokenrequiredstring |
Refresh token (dzr_…) or access token (dza_…) |
client_idrequiredstring |
Client the token was issued to |
token_type_hintstring |
Ignored; the type is known from the prefix |
Request
POST /oauth/revoke HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/x-www-form-urlencoded
token=dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS&client_id=dz-ios
Responses
200 OK Revoked (or nothing to revoke). Empty body.
Errors
| Status | Code | When | Message |
| 401 |
invalid_client |
Unknown client_id | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/.well-known/oauth-authorization-server
Public
Authorization server metadata
RFC 8414 metadata: endpoints, supported grants and scopes.
Request
GET /.well-known/oauth-authorization-server HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Responses
200 OK Metadata
{
"grant_types_supported": [
"password",
"refresh_token",
"urn:ietf:params:oauth:grant-type:token-exchange"
],
"issuer": "https://api.dzburger.fortranpay.com",
"response_types_supported": [],
"revocation_endpoint": "https://api.dzburger.fortranpay.com/oauth/revoke",
"revocation_endpoint_auth_methods_supported": [
"none"
],
"scopes_supported": [
"app",
"staff",
"courier"
],
"token_endpoint": "https://api.dzburger.fortranpay.com/oauth/token",
"token_endpoint_auth_methods_supported": [
"none"
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/auth/register
OAuth client
Create an account
Creates an email/password account and signs it in: the response is a token response, like /oauth/token. Errors use the regular API format.
Body (application/json)
client_idrequiredstring |
App client ID |
emailrequiredstring |
Valid email, unique |
passwordrequiredstring |
At least 8 characters, at most 72 bytes. Stored as a bcrypt hash. |
full_namerequiredstring |
1–100 characters |
phonestring |
8–15 digits, optional leading +; spaces, dashes and brackets are removed |
birthdatestring (date) |
YYYY-MM-DD. Unlocks the free birthday cake; can be set only once. |
langstring |
tk, ru or en (default: Accept-Language) |
scopestring |
As for the password grant |
Request
POST /v1/auth/register HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/json
{
"client_id": "dz-ios",
"email": "aylar@example.com",
"password": "supersecret",
"full_name": "Aylar Annayeva",
"phone": "+993 61 23-45-12",
"birthdate": "1999-11-03",
"lang": "tk"
}
Responses
201 Created Account created and signed in
{
"access_token": "dza_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"scope": "app",
"is_new_user": true,
"user": {
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": null,
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
}
Errors
| Status | Code | When | Message |
| 400 |
invalid_scope |
Scope not allowed for a new customer | The requested access is not allowed for this account.Запрошенный доступ не разрешён для этого аккаунта.Soralan rugsat bu hasap üçin berilmeýär. |
| 401 |
invalid_client |
Missing or unknown client_id | Unknown app. Please update the app.Неизвестное приложение. Обновите приложение.Näbelli programma. Programmany täzeläň. |
| 409 |
email_taken |
Email already registered | An account with this email already exists.Аккаунт с таким email уже существует.Bu e-poçta bilen hasap eýýäm bar. |
| 422 |
invalid_email |
Not a valid email | Enter a valid email address.Введите корректный email.Dogry e-poçta salgysyny giriziň. |
| 422 |
password_too_short |
Fewer than 8 characters | Password must be at least 8 characters.Пароль должен содержать не менее 8 символов.Açar söz azyndan 8 nyşandan ybarat bolmaly. |
| 422 |
password_too_long |
More than 72 bytes | Password is too long.Пароль слишком длинный.Açar söz gaty uzyn. |
| 422 |
validation |
full_name empty or too long | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 422 |
invalid_phone |
Phone not in the accepted format | Enter a valid phone number.Введите корректный номер телефона.Dogry telefon belgisini giriziň. |
| 422 |
invalid_birthdate |
Not a date, in the future, or more than 120 years ago | Enter a valid birthdate.Введите корректную дату рождения.Dogry doglan senäni giriziň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/auth/password/forgot
Public
Email a password reset code
Emails a 6-digit code valid for 15 minutes (stored as a bcrypt hash). The response is the
same whether or not the email is registered. A new code is sent at most once a minute.
Body (application/json)
emailrequiredstring |
Account email |
Request
POST /v1/auth/password/forgot HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/json
{
"email": "aylar@example.com"
}
Responses
202 Accepted Accepted
{
"status": "sent"
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/auth/password/reset
Public
Set a new password with the code
Checks the code (5 attempts), sets the new password, verifies the email and signs out every session. Then sign in with the new password.
Body (application/json)
emailrequiredstring |
Account email |
coderequiredstring |
6-digit code from the email |
new_passwordrequiredstring |
At least 8 characters |
Request
POST /v1/auth/password/reset HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Content-Type: application/json
{
"email": "aylar@example.com",
"code": "482913",
"new_password": "a-new-secret"
}
Responses
204 No Content Password changed
Errors
| Status | Code | When | Message |
| 400 |
invalid_reset_code |
Wrong, expired or too many attempts | The code is invalid or has expired.Код неверный или истёк.Kod nädogry ýa-da möhleti geçen. |
| 422 |
password_too_short |
Fewer than 8 characters | Password must be at least 8 characters.Пароль должен содержать не менее 8 символов.Açar söz azyndan 8 nyşandan ybarat bolmaly. |
| 422 |
password_too_long |
More than 72 bytes | Password is too long.Пароль слишком длинный.Açar söz gaty uzyn. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Profile
The signed-in user's account, addresses and birthday.
GET
/v1/me
Bearer token · scope app
Get my profile
Request
GET /v1/me HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Profile
{
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": "2000-10-19",
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
Fields
idstring (uuid) |
|
emailstring |
Empty for Apple accounts with a hidden email |
email_verifiedboolean |
|
full_namestring |
|
phonestring |
Normalised, e.g. +99361234512 |
birthdatestring (date) | null |
|
langstring |
tk, ru or en |
rolestring |
customer, staff, courier or admin |
has_passwordboolean |
False for Google/Apple-only accounts (they can set one with PUT /v1/me/password) |
providersstring[] |
password, google, apple |
created_atstring (date-time) |
|
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
PATCH
/v1/me
Bearer token · scope app
Update my profile
Send only the fields to change. lang also sets the language of push
notifications and emails. birthdate can be set once (it unlocks the free cake); changing it
later requires contacting the restaurant.
Body (application/json)
full_namestring |
1–100 characters |
phonestring |
8–15 digits; empty string removes it |
langstring |
tk, ru, en |
birthdatestring (date) |
YYYY-MM-DD, only if not set yet |
Request
PATCH /v1/me HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"birthdate": "1999-11-03",
"lang": "ru"
}
Responses
200 OK Updated profile
{
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": "2000-10-19",
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
Account was deleted | Not found.Не найдено.Tapylmady. |
| 409 |
birthdate_locked |
Birthdate already set to a different date | Birthdate can only be set once. Contact us to change it.Дату рождения можно указать только один раз. Для изменения свяжитесь с нами.Doglan senäni diňe bir gezek girizip bolýar. Üýtgetmek üçin biziň bilen habarlaşyň. |
| 422 |
invalid_birthdate |
Not a valid date | Enter a valid birthdate.Введите корректную дату рождения.Dogry doglan senäni giriziň. |
| 422 |
invalid_phone |
Phone not in the accepted format | Enter a valid phone number.Введите корректный номер телефона.Dogry telefon belgisini giriziň. |
| 422 |
validation |
full_name or lang invalid | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
DELETE
/v1/me
Bearer token · scope app
Delete my account
Required by the App Store. Personal data is erased (email, name, phone, birthdate,
addresses, Google/Apple links, saved cards, devices, notifications) and every token is revoked
immediately. Orders keep only the anonymous user ID.
Request
DELETE /v1/me HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Deleted
Errors
| Status | Code | When | Message |
| 404 |
not_found |
Already deleted | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
PUT
/v1/me/password
Bearer token · scope app
Set or change my password
Signs out every other session and returns a fresh token pair for this
app, so the caller stays signed in. Accounts without a password (Google/Apple) can omit
current_password.
Body (application/json)
current_passwordstring |
Required if the account has a password |
new_passwordrequiredstring |
At least 8 characters |
Request
PUT /v1/me/password HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"current_password": "supersecret",
"new_password": "an-even-better-one"
}
Responses
200 OK New tokens
{
"access_token": "dza_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dzr_Xk3v9QpL2mN8rT5wY7zB1cD4fG6hJ0aS",
"scope": "app",
"is_new_user": false,
"user": {
"id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"email": "aylar@example.com",
"email_verified": false,
"full_name": "Aylar Annayeva",
"phone": "+99361234512",
"birthdate": null,
"lang": "tk",
"role": "customer",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:11.430176Z"
}
}
Errors
| Status | Code | When | Message |
| 422 |
wrong_password |
current_password is wrong | Current password is incorrect.Текущий пароль неверный.Häzirki açar söz nädogry. |
| 422 |
password_too_short |
Fewer than 8 characters | Password must be at least 8 characters.Пароль должен содержать не менее 8 символов.Açar söz azyndan 8 nyşandan ybarat bolmaly. |
| 422 |
password_too_long |
More than 72 bytes | Password is too long.Пароль слишком длинный.Açar söz gaty uzyn. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/me/addresses
Bearer token · scope app
List saved addresses
Request
GET /v1/me/addresses HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Addresses, newest first
{
"items": [
{
"id": "3eb50f0b-af16-4ee0-941b-ed9daac233c6",
"label": "Home",
"line1": "Gurbansoltan Eje 12, apt 5",
"city": "Dashoguz",
"lat": 41.841,
"lng": 59.98,
"note": "3rd floor, blue door"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/me/addresses
Bearer token · scope app
Save an address
Up to 20 addresses. Coordinates are WGS84 (what MapKit and Mapbox/Google Maps use).
Body (application/json)
line1requiredstring |
Street, building, apartment (max 200) |
latrequirednumber |
Latitude |
lngrequirednumber |
Longitude |
labelstring |
e.g. Home |
citystring |
|
notestring |
Entrance, floor, door code… |
Request
POST /v1/me/addresses HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"label": "Home",
"line1": "Gurbansoltan Eje 12, apt 5",
"city": "Dashoguz",
"lat": 41.841,
"lng": 59.98,
"note": "3rd floor, blue door"
}
Responses
201 Created Saved
{
"id": "3eb50f0b-af16-4ee0-941b-ed9daac233c6",
"label": "Home",
"line1": "Gurbansoltan Eje 12, apt 5",
"city": "Dashoguz",
"lat": 41.841,
"lng": 59.98,
"note": "3rd floor, blue door"
}
Errors
| Status | Code | When | Message |
| 422 |
validation |
line1 missing, invalid location, or 20 addresses already | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
DELETE
/v1/me/addresses/{id}
Bearer token · scope app
Delete an address
Path parameters
idrequiredstring (uuid) |
Address ID |
Request
DELETE /v1/me/addresses/{id} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Deleted
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such address for this user | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/me/birthday
Bearer token · scope app
Birthday perk status
The free slice of cake can be claimed once a year, from 3 days before to 7 days after the
birthday. perk.status: no_birthdate, upcoming, available,
redeemed. While available, perk.code is a voucher (also shown as a QR of the same
value) to hand over at the counter; see Redeem a birthday code.
Request
GET /v1/me/birthday HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Status
{
"birthdate": "2000-10-19",
"perk": {
"status": "available",
"year": 2026,
"valid_from": "2026-10-16",
"valid_until": "2026-10-26",
"code": "DZ-BDAY-7Q2KX",
"next_birthday": "2026-10-19",
"days_until": 2,
"is_today": false
}
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/me/birthday/celebration
Bearer token · scope app
Birthday celebration screen (BDUI)
A backend-driven screen: a list of components for the app to render natively. The
content depends on the perk state. See Birthday screen (BDUI) for the component types.
Request
GET /v1/me/birthday/celebration HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Screen
{
"schema": "dz.bdui/v1",
"id": "birthday_celebration",
"version": 1,
"state": "available",
"cache_seconds": 300,
"theme": {
"accent": "#EE6A2C",
"background": "#1E1715",
"muted": "#C9BDB6",
"surface": "#2B2220",
"text": "#FFFFFF"
},
"components": [
{
"type": "confetti",
"props": {
"colors": [
"#EE6A2C",
"#F4B740",
"#FFFFFF"
],
"intensity": "high",
"repeat": false
}
},
{
"type": "animation",
"props": {
"asset": "birthday_cake",
"height": 220,
"loop": true
}
},
{
"type": "title",
"props": {
"style": "display",
"text": "Happy birthday, Aylar!"
}
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/birthday/redeem
Staff · scope staff
Redeem a birthday code
Hands over the free birthday cake at the counter. No order is involved — the code is the whole
transaction, so a walk-in doesn't need to buy anything else to use it. The code can be typed in or scanned
from the customer's QR; both carry the same value.
Body (application/json)
coderequiredstring |
e.g. "DZ-BDAY-7Q2KX", case-insensitive |
Request
POST /v1/staff/birthday/redeem HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"code": "DZ-BDAY-7Q2KX"
}
Responses
200 OK Redeemed
{
"customer_name": "Aylar"
}
Errors
| Status | Code | When | Message |
| 422 |
invalid_birthday_code |
Unknown code, already used, or past its valid-until date | This code is invalid, expired, or already used.Этот код недействителен, истёк или уже использован.Bu kod nädogry, möhleti geçen ýa-da eýýäm ulanylan. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
PATCH
/v1/admin/users/{id}/role
Admin · scope admin
Change a user's role
Makes someone staff or a courier. The new role applies to their next request; new scopes need a new sign-in (or refresh).
Path parameters
idrequiredstring (uuid) |
User ID |
Body (application/json)
rolerequiredstring |
customer, staff, courier, admin |
Request
PATCH /v1/admin/users/{id}/role HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"role": "courier"
}
Responses
200 OK Updated user
{
"id": "18ec7e77-2e8f-44be-a2fd-cf3c879a15b9",
"email": "merdan@dz.tm",
"email_verified": false,
"full_name": "Merdan Courier",
"phone": "+99365000001",
"birthdate": null,
"lang": "en",
"role": "courier",
"has_password": true,
"providers": [
"password"
],
"created_at": "2026-10-17T02:52:12.708661Z"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such user | Not found.Не найдено.Tapylmady. |
| 422 |
validation |
Unknown role | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "admin" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Checkout & orders
Prices are always computed on the server from the menu; prices shown in the app are never
trusted. There is no tax. Delivery costs 10 TMT, free from 150 TMT, with a 30 TMT minimum.
Order status flow: placed → accepted → preparing → ready → picked_up (pickup) or
… ready → out_for_delivery → delivered (delivery); cancelled before hand-over.
GET
/v1/payment-methods
Bearer token · scope app
Payment methods for checkout
The "Pay with" list: saved cards, then Pay at the counter (pickup) or Cash on
delivery (delivery), then Add a new card. Expired cards are disabled.
Query parameters
order_typestring |
pickup (default) or delivery |
Request
GET /v1/payment-methods HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Methods
{
"methods": [
{
"type": "card",
"card_id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"title": "Turkmen card •••• 4821",
"subtitle": "Altyn Asyr • saved card",
"is_default": true,
"disabled": false
},
{
"type": "counter",
"title": "Pay at the counter",
"subtitle": "Cash or card when you pick up",
"is_default": false,
"disabled": false
},
{
"type": "new_card",
"title": "Add a new card",
"subtitle": "Any Turkmen bank card",
"is_default": false,
"disabled": false
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/cards
Bearer token · scope app
List saved cards
Request
GET /v1/cards HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Cards, default first
{
"items": [
{
"id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"bank": "altyn_asyr",
"bank_name": "Altyn Asyr",
"title": "Turkmen card •••• 4821",
"last4": "4821",
"expiry": "08/28",
"holder_name": "AYLAR ANNAYEVA",
"is_default": true,
"is_expired": false,
"created_at": "2026-10-17T02:52:13.211888Z"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/cards
Bearer token · scope app
Add a bank card
Verifies the card with the bank (Altyn Asyr) and saves it. The CVV is sent to the bank
once and never stored; the card number is stored encrypted. The first card becomes
the default. Up to 10 cards.
Body (application/json)
numberrequiredstring |
13–19 digits, spaces allowed, must pass the Luhn check |
exp_monthrequiredinteger |
1–12 |
exp_yearrequiredinteger |
2028 or 28 |
cvvrequiredstring |
3–4 digits |
holder_namestring |
As printed (max 60) |
make_defaultboolean |
|
Request
POST /v1/cards HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"number": "9934 1000 0009 4821",
"exp_month": 8,
"exp_year": 2028,
"cvv": "123",
"holder_name": "Aylar Annayeva"
}
Responses
201 Created Saved
{
"id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"bank": "altyn_asyr",
"bank_name": "Altyn Asyr",
"title": "Turkmen card •••• 4821",
"last4": "4821",
"expiry": "08/28",
"holder_name": "AYLAR ANNAYEVA",
"is_default": true,
"is_expired": false,
"created_at": "2026-10-17T02:52:13.211888Z"
}
Errors
| Status | Code | When | Message |
| 402 |
invalid_cvv |
Bank rejected the CVV | Check the CVV code.Проверьте CVV-код.CVV kody barlaň. |
| 402 |
payment_declined |
Bank refused the card | The bank declined the payment.Банк отклонил платёж.Bank tölegi kabul etmedi. |
| 409 |
card_exists |
This card is already saved | This card is already saved.Эта карта уже сохранена.Bu kart eýýäm ýatda saklanan. |
| 422 |
invalid_card_number |
Wrong length or checksum | Check the card number.Проверьте номер карты.Kartyň belgisini barlaň. |
| 422 |
card_expired |
Expiry in the past | This card has expired.Срок действия карты истёк.Kartyň möhleti geçdi. |
| 422 |
invalid_cvv |
CVV format wrong | Check the CVV code.Проверьте CVV-код.CVV kody barlaň. |
| 422 |
validation |
Invalid expiry, holder_name, or 10 cards already | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 502 |
unavailable |
Bank unreachable | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
DELETE
/v1/cards/{id}
Bearer token · scope app
Remove a card
The encrypted number is wiped. If it was the default, the newest remaining card becomes default.
Path parameters
idrequiredstring (uuid) |
Card ID |
Request
DELETE /v1/cards/{id} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Removed
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such card | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/cards/{id}/default
Bearer token · scope app
Make a card the default
Path parameters
idrequiredstring (uuid) |
Card ID |
Request
POST /v1/cards/{id}/default HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Done
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such card | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/orders/quote
Bearer token · scope app
Price the cart (checkout summary)
Returns the lines, subtotal, delivery fee, discount and total for the checkout screen, without placing anything.
Body (application/json)
store_idrequiredstring |
From GET /v1/stores |
typerequiredstring |
pickup or delivery |
itemsrequiredarray |
1–30 lines: {item_id, quantity (1–20), modifier_ids[]}. Required option groups default to their default choice. |
delivery_addressobject |
Required for delivery: {line1, lat, lng, note}; must be inside the store's delivery radius |
apply_birthday_cakeboolean |
Add the free birthday cake slice (see GET /v1/me/birthday) |
Request
POST /v1/orders/quote HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"store_id": "dashoguz-turkmenbashy",
"type": "pickup",
"items": [
{
"item_id": "8c3e844e-2393-4911-a8e3-9bac5a7a302c",
"quantity": 1,
"modifier_ids": [
"extra_patty",
"ketchup"
]
},
{
"item_id": "f1a6d1c2-6b0e-4a59-8d43-0c0f5f3b7e21",
"quantity": 1,
"modifier_ids": [
"size_medium"
]
}
]
}
Responses
200 OK Quote
{
"currency": "TMT",
"delivery_fee_minor": 0,
"discount_minor": 0,
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"payment_methods": [
"card",
"counter"
],
"ready_in_minutes": 15,
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"subtotal_minor": 11000,
"total_minor": 11000,
"total_text": "110 TMT",
"type": "pickup"
}
Errors
| Status | Code | When | Message |
| 409 |
store_closed |
Restaurant is closed now | This restaurant is closed right now.Ресторан сейчас закрыт.Restoran häzir ýapyk. |
| 409 |
item_unavailable |
An item is sold out (message names it) | {item} is not available right now.«{item}» сейчас недоступен.«{item}» häzir elýeterli däl. |
| 422 |
invalid_modifiers |
Option choices don't fit the item's groups | Please check the options for {item}.Проверьте опции для «{item}».«{item}» üçin goşmaçalary barlaň. |
| 422 |
validation |
Bad type, items, quantity, item_id, store_id or delivery_address | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 422 |
out_of_delivery_zone |
Address outside the delivery radius | This address is outside our delivery area.Адрес вне зоны доставки.Bu salgy eltip bermek zolagymyzdan daşarda. |
| 422 |
min_delivery_order |
Delivery total below the minimum (message has the amount) | Minimum order for delivery is {amount}.Минимальная сумма заказа для доставки — {amount}.Eltip bermek üçin iň az sargyt {amount}. |
| 502 |
unavailable |
Menu service unreachable | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/orders
Bearer token · scope app
Place an order
Prices the cart, redeems the birthday cake if asked, charges the card, then saves the
order. If a later step fails, earlier ones are undone (refund, cake given back). Send an
Idempotency-Key: retrying with the same key returns the same order (200)
instead of charging twice.
Headers
Idempotency-Keystring |
Unique per checkout attempt, max 100 characters, e.g. a UUID |
Body (application/json)
store_idrequiredstring |
From GET /v1/stores |
typerequiredstring |
pickup or delivery |
itemsrequiredarray |
1–30 lines: {item_id, quantity (1–20), modifier_ids[]}. Required option groups default to their default choice. |
delivery_addressobject |
Required for delivery: {line1, lat, lng, note}; must be inside the store's delivery radius |
apply_birthday_cakeboolean |
Add the free birthday cake slice (see GET /v1/me/birthday) |
paymentrequiredobject |
{"method": "card", "card_id": "…"}, {"method": "counter"} (pickup) or {"method": "cash_on_delivery"} (delivery) |
contact_phonestring |
For the courier |
notestring |
For the kitchen (max 500) |
Request
POST /v1/orders HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Idempotency-Key: …
Content-Type: application/json
{
"store_id": "dashoguz-turkmenbashy",
"type": "pickup",
"items": [
{
"item_id": "8c3e844e-2393-4911-a8e3-9bac5a7a302c",
"quantity": 1,
"modifier_ids": [
"extra_patty",
"ketchup"
]
},
{
"item_id": "f1a6d1c2-6b0e-4a59-8d43-0c0f5f3b7e21",
"quantity": 1,
"modifier_ids": [
"size_medium"
]
}
],
"payment": {
"method": "card",
"card_id": "ae6dc8f3-bb83-406d-9a0f-3c0ef99dc710"
},
"note": "No onions please"
}
Responses
201 Created Order placed (card already charged)
{
"id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"number": 1001,
"display_number": "#1001",
"status": "placed",
"type": "pickup",
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"subtotal_minor": 11000,
"delivery_fee_minor": 0,
"discount_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"currency": "TMT",
"payment": {
"method": "card",
"status": "paid",
"card_last4": "4821"
},
"delivery_address": null,
"contact_phone": "",
"note": "No onions please",
"ready_at": "2026-10-17T03:07:13.283233Z",
"created_at": "2026-10-17T02:52:13.283274Z",
"timeline": [
{
"status": "placed",
"at": "2026-10-17T02:52:13.283274Z"
}
],
"can_cancel": true,
"has_live_tracking": false,
"has_receipt": true
}
200 OK Same Idempotency-Key as an earlier order: that order
Errors
| Status | Code | When | Message |
| 402 |
payment_declined |
Bank declined the payment | The bank declined the payment.Банк отклонил платёж.Bank tölegi kabul etmedi. |
| 402 |
insufficient_funds |
Not enough money on the card | There are not enough funds on the card.Недостаточно средств на карте.Kartda serişde ýeterlik däl. |
| 402 |
card_expired |
Card expired | This card has expired.Срок действия карты истёк.Kartyň möhleti geçdi. |
| 404 |
not_found |
Card not found | Not found.Не найдено.Tapylmady. |
| 409 |
store_closed |
Restaurant is closed now | This restaurant is closed right now.Ресторан сейчас закрыт.Restoran häzir ýapyk. |
| 409 |
item_unavailable |
An item is sold out (message names it) | {item} is not available right now.«{item}» сейчас недоступен.«{item}» häzir elýeterli däl. |
| 409 |
birthday_perk_unavailable |
Cake asked for outside the birthday window or without a birthdate | The free birthday cake is available around your birthday.Бесплатный торт доступен в дни вашего дня рождения.Mugt tort doglan günüňiziň töwereginde elýeterli. |
| 409 |
birthday_perk_used |
This year's cake was already used | You've already enjoyed this year's birthday cake.Вы уже получили торт в этом году.Bu ýylky doglan gün tortuňyzy eýýäm aldyňyz. |
| 409 |
request_pending |
A payment for this order is still being processed | This request is already being processed.Этот запрос уже обрабатывается.Bu haýyş eýýäm işlenýär. |
| 422 |
invalid_modifiers |
Option choices don't fit the item's groups | Please check the options for {item}.Проверьте опции для «{item}».«{item}» üçin goşmaçalary barlaň. |
| 422 |
validation |
Bad type, items, quantity, item_id, store_id or delivery_address | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 422 |
out_of_delivery_zone |
Address outside the delivery radius | This address is outside our delivery area.Адрес вне зоны доставки.Bu salgy eltip bermek zolagymyzdan daşarda. |
| 422 |
min_delivery_order |
Delivery total below the minimum (message has the amount) | Minimum order for delivery is {amount}.Минимальная сумма заказа для доставки — {amount}.Eltip bermek üçin iň az sargyt {amount}. |
| 422 |
payment_method_not_allowed |
Counter for delivery or cash on delivery for pickup | This payment method isn't available for this order.Этот способ оплаты недоступен для заказа.Bu töleg usuly bu sargyt üçin elýeterli däl. |
| 422 |
validation |
card_id, contact_phone, note or Idempotency-Key invalid | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 502 |
unavailable |
Menu service unreachable | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/orders
Bearer token · scope app
Order history
Query parameters
statusstring |
active or past; omit for all |
limitinteger |
1–50, default 20 |
beforeinteger |
Cursor: pass next_cursor from the previous page |
Request
GET /v1/orders HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Newest first. next_cursor is empty on the last page.
{
"items": [
{
"id": "1e76aabe-8f34-4b21-967f-a0ddc108f689",
"number": 1003,
"display_number": "#1003",
"status": "cancelled",
"type": "pickup",
"store_name": "DZ Burger House",
"items_text": "Double DZ Smash, Cappuccino",
"item_count": 2,
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"total_minor": 11000,
"total_text": "110 TMT",
"created_at": "2026-10-17T02:52:13.410194Z",
"has_receipt": false
},
{
"id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"number": 1002,
"display_number": "#1002",
"status": "placed",
"type": "delivery",
"store_name": "DZ Burger House",
"items_text": "Double DZ Smash, Birthday Cake Slice",
"item_count": 3,
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"total_minor": 14000,
"total_text": "140 TMT",
"created_at": "2026-10-17T02:52:13.389074Z",
"has_receipt": false
},
{
"id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"number": 1001,
"display_number": "#1001",
"status": "picked_up",
"type": "pickup",
"store_name": "DZ Burger House",
"items_text": "Double DZ Smash, Cappuccino",
"item_count": 2,
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"total_minor": 11000,
"total_text": "110 TMT",
"created_at": "2026-10-17T02:52:13.283274Z",
"has_receipt": true
}
],
"next_cursor": ""
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/orders/{id}
Bearer token · scope app
Order details and status
Includes the status timeline, ready_at estimate, and flags:
can_cancel, has_live_tracking (open the tracking map), has_receipt.
Poll it, or rely on push notifications for status changes.
Path parameters
idrequiredstring (uuid) |
Order ID |
Request
GET /v1/orders/{id} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Order
{
"id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"number": 1001,
"display_number": "#1001",
"status": "picked_up",
"type": "pickup",
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"subtotal_minor": 11000,
"delivery_fee_minor": 0,
"discount_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"currency": "TMT",
"payment": {
"method": "card",
"status": "paid",
"card_last4": "4821"
},
"delivery_address": null,
"contact_phone": "",
"note": "No onions please",
"ready_at": "2026-10-17T03:07:13.32398Z",
"created_at": "2026-10-17T02:52:13.283274Z",
"timeline": [
{
"status": "placed",
"at": "2026-10-17T02:52:13.283274Z"
},
{
"status": "accepted",
"at": "2026-10-17T02:52:13.323633Z"
},
{
"status": "preparing",
"at": "2026-10-17T02:52:13.333649Z"
}
],
"can_cancel": false,
"has_live_tracking": false,
"has_receipt": true
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such order for this user | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/orders/{id}/cancel
Bearer token · scope app
Cancel an order
Possible until the kitchen accepts it (placed). Card payments are refunded and the birthday cake is given back.
Path parameters
idrequiredstring (uuid) |
Order ID |
Request
POST /v1/orders/{id}/cancel HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Cancelled order
{
"id": "1e76aabe-8f34-4b21-967f-a0ddc108f689",
"number": 1003,
"display_number": "#1003",
"status": "cancelled",
"type": "pickup",
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"subtotal_minor": 11000,
"delivery_fee_minor": 0,
"discount_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"currency": "TMT",
"payment": {
"method": "counter",
"status": "unpaid"
},
"delivery_address": null,
"contact_phone": "",
"note": "",
"ready_at": "2026-10-17T03:07:13.410153Z",
"created_at": "2026-10-17T02:52:13.410194Z",
"timeline": [
{
"status": "placed",
"at": "2026-10-17T02:52:13.410194Z"
},
{
"status": "cancelled",
"at": "2026-10-17T02:52:13.419961Z"
}
],
"can_cancel": false,
"has_live_tracking": false,
"has_receipt": false
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such order | Not found.Не найдено.Tapylmady. |
| 409 |
order_not_cancellable |
Already accepted by the kitchen | This order can no longer be cancelled.Этот заказ уже нельзя отменить.Bu sargydy indi ýatyryp bolmaýar. |
| 502 |
unavailable |
Refund couldn't be processed; nothing was changed | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/receipts
Bearer token · scope app
List receipts
Receipts of paid (or refunded) orders. Counter and cash orders get a receipt once handed over.
Query parameters
limitinteger |
1–50 |
beforeinteger |
Cursor (next_cursor) |
Request
GET /v1/receipts HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Receipts
{
"items": [
{
"currency": "TMT",
"issued_at": "2026-10-17T02:52:13.283233Z",
"order_id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"receipt_number": "DZ-001001",
"refunded": false,
"store_name": "DZ Burger House",
"total_minor": 11000,
"total_text": "110 TMT"
}
],
"next_cursor": ""
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/orders/{id}/receipt
Bearer token · scope app
Receipt
Itemised receipt. tax_minor is always 0. adjustments lists the birthday gift and the delivery fee when present.
Path parameters
idrequiredstring (uuid) |
Order ID |
Request
GET /v1/orders/{id}/receipt HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Receipt
{
"adjustments": [],
"currency": "TMT",
"delivery_fee_minor": 0,
"discount_minor": 0,
"issued_at": "2026-10-17T02:52:13.283233Z",
"lines": [
{
"name": "Double DZ Smash",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
{
"name": "Extra patty",
"price_minor": 1500
},
{
"name": "Ketchup",
"price_minor": 200
}
],
"line_total_minor": 8200,
"is_reward": false
},
{
"name": "Cappuccino",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
{
"name": "Medium",
"price_minor": 400
}
],
"line_total_minor": 2800,
"is_reward": false
}
],
"order_id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"order_number": 1001,
"payment": {
"method": "card",
"status": "paid",
"card_last4": "4821"
},
"receipt_number": "DZ-001001",
"refunded": false,
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"subtotal_minor": 11000,
"tax_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"type": "pickup"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such order | Not found.Не найдено.Tapylmady. |
| 409 |
receipt_unavailable |
Not paid yet | The receipt will be available once the order is paid.Чек будет доступен после оплаты заказа.Çek sargyt tölenenden soň elýeterli bolar. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/staff/orders
Staff · scope staff
Kitchen queue
Query parameters
store_idstring |
Filter by restaurant |
statusstring |
active (default) or a single status |
limitinteger |
1–50 |
beforeinteger |
Cursor |
Request
GET /v1/staff/orders HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Full orders
{
"items": [
{
"id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"number": 1001,
"display_number": "#1001",
"status": "placed",
"type": "pickup",
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"subtotal_minor": 11000,
"delivery_fee_minor": 0,
"discount_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"currency": "TMT",
"payment": {
"method": "card",
"status": "paid",
"card_last4": "4821"
},
"delivery_address": null,
"contact_phone": "",
"note": "No onions please",
"ready_at": "2026-10-17T03:07:13.283233Z",
"created_at": "2026-10-17T02:52:13.283274Z",
"timeline": [],
"can_cancel": true,
"has_live_tracking": false,
"has_receipt": true
}
],
"next_cursor": ""
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/orders/{id}/status
Staff · scope staff
Move an order to the next status
Allowed: accepted, preparing, ready, picked_up
(pickup), out_for_delivery (usually set by the courier app), cancelled (refunds
cards). Marking a counter/cash order handed over records it as paid. The customer is notified.
Path parameters
idrequiredstring (uuid) |
Order ID |
Body (application/json)
statusrequiredstring |
Target status |
notestring |
Shown in the timeline |
Request
POST /v1/staff/orders/{id}/status HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"status": "accepted"
}
Responses
200 OK Updated order
{
"id": "68fd2ea4-5785-4b83-9f55-72614e21f6dd",
"number": 1001,
"display_number": "#1001",
"status": "picked_up",
"type": "pickup",
"store": {
"id": "dashoguz-turkmenbashy",
"name": "DZ Burger House",
"address": "28 Turkmenbashi Ave., Dashoguz",
"phone": "+99332260078",
"lat": 41.8363,
"lng": 59.9666
},
"items": [
{
"item_id": "f2565d68-e79b-4182-8048-1fae52862d39",
"name": "Double DZ Smash",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/double-dz-smash.jpg",
"quantity": 1,
"unit_price_minor": 8200,
"modifiers": [
"Extra patty",
"Ketchup"
],
"modifiers_text": "Extra patty, ketchup",
"line_total_minor": 8200,
"calories": 1250,
"is_reward": false
},
{
"item_id": "c2db6f01-3cc0-4eab-910d-9141d3498d96",
"name": "Cappuccino",
"image_url": "https://api.dzburger.fortranpay.com/media/menu/cappuccino.jpg",
"quantity": 1,
"unit_price_minor": 2800,
"modifiers": [
"Medium"
],
"modifiers_text": "Medium",
"line_total_minor": 2800,
"calories": 170,
"is_reward": false
}
],
"subtotal_minor": 11000,
"delivery_fee_minor": 0,
"discount_minor": 0,
"total_minor": 11000,
"total_text": "110 TMT",
"currency": "TMT",
"payment": {
"method": "card",
"status": "paid",
"card_last4": "4821"
},
"delivery_address": null,
"contact_phone": "",
"note": "No onions please",
"ready_at": "2026-10-17T03:07:13.32398Z",
"created_at": "2026-10-17T02:52:13.283274Z",
"timeline": [
{
"status": "placed",
"at": "2026-10-17T02:52:13.283274Z"
},
{
"status": "accepted",
"at": "2026-10-17T02:52:13.323633Z"
},
{
"status": "preparing",
"at": "2026-10-17T02:52:13.333649Z"
}
],
"can_cancel": false,
"has_live_tracking": false,
"has_receipt": true
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such order | Not found.Не найдено.Tapylmady. |
| 409 |
invalid_status_transition |
Not allowed from the current status (message names both) | The order can't go from {from} to {to}.Нельзя перевести заказ из «{from}» в «{to}».Sargydy «{from}» ýagdaýyndan «{to}» ýagdaýyna geçirip bolmaýar. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Coffee Club
Monthly drink passes: Daily Duo (200 TMT: an Americano and an Espresso
every day) and Daily Trio (300 TMT: plus a Cappuccino). Each drink can be redeemed
once per day (Turkmenistan date) by showing a QR code at the counter. Passes renew automatically from
the saved card; failed renewals are retried daily, 3 times.
GET
/v1/subscriptions/plans
Public
List plans
Request
GET /v1/subscriptions/plans HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Responses
200 OK Plans
{
"items": [
{
"currency": "TMT",
"description": "An Americano and an Espresso every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
}
],
"id": "daily_duo",
"name": "Daily Duo",
"period": "month",
"price_minor": 20000,
"price_text": "200 TMT / month"
},
{
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/subscriptions/me
Bearer token · scope app
My subscription
For the profile card: plan, renews_on, days_left and today's drinks
(ready, used with time, or unavailable when the pass lapsed).
Request
GET /v1/subscriptions/me HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Active (or past-due) subscription
{
"subscription": {
"auto_renew": true,
"card_id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"current_period_end": "2026-11-17T02:52:21.20797Z",
"current_period_start": "2026-10-17T02:52:21.20797Z",
"days_left": 31,
"id": "f50c0e50-9808-433d-bb72-cacce761caff",
"pending_plan": null,
"plan": {
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
},
"renews_on": "2026-11-17",
"status": "active",
"today": {
"date": "2026-10-17",
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "used",
"used_at": "07:52"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
]
}
}
}
200 OK No subscription
{
"subscription": null
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/subscriptions
Bearer token · scope app
Subscribe
Charges the card for the first month right away.
Body (application/json)
plan_idrequiredstring |
daily_duo or daily_trio |
card_idrequiredstring (uuid) |
Saved card to charge now and on renewal |
auto_renewboolean |
Default true |
Request
POST /v1/subscriptions HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"plan_id": "daily_trio",
"card_id": "ae6dc8f3-bb83-406d-9a0f-3c0ef99dc710",
"auto_renew": true
}
Responses
201 Created Subscribed
{
"subscription": {
"auto_renew": true,
"card_id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"current_period_end": "2026-11-17T02:52:21.20797Z",
"current_period_start": "2026-10-17T02:52:21.20797Z",
"days_left": 31,
"id": "f50c0e50-9808-433d-bb72-cacce761caff",
"pending_plan": null,
"plan": {
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
},
"renews_on": "2026-11-17",
"status": "active",
"today": {
"date": "2026-10-17",
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "ready"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
]
}
}
}
Errors
| Status | Code | When | Message |
| 402 |
payment_declined |
Bank declined | The bank declined the payment.Банк отклонил платёж.Bank tölegi kabul etmedi. |
| 402 |
insufficient_funds |
Not enough money | There are not enough funds on the card.Недостаточно средств на карте.Kartda serişde ýeterlik däl. |
| 402 |
card_expired |
Card expired | This card has expired.Срок действия карты истёк.Kartyň möhleti geçdi. |
| 404 |
not_found |
Card not found | Not found.Не найдено.Tapylmady. |
| 409 |
subscription_exists |
Already subscribed (change plan with PATCH instead) | You already have an active subscription.У вас уже есть активная подписка.Siziň işjeň abunaňyz eýýäm bar. |
| 422 |
validation |
Unknown plan_id or bad card_id | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
PATCH
/v1/subscriptions/me
Bearer token · scope app
Change auto-renew, card or plan
A plan change (e.g. Duo → Trio) takes effect at the next renewal (pending_plan).
Body (application/json)
auto_renewboolean |
|
card_idstring (uuid) |
Card for renewals |
plan_idstring |
Plan from the next period |
Request
PATCH /v1/subscriptions/me HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"plan_id": "daily_trio"
}
Responses
200 OK Updated
{
"subscription": {
"auto_renew": true,
"card_id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"current_period_end": "2026-11-17T02:52:21.20797Z",
"current_period_start": "2026-10-17T02:52:21.20797Z",
"days_left": 31,
"id": "f50c0e50-9808-433d-bb72-cacce761caff",
"pending_plan": null,
"plan": {
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
},
"renews_on": "2026-11-17",
"status": "active",
"today": {
"date": "2026-10-17",
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "used",
"used_at": "07:52"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
]
}
}
}
Errors
| Status | Code | When | Message |
| 409 |
no_subscription |
No active subscription | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
| 422 |
validation |
Unknown plan_id or bad card_id | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/subscriptions/me/cancel
Bearer token · scope app
Turn off renewal
Drinks stay available until the end of the paid month.
Request
POST /v1/subscriptions/me/cancel HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Updated
{
"subscription": {
"auto_renew": true,
"card_id": "970c6a9a-f551-466e-a98b-e20cd79ec436",
"current_period_end": "2026-11-17T02:52:21.20797Z",
"current_period_start": "2026-10-17T02:52:21.20797Z",
"days_left": 31,
"id": "f50c0e50-9808-433d-bb72-cacce761caff",
"pending_plan": null,
"plan": {
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
},
"renews_on": "2026-11-17",
"status": "active",
"today": {
"date": "2026-10-17",
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "used",
"used_at": "07:52"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
]
}
}
}
Errors
| Status | Code | When | Message |
| 409 |
no_subscription |
No active subscription | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/subscriptions/me/qr
Bearer token · scope app
QR code for the counter
Returns a signed payload to show as a QR code ("Show QR at the counter"). It expires after
90 seconds so screenshots can't be shared; fetch a new one after refresh_after_seconds.
Request
POST /v1/subscriptions/me/qr HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK QR payload
{
"expires_at": "2026-10-17T02:53:51.229567Z",
"qr_payload": "DZSUB:MGI4ZjFkNGUtOGM1NS00YzQzLTlhMzUtNmYzZDNmOGEyYzExLjE3OTI0NTY3ODk.q9X2mVb7LkP0sT4wR8nE1A",
"refresh_after_seconds": 80
}
Errors
| Status | Code | When | Message |
| 409 |
no_subscription |
No active subscription or it has lapsed | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/subscriptions/inspect
Staff · scope staff
Scan a guest's QR
Shows the guest's plan and which drinks are still available today.
Body (application/json)
tokenrequiredstring |
The scanned QR payload |
Request
POST /v1/staff/subscriptions/inspect HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"token": "DZSUB:MGI4ZjFkNGUtOGM1NS00YzQzLTlhMzUtNmYzZDNmOGEyYzExLjE3OTI0NTY3ODk.q9X2mVb7LkP0sT4wR8nE1A"
}
Responses
200 OK Guest's drinks today
{
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "used",
"used_at": "07:52"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
],
"plan": {
"currency": "TMT",
"description": "An Americano, an Espresso and a Cappuccino every day.",
"drinks_per_day": [
{
"drink": "americano",
"name": "Americano"
},
{
"drink": "espresso",
"name": "Espresso"
},
{
"drink": "cappuccino",
"name": "Cappuccino"
}
],
"id": "daily_trio",
"name": "Daily Trio",
"period": "month",
"price_minor": 30000,
"price_text": "300 TMT / month"
},
"subscription_id": "f50c0e50-9808-433d-bb72-cacce761caff",
"user_id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d",
"valid_until": "2026-11-17T02:52:21.20797Z"
}
Errors
| Status | Code | When | Message |
| 409 |
no_subscription |
Pass lapsed | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
| 422 |
invalid_qr |
Invalid or expired QR (ask the guest to refresh) | The QR code is invalid or expired. Ask the guest to refresh it.QR-код недействителен или истёк. Попросите гостя обновить его.QR kod nädogry ýa-da möhleti geçen. Myhmandan ony täzelemegini haýyş ediň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/subscriptions/redeem
Staff · scope staff
Give a drink
Body (application/json)
tokenrequiredstring |
The scanned QR payload |
drinkrequiredstring |
americano, espresso or cappuccino |
store_idstring |
Where it was served |
Request
POST /v1/staff/subscriptions/redeem HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"token": "DZSUB:MGI4…",
"drink": "americano",
"store_id": "dashoguz-turkmenbashy"
}
Responses
200 OK Redeemed; today's drinks
{
"drinks": [
{
"drink": "americano",
"name": "Americano",
"status": "used",
"used_at": "07:52"
},
{
"drink": "espresso",
"name": "Espresso",
"status": "ready"
},
{
"drink": "cappuccino",
"name": "Cappuccino",
"status": "ready"
}
],
"redeemed": "americano"
}
Errors
| Status | Code | When | Message |
| 409 |
drink_already_used |
That drink was already served today | {drink} has already been used today.«{drink}» сегодня уже использован.«{drink}» şu gün eýýäm ulanyldy. |
| 409 |
no_subscription |
Pass lapsed | You don't have an active subscription.У вас нет активной подписки.Işjeň abunaňyz ýok. |
| 422 |
drink_not_in_plan |
e.g. Cappuccino on Daily Duo | {drink} isn't included in this plan.«{drink}» не входит в этот тариф.«{drink}» bu meýilnama girmeýär. |
| 422 |
invalid_qr |
Invalid or expired QR | The QR code is invalid or expired. Ask the guest to refresh it.QR-код недействителен или истёк. Попросите гостя обновить его.QR kod nädogry ýa-da möhleti geçen. Myhmandan ony täzelemegini haýyş ediň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Special occasions
Table requests for birthdays, memorial meals, business dinners, family gatherings and more,
with decorations, cake and an optional pre-ordered set menu. A booking is a request: staff
confirm or decline it (usually after a phone call), and the guest gets an in-app notification, push
and email.
GET
/v1/occasions/options
Public
Form options
Occasion types and setup options (localized), time slots, guest limit and the bookable date range.
Request
GET /v1/occasions/options HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Responses
200 OK Options
{
"first_date": "2026-10-18",
"last_date": "2027-01-15",
"lead_hours": 24,
"max_guests": 40,
"occasions": [
{
"id": "birthday",
"label": "Birthday"
},
{
"id": "memorial",
"label": "Memorial meal"
},
{
"id": "business",
"label": "Business"
}
],
"setup_options": [
{
"id": "decorations",
"label": "Decorations"
},
{
"id": "cake",
"label": "Cake"
},
{
"id": "set_menu",
"label": "Set menu"
}
],
"slots": [
"13:00",
"17:00",
"19:00"
],
"store_id": "dashoguz-turkmenbashy"
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/occasions/availability
Public
Free time slots on a date
Query parameters
daterequiredstring (date) |
YYYY-MM-DD |
store_idstring |
Default: the main restaurant |
Request
GET /v1/occasions/availability HTTP/1.1
Host: api.dzburger.fortranpay.com
Accept-Language: tk
Responses
200 OK Slots
{
"date": "2026-10-22",
"slots": [
{
"available": true,
"time": "13:00"
},
{
"available": true,
"time": "17:00"
},
{
"available": true,
"time": "19:00"
}
]
}
Errors
| Status | Code | When | Message |
| 422 |
validation |
Missing or invalid date | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/occasions
Bearer token · scope app
Request a table
Contact details default to the profile. Set-menu items are priced from the menu
(estimated_total_minor); the final bill is settled at the restaurant.
Body (application/json)
occasionrequiredstring |
birthday, memorial, business, family_gathering, other |
daterequiredstring (date) |
At least 24 h ahead, at most 90 days |
timerequiredstring |
One of the slots, e.g. 19:00 |
guestsrequiredinteger |
1–40 |
setupstring[] |
decorations, cake, set_menu |
menuarray |
Set menu: {item_id, quantity, modifier_ids}, up to 40 lines |
notestring |
Name on the cake, seating, dietary needs (max 1000) |
store_idstring |
Default: the main restaurant |
contact_namestring |
Default: profile name |
contact_phonestring |
Default: profile phone |
contact_emailstring |
Default: profile email |
Request
POST /v1/occasions HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"occasion": "birthday",
"date": "2026-10-20",
"time": "19:00",
"guests": 8,
"setup": [
"decorations",
"cake"
],
"note": "Name on the cake: Aylar",
"menu": [
{
"item_id": "3b1f0c55-1f43-4a7e-9d1e-2b7a9f0c6d11",
"quantity": 8
}
]
}
Responses
201 Created Request sent
{
"can_cancel": true,
"can_edit": true,
"confirmed_via": null,
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "",
"status": "requested",
"status_label": "Requested",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Requested",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
Errors
| Status | Code | When | Message |
| 409 |
slot_unavailable |
That time is fully booked | This time is fully booked. Please choose another.Это время уже занято. Выберите другое.Bu wagt doly bron edildi. Başga wagt saýlaň. |
| 409 |
item_unavailable |
A set-menu item is sold out | {item} is not available right now.«{item}» сейчас недоступен.«{item}» häzir elýeterli däl. |
| 422 |
booking_too_soon |
Less than 24 hours ahead | Please book at least {hours} hours before the event.Бронируйте не позднее чем за {hours} ч до события.Çäräden azyndan {hours} sagat öň bron ediň. |
| 422 |
booking_too_far |
More than 90 days ahead | Bookings open {days} days ahead.Бронирование доступно на {days} дней вперёд.Bron {days} gün öňünden açylýar. |
| 422 |
too_many_guests |
More than 40 guests | Up to {max} guests per booking.Не более {max} гостей на бронирование.Bir bron üçin iň köp {max} myhman. |
| 422 |
validation |
Bad occasion, date, time, setup, note, menu, or no phone/email to contact | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| 422 |
invalid_modifiers |
Set-menu options invalid | Please check the options for {item}.Проверьте опции для «{item}».«{item}» üçin goşmaçalary barlaň. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/occasions
Bearer token · scope app
My bookings
upcoming (requested or confirmed, today or later) powers the profile's
"Upcoming" card: title "Birthday table • 8 guests", summary
"19:00 • Decorations, cake • Confirmed".
Query parameters
scopestring |
upcoming (default) or past |
Request
GET /v1/occasions HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Bookings
{
"items": [
{
"can_cancel": true,
"can_edit": false,
"confirmed_via": "phone",
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "Table 4 by the window",
"status": "confirmed",
"status_label": "Confirmed",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Confirmed",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/occasions/{id}
Bearer token · scope app
Booking details
Path parameters
idrequiredstring (uuid) |
Booking ID |
Request
GET /v1/occasions/{id} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Booking
{
"can_cancel": true,
"can_edit": true,
"confirmed_via": null,
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "",
"status": "requested",
"status_label": "Requested",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Requested",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such booking | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/occasions/{id}/cancel
Bearer token · scope app
Cancel a booking
Path parameters
idrequiredstring (uuid) |
Booking ID |
Request
POST /v1/occasions/{id}/cancel HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Cancelled booking
{
"can_cancel": true,
"can_edit": true,
"confirmed_via": null,
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "",
"status": "requested",
"status_label": "Requested",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Requested",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such booking | Not found.Не найдено.Tapylmady. |
| 409 |
booking_not_editable |
Not requested/confirmed any more | This booking can no longer be changed.Это бронирование уже нельзя изменить.Bu brony indi üýtgedip bolmaýar. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/staff/occasions
Staff · scope staff
Booking requests
Query parameters
statusstring |
requested (default), confirmed, … |
Request
GET /v1/staff/occasions HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Bookings from yesterday on, by date
{
"items": [
{
"can_cancel": true,
"can_edit": true,
"confirmed_via": null,
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "",
"status": "requested",
"status_label": "Requested",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Requested",
"time": "19:00",
"title": "Birthday table • 8 guests",
"user_id": "c5a9a62e-bf82-4f02-ab6a-59f75f6ebe2d"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/occasions/{id}/decision
Staff · scope staff
Confirm or decline
Record the decision after contacting the guest. The guest is notified in-app, by push and email. A confirmed booking can still be declined later.
Path parameters
idrequiredstring (uuid) |
Booking ID |
Body (application/json)
decisionrequiredstring |
confirmed or declined |
confirmed_viastring |
phone, email or app (default) |
staff_notestring |
Shown to the guest |
Request
POST /v1/staff/occasions/{id}/decision HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"decision": "confirmed",
"confirmed_via": "phone",
"staff_note": "Table 4 by the window"
}
Responses
200 OK Updated booking
{
"can_cancel": true,
"can_edit": false,
"confirmed_via": "phone",
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "Table 4 by the window",
"status": "confirmed",
"status_label": "Confirmed",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Confirmed",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No such booking | Not found.Не найдено.Tapylmady. |
| 409 |
booking_not_editable |
Already decided/cancelled | This booking can no longer be changed.Это бронирование уже нельзя изменить.Bu brony indi üýtgedip bolmaýar. |
| 422 |
validation |
Bad decision or confirmed_via | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/occasions/{id}/complete
Staff · scope staff
Mark the event as held
Path parameters
idrequiredstring (uuid) |
Booking ID |
Request
POST /v1/staff/occasions/{id}/complete HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Updated booking
{
"can_cancel": true,
"can_edit": false,
"confirmed_via": "phone",
"contact": {
"email": "aylar@example.com",
"name": "Aylar Annayeva",
"phone": "+99361234512"
},
"created_at": "2026-10-17T02:52:21.345962Z",
"date": "2026-10-22",
"date_label": "22 Oct",
"estimated_total_minor": 36000,
"estimated_total_text": "360 TMT",
"guests": 8,
"id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"menu": [
{
"image_url": "https://api.dzburger.fortranpay.com/media/menu/classic-dz.jpg",
"item_id": "2fb232cc-4577-4b7b-ad0a-4011d7533596",
"line_total_minor": 36000,
"modifiers": null,
"name": "Classic DZ Burger",
"quantity": 8,
"unit_price_minor": 4500
}
],
"note": "Name on the cake: Aylar",
"occasion": "birthday",
"occasion_label": "Birthday",
"setup": [
"decorations",
"cake",
"set_menu"
],
"setup_labels": [
"Decorations",
"Cake",
"Set menu"
],
"staff_note": "Table 4 by the window",
"status": "confirmed",
"status_label": "Confirmed",
"store_id": "dashoguz-turkmenbashy",
"summary": "19:00 • Decorations, cake, set menu • Confirmed",
"time": "19:00",
"title": "Birthday table • 8 guests"
}
Errors
| Status | Code | When | Message |
| 409 |
booking_not_editable |
Not confirmed | This booking can no longer be changed.Это бронирование уже нельзя изменить.Bu brony indi üýtgedip bolmaýar. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Delivery & live tracking
A delivery job is created when the kitchen accepts a delivery order. Couriers take it,
send GPS positions while driving, and mark it picked up and delivered; the order status follows.
Coordinates are WGS84, ready for Apple MapKit (iOS) and Mapbox/Google Maps (Android).
GET
/v1/deliveries/order/{orderID}
Bearer token · scope app
Tracking snapshot
Status, ETA, courier position and the route trail (path, [lat, lng] pairs)
for drawing on the map. 404 means the kitchen hasn't accepted the order yet.
Path parameters
orderIDrequiredstring (uuid) |
Order ID |
Request
GET /v1/deliveries/order/{orderID} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Snapshot
{
"at": "2026-10-17T02:52:21.151687Z",
"courier": {
"name": "Merdan Courier",
"phone": "+99365000001",
"lat": 41.8391,
"lng": 59.9752,
"heading": 62,
"updated_at": "2026-10-17T02:52:21.137427Z"
},
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": "2026-10-17T02:53:45.429643Z",
"eta_minutes": 2,
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"path": [
[
41.8372,
59.9691
],
[
41.8391,
59.9752
]
],
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "picked_up",
"type": "snapshot"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No delivery yet, or not your order | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/deliveries/order/{orderID}/live
Bearer token · scope app
Live tracking (WebSocket)
Upgrade to a WebSocket (wss://). The server sends a snapshot (same as
above), then location and status messages as they happen, pings every 25 s, and
closes after delivered or cancelled. Browsers that can't set headers may pass
?access_token=. See Realtime.
Path parameters
orderIDrequiredstring (uuid) |
Order ID |
Request
GET /v1/deliveries/order/{orderID}/live HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Connection: Upgrade
Upgrade: websocket
Responses
101 Switching Protocols Switching Protocols, then JSON text messages
{
"type": "location",
"status": "picked_up",
"lat": 41.8391,
"lng": 59.9752,
"heading": 62,
"eta_at": "2026-10-17T02:39:12Z",
"at": "2026-10-17T02:35:31Z"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
No delivery yet, or not your order | Not found.Не найдено.Tapylmady. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/courier/shift
Courier · scope courier
Start/stop shift
Body (application/json)
onlinerequiredboolean |
|
latnumber |
|
lngnumber |
|
Request
POST /v1/courier/shift HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"online": true,
"lat": 41.836,
"lng": 59.966
}
Responses
200 OK Shift state
{
"online": true
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "courier" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/courier/deliveries
Courier · scope courier
My jobs and open jobs
available is sorted nearest-first when lat/lng are given. collect_minor is the cash to collect for cash-on-delivery orders.
Query parameters
latnumber |
Courier position |
lngnumber |
|
Request
GET /v1/courier/deliveries HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Jobs
{
"active": [],
"available": [
{
"collect_minor": 14000,
"customer_phone": "+99361234512",
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": null,
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"payment_method": "cash_on_delivery",
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "pending"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "courier" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/courier/deliveries/{id}/accept
Courier · scope courier
Take a job
Path parameters
idrequiredstring (uuid) |
Delivery ID |
Request
POST /v1/courier/deliveries/{id}/accept HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Assigned to you
{
"collect_minor": 14000,
"customer_phone": "+99361234512",
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": null,
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"payment_method": "cash_on_delivery",
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "assigned"
}
Errors
| Status | Code | When | Message |
| 409 |
delivery_taken |
Another courier was faster | Another courier has already taken this delivery.Эту доставку уже взял другой курьер.Bu eltip bermäni başga kurýer aldy. |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "courier" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/courier/deliveries/{id}/location
Courier · scope courier
Send GPS position
Every 3–5 seconds while on a job. Updates the ETA and is pushed to the customer's map instantly.
Path parameters
idrequiredstring (uuid) |
Delivery ID |
Body (application/json)
latrequirednumber |
|
lngrequirednumber |
|
headingnumber |
Degrees, 0 = north |
Request
POST /v1/courier/deliveries/{id}/location HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"lat": 41.8372,
"lng": 59.9691,
"heading": 45
}
Responses
200 OK New ETA
{
"eta_at": "2026-10-17T02:59:47.836085954Z"
}
Errors
| Status | Code | When | Message |
| 404 |
not_found |
Not your active job | Not found.Не найдено.Tapylmady. |
| 422 |
validation |
Invalid location | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "courier" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/courier/deliveries/{id}/status
Courier · scope courier
Picked up / delivered
picked_up moves the order to out_for_delivery; delivered completes it (and records cash as paid).
Path parameters
idrequiredstring (uuid) |
Delivery ID |
Body (application/json)
statusrequiredstring |
picked_up (from assigned) or delivered (from picked up) |
Request
POST /v1/courier/deliveries/{id}/status HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"status": "picked_up"
}
Responses
200 OK Updated job
{
"collect_minor": 14000,
"customer_phone": "+99361234512",
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": "2026-10-17T02:59:47.836085Z",
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"payment_method": "cash_on_delivery",
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "picked_up"
}
Errors
| Status | Code | When | Message |
| 409 |
conflict |
Wrong order of steps or not your job | This action conflicts with the current state.Действие невозможно в текущем состоянии.Bu amal häzirki ýagdaýda mümkin däl. |
| 422 |
validation |
Unknown status | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "courier" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/staff/deliveries
Staff · scope staff
Dispatch board
Query parameters
statusstring |
Default: all open (pending, assigned, picked up) |
Request
GET /v1/staff/deliveries HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Deliveries
{
"items": [
{
"collect_minor": 14000,
"courier": {
"id": null,
"lat": null,
"lng": null,
"name": ""
},
"customer_phone": "+99361234512",
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": null,
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"payment_method": "cash_on_delivery",
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "pending"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/staff/deliveries/{id}/assign
Staff · scope staff
Assign a courier
Path parameters
idrequiredstring (uuid) |
Delivery ID |
Body (application/json)
courier_idrequiredstring (uuid) |
User ID of a courier |
Request
POST /v1/staff/deliveries/{id}/assign HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"courier_id": "5d2f7a10-3c4b-4e2a-9f61-8b7c6d5e4f30"
}
Responses
200 OK Assigned
{
"collect_minor": 14000,
"customer_phone": "+99361234512",
"dropoff": {
"lat": 41.841,
"lng": 59.98,
"line1": "Gurbansoltan Eje 12, apt 5",
"note": "3rd floor"
},
"eta_at": null,
"id": "16ca9d14-bf50-427b-8d16-affa61f76ada",
"order_id": "3d8e2603-5d63-4653-8243-0242b6dc18df",
"order_number": 1002,
"payment_method": "cash_on_delivery",
"pickup": {
"lat": 41.8363,
"lng": 59.9666,
"line1": "28 Turkmenbashi Ave., Dashoguz"
},
"status": "assigned"
}
Errors
| Status | Code | When | Message |
| 409 |
delivery_taken |
Already picked up or finished | Another courier has already taken this delivery.Эту доставку уже взял другой курьер.Bu eltip bermäni başga kurýer aldy. |
| 422 |
validation |
Bad courier_id | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/staff/couriers
Staff · scope staff
Couriers online
Request
GET /v1/staff/couriers HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Online in the last 30 minutes
{
"items": [
{
"active_deliveries": 1,
"id": "18ec7e77-2e8f-44be-a2fd-cf3c879a15b9",
"last_seen_at": "2026-10-17T02:52:21.138833Z",
"lat": 41.8391,
"lng": 59.9752,
"name": "Merdan Courier",
"phone": "+99365000001"
}
]
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 403 | insufficient_scope | Token lacks the "staff" scope | Sign in to the staff app to do this.Для этого войдите в приложение для сотрудников.Munuň üçin işgärler programmasyna giriň. |
| 403 | forbidden | User's current role doesn't allow it | You don't have access to this.Нет доступа.Bu amala rugsadyňyz ýok. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
Notifications
Order updates, booking decisions, Coffee Club renewals and birthday greetings arrive as
push notifications (APNs on iOS) and are kept in an in-app list. Texts are rendered in the language
of the request, so the list follows the app's language.
GET
/v1/notifications
Bearer token · scope app
In-app notifications
data is a deep link, e.g. {"screen": "order", "order_id": "…"}.
Query parameters
limitinteger |
1–100, default 30 |
beforestring (date-time) |
Cursor: next_cursor from the previous page |
Request
GET /v1/notifications HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK Newest first, with unread count
{
"items": [
{
"id": "5bdf373c-29f4-4606-8960-7337f984ad0f",
"template": "occasion_confirmed",
"title": "Your table is confirmed",
"body": "Birthday • 22 Oct at 19:00 • 8 guests. See you soon!",
"data": {
"booking_id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"screen": "occasion"
},
"read": false,
"created_at": "2026-10-17T02:52:21.635282Z"
},
{
"id": "297b6c8d-5561-4bac-8ef4-526e100eb3aa",
"template": "occasion_received",
"title": "Booking request sent",
"body": "We'll confirm your Birthday table for 22 Oct at 19:00 soon.",
"data": {
"booking_id": "a0f77392-4df5-4e0d-80bb-38052f4669b4",
"screen": "occasion"
},
"read": false,
"created_at": "2026-10-17T02:52:21.632697Z"
},
{
"id": "2aaa762f-a2f3-42e5-b9be-837a89c45bcc",
"template": "subscription_activated",
"title": "Daily Trio is active",
"body": "Enjoy your daily drinks. Renews on 17 Nov.",
"data": {
"screen": "coffee_club"
},
"read": false,
"created_at": "2026-10-17T02:52:21.332121Z"
}
],
"next_cursor": "",
"unread_count": 14
}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
GET
/v1/notifications/stream
Bearer token · scope app
Live notifications (SSE)
Server-Sent Events while the app is in the foreground: an
event: notification per new notification, and a comment ping every 25 s.
Request
GET /v1/notifications/stream HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
200 OK text/event-stream
event: notification
id: 8f8242e4-2d55-494e-9624-d65b9148df63
data: {"id":"8f8242e4-…","template":"order_ready_pickup","title":"Order #1001 is ready","body":"Pick it up at S Turkmenbashy Ave 28, Dashoguz.","data":{"order_id":"…","screen":"order"},"read":false,"created_at":"2026-10-17T02:35:31Z"}
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/notifications/{id}/read
Bearer token · scope app
Mark one as read
Path parameters
idrequiredstring (uuid) |
Notification ID |
Request
POST /v1/notifications/{id}/read HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Done (also when already read)
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/notifications/read-all
Bearer token · scope app
Mark all as read
Request
POST /v1/notifications/read-all HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Done
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
POST
/v1/devices
Bearer token · scope app
Register for push
Send the APNs/FCM device token after sign-in. A device belongs to whoever signed in on it last.
Body (application/json)
tokenrequiredstring |
Device push token (max 512) |
platformrequiredstring |
ios or android |
Request
POST /v1/devices HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Content-Type: application/json
{
"token": "80f3c2a1e7…",
"platform": "ios"
}
Responses
204 No Content Registered
Errors
| Status | Code | When | Message |
| 422 |
validation |
Bad token or platform | Please check the field: {field}.Проверьте поле: {field}.Meýdany barlaň: {field}. |
| Common to this endpoint |
| 400 | bad_request | Body is not valid JSON or larger than 1 MiB | The request is invalid.Некорректный запрос.Haýyş nädogry. |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |
DELETE
/v1/devices/{token}
Bearer token · scope app
Unregister on sign-out
Path parameters
tokenrequiredstring |
Device push token |
Request
DELETE /v1/devices/{token} HTTP/1.1
Host: api.dzburger.fortranpay.com
Authorization: Bearer dza_…
Accept-Language: tk
Responses
204 No Content Removed
Errors
| Status | Code | When | Message |
| Common to this endpoint |
| 401 | unauthorized | No Authorization header | Please sign in.Пожалуйста, войдите в аккаунт.Hasabyňyza giriň. |
| 401 | invalid_token | Token unknown, expired or revoked: refresh it | Your session has expired. Please sign in again.Сессия истекла. Войдите снова.Sessiýanyň möhleti gutardy. Täzeden giriň. |
| 429 | rate_limited | Too many requests from this IP | Too many requests. Please wait a moment.Слишком много запросов. Подождите немного.Haýyşlar gaty köp. Biraz garaşyň. |
| 503 | unavailable | Sign-in service temporarily unreachable: retry, don't sign out | Service is temporarily unavailable. Please try again.Сервис временно недоступен. Попробуйте ещё раз.Hyzmat wagtlaýyn elýeterli däl. Gaýtadan synanyşyň. |
| 500 | internal | Unexpected server error (has a request_id) | Something went wrong. Please try again.Что-то пошло не так. Попробуйте ещё раз.Näsazlyk ýüze çykdy. Gaýtadan synanyşyň. |