kvitera

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; use recommendation.
  • 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.

On this page