Примеры: curl, JavaScript, Python
Во всех примерах адрес API и ключ берутся из переменных окружения ORDA_API и ORDA_KEY.
# заказы на деньcurl -s -H "X-Api-Key: $ORDA_KEY" "$ORDA_API/orders?date=2026-11-20&limit=500"
# заказ по коду из вашей системыcurl -s -H "X-Api-Key: $ORDA_KEY" "$ORDA_API/orders/external/РТ-00001"
# утверждённые планы дняcurl -s -H "X-Api-Key: $ORDA_KEY" "$ORDA_API/plans?date=2026-11-20"JavaScript (Node.js 18+, без библиотек)
Заголовок раздела «JavaScript (Node.js 18+, без библиотек)»const API = process.env.ORDA_API; // например https://api.ordatms.kz/api/v1const KEY = process.env.ORDA_KEY;
async function orda(method, path, body, { idempotencyKey, attempts = 5 } = {}) { for (let i = 0; ; i++) { const res = await fetch(`${API}${path}`, { method, headers: { 'X-Api-Key': KEY, ...(body ? { 'Content-Type': 'application/json' } : {}), ...(idempotencyKey ? { 'Idempotency-Key': idempotencyKey } : {}), }, body: body ? JSON.stringify(body) : undefined, }).catch((e) => ({ ok: false, status: 0, error: e })); const retry = res.status === 0 || res.status === 429 || res.status >= 500; if (!retry || i + 1 >= attempts) { if (!res.ok) throw new Error(`Orda ${method} ${path}: ${res.status} ${res.error ?? (await res.text())}`); return res.status === 204 ? null : res.json(); } const wait = Number(res.headers?.get('retry-after')) || 2 ** i; await new Promise((r) => setTimeout(r, wait * 1000)); }}
// Выгрузка заказов пачками по 1000 с отчётом об ошибкахexport async function exportOrders(orders, batchId) { for (let i = 0; i < orders.length; i += 1000) { const part = orders.slice(i, i + 1000); const r = await orda('POST', '/orders/bulk', { orders: part }, { idempotencyKey: `${batchId}-${i / 1000}` }); for (const row of r.results.filter((x) => x.result === 'error')) console.warn(`Заказ ${row.externalId}: ${row.error.code} — ${row.error.message}`); }}
// Маршруты утверждённого планаexport async function approvedRoutes(date) { const plans = await orda('GET', `/plans?date=${date}`); const approved = plans.filter((p) => p.status === 'approved'); return Promise.all(approved.map((p) => orda('GET', `/plans/${p.id}`)));}Python 3 (requests)
Заголовок раздела «Python 3 (requests)»import os, time, requests
API, KEY = os.environ["ORDA_API"], os.environ["ORDA_KEY"]session = requests.Session()session.headers["X-Api-Key"] = KEY
def orda(method, path, json=None, idempotency_key=None, attempts=5): headers = {"Idempotency-Key": idempotency_key} if idempotency_key else {} for i in range(attempts): try: r = session.request(method, API + path, json=json, headers=headers, timeout=60) except requests.ConnectionError: r = None if r is not None and r.status_code < 500 and r.status_code != 429: r.raise_for_status() return None if r.status_code == 204 else r.json() time.sleep(int(r.headers.get("Retry-After", 2 ** i)) if r is not None else 2 ** i) raise RuntimeError(f"Orda {method} {path}: retries exhausted")
orders = [{ "externalId": "РТ-00001", "number": "РТ-00001", "deliveryDate": "2026-11-20", "customerExternalId": "K-001", "weightKg": 120, "amount": 15000, "paymentType": "cash",}]result = orda("POST", "/orders/bulk", {"orders": orders}, idempotency_key="export-2026-11-20-1")for row in result["results"]: if row["result"] == "error": print(row["externalId"], row["error"]["code"], row["error"]["message"])Приём вебхуков
Заголовок раздела «Приём вебхуков»# FastAPIfrom fastapi import FastAPI, Request, Responseapp = FastAPI()SECRET = os.environ["ORDA_WEBHOOK_SECRET"]seen = set() # в бою — таблица обработанных id событий
@app.post("/orda/webhook")async def orda_webhook(request: Request): raw = await request.body() if not verify_orda_signature(raw, request.headers.get("Orda-Signature", ""), SECRET): return Response(status_code=401) event = await request.json() if event["id"] not in seen: seen.add(event["id"]) # поставить в очередь: обновить статус документа event["data"]["externalId"] return Response(status_code=204)verify_orda_signature — на странице Вебхуки (там же Node.js и PHP).
Postman / Insomnia / генерация клиента
Заголовок раздела «Postman / Insomnia / генерация клиента»Импортируйте openapi.json: Postman → Import → Link. Клиент на любом языке:
npx @openapitools/openapi-generator-cli generate -i openapi.json -g python -o orda-client.