vram.supply

Payouts

Providers earn 95% of inference revenue (5% platform fee). Earnings are the same regardless of whether the buyer paid with a card or via MPP.

Payout Schedule

TypeSpeedFee
Stripe automatic (daily)~3–4 business daysFree
Stripe instantWithin 30 minutes, 24/7Free (platform absorbs the 1% Stripe fee)
Tempo walletBatched every 15 minutesFree (platform absorbs ~$0.001/tx)

Tempo payouts settle on-chain in USDC. Minimum payout: $0.10. Below-threshold earnings carry forward to the next settlement cycle.

Onboarding

Providers must set up at least one payout method before serving requests. Three options:

Passkey signup (zero-step)

Sign up with a passkey and you're immediately payout-ready. The platform derives a Tempo wallet address from your passkey's P-256 public key — no additional setup. Your payoutRail is set to "tempo" automatically.

Stripe Connect (fiat)

Call POST /v1/connect/onboard to start Stripe Express onboarding — identity verification and bank details. Fiat payouts via Stripe's daily automatic schedule.

Tempo wallet (manual)

Call POST /v1/connect/tempo/challenge with your wallet address, sign the challenge message with your wallet key, then call POST /v1/connect/tempo/verify with the signature. USDC payouts every 15 minutes.

Providers can set up both Stripe and Tempo and accept traffic from both buyer types. See Routing for how buyer payment rails affect provider selection.

Passkey-Derived Wallet

Passkey signup captures a P-256 public key. Tempo natively supports P-256 addresses, so the platform derives a wallet address automatically using keccak256(pubKeyX || pubKeyY).

  • New passkey signups get an auto-derived wallet — zero steps to become payout-ready.
  • Existing passkey users without a Tempo wallet can call POST /v1/connect/tempo/derive-from-passkey or POST /v1/connect/tempo/use-passkey for one-click activation.
  • The passkey wallet is permanent — it can't be removed. A manual wallet can override it as the active payout address.
  • Removing a manual wallet via DELETE /v1/connect/tempo falls back to the passkey wallet automatically.

Switching Rails

Use PATCH /v1/settings/provider/rails to toggle which buyer payment rails your provider accepts:

curl -X PATCH https://api.vram.supply/v1/settings/provider/rails \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{"accepts_stripe": true, "accepts_tempo": true}'
  • At least one rail must remain enabled.
  • Enabling Stripe requires completed Connect onboarding. Enabling Tempo requires a verified wallet address.
  • Switching does not affect historical earnings — only future routing.

Endpoint Reference

POST/v1/connect/onboardSession

Start Stripe onboarding.

GET/v1/connect/statusSession

Onboarding status.

POST/v1/connect/dashboard-linkSession

Express Dashboard login.

GET/v1/connect/balanceSession

Provider balance.

POST/v1/connect/account-sessionSession

Embedded component session.

GET/v1/connect/payoutsSession

Payout history.

POST/v1/connect/tempo/challengeSession

Issue a signature challenge for Tempo wallet verification.

Parameters

NameTypeReqDescription
addressstringYesTempo wallet address (0x...) to verify ownership of.

Request

{
  "address": "0x1234567890abcdef1234567890abcdef12345678"
}

Response

{
  "message": "vram.supply wallet verification\n\nAddress: 0x1234...\nNonce: abc123...\nTimestamp: 2026-03-20T12:00:00Z",
  "nonce": "abc123def456...",
  "expires_at": "2026-03-20T12:05:00Z"
}

Errors

400Invalid address format
POST/v1/connect/tempo/verifySession

Verify wallet signature and register Tempo wallet as payout address.

Parameters

NameTypeReqDescription
addressstringYesWallet address from the challenge.
signaturestringYesEIP-191 signature of the challenge message (0x...).

Request

{
  "address": "0x1234567890abcdef1234567890abcdef12345678",
  "signature": "0xabc..."
}

Response

{
  "verified": true,
  "address": "0x1234567890abcdef1234567890abcdef12345678",
  "payout_rail": "tempo"
}

Errors

400Missing fields, no pending challenge, address mismatch, or signature verification failed
POST/v1/connect/tempo/derive-from-passkeySession

Derive a Tempo wallet address from your passkey’s P-256 public key. Sets it as active payout address.

Response

{
  "verified": true,
  "address": "0xabcdef1234567890abcdef1234567890abcdef12",
  "payout_rail": "tempo"
}

Errors

400No passkey registered
409Passkey wallet already derived
POST/v1/connect/tempo/use-passkeySession

Switch active payout address to the passkey-derived wallet.

Response

{
  "address": "0xabcdef1234567890abcdef1234567890abcdef12",
  "payout_rail": "tempo"
}

Errors

400No passkey wallet available
DELETE/v1/connect/tempoSession

Remove manually-connected Tempo wallet. Falls back to passkey wallet if one exists, otherwise reverts to Stripe.

Response

{
  "payout_rail": "tempo",
  "address": "0xabcdef..."
}