FAQ
Straight answers for developers evaluating either API before integrating. Every number here reflects what the products actually do today.
Receipt Extraction (AU GST-aware)
What does it cost? Free tier: 20 documents/month, no card required. Pay-as-you-go: $0.02/document, no minimum. Pro: $19/month for 1,500 documents (~$0.013/doc effective) with priority support.
How do I get an API key?
Free-tier keys are self-serve: POST /v1/signup with { "email": "you@example.com" } returns the key
directly in the response. It’s shown once and can’t be recovered if lost, so store it immediately (re-sign
up for a new one otherwise). Paid keys provision the same way via a one-time claim link once billing is live.
What does it do, and how accurate is it? It turns a receipt or invoice into structured JSON — vendor, line items, tax, totals — with validation built in. It’s been validated 4/4 against hand-built test documents covering net-priced, GST-inclusive-only, checksum-invalid-ABN, and unreadable-document cases; broader production accuracy will be tracked as live traffic grows.
How does it handle Australian GST and ABN?
It validates the vendor’s 11-digit modulus-89 ABN checksum and cross-checks GST across line items and
totals. Each line item carries a tax_code, a confidence, and a one-line rationale naming the actual
rule — including correctly denying input tax credits on entertainment expenses, and flagging the
incidental-to-travel exception that flips a meal back to claimable.
Is the output schema stable?
Output is explicit JSON with a schema_version field (currently 1.0). It’s versioned so a model change
doesn’t silently shift the shape under your integration.
What input formats does it take? A receipt or invoice image or PDF, submitted as a base64 string with its MIME type. Both are handled by the same extraction pipeline.
Can I use plain HTTP instead of MCP?
Yes — it works identically as an MCP server (the extract_receipt tool) or a plain HTTPS API from any
HTTP client. Authenticate with an Authorization: Bearer YOUR_API_KEY header (a raw key value without the
Bearer prefix also works); tool discovery doesn’t require a key, only the extraction call does.
How is my document data handled? Data handling follows the ACJ Labs privacy policy — retention, storage, and deletion specifics live there rather than in the API docs.
Catalog Attribute Normalizer
What does it cost? Free tier: 500 products/month, no card required. Pay-as-you-go: $0.01/product, no minimum. Pro: $29/month for 5,000 products (~$0.0058/product effective).
How do I get an API key?
Self-serve: POST /v1/signup with your email returns the key directly, good for 500 products/month, no
card. It’s shown once — store it immediately. Paid keys provision the same way via a one-time claim link
once billing is live.
What does it do, and how accurate is it? You supply product batches (titles, descriptions, attributes); it returns canonicalized attributes plus category mappings for the taxonomies you request. On a 12-product evaluation set run live against the service, it scored 22/24 (91.7%) exact path + leaf-ID matches.
How does coverage differ across Google, Shopify, and Amazon? Google and Shopify classification is retrieval-grounded — real candidate paths are pulled from the current taxonomy files and every returned leaf ID is verified against them. Amazon has no comprehensive public taxonomy file to retrieve against, so it stays best-effort (recall from memory) rather than retrieval-grounded.
Retrieval-grounded or zero-shot? Retrieval-grounded: candidates come from the real taxonomy files and are offered to the model as suggestions, not recalled from memory. This is what prevents the confident-but-wrong fabricated leaf IDs a zero-shot prompt produces.
What does a null leaf ID mean?
It’s an honest “check this” signal — the model couldn’t confirm a leaf ID against the real taxonomy, so it
returns null rather than fabricate one. Treat null as a prompt to verify, never as a guarantee.
How are attributes and output structured?
Attributes are keyed by a controlled vocabulary (size, color, material, gender, sleeve_length);
unrecognized keys are dropped rather than passed through under a model-chosen name. Each value carries a
provenance field — canonicalized when it came from your own input — so you can tell deterministic
normalization from model inference.
How do I call it?
Via the normalize_catalog MCP tool, a plain HTTPS API, or the @acjlabs/catalog-attribute-normalizer-client
npm package. Same auth as above: Authorization: Bearer YOUR_API_KEY (tool discovery needs no key).
Ready to try either one? See Products for the quick-start, or the official MCP registry and npm.
GST handling reflects publicly documented Australian tax law and is provided as software output, not tax advice.