PPriors Bureau

Priors Card · Robinhood Chain

limits live · PriorsCreditOraclePriorsPay liveevery 30s

287 of 8,776 agent identities carry a Priors Card limit.

The limit is the agent’s Priors record, read from PriorsCreditOracle.getCredit; the 8,489 Unbanked identities get none. A swipe pays a receipt-verified x402 merchant in the same transaction; facilitator exact merchants are reached through the identity owner’s EIP-3009 step. The agent settles later.

287

agents carded

identities with an oracle limit, of 8,776 on chain

$34,739

total credit issued

sum of oracle limits · not money lent

5

x402 merchants payable

our endpoint (direct) + 4 approved (via owner EIP-3009) · 1 on card

$0.02

swipes settled

1 swipes · 0 open

$0

card defaults

0 marked · $0 cured

the card wall · 287 cards · getCredit for all 8,776 identity ids · blocks 86,038,787–86,038,875

Platinum 85Gold 4Silver 2Bronze 174Diamond 22
8,489 identities waiting for their first Priors loan · Unbanked: the oracle answers tier 0, so no card yet#6196 outlined · every card in the table below ↓

PRIORS

agent credit card

Platinum

tier 4 · score 47

0000 0000 0000 6196

limit

$250.00

avail

$250.00

rate

9%

agent #6196

getCredit(6196) at block 86,039,883· identity owner 0x4e42...399e· 318 Priors loans · never defaulted· 0 open swipes

#6196 · last real swipe

no swipes yet

PriorsPay is live; agent #6196 has not swiped yet. The first swipe lands here with its transactions.

no Open Credit loan for #6196 either

1swipe

PriorsPay.swipe()

2merchant paid

USDG in the same tx

3agent settles

settle() + fee, later

the ladder · oracle tierTermsrepay → climb → up to $500

Bronze $25

Silver $50

Gold $100

#6196 here

Platinum $250

Diamond $500

Priors Card · PriorsCreditOracle · PriorsPay

A credit card whose limit is a credit record

PriorsCreditOracle.getCredit(agentId) already answers a tier, a bounded unsecured limit and a rate for every agent identity on Robinhood Chain. PriorsPay spends that limit: a controller of the agent swipes, the merchant is paid in the same transaction, and the agent settles later with a fee priced by the same oracle rate. It is the third consumer of the same record, after the Agent Credit Desk and Open Credit.

1 · every card

The wall, as a table

getCredit for ids 1..8,776 · blocks 86,038,787 to 86,038,875 · fresh
12 of 287 shown

PriorsCreditOracle.getCredit(id) for every identity id 1..identities (highest minted id from the ERC-8004 registry's mint logs), 200 ids per Multicall3 aggregate between blocks fromBlock and toBlock; PriorsPay.outstanding(id) in the same aggregates and PriorsPay.availableFor(id) for every row. Limit = the oracle's unsecuredCap (one cap shared with OpenCreditVault). Total credit issued = sum of limits over carded agents, not money lent. Refreshed every 10 minutes and served stale while it refreshes. 8,489 identities read tier 0 (Unbanked) and carry no card; they are counted, not listed. “Agents carded” counts every identity with an oracle limit, sponsor identities included: that is the oracle’s answer.

2 · the card's book

PriorsPay: float, swipes, settlements, fees

block 86,039,641

float

$0.500014

USDG swipes can pay with

funded

$0.5

owner fund − defund

swiped

$0.02

1 swipes

settled

$0.02

outstanding

$0

0 open · $0 past grace

fees earned

$0.000014

late $0 · withdrawable $0.000014

written off

$0

0 defaults · $0 cured

distinct payees

1

not the swiper or the owner · not adoption

accepted merchants

1

setMerchant registry

surplus

$0

stray USDG · $0 swept

status

open

pause stops swipes, never settle

owner

0xB731...d316

two-step transfer

PriorsPay 0x0F14057802aE4FDA2c98669ad82C6d4492b6a65A · deployed block 79,391,264

policy constants · public constants of PriorsPay, read by eth_call; policy, not market data

MIN_SWIPE

$0.01

smallest swipe

TERM

7d

due after the swipe

GRACE

3d

defaultable after due + grace

MIN_FEE_PERIOD

1d

fee charged for at least

LATE_FEE_BPS

1%

on the amount, to cure

MAX_OPEN_SWIPES_PER_AGENT

8

open swipes per agent

MAX_OPEN_SWIPES

256

open swipes on the card

MAX_UTILIZATION_BPS

80%

of float + outstanding out after a swipe

3 · merchants

Who takes the card, and how a swipe reaches them

This app’s x402 endpoint

a swipe pays it directly

/api/x402/compute · scheme exact-onchain

payTo 0x2BcAbba4FF62f0d45Bc3FC71C99198e4dfb8F7f0 (X402_PAY_TO)

USDG Transfer to payTo decoded from the transaction receipt; a PriorsPay swipe to payTo is that transfer. A swipe counts only for the invoice it was made for (its ref must be keccak256 of the invoice's resource URL), and a payment must be redeemed within maxTimeoutSeconds (300s) of its block. With ?payer=<agentId> a card payment must also carry a Swiped event naming that agent.

accepted on the card (isAcceptedMerchant): yes · 1 merchants accepted in total

The Priors facilitator’s registry

17 registered · 4 approved · 4 with settlements

Scheme: x402 `exact`: an EIP-3009 TransferWithAuthorization signed by the paying wallet (65 bytes), submitted by the facilitator. Card path: A swipe cannot pay these merchants directly (a contract cannot sign EIP-3009). The agent's identity owner swipes to its own wallet, then signs the merchant's EIP-3009 authorization from that wallet; the facilitator's settlement shows AuthorizationUsed and the Transfer to payTo.

merchantsettlesvolume
Priors report API approved0x9492...8Cf849$1.43
agent002 w1 approved0x1fEF...Ecb70$0
agent002 w2 approved0xA121...81E40$0
agent002 w3 approved0xB4b1...9AD10$0
Kickback 0xA17b...e0A33$0.15
Toll coin check API 0xdC36...7F401$0.05
MVA record check 0x33d6...2d0a5$5
10 more registrations, unapproved with no settlement (test and probe registrations included)

shield-blackhole-probe · Good · Good · probe-throwaway-2026-09-30 · Gold · Rook Stock Token Quote Auditor · hermes-ssrf-probe · authz-test-A · authz-test-B · poc-A

source https://facilitator.priors.trade/merchants

4 · how it works

Swipe → merchant paid → settle

1Swipe

swipe(agentId, merchant, amount, ref)

A controller of the agent calls it. The card asks oracle.getCredit(agentId): tier above Unbanked, no Priors default flag, no uncured default on the card or on OpenCreditVault, and exposureOf + amount within the limit. Then the open-swipe bounds, the float and the utilization cap.

2Merchant paid instantly

usdg.safeTransfer(merchant, amount)

In the same transaction as the Swiped event. A merchant that verifies payment by receipt (this app’s /api/x402/compute) sees a USDG Transfer to its payTo and serves the request, provided the swipe’s ref is keccak256 of that invoice’s resource URL and it is redeemed within 300s of its block.

3Agent settles later

settle(swipeId)

Anyone may pay, never paused: amount + ceil(amount × rateBps × max(elapsed, MIN_FEE_PERIOD) / (YEAR × BPS)). After dueAt + GRACE anyone may markDefault; a late settle cures it with a late fee.

Who receives card money

The identity owner may pay any merchant (it carries the debt). A CreditPool delegate may pay only merchants the card’s owner accepted (setMerchant) or the identity owner, and never itself (DelegateCannotPaySelf). A delegate’s first swipe binds it to the identity owner of that moment; after an identity transfer the old delegate is refused until the new owner calls setDelegateSwipes(agentId, true), and the owner can switch delegate swipes off. A delegate can still spend the whole limit at accepted merchants.

One limit, two lenders

The card lends unsecuredCap − card outstanding − OpenCreditVault.outstandingOf and refuses an agent with an uncured vault write-off. The deployed vault does not read the card, so a vault loan taken after card swipes can still push combined exposure over the limit.

A card default stays on the card

markDefault blocks the agent’s card until it is cured. It is not reported to Priors: the oracle’s tier, limit and default flag for the agent do not change.

Funding and stray USDG

Only the card’s owner funds the float (fund / defund): no outside funders, no shares. A plain USDG transfer to the card settles nothing; it shows as surplus() and only the owner can sweepSurplus it. renounceOwnership always reverts; ownership moves in two steps.

5 · integrate

One call pays the merchant

// from the agent's identity owner (or its allowed pool delegate)
uint256 swipeId = IPriorsPay(0x0F14057802aE4FDA2c98669ad82C6d4492b6a65A)
    .swipe(agentId, merchantPayTo, 30_000 /* $0.03 */, ref);
// merchantPayTo now holds the USDG - same transaction

// later, from anyone
usdg.approve(address(card), card.amountDue(swipeId));
card.settle(swipeId);

quote(agentId, merchant, amount) is the free dry run: tier, limit, rate, available credit, the fee if settled on the due date, and whether the swipe would go through or why not.

no key, no SDK

Or read it over HTTP / JSON-RPC

# every card (the wall), the book, merchants, the live feed
curl -s https://priors-app-xi.vercel.app/api/card

# one agent's card: oracle fact, controllers, swipes + txs
curl -s https://priors-app-xi.vercel.app/api/card/6196

# pay our x402 endpoint on the agent's card: swipe to its payTo with
#   ref = keccak256(utf8(resource)) = 0xdf00cc5ff1b898bc8c5d7fbf5ff70eb94783efc067d8400b53a7bac591fd9b46
#   (resource = https://priors-app-xi.vercel.app/api/x402/compute?agentId=6196&payer=6196)
# then send the swipe tx within 300s of its block (checked against
# the receipt's Swiped event; a swipe with another ref is refused)
curl -s "https://priors-app-xi.vercel.app/api/x402/compute?agentId=6196&payer=6196" \
  -H "X-PAYMENT: $(printf '{"x402Version":1,"scheme":"exact-onchain","payload":{"txHash":"0x<swipe tx>"}}' | base64 -w0)"

# the limit straight from the oracle (Foundry cast)
cast call 0x17934ec19c01C1C0c758f4dB96b6bbbE0242661c "getCredit(uint256)" 6196 \
  --rpc-url https://rpc.mainnet.chain.robinhood.com

Bigints are strings; every response carries the blocks it was read at. While PriorsPay is not deployed its parts answer { deployed: false, note } with status 200, and the wall (oracle limits) is still live.

6 · swipe or settle

Wallet console

simulate first, then sign in your own wallet

Wallet console · PriorsPay

No EIP-1193 wallet is injected in this browser, so nothing can be signed here. Install a wallet and point it at chain 4663. PriorsPay is 0x0F14057802aE4FDA2c98669ad82C6d4492b6a65A; its functions are the same from any signer.

the same limit, lent

OpenCreditVault lends unsecured USDG on the same getCredit answer; the card and the vault share one limit.

Open Credit →

the same record, priced

Insurance, a marketplace and a launchpad price their products off the same Bureau record.

Agent Credit Desk →