Process tickets using Easypromos AI
Upload receipts and get structured deterministic JSON back
You only need a Easypromos account with an API key
Features
- Images or PDF input
- Deterministic JSON Output
- Webhook ready
- From 0.02 USD per validation
- Get the JSON in less than 8 seconds in average
Flow
Submit an image or PDF receipt and 1) Get an event that you can poll or 2) Send us a webhook url and then 3) Receive the structured AI JSON output.
Authentication
Bearer token per Easypromos account. Start with 50 trial credits in the panel, then buy more when you need them. From 0.02 USD per validation.
Endpoints
POST /v2/ocr/tickets
GET /v2/ocr/events/{event_id}
API examples
Poll or receive a webhook
Example 1
Upload and poll the event
curl -X POST "https://api.easypromosapp.com/v2/ocr/tickets" \
-H "Authorization: Bearer $TOKEN" \
-F "ticket=@receipt.jpg"
Upload response with the generated event_id:
{
"status": "ok",
"event_id": 987654,
"created_at": "2026-04-08T09:30:00Z"
}
Polling request:
curl -X GET "https://api.easypromosapp.com/v2/ocr/events/987654" \
-H "Authorization: Bearer $TOKEN"
Finished response:
{
"status": "finished",
"event_id": 987654,
"finished_status": "ok",
"result": {
"header": {
"store_name": "CLAREL",
"store_address": "AV PRIMERO DE JUNIO 66",
"tax_id": "A43227628",
"phone": "+34912345678",
"date": "2025-09-24",
"time": "20:08",
"receipt_number": "00309139",
"currency": "EUR",
"city": "Venta de Banos",
"postal_code": "34200",
"country": "Spain",
"country_code": "ES",
"timezone": "Europe/Madrid",
"utc_date_time": "2025-09-24T20:08:00+02:00"
},
"line_items": [
{
"article": "SERUM REVITALIFT LAS",
"sku": "171752",
"quantity": 1,
"total": 24.19
},
{
"article": "CREMA REVITALIF LASE",
"sku": "155687",
"quantity": 1,
"total": 22.09
},
{
"article": "DETER MAQU CAPSULA O",
"sku": "308872",
"quantity": 1,
"total": 9.99
},
{
"article": "ESPUMA PERFECT VOLUM",
"sku": "290794",
"quantity": 1,
"total": 5.49
},
{
"article": "LACA PERFECT VOLUMEN",
"sku": "290790",
"quantity": 1,
"total": 5.29
}
],
"footer": {
"total": 37.87
},
"controls": {
"handwritten": 0,
"text_quality": 95
}
},
"processed_at": "2026-04-08 09:30:18"
}
Example 2
Upload and receive a webhook
curl -X POST "https://api.easypromosapp.com/v2/ocr/tickets" \
-H "Authorization: Bearer $TOKEN" \
-F "ticket=@receipt.jpg" \
-F "webhook_url=https://your-app.example/webhooks/easypromos" \
-F "webhook_key=your-shared-secret"
Webhook payload sent by Easypromos when processing finishes:
{
"event_id": 987654,
"status": "finished",
"finished_status": "ok",
"result": {
"header": {
"store_name": "CLAREL",
"store_address": "AV PRIMERO DE JUNIO 66",
"tax_id": "A43227628",
"phone": "+34912345678",
"date": "2025-09-24",
"time": "20:08",
"receipt_number": "00309139",
"currency": "EUR",
"city": "Venta de Banos",
"postal_code": "34200",
"country": "Spain",
"country_code": "ES",
"timezone": "Europe/Madrid",
"utc_date_time": "2025-09-24T20:08:00+02:00"
},
"line_items": [
{
"article": "SERUM REVITALIFT LAS",
"sku": "171752",
"quantity": 1,
"total": 24.19
},
{
"article": "CREMA REVITALIF LASE",
"sku": "155687",
"quantity": 1,
"total": 22.09
},
{
"article": "DETER MAQU CAPSULA O",
"sku": "308872",
"quantity": 1,
"total": 9.99
},
{
"article": "ESPUMA PERFECT VOLUM",
"sku": "290794",
"quantity": 1,
"total": 5.49
},
{
"article": "LACA PERFECT VOLUMEN",
"sku": "290790",
"quantity": 1,
"total": 5.29
}
],
"footer": {
"total": 37.87
},
"controls": {
"handwritten": 0,
"text_quality": 95
}
},
"processed_at": "2026-04-08 09:30:18"
}
Need the schema?
Review the cleaned ticket payload and the JSON Schema side by side.
The schema matches the same cleaned result used in Easypromos pre-moderation.