INVOICE PREFLIGHT · BASE USDC

Check an invoice before approving it.

Reconcile invoice fields and line items against expected purchase details. Recalculate totals and receive a structured match, discrepancy, or needs_review decision with evidence. A match is a reconciliation result; it does not authorize a payment or accounting entry.

Connect your agent

Use an x402-capable MCP client with the Streamable HTTP endpoint below. Discovering tools and choosing a tier are free.

https://mcp.dropenginehq.com/api/invoice-mcp
  1. Call invoice_preflight_quote with the document type and PDF page count.
  2. Call the returned invoice tool with exactly one document source and expected purchase details.
  3. The client approves the exact Base USDC charge and retries with the signed x402 authorization.
  4. Use the decision and evidence to apply your own approval policy. Missing expected purchase details produce needs_review.

Tools and prices

UBL XML limit: 1 MB. PDF/image limit: 10 MB. PDF/image processing uses Mistral OCR; documents are sent to that provider. Raw invoice content is not persisted by this service. Failed processing does not produce a successful settlement receipt.

Executable UBL example

These synthetic arguments return match when passed to invoice_preflight.

{
  "document_xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\" xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\" xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:ID>INV-8821</cbc:ID>\n  <cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>\n  <cac:OrderReference><cbc:ID>PO-8841</cbc:ID></cac:OrderReference>\n  <cac:AccountingSupplierParty><cac:Party><cac:PartyLegalEntity><cbc:RegistrationName>Example Ltd</cbc:RegistrationName></cac:PartyLegalEntity></cac:Party></cac:AccountingSupplierParty>\n  <cac:TaxTotal><cbc:TaxAmount currencyID=\"USD\">24.00</cbc:TaxAmount></cac:TaxTotal>\n  <cac:LegalMonetaryTotal><cbc:TaxExclusiveAmount currencyID=\"USD\">100.00</cbc:TaxExclusiveAmount><cbc:PayableAmount currencyID=\"USD\">124.00</cbc:PayableAmount></cac:LegalMonetaryTotal>\n  <cac:InvoiceLine><cbc:ID>1</cbc:ID><cbc:LineExtensionAmount currencyID=\"USD\">60.00</cbc:LineExtensionAmount><cac:Item><cbc:Name>Service A</cbc:Name></cac:Item></cac:InvoiceLine>\n  <cac:InvoiceLine><cbc:ID>2</cbc:ID><cbc:LineExtensionAmount currencyID=\"USD\">40.00</cbc:LineExtensionAmount><cac:Item><cbc:Name>Service B</cbc:Name></cac:Item></cac:InvoiceLine>\n</Invoice>",
  "expected": {
    "supplier_name": "Example Ltd",
    "purchase_order": "PO-8841",
    "currency": "USD",
    "total": "124.00"
  }
}

HTTP clients and catalogs

POST https://mcp.dropenginehq.com/api/invoice-preflight

Send the same JSON arguments. An unpaid request returns HTTP 402 with a base64 JSON PAYMENT-REQUIRED header containing pricing and the Bazaar input/output schema. An x402 client retries with PAYMENT-SIGNATURE; a successful response contains the result and PAYMENT-RESPONSE receipt. GET and HEAD provide the challenge for discovery and never execute a paid invoice check. This HTTP route supports the 3-page tier; use MCP for larger invoices.

x402 client setup and spending controls

DropEngine · Paid MCP tools for AI agents