Skip to content

Upload a receipt file (base64 JSON, max 8MB, returns URL + storage key)

POST
/api/v1/uploads/receipt
curl --request POST \
--url https://api.dokanmazad.com/api/v1/uploads/receipt \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "filename": "receipt_jan2026.jpg", "mimeType": "image/jpeg", "dataBase64": "/9j/4AAQSkZJRgABAQEA..." }'
Media typeapplication/json
object
filename
required

Original filename of the receipt (e.g. “receipt_jan2026.jpg”)

string
mimeType
required

MIME type of the file. Allowed: image/jpeg, image/png, image/webp, image/heic, application/pdf

string
dataBase64
required

Raw base64-encoded file content (no data-URI prefix). Max 8 MB after decode.

string
Examples
Exampledefault
{
"filename": "receipt_jan2026.jpg",
"mimeType": "image/jpeg",
"dataBase64": "/9j/4AAQSkZJRgABAQEA..."
}

Success

Media typeapplication/json
object
success
required
boolean
data
required
meta
object
page
integer
limit
integer
total
integer
totalPages
integer
data
required
object
url
required

Public CDN URL of the uploaded file

string
key
required

R2 storage key — use as receiptFileUrl when creating billing records

string
Examples
Examplesuccess
{
"success": true,
"data": {
"url": "https://assets.dokanmazad.com/receipts/clx1abc/1714000000000_receipt_jan2026.jpg",
"key": "receipts/clx1abc/1714000000000_receipt_jan2026.jpg"
}
}

Unauthorized — missing or invalid API key

Media typeapplication/json
object
success
required
boolean
error
required
string
statusCode
required
integer
Example
{
"success": false
}

Forbidden — route not in this key’s allowedRoutes

Media typeapplication/json
object
success
required
boolean
error
required
string
statusCode
required
integer
Example
{
"success": false
}

Rate limit exceeded

Media typeapplication/json
object
success
required
boolean
error
required
string
statusCode
required
integer
Example
{
"success": false
}
Retry-After
integer

Seconds to wait before retrying