First request
From an API key to a receipt verification result.
1. Prepare your API key
Create an API key in your dashboard and store it on your server. Do not expose it in a browser or mobile app.
export KVITERA_API_URL='https://api.kvitera.tech'
export KVITERA_API_KEY='<your API key>'2. Submit a receipt
Prepare the original PDF. Replace the file path, amount, recipient name and time window in the example with your request’s details. Include a time zone in each date.
curl "$KVITERA_API_URL/v1/checks" \
-H "Authorization: Bearer $KVITERA_API_KEY" \
-H 'Idempotency-Key: payment-123-attempt-1' \
-F 'file=@receipt.pdf' \
-F 'external_id=payment-123' \
-F 'expectation={"bank":"kz.kaspi","amount":2000,"currency":"KZT","recipient":{"name":"Алексей Петров"},"window":{"from":"2026-09-09T10:00:00+03:00","to":"2026-09-09T11:00:00+03:00"}}'expectation is a JSON string containing the expected payment details.
external_id links the result to your request. Idempotency-Key prevents a duplicate
check if the response is lost.
Do not set Content-Type manually: curl creates the correct header for the file upload.
3. Handle the response
Save the check’s id. Read status first:
done— the check is complete; userecommendation.failed— processing did not complete; follow the retry instructions.
Example of the key response fields; other fields are omitted:
{
"id": "chk_example",
"external_id": "payment-123",
"status": "done",
"recommendation": "accept"
}accept means the receipt passed, review requires review, and reject means it does not qualify.
See Read the result for details.
4. Retrieve the saved result
Replace chk_example with the returned check ID:
curl "$KVITERA_API_URL/v1/checks/chk_example" \
-H "Authorization: Bearer $KVITERA_API_KEY"Reading a result does not create another check. If you only have your own request ID,
search by external_id.