API infrastructure for AP & procurement software

The decision API your
AP system can explain.

Embed Maqaas in your AP or procurement product. Send invoice, PO, vendor, and policy context to one API and get back an auditable decision, evidence, deterministic rules, and the exact next action.

API-only
Embed Maqaas inside your existing product. No dashboard to adopt.
Reproducible policy
Versioned rules — same inputs, same decision.
No business-document persistence
Invoice, PO, vendor, and policy payloads are processed without Maqaas becoming your system of record.
An example Maqaas API decision: an invoice whose bank details differ from the trusted vendor record is held for review, with the evidence, the requirement that would clear it, and the decision if it were resolved.
POST /v1/invoice/decision INV-9931
Inputs
InvoiceINV-9931
Purchase orderPO-48291
Vendor recordV-2201
Verify 6 of 7 fields source-verified
Rules + evidence
  • INVOICE_PO_VARIANCE passed
  • CURRENCY_MISMATCH passed
  • DUPLICATE_INVOICE_NUMBER passed
  • BANK_DETAILS_CHANGED fired

expectedaccount_number_last4=9021 observedaccount_number_last4=4471

Decision Hold for review
Required Independent bank verification, out-of-band
If resolved Process
03 Decision demo

Everything matches.
Except the bank details.

A single invoice, cross-checked against its purchase order and the trusted vendor record. Maqaas does not just flag the exception — it names the rule, shows the comparison that fired it, and states what would clear it.

Comparison invoice ⟷ trusted record
Invoice fields compared against the trusted vendor record
FieldInvoiceTrusted recordMatch
Vendor Northstar Components Northstar Components ✓matches
Purchase order PO-48291 PO-48291 · open ✓matches
Amount $18,420.00 USD $18,420.00 · within tolerance ✓matches
Bank details account ••••4471 account ••••9021 ≠differs

Account changed since the last paid invoice · unverified channel

Maqaas response 200 OK
Hold for review

Payment details differ from the trusted vendor record. Possible invoice redirection fraud.

Rule fired
BANK_DETAILS_CHANGED
Fields
bank_details.account_number_last4, bank_details.sort_code
Requirement
independent_bank_verification
Recommended action
REQUEST_VENDOR_BANK_VERIFICATION
Owner
VENDOR_MANAGEMENT
decision_if_resolved
Process

Deterministic · rules 1.3.0 · resolution catalogue 1.4.0

04 The core idea

Extraction tells you what the document says.
Maqaas tells you what your system should do.

  1. 01

    Extract

    Documents and payloads arrive as structured fields, each with its own source locator and snippet.

  2. 02

    Verify

    Every value is checked back against the document text and against the PO and vendor records you supply.

  3. 03

    Decide

    Deterministic rules return PROCESS, REVIEW, HOLD_FOR_REVIEW, ESCALATE or REQUEST_MORE_INFORMATION — never a score. BLOCK is reserved and is not currently emitted by any rule.

  4. 04

    Explain

    Each decision carries the rules fired, their evidence, field-level confidence and verification state.

  5. 05

    Resolve

    Blockers arrive with requirements, an owner, an ordered plan, and the decision if they were cleared.

05 Evidence

Every fact carries its own paper trail.

Auditability is not a report you generate later. Each field arrives with its value, its confidence, whether it could be verified against the source, and where in the document it was read.

  • Field-level confidence, never a single document score
  • Source verification against the document and your systems of record
  • Provenance carried as a locator and the exact snippet the value came from
Invoice total field 04 / 07
$18,420.00
Confidence
0.96
Source verified
Yes · exact
Locator
attachment:invoice.pdf
snippet “TOTAL DUE USD 18,420.00”
06 Deterministic rules

The model understands the document.
Your rules decide what happens.

  1. Layer 01 · probabilistic

    AI understanding layer

    Reads documents, normalises fields, and proposes values with a confidence and a source.

  2. Boundary

    Verified facts

    A value that cannot be tied back to the document is capped, not trusted. Only verified facts carry full weight into the decision.

  3. Layer 02 · deterministic

    Deterministic decision engine

    Versioned rule code. The same inputs at the same rules version produce the same decision — no model involved.

  4. Output

    Explainable decision

    Decision, rules fired, evidence, blocking conditions, and the resolution path.

Language models are excellent at reading and poor at accountability. Maqaas keeps the two concerns strictly apart: the model proposes, the rules decide, and only the rules are allowed to change an outcome.

Rules evaluated rules 1.3.0
  • INVOICE_PO_VARIANCE passed
  • CURRENCY_MISMATCH passed
  • DUPLICATE_INVOICE_NUMBER passed
  • BANK_DETAILS_CHANGED fired

Three passed. One fired. The outcome is not a score — it is a rule you can name.

07 Resolution intelligence

A flag is not an answer.
Maqaas returns the way out.

For every held or blocked invoice the response states what is wrong, what would clear it, who should act, and what the decision becomes once it is cleared — computed deterministically, not predicted.

Hold for review 1 requirement Process
  1. 01 · Blocker

    Bank details changed

    Payment details differ from the trusted vendor record on account and sort code.

  2. 02 · Required

    Independent bank verification

    Out-of-band confirmation through a channel not taken from the invoice itself.

  3. 03 · Action

    REQUEST_VENDOR_BANK_VERIFICATION

    A closed enum your workflow can switch on, owned by VENDOR_MANAGEMENT.

  4. 04 · If resolved

    PROCESS

    Re-run of the real engine with the blocker set aside and every other fact unchanged.

08 Developers

One endpoint.
A decision you can defend.

Send facts and context. Get a decision object your workflow can branch on — typed, versioned, and fully explained.

RequestPOST /v1/invoice/decision
POST /v1/invoice/decision
Authorization: Bearer <your-api-key>

{
  "extracted_facts": {
    "vendor_name":    { "value": "Northstar Components" },
    "invoice_number": { "value": "INV-9931" },
    "invoice_total":  { "value": { "amount": 18420.00, "currency": "USD" } },
    "po_number":      { "value": "PO-48291" },
    "bank_details":   { "value": { "account_number_last4": "4471" } }
  },
  "po_context":     { "po_number": "PO-48291", "status": "open" },
  "vendor_context": {
    "vendor_id": "V-2201",
    "trusted_bank_details": { "account_number_last4": "9021" }
  },
  "rules": { "require_po": true, "allowed_variance_pct": 0.05 }
}
Response200 OK
200 OK

{
  "decision": "HOLD_FOR_REVIEW",
  "needs_review": true,
  "recommended_route": "accounts_payable_manager",
  "versions": { "api": "v1", "rules": "1.3.0", "resolution_catalog": "1.4.0" },
  "resolution": {
    "blocking_conditions": [
      { "rule_id": "BANK_DETAILS_CHANGED",
        "evidence": { "expected": "account_number_last4=9021",
                      "observed": "account_number_last4=4471" } }
    ],
    "resolution_requirements": [
      { "requirement_type": "independent_bank_verification" }
    ],
    "recommended_action": "REQUEST_VENDOR_BANK_VERIFICATION",
    "resolution_plan": [
      { "step": 1, "action": "REQUEST_VENDOR_BANK_VERIFICATION",
        "owner": "VENDOR_MANAGEMENT" },
      { "step": 2, "action": "RESUBMIT_FOR_DECISION", "owner": "HOST_SYSTEM" }
    ],
    "decision_if_resolved": { "decision": "PROCESS" }
  }
}
Two endpoints
Facts or a PDF — same response contract
Typed contract
Versioned schema, OpenAPI 3.1
Six outcomes
Never a bare score
Synchronous
One request, one decision
09 Who it is for

Keep your workflow, UI, and customer relationship.

Embed Maqaas underneath as the decision layer. Your product stays the product — it simply becomes one that can explain itself.

Built for procurement and AP platforms

  • Procurement SaaS
  • AP platforms
  • Vendor-management platforms
  • ERP extensions
  • Vertical SaaS
  • Internal enterprise AP
10 Security & privacy

Built to handle financial data without becoming your system of record.

  1. 01 · Data path

    No business-document persistence

    Invoice, PO, vendor and policy payloads — and the extracted facts, evidence, prompts and model responses derived from them — are used to produce the decision and are not retained by Maqaas as a system of record.

  2. 02 · What is stored

    Account and service records

    Tenant, API-key metadata, plan and usage counters are persisted — the records needed to run an account. Business document content is not part of them.

  3. 03 · Access

    Tenant-isolated authentication

    Scoped keys per tenant and environment. Keys are stored as verifiers only, never in plaintext, with rotation and revocation.

  4. 04 · Logging

    Redacted logging

    Operational telemetry and diagnostic metadata may include request and tenant identifiers, route, status, latency, decision-related metadata, and limited error context. In some document-extraction failure scenarios the submitted filename may appear in operational logs. Redaction is applied so that plaintext credentials and business-document contents are not intentionally logged as ordinary application telemetry.

  5. 05 · Execution

    Deterministic policy execution

    Rules run as versioned code, so the same inputs at the same rules version reproduce the same decision under audit.

  6. 06 · Boundaries

    No autonomous payments

    Maqaas recommends and explains. It does not move money, change bank details, contact a vendor, or act on your behalf.

Maqaas is not currently SOC 2 certified. Security and incident-response processes are documented, and readiness work is in progress; that documentation is available under NDA.

Add explainable decisions to your AP product.

We are working with a small number of procurement and AP software teams as design partners. If that is you, we would like to hear what you are deciding today and where it breaks.