Callable now, keyless: POST /v1/amortization

Agents can’t lend. They can call it.

One key to the finance layer of the agent stack: a Mandate registry, x402 settlement, and per-call finance data at posted prices. Every act the law reserves returns a typed BLOCKED with a cure.

Request a key Call it now

POST /v1/amortization HTTP/1.1
host: apis.finance
content-type: application/json

{ "principal": 250000, "annual_rate_pct": 6.5, "term_months": 12 }

HTTP/1.1 200
{
  "object": "amortization.schedule",
  "sku": "Amortization math",
  "resource": "https://apis.finance/v1/amortization",
  "input": {
    "principal": "250000.00",
    "annual_rate_pct": 6.5,
    "term_months": 12,
    "compounding": "monthly",
    "day_count": "level periodic, 1/12 of the nominal annual rate per period"
  },
  "payment": "21574.10",
  "periods": 12,
  "total_interest": "8889.26",
  "total_paid": "258889.26",
  "schedule": [
    {
      "period": 1,
      "payment": "21574.10",
      "interest": "1354.17",
      "principal": "20219.93",
      "balance": "229780.07"
    },
    {
      "period": 2,
      "payment": "21574.10",
      "interest": "1244.64",
      "principal": "20329.46",
      "balance": "209450.61"
    },
    {
      "period": 3,
      "payment": "21574.10",
      "interest": "1134.52",
      "principal": "20439.58",
      "balance": "189011.03"
    }
  ],
  "fee": {
    "line": "Telemetry Fee",
    "amount": "0.00",
    "currency": "USD"
  },
  "charge": null,
  "meter": "No record, no charge. This schedule is the record and its posted price is $0 · keyless.",
  "deterministic": true,
  "not_advice": "Arithmetic on numbers you supplied. This is not a credit decision, not an offer of credit, and not a term quoted to a Borrower. apis.finance is not a lender and does not decide; the Lender decides.",
  "rate_card": "https://apis.finance/rate-card.json"
}

9 more rows

One route answers today.

A level-payment schedule from the numbers you send. Pure math, nothing retained. GET the path for the schema; a bad body gets a typed 422 naming every field to fix.

deskFloorplan collateral telemetry is live at a desk: $45 per floored VIN per audit period. desk@apis.finance

GET /v1/amortization HTTP/1.1
host: apis.finance

HTTP/1.1 200
{
  "object": "schema",
  "resource": "https://apis.finance/v1/amortization",
  "sku": "Amortization math",
  "status": "LIVE",
  "callable": true,
  "price": "$0 · keyless",
  "price_note": "Posted, flat, fixed at post. Zero is a posted price and it binds. No key, no registration, no payment rail, no 402.",
  "method": "POST",
  "request_content_type": "application/json",
  "description": "A level-payment amortization schedule computed from the numbers you supply. Pure math: no upstream, no stored input, no Application, no Decision, no advice.",
  "request": {
    "principal": {
      "type": "number",
      "required": true,
      "unit": "currency major units",
      "minimum": 0.01,
      "maximum": 1000000000000,
      "note": "The financed amount. Rounded to cents on receipt."
    },
    "annual_rate_pct": {
      "type": "number",
      "required": true,
      "unit": "percent per year, nominal, compounded monthly",
      "minimum": 0,
      "maximum": 100,
      "note": "6.5 means 6.5%, not 0.065. Zero is accepted and yields a straight-line schedule."
    },
    "term_months": {
      "type": "integer",
      "required": true,
      "minimum": 1,
      "maximum": 600,
      "note": "Number of level payments."
    },
    "start_date": {
      "type": "string",
      "required": false,
      "format": "YYYY-MM-DD",
      "note": "First payment due date. When present, every period carries a due_date; when absent, periods are numbered only. Day-of-month is clamped to the length of each month."
    }
  }
}
GET /v1/amortization: the typed schema, trimmed to the request.
POST /v1/amortization HTTP/1.1
host: apis.finance
content-type: application/json

{ "principal": -1 }

HTTP/1.1 422
{
  "object": "error",
  "type": "invalid_request",
  "status": 422,
  "resource": "https://apis.finance/v1/amortization",
  "message": "This request does not describe a computable schedule. 3 fields must change.",
  "errors": [
    {
      "field": "principal",
      "code": "out_of_range",
      "message": "principal is outside the range this row computes.",
      "expected": "number between 0.01 and 1000000000000",
      "received": -1
    },
    {
      "field": "annual_rate_pct",
      "code": "missing",
      "message": "annual_rate_pct must be a finite JSON number expressed in percent per year. 6.5 means 6.5%, not 0.065.",
      "expected": "number between 0 and 100",
      "received": null
    },
    {
      "field": "term_months",
      "code": "missing",
      "message": "term_months must be a whole number of monthly payments.",
      "expected": "integer between 1 and 600",
      "received": null
    }
  ],
  "cure": {
    "route": "SELF",
    "needs_human": false,
    "description": "Correct every field named in errors[] and call again. Nothing here is reserved to a licensed party, so no routing clears this: the request is the only thing that has to change.",
    "schema": "GET https://apis.finance/v1/amortization"
  },
  "charge": null,
  "note": "No schedule was served. No record, no charge. This row is keyless and posted at $0, so nothing was metered either way."
}
422 for { "principal": -1 }: every field named, with a cure.

Priced per call. Posted before it’s live.

Flat prices, fixed at post, on a machine-readable card. If a price isn’t posted, the row isn’t live, and the row says so.

SKUWhat your agent getsPrice, flat, fixed at postStatus
Business credit / KYBEntity verification, registrations, lien and judgment flags, cash-flow signals on a Borrower$3.00 per file pull · DRAFTROADMAP
UCC lien searchDebtor search across state filing offices: lien positions, secured parties, filing images. State office fees pass through at cost$4.00 per search · DRAFTROADMAP
Payoff quotesAttested Payoff figure with per-diem and good-through date$1.50 per quote · DRAFTROADMAP
Amortization mathSchedules, Curtailment recalculation, per-diem interest, Payoff projection$0 · keylessLIVE
License-permission lookupWhich acts which party may lawfully perform, per state, typed$0.10 per lookup · DRAFTROADMAP
Floorplan collateral telemetryThe attested Collateral file per floored VIN: title-lien state, odometer, location attestation, sale signals, Curtailment schedule, Payoff figure$45 per floored VIN per audit periodLIVE · desk pilot
Prequal simulationA Lender’s published criteria run against a Borrower file: coverage ratios, amortization scenarios, a typed WOULD_MEET or WOULD_NOT_MEET per criterion. The object is designed so that no Application is created, and counsel has not ruled which Simulation shapes stay outside 12 CFR 1002.2(f)Price posts with the SKUROADMAP · typed, refused at the call
KYA agent scoresKnow Your Agent (KYA): a counterparty score for an agent, from its mandate history, settlement record and delegation chainPrice posts with the SKUROADMAP · spec posted

Fee lines are named on every receipt. Never a percentage of the credit.

Typed now, priced when live.

Sixteen more capabilities, each with its gate, refusing at the call today.

All ROADMAP · Price posts with the SKU.

  • Consumer credit signalsgateA recorded FCRA permissible purposeConsumer attributes, debt-to-income, adverse-action reason codes
  • Cash-flow attributesgateRecorded Borrower consent to bank dataVerified revenue, volatility, existing-debt detection, NSF incidence
  • The lien stackgateKeylessThe full priority stack for a debtor: collateral parsed, continuation and lapse windows, filing office
  • Verification attributesgateRecorded payroll or bank-data consentEmployment, income and asset attributes normalized to underwriting-ready fields
  • KYC and AML screeninggateA screening railSanctions, politically-exposed-person and watchlist screening, identity attributes, adverse media
  • Bank account and routing validationgateA bank-data railRouting validity, account status, ACH, RTP and FedNow reachability, return risk
  • Financial statement normalizationgateKeylessA Borrower’s statements returned as normalized fields with the source page cited
  • Adverse-action notice assemblygateThe Lender’s own Decision supplies the reason setThe Reg B notice assembled inside the Decision from the Lender’s own reason set
  • Compliance preflightgateKeylessAbility-to-repay and QM fee tests, TRID tolerance checks, high-cost thresholds, cure computation
  • Payout disbursement railgateA sponsor-bank railA disbursement executed against a Mandate, with a settlement_ref on the event
  • Transaction escrowgateA licensed or lawfully exempt escrow holderFunds held for a third party pending a condition, released on the recorded condition
  • x402 agent payment clearinggateA MandateAgent-to-agent clearing against a Mandate: spend caps, per-call settlement, usage rollups
  • Ledger coregateKeylessDouble-entry ledger as an API: accounts, postings, holds, balance assertions, an immutable audit trail
  • Lending coregateKeylessLoan management for any credit shape: billing, delinquency buckets, modifications, boarding
  • Agent billing coregateKeylessx402-native metering for your own product: wallet, spend caps, per-call settlement, usage rollups
  • eNote and eVault controlgateAn eRegistry membership and a contracted vaultTyped state on an electronic note: which vault holds control, transfers attested under UCC 9-105

Agents can’t hold money. They can hold a Mandate.

A floorplan line, a credit facility, an issued card: each is a Mandate with named parties on every artifact. What the agent can draw is never stored. It is derived on read.

available = ceiling - encumbered - settled

Draw an Advance against available, post a Curtailment, request a Payoff. Every money event carries a settlement_ref.

Mandate registry · typed, not yet live

object
The kind of Mandate: a floorplan line, a credit facility, an issued card.
parties
Lender, Borrower and Obligor-Guarantor, named on the Mandate and on every artifact under it.
ceiling
The most the Mandate allows. Set by the Lender, never by the agent.
encumbered
What is held against the ceiling and not yet settled.
settled
Money that has moved under the Mandate, each event carrying its settlement_ref.
available (derived)
Never stored. Computed on every read as ceiling minus encumbered minus settled.
collateral.perfection
The recording office’s own record of the lien, where the Mandate is secured.
settlement_ref (on events)
Carried by every Advance, Curtailment and Payoff, so an auditor can walk from the ledger to the rail.

The line is typed into the API.

The law reserves four acts: extending credit, taking the application, negotiating terms, deciding. Everything else about a loan runs agent-native here. A call that reaches a reserved act gets a typed BLOCKED with a typed cure: the statute, the party that may act, the route that clears it. A silent 200 would make you the lender. You get the refusal instead.

Answering today on every reserved route at apis.loans

act
The reserved act the call reached: extend credit, take the Application, negotiate terms, decide.
reason
Why the act is reserved, stated for the record.
tier
The tier of the route that met the line.
statutes
The statute or statutes that reserve the act.
reserved_to_party
The party that may lawfully act. For all four acts, the Lender.
cure.route
The route that clears the call. A marketplace of licensed parties, never a void.
cure.endpoint
Where to take the call next.
cure.needs_human
Whether a licensed person must act. True routes to the marketplace.
cure.description
What clears it, in a sentence your agent can act on.

Nothing is metered on a BLOCKED.

The meter releases on a recorded fact.

Posted, flat, fixed at post. x402 and MCP are typed and not yet live; they gate the priced rows, never the keyless one.

  • dataNo record, no charge.The served record releases it. A not-found result does not.
  • decisionedNo decision, no charge.The Decision artifact releases it. A declination is a Decision, and no fee varies with its direction.
  • securedNo perfection, no charge.The filing office’s own record of the filing.
  • unsecuredNo funding, no charge.Money moves, with a settlement_ref on the event.

What this platform never does.

Written to be forwarded to counsel.

  • Never holds paper.

    No loan on this balance sheet.

  • Never holds funds in the credit sense.

    The partner Lender is merchant of record for every finance charge.

  • Never decides.

    The Lender decides. No response here states an approval.

  • Never lets a fee depend on a Decision.

    No platform fee varies with its direction.

  • Never lets a statutory clock expire in silence.

    Reg B and TRID clocks run as a timer ladder with a named party on every rung.

  • Never blurs the parties.

    Lender, Borrower, Obligor-Guarantor, named on every artifact.

  • Never enters renounced territory.

    No merchant cash advance with confession of judgment, no title or payday lending, no debt settlement, no debt buying.

Questions your counsel wants in writing: keys@apis.finance

One key. A family of doors.

One key; your agent resolves doors by name.

  • apis.finance

    The hub: catalog, key, rate card. You are here.

  • apis.credit

    Business credit, KYB, UCC lien search.

  • apis.loans

    The origination door. Seven arithmetic routes live.

  • apis.mortgage

    Payoff, lien and eNote data. Waitlist open.

Request a key.

One key covers the family. Tell us what you’re building and what you need first.

Per month, roughly.

Agents: the rate card is the door.GET https://apis.finance/rate-card.json