---
name: ardaro-invoice-matching
description: Compare a structured invoice against a supplied purchase order, returning exact line allocation, arithmetic checks and discrepancies for human review.
---

# Ardaro Invoice Matching

Use this service when an agent already has structured invoice and purchase-order
data and needs a deterministic comparison. The price is **0.50 native USDC on
Base mainnet per paid call**. Query the free status tool before relying on paid
availability; this document alone does not establish readiness or settlement.

## Discover without spending

Connect a Streamable HTTP MCP client to `https://agents.getardaro.com/mcp`.
Call `get_invoice_matching_service_status` with `{}` to inspect current cached
readiness and price. Call `get_invoice_matching_example` with `{}` for fixed
synthetic evidence. Neither call authorizes payment or processes a real invoice.
The public schema is at https://agents.getardaro.com/invoice-matching/openapi.json.

Download the independent buyer and offline tests at
https://agents.getardaro.com/invoice-matching/buyer.zip. Follow its README to
install pinned public dependencies and test using synthetic data without a wallet.

## Prepare evidence

Request contract: `ardaro.agent-invoice-matching.request.v1`.
Provide exactly one invoice and one purchase order with matching opaque supplier
IDs, references, supported currency, and 1–100 line items each. Invoice fields
include `purchase_order_reference`. Each line includes `line_id`, `description`,
`unit`, `quantity` and `unit_price`. Supply an invoice `po_line_id` or matching
`product_code` to establish a line match. Include line `amount` and invoice
`subtotal`, `tax`, `total` for complete arithmetic checks. Values are plain
nonnegative decimal strings, with positive quantities. Use the canonical schema
and synthetic example for exact bounds; the request is limited to 262144 bytes.

Supported document currencies: USD, EUR, GBP, CAD, AUD, MXN and JPY. Settlement
is always USDC on Base regardless of document currency. Do not submit raw card
details, credentials, private keys or unrelated personal data.

## Authorize a paid call explicitly

Paid tool: `match_invoice`.
Canonical REST resource: `https://agents.getardaro.com/v1/invoice-matching/analyze`.
Require explicit approval or a previously authorized spending policy before
creating a payment. Connection, discovery and an unpaid challenge grant no
spending authority. Never create or fund a wallet as part of this skill.

Pin the independently verified Ardaro receiving address in merchant configuration;
do not trust an address merely because it appeared in the payment challenge.
Require x402 v2, exact scheme, Base `eip155:8453`, native USDC
`0x833589fcd6edb6e08f4c7c32d4f71b54bda02913`, exactly `500000` atomic units,
the fixed invoice resource, and the required payment identifier extension.
The reference buyer additionally checks Bazaar metadata and bounds expiration.
Use the supplied MCP buyer with the caller's existing signer and approval callback.

## Review the result and handle uncertainty

Response contract: `ardaro.agent-invoice-matching.response.v1`.
Validate the complete schema and `res_` result hash, mandatory human-review
policy, and payment identity: protocol `x402-v2`, `pay_` plus 64 hex characters,
boolean `replayed`. Hashes are comparison metadata, not proof of document truth.

Every result requires human review. Matching uses explicit PO IDs or unique
case-sensitive product codes, exact decimals and per-line ROUND_HALF_UP rounding.
Conflicting supplier/PO/product identities or units, ambiguous matches and
missing arithmetic evidence must remain visible. No discrepancies means only
that the supported checks found none in supplied data.

There is no OCR, supplier authentication, delivery verification, prior-invoice
history, tax determination, unit/currency conversion, accounting posting or
automatic payment approval. Remaining PO quantities refer only to this invoice;
they do not establish undelivered goods or an available cumulative balance.

After an uncertain paid response, retain the same reference buyer operation.
Only its explicit, one-use `recover()` may resend the identical signed payload.
Never reauthorize, change the request identifier or construct a replacement
operation to retry. Stop if the outcome remains unknown; contact
support@getardaro.com. Do not log documents or signed payment payloads.
