Make your first API call
Download a complete invoice request, send it with your API key and inspect the missing-PO finding. Use cURL, Python, Node.js or Postman. The expected response is HTTP 200 with a false verdict.
Prefer to try it without code? Create an account and open the console. For an integration, start with an API key below.
Get a key
Create an account, confirm the email code, then create a named API key on your account page. Copy the key when it is shown. In your terminal, replace the placeholder and set the environment variable:
Terminal environment
export OPENAUDITOR_API_KEY='paste_your_key_here'
Keep the key in your terminal environment or server's secret store. The commands below use it as a Bearer token; no key is entered into this page. See authentication for rotation and revocation.
Run with cURL
Paste these commands into the same terminal. They download invoice.json, then send it to the versioned API. The full response prints in your terminal.
Download and verify
curl --fail --silent --show-error \
https://openauditor.ai/examples/invoice.json --output invoice.json && \
curl --silent --show-error --fail-with-body \
https://openauditor.ai/api/v1/verify \
-H "Authorization: Bearer $OPENAUDITOR_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @invoice.json
Recognize the expected result
In the synthetic request, Northstar IT Supply bills 20 business laptops at $1,240.00 each: $24,800.00 on invoice INV-2026-0841. It supplies an active vendor and an explicitly empty invoice comparison history. The invoice has no PO reference, so it fails the default rule requiring one above $1,000.00.
| Look for | Expected finding |
|---|---|
verdict | "false". Verification completed and found a failed requirement. |
po_present | fails, with evidence pointing to the amount and missing PO reference. |
arithmetic, vendor_active | holds for the supplied values and vendor record. |
not_duplicate | holds within the explicitly empty comparison scope; no other invoice history was checked. |
goods_specific | not_asked in the saved local run because the direct PO failure already decides the verdict. |
The recorded walkthrough was produced by the local engine in the production configuration. Read your response's assertions, configuration and certainty basis. A false verdict is a successful API response, not a failed connection; an empty undecided list does not mean every assertion was resolved.
For a real invoice, the next action is to obtain the purchasing record or document the control exception. This result does not establish that goods arrived or authorize payment. The results guide covers true, false and uncertain, including missing evidence and unqualified questions.
Use Python or Node.js
These small clients fetch the same public invoice request, send one verification and print the complete JSON response. They need no SDK or package installation. Set OPENAUDITOR_API_KEY first, then choose one command pair.
Python 3 · standard library
curl --fail --silent --show-error \
https://openauditor.ai/examples/verify-invoice.py --output verify-invoice.py && \
python3 verify-invoice.py
Inspect or download the Python client.
Node.js 22 or later · built-in fetch
curl --fail --silent --show-error \
https://openauditor.ai/examples/verify-invoice.mjs --output verify-invoice.mjs && \
node verify-invoice.mjs
Inspect or download the Node.js client. Both clients report HTTP failures and the response's Request-Id when available. Neither retries verification automatically.
Import into Postman
Download the Postman collection and import the JSON file. It includes the complete invoice body and https://openauditor.ai/api/v1 as base_url. Set the collection's empty api_key variable to a local, unshared value, then send Verify the supplier invoice. Do not share or export your real key; Postman's variable guide explains local and shared values.
Adapt the working request
Replace the synthetic invoice and vendor with your own records, keeping money as decimal strings such as "24800.00". Supply the related history required by your checks: an empty comparison list is a statement about the submitted scope, not proof that no other records exist.
- Request fields and options explains supported context and scope.
- Batch audits covers shared context, polling and complete result retrieval.
- Errors and recovery covers authentication, input errors, quotas and retry behavior.
- Audit concepts connects findings to evidence and reviewer decisions.