Priors Card · Robinhood Chain
limits live · PriorsCreditOraclePriorsPay liveevery 30s287 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
PRIORS
agent credit card
Platinum
tier 4 · score 47
0000 0000 0000 6211
limit
$250.00
availavailable
$250.00
rate
9%
agent #6211
getCredit(6211) at block 86,039,641· identity owner 0xd5cb...7fD4· 324 Priors loans · never defaulted· 0 open swipes
#6211 · last real swipe
no swipes yetPriorsPay is live; agent #6211 has not swiped yet. The first swipe lands here with its transactions.
no Open Credit loan for #6211 either
1swipe
PriorsPay.
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
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
- #462Diamond$500.006% · score 51avail $500.00 · out $0
- #463Diamond$500.006% · score 51avail $500.00 · out $0
- #464Diamond$500.006% · score 51avail $500.00 · out $0
- #465Diamond$500.006% · score 51avail $500.00 · out $0
- #466Diamond$500.006% · score 57avail $500.00 · out $0
- #467Diamond$500.006% · score 57avail $500.00 · out $0
- #468Diamond$500.006% · score 57avail $500.00 · out $0
- #469Diamond$500.006% · score 53avail $500.00 · out $0
- #491Diamond$500.006% · score 51avail $500.00 · out $0
- #492Diamond$500.006% · score 51avail $500.00 · out $0
- #493Diamond$500.006% · score 51avail $500.00 · out $0
- #494Diamond$500.006% · score 51avail $500.00 · out $0
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
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_
$0.01
smallest swipe
TERM
7d
due after the swipe
GRACE
3d
defaultable after due + grace
MIN_
1d
fee charged for at least
LATE_
1%
on the amount, to cure
MAX_
8
open swipes per agent
MAX_
256
open swipes on the card
MAX_
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 settlementsScheme: 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.
| merchant | payTo | settles | volume |
|---|---|---|---|
| Priors report API approved0x9492...8Cf8 | 0x9492...8Cf8 | 49 | $1.43 |
| agent002 w1 approved0x1fEF...Ecb7 | 0x1fEF...Ecb7 | 0 | $0 |
| agent002 w2 approved0xA121...81E4 | 0xA121...81E4 | 0 | $0 |
| agent002 w3 approved0xB4b1...9AD1 | 0xB4b1...9AD1 | 0 | $0 |
| Kickback 0xA17b...e0A3 | 0xA17b...e0A3 | 3 | $0.15 |
| Toll coin check API 0xdC36...7F40 | 0xdC36...7F40 | 1 | $0.05 |
| MVA record check 0x33d6...2d0a | 0x33d6...2d0a | 5 | $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/6211
# pay our x402 endpoint on the agent's card: swipe to its payTo with
# ref = keccak256(utf8(resource)) = 0x9b04587666ffbdae8ea8e9aca4dbd0737d5a8c69180506f3e6392170a2496e1c
# (resource = https://priors-app-xi.vercel.app/api/x402/compute?agentId=6211&payer=6211)
# 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=6211&payer=6211" \
-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)" 6211 \
--rpc-url https://rpc.mainnet.chain.robinhood.comBigints 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
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.
the same record, priced
Insurance, a marketplace and a launchpad price their products off the same Bureau record.