Перейти к содержимому

Примеры: 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"
const API = process.env.ORDA_API; // например https://api.ordatms.kz/api/v1
const 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}`)));
}
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"])
# FastAPI
from fastapi import FastAPI, Request, Response
app = 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).

Импортируйте openapi.json: Postman → Import → Link. Клиент на любом языке: npx @openapitools/openapi-generator-cli generate -i openapi.json -g python -o orda-client.