What It Does
Let your users buy tokenized stocks and RWA with a card. The on-ramp takes fiat from a credit/debit card (or bank), runs the regulated payment + KYC, and delivers USDC on Ethereum directly to the user’s own wallet — the first leg of the hero flow:Compass is a stateless proxy here. Unlike CCTP bridging,
where Compass is the orchestrator and tracks each bridge across burn → mint, the
on-ramp holds no server-side state — no Redis store, no attestation poller,
no webhooks. Halliday owns every piece of order state (quote, deposit
address, payment status, delivery tx) and Compass re-reads it on demand. The
payment_id you receive is Halliday’s id, passed straight through.The Three Endpoints
Output is fixed to USDC on Ethereum, delivered to the
destination_address
you pass in. (Halliday’s any-token / any-chain capability is intentionally not
exposed.)
End-to-End Flow
1
Quote
POST /v2/onramp/quote with the fiat amount and the destination address.
Preview the USDC the user will receive, the fees (business_fees is 0
today — no Compass markup), and the min/max bounds.2
Create
POST /v2/onramp/create to start the payment. The response carries a
checkout_url (a Compass-hosted page that renders Halliday’s card + KYC
checkout), a payment_id, and a user_instructions string describing the
browser handoff.3
Open the checkout
Send the user to
checkout_url in a browser. Halliday collects the card
details and runs identity verification. The user never leaves your control
of the URL — it points at a page you host.4
Poll status
Poll
GET /v2/onramp/status?payment_id=… until status is delivered
(or a terminal failed). USDC lands at the destination_address on
Ethereum.5
Deposit & buy
Move the delivered USDC into the user’s Tokenized Assets Account
and place a tokenized order. This leg is
unchanged by the on-ramp.
Quote
POST /v2/onramp/quote returns an indicative fiat → USDC quote.
output_asset: "USDC", output_chain: "ethereum", the
exchange_rate, a fees block (business_fees fixed at "0"), min_amount,
max_amount, and expires_at.
Create
POST /v2/onramp/create starts the payment and returns the browser-handoff
fields.
checkout_url— a Compass-hosted page (/onramp/checkout) that embeds Halliday’s card + KYC checkout. Open it in a browser.payment_id— Halliday’s order id, used for status polling.user_instructions— an agent-actionable string explaining the browser handoff and the poll loop (surfaced verbatim by the CLI and MCP tools).deposit_address— the one-time wallet (OTW) Halliday creates for this payment; it is owned solely by the user’s wallet.status— the initial order status.
Status
GET /v2/onramp/status?payment_id=… returns the current state.
KYC and Custody
Constraints
Across Every Surface
Because the on-ramp is an ordinary/v2/* API surface, it shows up everywhere
Compass surfaces do:
- Widgets — the
<HallidayOnrampCheckout/>component powers the “Buy with card” path in the Tokenized Assets widget (and the Telegram mini-app’s deposit sheet). - Hosted page — the
checkout_urlpoints at a Compass-hosted/onramp/checkoutpage embedding that same component. - CLI —
compass onramp buyruns quote → create → opens the browser → polls status untildelivered(agh auth login-style handoff). - MCP — the
v2_onramp_quote/v2_onramp_create/v2_onramp_statustools let an agent start a payment, presentcheckout_url+user_instructionsto the user, and pollv2_onramp_statusto confirm delivery.
Next Steps
Tokenized Assets
The second leg — deposit the delivered USDC and buy tokenized equities / RWA.
Product Accounts
Where the deposited USDC lands before a tokenized buy.
Widgets
Embed
<HallidayOnrampCheckout/> and the rest of the Compass widgets.