Upload a receipt file (base64 JSON, max 8MB, returns URL + storage key)
POST
/api/v1/uploads/receipt
const url = 'https://api.dokanmazad.com/api/v1/uploads/receipt';const options = { method: 'POST', headers: {'X-API-Key': '<X-API-Key>', 'Content-Type': 'application/json'}, body: '{"filename":"receipt_jan2026.jpg","mimeType":"image/jpeg","dataBase64":"/9j/4AAQSkZJRgABAQEA..."}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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..." }'Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”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..."}Responses
Section titled “Responses”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}Headers
Section titled “Headers”Retry-After
integer
Seconds to wait before retrying
