Cashbox Public API

Минимальная публичная REST-документация для внешних интеграций: создание заданий и выполнение заданий.

Обновлено: 25 августа 2026 г.

Общие сведения

  • Base URL: https://test.cashbox.money
  • Формат: JSON, UTF-8
  • Авторизация: Authorization: Bearer <access_token>

На этой странице описан минимальный публичный API для внешних интеграторов. Полная интерактивная схема Swagger может содержать дополнительные endpoint-ы для Web UI, Admin и внутренних сценариев. Не все endpoint-ы Swagger являются публичным API.

Авторизация

Токен доступа выдаётся в личном кабинете Cashbox или по договорённости с Cashbox. Передавайте его в заголовке Authorization: Bearer <access_token>. Не используйте и не публикуйте реальные токены в примерах и логах.

Advertiser API — создание задания

Минимальный flow: категории → платформы → цены → создание задания.

GET /api/advertiser/offers/categories
Назначение

Получить список категорий заданий для создания оффера.

Auth / Role

Bearer token required · Role: Advertiser (рекламодатель)

Query

—

Response 200
[ { "id": 1, "name": "Social", "isActive": true, "sortOrder": 10 } ]
Частые ошибки

401 — не авторизован.

GET /api/advertiser/offers/platforms
Назначение

Получить список платформ. Можно отфильтровать по категории.

Auth / Role

Bearer token required · Role: Advertiser (рекламодатель)

Query

offerCategoryId (optional, long)

Response 200
[ { "id": 12, "name": "VK", "offerCategoryId": 1, "isActive": true } ]
Частые ошибки

401 — не авторизован.

GET /api/advertiser/offers/prices
Назначение

Получить доступные цены/типы задания для выбранной категории и платформы.

Auth / Role

Bearer token required · Role: Advertiser (рекламодатель)

Query

offerCategoryId (optional, long), offerPlatformId (optional, long)

Response 200
[ { "id": 456, "code": "vk_like", "rewardPerAction": 2.0, "isActive": true } ]
Частые ошибки

401 — не авторизован.

POST /api/advertiser/offers/draft
Назначение

Создать задание как черновик (Draft).

Auth / Role

Bearer token required · Role: Advertiser (рекламодатель)

Request body

OfferCreateDto: offerPriceId (required), title (required, max 500), totalLimit (required), sourceLanguage (optional), minAge, maxAge, gender, targetCountryIds, selectedAddOnIds, details (optional JSON по типу задания).

Example
{
  "offerPriceId": 456,
  "title": "Example task",
  "totalLimit": 100,
  "sourceLanguage": "ru"
}
Response 200
{ "id": 123, "title": "Example task", "status": "Draft", "offerPriceId": 456, "totalLimit": 100 }
Частые ошибки

400 — validation. 401 — не авторизован. 403 — недоступно.

POST /api/advertiser/offers/submit
Назначение

Создать задание и сразу отправить на модерацию.

Auth / Role

Bearer token required · Role: Advertiser (рекламодатель)

Request body

OfferCreateDto — те же поля, что для draft.

Example
{
  "offerPriceId": 456,
  "title": "Example task",
  "totalLimit": 100,
  "sourceLanguage": "ru"
}
Response 200
{ "id": 123, "title": "Example task", "status": "PendingModeration", "offerPriceId": 456, "totalLimit": 100 }
Частые ошибки

400 — validation. 401 — не авторизован. 403 — недоступно. 409 — конфликт бизнес-правил (например, недостаточно средств).

Executor API — выполнение задания

Минимальный flow: список доступных заданий → резерв → загрузка proof → отправка отчёта.

GET /api/executor/offers/available
Назначение

Получить список доступных заданий для исполнителя.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Query

Search, OfferCategoryId, OfferPlatformId, MinReward, MaxReward, ActivatedFrom, ActivatedTo, Page (default 1), PageSize (default 20, max 100), Locale

Response 200
{ "items": [ { "id": 123, "title": "Example task", "rewardPerAction": 2.0, "status": "Active" } ], "totalCount": 1, "page": 1, "pageSize": 20 }
Частые ошибки

401 — не авторизован. 404 — executor не найден.

GET /api/executor/offers/available/{offerId}
Назначение

Получить детали доступного задания.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Path

offerId (long)

Query

locale (optional, string)

Response 200
{ "id": 123, "title": "Example task", "rewardPerAction": 2.0, "totalLimit": 100, "status": "Active" }
Частые ошибки

401 — не авторизован. 404 — задание недоступно или не найдено.

POST /api/executor/offers/{offerId}/reserve
Назначение

Взять задание в работу / создать reservation.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Path

offerId (long)

Response 200
{ "id": 789, "alreadyExists": false, "expiresAtUtc": "2026-08-25T12:00:00Z" }
Частые ошибки

401 — не авторизован. 404 — задание не найдено. 409 — конфликт (возраст, страна, активная резервация и т.п.).

POST /api/executor/offers/{offerId}/proof/uploads
Назначение

Загрузить файлы доказательств (batch). Требуется активная reservation по этому offerId.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Path

offerId (long)

Multipart fields

files — один или несколько файлов (form field name: files).

Примечания

До 5 файлов за загрузку. Максимальный размер файла: 5 MB. Расширения: .jpg, .jpeg, .png, .webp, .pdf. MIME: image/png, image/jpeg, image/webp, application/pdf.

Response 200
{ "items": [ { "url": "https://test.cashbox.money/uploads/executor/proofs/example.jpg", "fileName": "example.jpg", "size": 102400, "contentType": "image/jpeg" } ] }
Частые ошибки

400 — validation (нет файлов, неверный тип/размер). 401 — не авторизован. 404 — нет активной reservation.

POST /api/executor/offers/{offerId}/submit-execution
Назначение

Отправить отчёт на проверку.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Path

offerId (long)

Request body

OfferSubmitDto: reservationId (required), proofUrls (array of URLs from uploads) or proofUrl (single URL), details (optional JSON по типу задания).

Example
{
  "reservationId": 789,
  "proofUrls": [
    "https://test.cashbox.money/uploads/executor/proofs/example.jpg"
  ]
}
Response 200
{ "id": 1001, "alreadyExists": false }
Частые ошибки

400 — validation. 401 — не авторизован. 404 — reservation не найдена. 409 — reservation expired / not active / conflict.

POST /api/executor/offers/{offerId}/reservation/cancel
Назначение

Отказаться от активной reservation по заданию.

Auth / Role

Bearer token required · Role: Executor (исполнитель)

Path

offerId (long)

Response 200
{ "outcome": "Cancelled", "reservationId": 789 }
Частые ошибки

401 — не авторизован. 404 — задание или reservation не найдены. 409 — конфликт состояния.

Коды ошибок

400 Bad Request — ошибка валидации. 401 Unauthorized — отсутствует или недействителен токен. 403 Forbidden — недостаточно прав или операция недоступна для текущего пользователя. 404 Not Found — ресурс не найден. 409 Conflict — конфликт бизнес-правил (например, резервация истекла или уже есть pending execution). 5xx — внутренняя ошибка сервера.