Selling capacity
Connect a credential for a plan you are not fully using, publish an offer with your ask, and get paid in USDC on every settled fill.
1. Connect a credential
On Sell → Credentials, choose a provider from the registry and paste the credential fields it asks for (an API key; for Quicknode also your endpoint URL). The gateway encrypts them with AES-256-GCM under a key held in the environment store, keeps a sha256 fingerprint so the same credential cannot be listed twice across workspaces, runs the provider’s verification probe, and stores only a masked hint. The secret is decrypted only inside the seller proxy that serves buyers and is never logged or returned — not even to you.
Revoking a credential deletes the ciphertext immediately; offers on it stop serving at once.
2. Attestation and provider terms
Before a credential is stored you confirm that the provider’s terms permit you to let third parties use the plan and that you are responsible for that use. The registry shows each provider’s resale notice next to the checkbox; the attestation is recorded with a timestamp and your IP address in the audit log.
You carry the provider-terms responsibility
local suspends offers on abuse signals (repeated upstream auth failures, chargebacks, provider complaints) and records every action. Read the provider’s terms yourself; the resale notice is a pointer, not legal advice.
3. Pricing your ask
- Credit, compute-unit and request providers (Helius, Quicknode, Birdeye) quote an absolute
price_per_unit_usd. The order book shows the discount this implies against the provider’s dated reference overage price. - Token providers (OpenAI, Anthropic, OpenRouter) quote a
discount_bpsoff the list price of whichever model is called, so one offer covers every model in scope. Internally one unit is one micro-USD of list price; a 20% discount means buyers pay 84% of list once the 5% fee is added and you receive 80%.
Buyers pay your ask × metered units plus a 5% platform fee shown separately; you receive exactly your ask. The offer dialog shows “buyers will pay $x per unit incl. fee” as you type. Routing picks the lowest buyer price among healthy offers, ties going to the oldest offer — a lower ask fills first, a higher ask earns more per unit. An ask above the reference list price is rejected.
Capacity is the number of units you are willing to sell before the period end (your plan’s reset date). Optional min_units_per_fill skips tiny requests, and route_scope restricts the offer to specific methods, models or paths.
4. Health and exhaustion
The worker probes every active offer about every 10 minutes and after any upstream auth or quota error. Offers marked degraded, down, exhausted or suspended are skipped by routing. Capacity is metered by local as fills settle (units_sold and units_reserved on the offer); when the upstream answers 429, 402 or 403 the offer is marked exhausted or suspended immediately and the buyer’s request fails over to the next offer. You can pause and resume offers at any time, and edit capacity, ask and period end on an existing offer.
5. Earnings and payouts
Every settled fill credits your seller_payable ledger account with units × ask. On Sell → Earnings you can:
- Transfer to balance — moves payable earnings to your workspace’s buying balance instantly (
earnings_transfer), no approval needed. - Request a payout — USDC to a Solana address on the configured network. An operator approves (
payout_hold) and pays (payout_paid); you see the status and the payment signature with an explorer link.
Fills are listed on Sell → Fills with units, price, your amount, the platform fee and the settlement status. Buyers are anonymised; you never see who bought.
6. Agent keys with market:sell
Autonomous sellers use an API key with the market:sell scope against /v1/market/offers*, the same routes as the dashboard. Management scopes are never implied by execution scopes, so create a dedicated key.
# list my offers
curl https://api.uselocal.sh/v1/market/offers -H "Authorization: Bearer $LOCAL_SELL_KEY"
# create an offer on a verified credential
curl https://api.uselocal.sh/v1/market/offers \
-H "Authorization: Bearer $LOCAL_SELL_KEY" -H "Content-Type: application/json" \
-d '{"provider":"helius","credential_id":"…","price_per_unit_usd":"0.000004","units_total":"5000000","period_end":"2026-11-01T00:00:00Z"}'
# pause / resume / delete
curl -X POST https://api.uselocal.sh/v1/market/offers/{id}/pause -H "Authorization: Bearer $LOCAL_SELL_KEY"GET /dashboard/market/providers registry: credential_fields, routes_summary, resale_notice, reference price
GET /dashboard/market/credentials [{ id, provider, label, masked_hint, status, verified_at, last_probe_result }]
POST /dashboard/market/credentials { provider, label, fields: {…}, attest: true } (secrets never returned)
POST /dashboard/market/credentials/{id}/verify re-run the probe
DELETE /dashboard/market/credentials/{id} revoke (ciphertext deleted)
GET /dashboard/market/offers | POST | PATCH /{id} | POST /{id}/pause | POST /{id}/resume | DELETE /{id}
GET /dashboard/market/fills?role=seller|buyer&provider&status&cursor
GET /dashboard/market/earnings { payable_usd, lifetime_earned_usd, pending_payouts_usd, by_provider[] }
POST /dashboard/market/earnings/transfer { amount_usd }
GET /dashboard/market/payouts | POST { amount_usd, destination_address }