/api/v1/passports/batchМасово създаване на паспорти
Създаване на до 100 паспорта в едно извикване. Всеки елемент носи същата форма като endpoint-а за единично създаване ({ productId, gs1: { gtin, serialNumber }, parties? }). Частичен успех на елемент — всеки получава свой статус в масива на отговора.
Целият batch се проверява предварително за N записвания: ако би надвишил дневния бюджет, целият batch връща 429 и нищо не се създава. В бюджета се отчитат само реално създадените паспорти. Всеки паспорт се създава като чернова, а черновата не заема място от лимита maxDpps на плана. Затова batch-ът никога не връща грешка за overage и не се таксува. Лимитът на плана и евентуалната такса за паспорт над него се прилагат, когато всеки паспорт се публикува от таблото.
Idempotency-Key важи за целия batch — повтаряне на същия ключ връща оригиналния пълен резултатен масив. Лимитът е 100 елемента на повикване (съответства на batch ceiling-а на Stripe).
Хедъри
- Authorizationзадължително
string
Bearer <token>— илиtp_API ключ (Developer → API Keys; най-просто, за server-to-server), или OAuth 2.0 access token (Developer → OAuth Apps; за приложения, авторизирани от потребител, scoped и отзоваеми). Страницата Authentication съдържа пълния OAuth поток и списъка със scopes.e.g. Bearer tp_REDACTED_xxxxxxxxxxxx
- Idempotency-Key
string
UUID v4 — важи за целия batch.
Полета в тялото
- passportsзадължително
Array<CreatePassportInput> (1-100)
1–100 обекта паспорти, всеки във формата на single-create, включително незадължителен блок
lineageза всеки елемент при батерии с втори живот. Нарушено правило за lineage проваля само този елемент: резултатът му еstatus: "error", аerrorзапочва с кода на правилото, напр.duplicate_predecessor: ….
Заявка
curl -sS -X POST https://app.tracepass.eu/api/v1/passports/batch \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
-H "Idempotency-Key: 7b4f1e2c-9a3d-4e5b-8c1a-2d3e4f5a6b7c" \
-H "Content-Type: application/json" \
-d '{
"passports": [
{ "productId": "6650a1b2c3d4e5f6a7b8c9d0", "gs1": { "gtin": "04012345000016", "serialNumber": "BP-48V-100-000001" } },
{ "productId": "6650a1b2c3d4e5f6a7b8c9d0", "gs1": { "gtin": "04012345000016", "serialNumber": "BP-48V-100-000002" } },
{ "productId": "6650a1b2c3d4e5f6a7b8c9d0", "gs1": { "gtin": "04012345000016", "serialNumber": "BP-48V-100-000003" } }
]
}'Отговор
{
"results": [
{ "index": 0, "status": "created", "data": { "_id": "...", "gs1": { "...": "..." }, "status": "draft" } },
{ "index": 1, "status": "error", "error": "Serial number already exists for this GTIN" },
{ "index": 2, "status": "created", "data": { "...": "..." } }
],
"summary": { "created": 2, "errors": 1, "total": 3 }
}