Payinference
One instruction

Decision API

One call before you charge. POST /v1/decision evaluates provider health, cost, risk and your merchant policy, and returns a single executable instruction, one of route, use default route, step-up, hold, retry, failover or block, with reason codes, route scores and confidence. You execute it on your own stack and report the outcome back.

Decision API

One call before you charge

One call evaluates provider health, cost, risk and your merchant policy, and returns a single structured instruction, one of route, use default route, step-up, hold, retry, failover or block, with reason codes, route scores and per-signal confidence explaining why. You execute it on your own stack and report the outcome back.

Built for the authorization path
Sub-50 ms decisions from cached health, pricing and policy, with no PSP calls in the hot path and a typical decision around 1 ms.
Keeps your stack
Your PSPs, gateway and fraud tools execute; Payinference only instructs and never touches the money.
No card data at all
Strict schemas reject PANs, CVVs and customer identity at the boundary.
Learns from every outcome
Report results to /v1/outcomes and routing keeps improving.
demo · /v1/decision
const payinference = new PayInferenceClient({
  apiKey: process.env.PAYINFERENCE_API_KEY,
  merchantId: "m_123",
});

const decision = await payinference.decide(
  {
    order_id: order.id,
    transaction: {
      amount: 129900, currency: "USD",
      country: "US", payment_method: "card",
    },
    available_providers: ["adyen", "stripe"],
  },
  { idempotencyKey: order.id }
);

if (decision.action === "route") {
  await psp.authorize(decision.route.primary_provider, order);
}

await payinference.recordOutcome({
  decision_id: decision.decision_id,
  order_id: order.id,
  provider_used: "adyen",
  outcome: "approved",
  provider_latency_ms: 412,
  amount: 129900, currency: "USD",
});
FAQ

Frequently asked questions

Common questions about Decision API and how Payinference works.

See all questions