Quick start
Create a key, send a receipt and read the checked result.
You will create a test key, add a document type from a built-in template, send a photo of a card terminal receipt, and read what ReceViz returns. The console's Playground makes the same requests from your browser if you would rather try it there first.
Set up in the console#
You sign in to the console with an AccountHouse or Accmerio account; ReceViz has no separate sign-up.
ReceViz gives each organization its own applications, keys and document types. If your organization does not have access yet, request access for it; ReceViz reviews every request. If it already uses ReceViz, ask one of its owners or admins to add your email under Members: you are in the next time you sign in with that email. Once you are in, open the console and:
- Create an application with the environment
development. Applications in development and test issue test keys (rv_test_…); only production applications issue live keys (rv_live_…). - Add a document type from the Payment Terminal Receipt template and publish it (publishing needs the admin or owner role). Its key is
payment_receipt. Extraction always uses a published version, never a draft. - Create a secret key for the application. It is shown once: ReceViz keeps only a hash of it. Store it in your server's environment as
RECEVIZ_SECRET_KEY.
A secret key belongs on your server
Never put it in a web page, a mobile app or a repository. Apps and pages use short-lived client tokens instead; see Authentication.
Send a document#
Send the photo to POST /v1/extractions as multipart form data, with the document type and a mode. standard reads the fields and runs every deterministic check.
RECEVIZ_API="https://accounthouse-backend-793493499887.me-central1.run.app/api/receviz/v1"
curl "$RECEVIZ_API/extractions" \
-H "Authorization: Bearer $RECEVIZ_SECRET_KEY" \
-F "file=@receipt.jpg" \
-F "document_type=payment_receipt" \
-F "mode=standard"A photo or a short PDF is read while you wait, and the response is 200. A file over 10 MB or a PDF of more than three pages is queued instead and answered with 202; the Extractions guide shows how to collect it.
Read the result#
This is the response, trimmed to the parts that matter first:
{
"id": "rv_req_8fK2aQ0zT3mN1pL5vB7xY9",
"object": "extraction",
"status": "succeeded",
"document_type": "payment_receipt",
"schema_version": 1,
"mode": "standard",
"data": {
"amount": 150,
"currency": "AED",
"transaction_date": "2026-09-26",
"transaction_time": "14:05",
"receipt_number": "000102",
"rrn": "626914123456",
"auth_code": "A1B2C3",
"terminal_id": "12345678",
"payment_method": "card",
"card_scheme": "visa",
"card_last_four": "4242",
"approved": true,
"merchant": "BLUE DHOW CAFE",
"merchant_address": "DUBAI MARINA WALK"
},
"fields": {
"amount": {
"value": 150,
"type": "currency",
"status": "ok",
"confidence": 0.906,
"verified": false,
"checks": [],
"source": "rules",
"page": 1,
"bounding_box": {
"x": 0.77,
"y": 0.7136,
"width": 0.18,
"height": 0.05
},
"raw_text": "AED 150.00"
}
},
"review": {
"required": false,
"reasons": []
}
}dataholds the values alone, shaped exactly like the document type. It is what you store. A field that was not found isnull, never left out.fieldsholds each value with its evidence: its status, a confidence from 0 to 1, what checked it, the page, the box it was printed in (fractions of the page from the top-left corner) and the printed text itself.review.requiredistruewhen a person should look, andreview.reasonssays which field and why. Accept a result automatically only when it isfalse.
The id is also the request id: it is in the X-Request-Id header, in the console's request log and in any webhook about this extraction.
Where to go next#
- Define your own document type: the fields, the labels they are printed under, and the checks they must pass.
- Mint client tokens so a web page or an app can send documents without holding your key.
- Add the Web SDK for a camera scanner that takes one good picture.
- Receive webhooks instead of waiting on large documents.