Перейти до основного вмісту

Меню команд

Перейдіть на сторінку або пошукайте в каталозі

API

Документація API

Повний довідник із Getly Developer API v1

Автентифікація

Усі запити до API мають містити ваш API-ключ у заголовку Authorization зі схемою токена Bearer.

HTTP header
Authorization: Bearer gk_your_api_key_here

Доступні області доступу

API-ключі прив'язані до конкретного магазину й мають детальні права. Створюйте ключі тут: /dashboard/developer/keys.

read:productswrite:productsread:ordersread:storewrite:storeread:analyticswebhooks:manageread:postswrite:postsread:couponswrite:couponsread:licenseswrite:licensescheckout:createread:billingwrite:billing

Ліміти запитів

Запити до API обмежено до 100 requests per minute на один API-ключ. Якщо ви перевищите ліміт, отримаєте відповідь 429: зачекайте трохи й повторіть спробу.

Плануйте інтеграції так, щоб вкладатися в ці ліміти. Групуйте операції, де це можливо, і кешуйте відповіді у себе.

Обробка помилок

Усі відповіді API мають єдиний формат. Помилки містять описове повідомлення.

application/json
// Success
{ "success": true, "data": { ... } }

// Error
{
  "success": false,
  "error": "Description of what went wrong",
  "errorDetail": {
    "code": "validation_failed",   // stable, safe to branch on
    "message": "price must be a positive integer in cents",
    "hint": "Fix the field named in `param` and retry the same request.",
    "param": "price",              // omitted when no single field is at fault
    "docsUrl": "https://www.getly.store/developers/docs#errors"
  }
}

HTTP-коди статусу

200 - Успішно

201 - Створено

400 - Некоректний запит (неприпустимі дані)

401 - Не авторизовано (ключ API відсутній або недійсний)

403 - Заборонено (немає потрібної області доступу або ресурс не ваш)

404 - Не знайдено

500 - Внутрішня помилка сервера

Ендпоінти

Базовий URL: https://www.getly.store. Усі ціни вказано в центах (напр., 1999 = $19.99).

GET/api/v1/productsread:products

Переглянути товари свого магазину

bash
curl -X GET "https://www.getly.store/api/v1/products?page=1&limit=20" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "name": "Premium Icon Pack",
      "slug": "premium-icon-pack-abc123",
      "price": 1999,
      "status": "active",
      "category": { "id": "uuid", "name": "Design", "slug": "design" },
      "images": [{ "url": "...", "altText": "..." }]
    }
  ],
  "total": 42,
  "page": 1,
  "limit": 20,
  "hasMore": true
}
POST/api/v1/productswrite:products

Створити новий товар у своєму магазині

bash
curl -X POST "https://www.getly.store/api/v1/products" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My New Product",
    "description": "A great digital product",
    "price": 29.99,
    "categoryId": "uuid",
    "status": "active",
    "tags": ["design", "icons"],
    "images": [{ "url": "https://cdn.getly.store/...png", "altText": "cover" }],
    "files": [{ "fileUrl": "https://cdn.getly.store/files/.../abc.zip", "fileName": "pack.zip", "fileSize": 10485760, "fileType": "application/zip" }]
  }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "My New Product",
    "slug": "my-new-product-abc123",
    "price": 2999,
    "status": "active",
    "createdAt": "2025-01-15T10:30:00Z"
  }
}
GET/api/v1/products/:idread:products

Отримати деталі товару за ID

bash
curl -X GET "https://www.getly.store/api/v1/products/{id}" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Premium Icon Pack",
    "price": 1999,
    "images": [...],
    "files": [...],
    "reviews": [...]
  }
}
PATCH/api/v1/products/:idwrite:products

Оновити наявний товар

bash
curl -X PATCH "https://www.getly.store/api/v1/products/{id}" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Updated Name", "price": 39.99 }'
Відповідь · application/json
{
  "success": true,
  "data": { "id": "uuid", "name": "Updated Name", "price": 3999 }
}
DELETE/api/v1/products/:idwrite:products

Архівуйте (м'яке видалення) товар. Він перестає бути публічним; наявні замовлення й завантаження продовжують працювати.

bash
curl -X DELETE "https://www.getly.store/api/v1/products/{id}" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": { "id": "uuid", "status": "archived" },
  "message": "Product archived"
}
POST/api/v1/products/:id/fileswrite:products

Додайте до товару файл для завантаження. Для малих файлів використовуйте multipart, а для файлів до 2 ГБ підмаршрут presign + прямий PUT до R2. Також можна передати масив files[] у POST /api/v1/products, щоб додати файли одразу під час створення.

bash
# Direct upload (multipart) - best for files under ~4MB:
curl -X POST "https://www.getly.store/api/v1/products/{id}/files" \
  -H "Authorization: Bearer gk_your_api_key" \
  -F "file=@/path/to/your-file.zip"

# Large files (up to 2GB) - 3 steps:
# 1) get a presigned upload URL
curl -X POST "https://www.getly.store/api/v1/products/{id}/files/presign" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "fileName": "pack.zip", "fileSize": 524288000, "fileType": "application/zip" }'
# 2) PUT the bytes straight to R2 (use the returned uploadUrl)
curl -X PUT "<uploadUrl>" --data-binary "@/path/to/pack.zip" \
  -H "Content-Length: 524288000"
# 3) attach the uploaded object (use the returned fileUrl)
curl -X POST "https://www.getly.store/api/v1/products/{id}/files" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "fileUrl": "<fileUrl>", "fileName": "pack.zip", "fileSize": 524288000, "fileType": "application/zip" }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "fileName": "pack.zip",
    "fileUrl": "https://cdn.getly.store/files/.../abc.zip",
    "fileSize": 524288000,
    "fileType": "application/zip",
    "version": "1.0",
    "isLatest": true,
    "createdAt": "2026-06-02T10:30:00Z"
  }
}
POST/api/v1/uploads/images/presignwrite:products

Отримайте попередньо підписану URL-адресу, щоб завантажити зображення товару (макс. 10 МБ; png, jpeg, webp, gif, avif). Обов'язково, щоб товар міг вийти в продаж.

bash
# Images are uploaded in 3 steps - there is no direct multipart route.
# 1) ask for a presigned URL (max 10MB; png, jpeg, webp, gif or avif)
curl -X POST "https://www.getly.store/api/v1/uploads/images/presign" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "fileName": "cover.png", "fileSize": 184320, "contentType": "image/png" }'

# 2) PUT the raw bytes to the returned uploadUrl (expires in 1h) with the
#    returned uploadHeaders. Content-Length MUST equal the fileSize you declared.
#    Send Content-Type equal to the declared type (curl --data-binary alone sends
#    a form type; Getly corrects it when the image is attached, but send it anyway).
curl -X PUT "<uploadUrl>" --data-binary "@/path/to/cover.png" \
  -H "Content-Type: image/png" -H "Content-Length: 184320"

# 3) reference the returned publicUrl when you create or update the product.
#    An image is REQUIRED before a product can go live.
curl -X PATCH "https://www.getly.store/api/v1/products/{id}" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "images": ["<publicUrl>"] }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "uploadUrl": "https://<bucket>.r2.cloudflarestorage.com/...",
    "uploadHeaders": { "Content-Type": "image/png" },
    "publicUrl": "https://cdn.getly.store/images/.../abc.png",
    "expiresIn": 3600
  }
}
GET/api/v1/products/:id/keysread:products

Перелічіть пул ліцензійних ключів товару: лічильники (доступні/видані/очікують) і маскований список із розбиттям на сторінки. Ключ відкритим текстом ніколи не повертається.

bash
curl -X GET "https://www.getly.store/api/v1/products/{id}/keys?limit=50&offset=0" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "keyPoolEnabled": true,
    "keyPoolLowThreshold": 5,
    "counts": { "available": 12, "issued": 40, "waiting": 0 },
    "keys": [
      { "id": "uuid", "masked": "ABCD…WXYZ", "status": "available", "issuedAt": null, "orderItemId": null, "refunded": false }
    ],
    "limit": 50,
    "offset": 0,
    "total": 52
  }
}
POST/api/v1/products/:id/keyswrite:products

Вставте власні ключі, ваучери або унікальні URL у пул товару, по одному на елемент масиву. Дублікати й порожні значення повідомляються, а не мовчки відкидаються; покупці, які чекали, одразу отримують ключ.

bash
curl -X POST "https://www.getly.store/api/v1/products/{id}/keys" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "keys": ["ABCD-1234-EFGH-5678", "IJKL-9012-MNOP-3456"] }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "added": 2,
    "duplicates": 0,
    "duplicatesInInput": 0,
    "tooLong": 0,
    "blank": 0,
    "filled": 1
  }
}
DELETE/api/v1/products/:id/keys/:keyIdwrite:products

Видаліть непроданий ключ із пулу. Виданий ключ є записом про продаж, тож його не можна видалити: 409 key_not_available.

bash
curl -X DELETE "https://www.getly.store/api/v1/products/{id}/keys/{keyId}" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": { "id": "uuid", "removed": true }
}
GET/api/v1/ordersread:orders

Переглянути замовлення з позиціями з вашого магазину

bash
curl -X GET "https://www.getly.store/api/v1/orders?page=1&limit=20" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "orderId": "uuid",
      "price": 2999,
      "order": { "status": "completed", "buyer": { "name": "John" } },
      "product": { "name": "Premium Pack" }
    }
  ],
  "total": 156,
  "page": 1
}
GET/api/v1/orders/:idread:orders

Отримати деталі замовлення (лише позиції з вашого магазину)

bash
curl -X GET "https://www.getly.store/api/v1/orders/{id}" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "status": "completed",
    "total": 5999,
    "buyer": { "name": "John", "email": "[email protected]" },
    "items": [...]
  }
}
GET/api/v1/storeread:store

Отримати інформацію про свій магазин

bash
curl -X GET "https://www.getly.store/api/v1/store" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "My Store",
    "slug": "my-store",
    "description": "...",
    "totalSales": 250,
    "totalRevenue": 450000,
    "badges": [...]
  }
}
PATCH/api/v1/storewrite:store

Оновити назву магазину, опис, сайт і socialLinks

bash
curl -X PATCH "https://www.getly.store/api/v1/store" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "description": "Updated store description" }'
Відповідь · application/json
{
  "success": true,
  "data": { "id": "uuid", "name": "My Store", "description": "Updated store description" }
}
GET/api/v1/analyticsread:analytics

Отримайте аналітику продажів вашого магазину

bash
curl -X GET "https://www.getly.store/api/v1/analytics" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "totalSales": 250,
    "totalRevenue": 450000,
    "monthlySales": 42,
    "monthlyRevenue": 75000,
    "averageOrderValue": 1800,
    "productCount": 15,
    "totalDownloads": 1200,
    "salesByMonth": [
      { "month": "2025-01", "sales": 38, "revenue": 68000 }
    ]
  }
}
GET/api/v1/webhook-endpointswebhooks:manage

Перелічіть endpoint-и вебхуків вашого магазину

bash
curl -X GET "https://www.getly.store/api/v1/webhook-endpoints" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "url": "https://example.com/webhooks",
        "events": ["sale.completed"],
        "isActive": true
      }
    ],
    "nextCursor": null
  }
}
POST/api/v1/webhook-endpointswebhooks:manage

Зареєструйте новий endpoint вебхука

bash
curl -X POST "https://www.getly.store/api/v1/webhook-endpoints" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/webhooks",
    "events": ["sale.completed", "product.updated"]
  }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "url": "https://example.com/webhooks",
    "events": ["sale.completed", "product.updated"],
    "secret": "abcdef1234567890..."
  }
}
POST/api/v1/postswrite:posts

Створіть допис блогу автора з Markdown. Встановіть crosspostMuhamor у true, щоб показати його також у спільноті Getly Creators на Muhamor: копія посилається на ваш допис як на оригінал, а допис лише для підписників потрапляє туди тільки як анонс.

bash
curl -X POST "https://www.getly.store/api/v1/posts" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7b1f0c2e-post-1" \
  -d '{
    "title": "How I made my icon pack",
    "contentMarkdown": "## The idea\n\nIt started with...",
    "status": "published",
    "crosspostMuhamor": true
  }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "title": "How I made my icon pack",
    "slug": "how-i-made-my-icon-pack",
    "status": "published",
    "crosspostMuhamor": true
  }
}
GET/api/v1/public/products/{slug}public

Публічний, без API-ключа: картка активного товару за його slug (назва, ціна в центах з урахуванням чинної знижки, обкладинка, магазин). 404 для всього, що не продається. 60 запитів на хвилину з одного IP.

bash
curl "https://www.getly.store/api/v1/public/products/premium-icon-pack-abc123"
Відповідь · application/json
{
  "success": true,
  "data": {
    "slug": "premium-icon-pack-abc123",
    "name": "Premium Icon Pack",
    "shortDescription": "120 line icons",
    "priceCents": 1999,
    "currency": "USD",
    "avgRating": 4.8,
    "reviewCount": 12,
    "imageUrl": "https://cdn.getly.store/images/.../cover.webp",
    "store": { "name": "Pixel Studio", "slug": "pixel-studio" },
    "urls": { "product": "https://www.getly.store/product/premium-icon-pack-abc123" }
  }
}
POST/api/v1/billing/planswrite:billing

Створіть регулярний план для ВАШОГО власного товару (Getly Billing). amount у цілих центах (мін. 50), intervalUnit day/week/month/year, intervalCount 1–52. Потрібна схвалена заявка на Billing: до того часу 403 billing_not_approved. GET повертає список планів; GET/PATCH /{id} читає й редагує один.

bash
curl -X POST "https://www.getly.store/api/v1/billing/plans" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Pro", "amount": 1900, "intervalUnit": "month", "externalId": "pro-monthly" }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Pro",
    "amount": 1900,
    "currency": "usd",
    "interval": { "unit": "month", "count": 1 },
    "externalId": "pro-monthly",
    "isActive": true
  }
}
POST/api/v1/billing/checkoutwrite:billing

Створіть розміщену сторінку підписки для одного клієнта, дійсну 24 години. customerRef - це ваш власний id клієнта, він повертається в кожному вебхуку billing.* як externalCustomerRef. Клієнт платить карткою (поновлюється сама) або криптою (один період за раз).

bash
curl -X POST "https://www.getly.store/api/v1/billing/checkout" \
  -H "Authorization: Bearer gk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "planId": "uuid", "customerRef": "user_8841",
        "successUrl": "https://your-app.com/welcome",
        "cancelUrl": "https://your-app.com/pricing" }'
Відповідь · application/json
{
  "success": true,
  "data": {
    "url": "https://www.getly.store/billing/subscribe/uuid?t=…",
    "expiresAt": "2026-09-09T09:00:00.000Z"
  }
}
GET/api/v1/billing/subscriptions/{id}read:billing

Перевірка статусу, яку ваш бекенд виконує перед наданням доступу. status: active, past_due (поновлення карткою не вдалося, процесор повторює спробу), canceled, expired (минув період, оплачений криптою). Вважайте active і past_due такими, що мають доступ до currentPeriodEnd. Endpoint списку фільтрує за status, customerRef і planId.

bash
curl "https://www.getly.store/api/v1/billing/subscriptions/uuid" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": {
    "id": "uuid",
    "customerRef": "user_8841",
    "status": "active",
    "paymentMethod": "stripe",
    "currentPeriodEnd": "2026-10-08T09:14:00.000Z",
    "cancelAtPeriodEnd": false,
    "plan": { "name": "Pro", "amount": 1900, "interval": { "unit": "month", "count": 1 } }
  }
}
POST/api/v1/billing/subscriptions/{id}/cancelwrite:billing

Зупиніть поновлення наприкінці оплаченого періоду, ніколи не миттєве відключення. Ви отримаєте billing.subscription.canceled, коли період завершиться (картка), або billing.subscription.expired (крипта). 409 subscription_not_cancellable, якщо вже завершено.

bash
curl -X POST "https://www.getly.store/api/v1/billing/subscriptions/uuid/cancel" \
  -H "Authorization: Bearer gk_your_api_key"
Відповідь · application/json
{
  "success": true,
  "data": { "id": "uuid", "status": "active", "cancelAtPeriodEnd": true, "currentPeriodEnd": "2026-10-08T09:14:00.000Z" }
}

Getly Billing

Регулярні плани для товару, яким ви керуєте самі: SaaS, спільнота, інструмент. Плани живуть в API, сторінка підписки живе на getly.store, а ваш бекенд надає доступ на основі п'яти вебхуків, і всі вони містять ваше власне посилання на клієнта.

Доступ за заявкою: розкажіть нам про свій сайт і що ви продаєте на /dashboard/billing. До схвалення виклики запису відповідають 403 billing_not_approved, а виклики читання працюють.

  • billing.subscription.created
  • billing.subscription.renewed
  • billing.payment_failed
  • billing.subscription.canceled
  • billing.subscription.expired
Як працює Getly Billing

Видавайте власні ліцензійні ключі

Товар може видавати ключі, які ви вже згенерували (реєстраційні ключі, коди ваучерів або унікальні URL), замість ключа, який створює Getly. Getly видає наступний ключ за кожен продаж, першим продається той, що вставлений першим, і ніколи не блокує продаж через порожній пул: покупцеві повідомляють електронною поштою, що ключ уже в дорозі, і він отримує його щойно додадуть нові.

  • Панель керування: редагування товару → крок «Ціна» → «Видавати мої власні ліцензійні ключі» (пулу потрібен id товару, тому під час створення він недоступний). Один ключ на рядок, до 5,000 за одне додавання; не поєднується з ключами, які генерує Getly, для того самого товару.
  • API: GET/POST /api/v1/products/{id}/keys перелічує й додає ключі; DELETE /api/v1/products/{id}/keys/{keyId} видаляє непроданий. keyPoolEnabled і keyPoolLowThreshold належать самому товару й задаються через POST/PATCH /api/v1/products.

Віддаєте перевагу власному бекенду? Тепер кожен елемент sale.completed містить licenseKey (ключ, уже виданий для цього елемента, з пулу або згенерований Getly, чи null, поки він очікує) разом із buyerEmail, тож ви можете переслати його або надіслати власний.

Вебхуки

Вебхуки дають вашому застосунку змогу отримувати сповіщення в реальному часі, коли в магазині щось відбувається. Реєструйте ендпоінти тут: /dashboard/developer/webhooks або через API.

Типи подій

sale.completed - Продаж одного з ваших товарів завершено. Містить email покупця, тож ви можете надіслати власний ліцензійний ключ.

product.created - У вашому магазині створено товар

product.updated - Товар у вашому магазині оновлено

review.created - Хтось залишив новий відгук на один із ваших товарів

download.completed - Покупець завантажив один із ваших товарів

refund.created - Покупець попросив повернути кошти (рішення надійде пізніше як order.refunded)

order.refunded - За одним із ваших замовлень проведено повернення коштів

dispute.created - Покупець відкрив спір

dispute.resolved - Спір вирішено

checkout_link.completed - Платіжне посилання сплачено

license.activated - Ліцензійний ключ активовано

access.expiring - Покупка з обмеженим у часі доступом спливає за 7 днів

access.expired - Покупка з обмеженим у часі доступом спливла

billing.subscription.created - Getly Billing: клієнт оформив підписку на один із ваших тарифів

billing.subscription.renewed - Getly Billing: підписку продовжено й оплачено

billing.payment_failed - Getly Billing: не вдалося провести платіж за продовження

billing.subscription.canceled - Getly Billing: підписку скасовано

billing.subscription.expired - Getly Billing: підписка, оплачена криптою, спливла без оплати

* - Підписатися на всі події

Формат payload

Кожне надсилання вебхука передає POST-запит із JSON такої структури:

POST · application/json
POST https://your-endpoint.com/webhooks
Content-Type: application/json
X-Getly-Signature: sha256=<hmac_hex>
X-Getly-Event: sale.completed

{
  "deliveryId": "uuid",
  "event": "sale.completed",
  "data": {
    "orderId": "uuid",
    "buyerId": "uuid",
    "buyerEmail": "[email protected]",
    "items": [
      {
        "orderItemId": "uuid",
        "productId": "uuid",
        "price": 2999,
        "sellerAmount": 2399,
        "isGift": false,
        "licenseKey": null
      }
    ],
    "total": 2999
  },
  "timestamp": "2026-09-23T10:30:00.000Z"
}

Перевірка підпису

Кожне надсилання вебхука містить заголовок X-Getly-Signature. Перевіряйте підпис за допомогою HMAC-SHA256 і секрету вашого вебхука, щоб переконатися, що запит надійшов від Getly.

node.js
const crypto = require('crypto');

function verifyWebhook(body, signature, secret) {
  const expected = 'sha256=' +
    crypto
      .createHmac('sha256', secret)
      .update(body)
      .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// In your webhook handler
app.post('/webhooks', (req, res) => {
  const signature = req.headers['x-getly-signature'];
  const isValid = verifyWebhook(
    JSON.stringify(req.body),
    signature,
    process.env.GETLY_WEBHOOK_SECRET
  );

  if (!isValid) {
    return res.status(401).send('Invalid signature');
  }

  const { event, data } = req.body;
  // Handle the event...

  res.status(200).send('OK');
});

Політика повторних спроб

Невдалі надсилання (відповідь не 2xx або тайм-аут) автоматично повторюються з наростаючою затримкою:

Спроба 1: Повторна спроба через 1 хвилину

Спроба 2: Повторна спроба через 5 хвилин

Спроба 3: Повторна спроба через 30 хвилин

Спроба 4: Повторна спроба через 2 години

Спроба 5: Відмова (надсилання позначається як невдале)

Ваш ендпоінт має відповісти протягом 10 секунд. Поверніть код 2xx, щоб підтвердити отримання.