# attn markets Agent Credit Skill

Last reviewed: 2026-03-29

This page is the operational guide for agents using attn credit across the current hosted surfaces:

- public guide: `https://attn.markets/skill.md`
- canonical multirail runtime: `https://credit.attn.markets`
- XLayer hosted runtime override: `https://xlayer-credit-api-production.up.railway.app`

If this page, the live hosts, and an old thread disagree, trust the route-specific live host first:

1. `GET https://credit.attn.markets/api/release-stamp`
2. `GET https://credit.attn.markets/api/tempo/agent-credit/live/capabilities`
3. `GET https://credit.attn.markets/api/tempo/agent-credit/operator/ledger`
4. for fresh XLayer exact flows, use `https://xlayer-credit-api-production.up.railway.app` instead of assuming `credit.attn.markets` owns the newest XLayer path

## What exists

attn currently exposes seven rail-scoped small-credit lanes:

1. `tempo_mpp`
2. `solana_mpp`
3. `tempo_x402_exact`
4. `base_x402_exact`
5. `solana_x402_exact`
6. `virtuals_acp`
7. `xlayer_jobs`

Each rail is capped at `$5` lifetime. The current aggregate maximum is `$35`. Credit is spend-scoped. It is not cash and it is not a general wallet loan.

Separate from those seven rails, attn also still carries one Pump borrower single-token lane on the app host. It is not part of `https://credit.attn.markets` and it is not a live pool-backed public market.

Current Pump borrower surfaces:

1. `https://app.attn.markets/pump-credit-checker`
2. `https://app.attn.markets/wallet-qualification`
3. `https://app.attn.markets/onboarding`
4. `https://app.attn.markets/offboarding`
5. `https://app.attn.markets/credit-line`

Current Pump borrower state:

1. the estimator is live on the app host for Pump-public pricing
2. qualification, onboarding, and offboarding shells are publicly reachable on the app host
3. `app.attn.markets/credit-line` is still the production borrower-status entry path, but it currently redirects to `https://www.attn.markets/credit-simulation`
4. the public borrower CTAs on `pump-credit-checker`, `wallet-qualification`, `onboarding`, and `offboarding` now route to production app-host paths instead of `/credit-line-workspace`
5. `app.attn.markets/credit-line-workspace` is repo-owned and is not publicly served on the app host
6. the hosted Swig activation route is not healthy enough to call this lane fully live, because it is currently returning `STATE_STORE_UNAVAILABLE`

## Trends.fun Solana submission lane

The truthful submission story is Solana-first.

Current anchor:

1. the strongest current live proof anchor is `solana_x402_exact`
2. supporting live rails are:
   - `tempo_mpp`
   - `solana_mpp`
   - `virtuals_acp`
3. Matrica belongs in the story as:
   - identity and session proof,
   - not the signer,
   - not the settlement rail
4. a Metaplex-backed Solana agent lane is now locally proven for:
   - agent registration,
   - one paid Solana `x402` A2A replay,
   - and optional token launch plus doubled credit utility,
   but it is still local-only and not a hosted-live claim
5. the Pump borrower single-token lane belongs in the story as:
   - a real borrower pilot,
   - a live estimator and public shells,
   - but not a fully live funded public borrower lifecycle
6. do not use Tempo x402, Base x402, or XLayer as part of the Solana submission pitch while they remain blocked live

## What is live now

These lanes are live on `https://credit.attn.markets` today:

1. `tempo_mpp`
   - approved Tempo services
2. `solana_mpp`
   - approved Solana services
3. `virtuals_acp`
   - approved ACP jobs
   - financed `EIP-8183` is also live on approved offerings
4. `solana_x402_exact`
   - the current exact paid-content merchant is live
5. `xlayer_jobs`
   - the freshest hosted OKX swap proof now lives on the Railway XLayer host: `xlayer_okx_swap_exact_in`
   - same-session managed-wallet success is also hosted-proven on that Railway host, including auto-provision of a managed `OKX Agentic Wallet`
   - the exact hosted OKX x402 merchant remains in the canonical host truth set: `xlayer_okx_x402_exact_http`

## XLayer host override

For fresh XLayer flows, do not assume the canonical multirail host is the right runtime.

Use the Railway XLayer host for the current strongest hosted OKX-sponsored swap and same-session wallet flow:

1. host: `https://xlayer-credit-api-production.up.railway.app`
2. primary merchant: `xlayer_okx_swap_exact_in`
3. this is the current hosted exact-in OKX swap path to use when the agent needs the proven XLayer action
4. same-session wallet behavior:
   - do Matrica first
   - keep the same session
   - if the synced human already has a usable EVM wallet, use it
   - otherwise reuse a disclosed agent wallet if present
   - otherwise let the Railway XLayer host auto-provision and persist a managed `OKX Agentic Wallet` on that same session
5. the managed `OKX Agentic Wallet` is the execution wallet the hosted XLayer flow can then use for `decision -> reserve -> execute`
6. managed wallet provisioning is an execution-wallet path only; it does not replace Matrica human proof
7. if you are configuring Hermes manually, point the XLayer base URL at this Railway host explicitly until the public mirror and runtime converge
8. treat the Railway XLayer host as an API surface, not a browser homepage
9. `GET https://xlayer-credit-api-production.up.railway.app/` returning `404` is expected and does not mean the service is down
10. `GET` on POST-only XLayer routes such as `/api/matrica/connect/start` or `/api/tempo/agent-credit/live/decision` will also return `404`
11. the correct health check is the real workflow:
   - `POST /api/matrica/connect/start`
   - then use the returned `session_status_url`
   - then proceed through `decision -> reserve -> execute`

## What is not live now

These lanes exist in the repo or runtime contract but are not honestly usable on the canonical host today:

1. `tempo_x402_exact`
   - blocked by production config
   - live host reason: `tempo_x402_live_disabled`
2. `base_x402_exact`
   - blocked by production config
   - Base treasury is also empty
   - live host reason: `base_x402_live_disabled`

## What is only locally proven or repo-proven

These surfaces are strong in the repo and test matrix, but they are not all fully closed on the live host:

1. claimant payment-issues routes
2. operator payment-issues route
3. payment-outcome watchdog recovery flow
4. shared hosted proof runner and facility recovery helper
5. operator repay-on-behalf on the repayable rails already exercised
6. XLayer hosted route shape and request contracts
7. the Pump borrower single-token lane as an end-to-end funded borrower path
8. the Metaplex-backed Solana agent lane:
   - agent registration through the local Metaplex adapter
   - one paid Solana `x402` A2A replay from an injected agent-scoped signer
   - optional local token launch plus doubled credit facility entitlement

## What is deployed-host verified

These surfaces were verified on the raw deployed origin rather than only locally:

1. `https://attn-credit-web.vercel.app/pump-credit-checker`
2. `https://attn-credit-web.vercel.app/wallet-qualification`
3. `https://attn-credit-web.vercel.app/onboarding`
4. `https://attn-credit-web.vercel.app/offboarding`
5. `https://attn-credit-web.vercel.app/credit-line-workspace`
6. the raw deployed origin currently reproduces the same `STATE_STORE_UNAVAILABLE` activation failure as the public host

## What is production-host verified

These surfaces were checked directly on the canonical or public production hosts:

1. `tempo_mpp`
2. `solana_mpp`
   - live-proven, but repeated reruns are currently facility-state-limited
3. `virtuals_acp`
4. `solana_x402_exact`
5. Matrica connect start plus session polling
6. Pump-public estimator and the public borrower shells on `app.attn.markets`
7. the public Pump borrower pages no longer emit `/credit-line-workspace` borrower CTAs

## What must stay last

Do not move to XLayer DeFi before the core rails are live-closed:

1. `okx_defi_invest`
2. `okx_defi_withdraw`
3. `okx_defi_collect`

The correct order is:

1. live MPP and ACP rails
2. live exact x402 rails
3. XLayer swap and XLayer x402
4. only then XLayer DeFi

## Order for a new agent

Use the lanes in this order:

1. `tempo_mpp`
2. `solana_mpp`
3. `virtuals_acp`
4. `solana_x402_exact`
5. `tempo_x402_exact` only after the live capabilities route says it is enabled
6. `base_x402_exact` only after the live capabilities route says it is enabled and Base funding exists
7. `xlayer_jobs` when you need an EVM wallet-native action
   - for the freshest hosted swap path and the same-session managed-wallet flow, use `https://xlayer-credit-api-production.up.railway.app` with `xlayer_okx_swap_exact_in`
   - treat `xlayer_okx_x402_exact_http` as canonical-host truth unless a newer Railway x402 proof is explicitly recorded
8. XLayer DeFi only after the core XLayer rails above are live-proven

For the separate Pump borrower lane, use this order:

1. start at `https://www.attn.markets/credit-simulation?cluster=mainnet-beta`
2. use `https://app.attn.markets/pump-credit-checker` to size a single mint
3. if one borrower wallet controls multiple launches, use `https://app.attn.markets/wallet-qualification`
4. move into `https://app.attn.markets/onboarding`
5. use `https://app.attn.markets/credit-line` as the public borrower-status entry path
6. only use `/credit-line-workspace` on repo-owned or local proof surfaces
7. use `https://app.attn.markets/offboarding` only after fee routing and debt state say closeout is allowed

For the trends.fun Solana submission story, use this order:

1. show the canonical release identity and live capabilities
2. anchor on `solana_x402_exact`
3. show supporting live `tempo_mpp`, `solana_mpp`, and `virtuals_acp`
4. show Matrica start plus session status as the identity/session layer
5. show the Pump estimator and public borrower shells as the borrower pilot wedge
6. state the borrower blocker explicitly:
   - hosted Swig activation still returns `STATE_STORE_UNAVAILABLE`

## Required prerequisites

For the borrower-facing rails:

1. start a Matrica session first
2. send the returned `authorize_url` to the human owner
3. poll the returned `session_status_url`
4. wait for `agent_state = ready_for_credit_decision`

The canonical multirail Matrica start route is:

- `POST https://credit.attn.markets/api/matrica/connect/start`

The canonical multirail session poll route is:

- `GET https://credit.attn.markets/api/matrica/connect/session/:sessionId?session_token=...`

For the Railway XLayer override, use:

- `POST https://xlayer-credit-api-production.up.railway.app/api/matrica/connect/start`
- the exact returned `session_status_url` on `https://xlayer-credit-api-production.up.railway.app/api/matrica/connect/session/:sessionId?session_token=...`
- do not use `GET` probes against Railway POST-only routes as an outage test

Wallet guidance:

1. if the agent already has wallets, disclose them after the session starts
2. do not block the Matrica step on wallet collection
3. for XLayer, do Matrica first and do not ask for a wallet upfront
4. for XLayer, if the synced session has no usable EVM wallet, reuse a disclosed agent wallet or let the Railway host auto-provision a managed `OKX Agentic Wallet` on that same session
5. for XLayer, when a wallet is needed it must still be an EVM `0x...` wallet, not a Solana address
6. wallet resolution does not bypass human proof

Operator auth:

1. public routes do not require the operator token
2. operator routes, freeze, and operator repay-on-behalf do require the operator token

Pump borrower prerequisites:

1. the app-host borrower lane is still a restricted pilot, not a public pool-backed draw
2. Pump qualification currently depends on Pump-public creator-reward truth, not on the agent-credit rail catalog
3. borrower status on the public host currently routes through `credit-line` and then into the public simulation path
4. do not claim the Pump lane is fully live while the activation route is still returning `STATE_STORE_UNAVAILABLE`

## Fastest safe flow

Use this sequence unless you are explicitly debugging a later step:

1. check live rail status first:
   - `GET https://credit.attn.markets/api/tempo/agent-credit/live/capabilities`
2. start Matrica:
   - on the canonical multirail host: `POST https://credit.attn.markets/api/matrica/connect/start`
   - for the freshest XLayer swap path: `POST https://xlayer-credit-api-production.up.railway.app/api/matrica/connect/start`
3. if wallets are already known, disclose them:
   - `POST https://credit.attn.markets/api/tempo/agent-credit/live/wallet-disclosure`
4. read the live catalog:
   - `GET https://credit.attn.markets/api/tempo/agent-credit/live/catalog`
5. request the decision:
   - `POST https://credit.attn.markets/api/tempo/agent-credit/live/decision`
6. reserve the spend:
   - `POST https://credit.attn.markets/api/tempo/agent-credit/live/reserve`
7. execute the payment:
   - `POST https://credit.attn.markets/api/tempo/agent-credit/live/execute`
8. if debt remains, repay:
   - `GET https://credit.attn.markets/api/tempo/agent-credit/live/repay/instructions?facility_id=...`
   - `POST https://credit.attn.markets/api/tempo/agent-credit/live/repay`

For the current XLayer hosted swap flow, use this variant instead:

1. start Matrica on the Railway XLayer host:
   - `POST https://xlayer-credit-api-production.up.railway.app/api/matrica/connect/start`
2. poll the Railway-hosted session:
   - `GET https://xlayer-credit-api-production.up.railway.app/api/matrica/connect/session/:sessionId?session_token=...`
3. if wallets are already known, disclose them on that same Railway session:
   - `POST https://xlayer-credit-api-production.up.railway.app/api/tempo/agent-credit/live/wallet-disclosure`
4. if no usable EVM wallet is present after sync, let the same session continue through the managed-wallet branch on Railway instead of restarting Matrica
   - that branch can auto-provision a managed `OKX Agentic Wallet` on the same session
5. request the XLayer decision:
   - `POST https://xlayer-credit-api-production.up.railway.app/api/tempo/agent-credit/live/decision`
6. reserve the spend:
   - `POST https://xlayer-credit-api-production.up.railway.app/api/tempo/agent-credit/live/reserve`
7. execute the payment:
   - `POST https://xlayer-credit-api-production.up.railway.app/api/tempo/agent-credit/live/execute`

For the separate Pump borrower lane:

1. confirm the public entry path first:
   - `GET https://app.attn.markets/pump-credit-checker`
   - `GET https://app.attn.markets/wallet-qualification`
2. quote one mint:
   - `POST https://app.attn.markets/api/pump-credit-checker/estimate`
3. if a real borrower wallet is known, test grouped qualification:
   - `POST https://app.attn.markets/api/pump-credit-checker/wallet-qualification`
4. continue to onboarding only after the route contract is healthy:
   - `POST https://app.attn.markets/api/onboarding/stage-status`
   - `POST https://app.attn.markets/api/onboarding/swig/activate`
5. use manual repay or offboarding only after a real funded facility exists:
   - `GET https://app.attn.markets/api/pump-credit-checker/manual-repay-context?facility_pubkey=...`
   - `POST https://app.attn.markets/api/onboarding/swig/offboard-fee-ownership`

## Lane-specific rules

### Tempo MPP and Solana MPP

Use these for approved service spends.

Rules:

1. choose only an approved merchant from the live catalog
2. they are repayable lanes
3. operator repay-on-behalf is supported on the exercised flows
4. later provider failure can still create a payment issue or trigger automatic recovery

### Virtuals ACP

Use this for approved ACP jobs.

Rules:

1. approved offerings can run immediately
2. unapproved offerings must go through `review-requests`
3. the financed `EIP-8183` lane is live on approved offerings
4. the lane is repayable
5. some ACP repayment shortcuts are policy-specific, so do not assume `proof_reset` is always valid

### Solana x402 exact

Use this only for the current live exact paid-content merchant.

Rules:

1. this is live now
2. it follows the same `decision -> reserve -> execute -> repay` pattern
3. invalid execute or invalid reservation is returned as a blocked receipt, not a fake success

### Tempo x402 exact and Base x402 exact

Do not route to these on the canonical host until the live capabilities route shows them enabled.

### XLayer sponsor gift and XLayer jobs

This lane needs extra care.

Rules:

1. the sponsor gift is not a loan
2. the sponsor gift does not create repayable borrower debt
3. the current live exact merchants are split across hosts:
   - treat `xlayer_okx_x402_exact_http` as canonical-host truth
   - treat `xlayer_okx_swap_exact_in` as the freshest Railway-hosted swap proof
4. same-session managed-wallet auto-provision is hosted-proven on the Railway XLayer host, not on the canonical multirail host
   - the hosted flow can give the agent a managed `OKX Agentic Wallet` on that same Matrica session when no usable EVM wallet already exists
5. do Matrica first and do not ask for a wallet upfront
6. if the synced session has no usable EVM wallet, reuse a disclosed agent wallet or let the Railway XLayer host provision a managed `OKX Agentic Wallet` on that same session
7. if a prior XLayer facility is frozen, repay or use the operator unfreeze route before retrying new spend

### Pump borrower single-token lane

Use this only as a separate borrower pilot lane on `app.attn.markets`.

Rules:

1. it is not one of the seven `credit.attn.markets` rails
2. the strongest current live proof is the estimator happy path, not a full funded borrower lifecycle
3. the app host serves `pump-credit-checker`, `wallet-qualification`, `onboarding`, and `offboarding`
4. the public app host does not serve `/credit-line-workspace`
5. if you are on the production app host, borrower-status links must point at `https://app.attn.markets/credit-line`, not `/credit-line-workspace`
6. the current activation blocker is the hosted Swig session store returning `STATE_STORE_UNAVAILABLE`
7. a grouped wallet-qualification happy path still needs a real borrower wallet that actually discovers launches on the live host
8. for the Solana submission story, treat this lane as supporting proof, not the primary live anchor

## Repayment behavior

Repayment is part of the current live system.

Rules:

1. self-serve repay requires:
   - `facility_id`
   - `amount_usd`
   - `source_type`
   - `source_ref`
2. use the repay instructions route first so the runtime can tell you:
   - the current amount due
   - the suggested `source_type`
3. missing `source_ref` is rejected
4. reusing the same `source_ref` is rejected
5. operator repay-on-behalf works on the repayable rails that were already exercised in hosted proofs
6. sponsor gifts do not create repayable debt

For the Pump borrower lane:

1. manual repay context is available, but only when a real facility pubkey exists
2. the offboarding route is part of the borrower lifecycle, not a generic operator cleanup shortcut
3. operator repay-on-behalf is not yet re-proven in this run for the Pump borrower lane
4. do not present Pump borrower repay-on-behalf as generally live until that exact lane is re-exercised

Current live unhappy-path meanings:

1. missing `source_ref`
   - `SELF_SERVE_REPAYMENT_PROOF_REQUIRED`
2. duplicate `source_ref`
   - `SELF_SERVE_REPAYMENT_SOURCE_REF_REUSED`
3. wrong shortcut for a given ACP facility
   - use the source type returned by repay instructions instead of guessing

## Payment issues, recovery, and watchdog behavior

This part of the system exists today even though not every path is fully re-proven live.

What it does:

1. claimant payment-issues routes let the borrower side inspect issue state
2. operator payment-issues routes let operators open, inspect, refund-resolve, and list issues
3. payment-outcome watchdog logic can:
   - refund later terminal failures
   - restore sponsor budget where applicable
   - freeze the facility if refund cannot complete safely

How to use it:

1. if a provider charged without completion, check operator payment issues before guessing
2. if a later failure appears after execute, treat it as a recovery flow, not as proof that the lane never worked
3. do not casually call watchdog mutation routes on the live host just to “see what happens”

## Operator and dashboard surfaces

Public read surfaces:

1. `GET https://credit.attn.markets/api/tempo/agent-credit/live/capabilities`
2. `GET https://credit.attn.markets/api/tempo/agent-credit/operator/ledger`
3. public ops pages under `https://credit.attn.markets/agent-credit/ops/`

Private operator read surfaces:

1. `GET https://credit.attn.markets/api/tempo/agent-credit/operator/ledger?limit=...`
2. `GET https://credit.attn.markets/api/tempo/agent-credit/operator/payment-issues?limit=...`

Use the public ledger first for lane mix and the private ledger or payment-issues route for triage.

## Safe live failure meanings

These responses are expected contract behavior, not proof that the runtime is broken:

1. invalid Matrica session on decision
   - `400 BAD_REQUEST`
   - `matrica_session_missing`
2. invalid merchant on reserve
   - blocked `200` receipt
   - `merchant_not_found`
3. invalid reservation on execute
   - blocked `200` receipt
   - `reservation_not_found`
4. unauthenticated operator or freeze routes
   - `401 UNAUTHORIZED`

## What not to promise

Do not promise any of these today:

1. cash withdrawal
2. arbitrary wallet transfers
3. arbitrary jobs outside the approved list
4. live Tempo x402 on the canonical host
5. live Base x402 on the canonical host
6. XLayer DeFi `invest`, `withdraw`, or `collect`
7. automatic hosted OKX wallet creation for a newcomer on the canonical multirail host

## Machine truth

Current canonical-host reason codes that matter:

1. `tempo_x402_live_disabled`
2. `base_x402_live_disabled`

Current live proof state:

1. `live_proven`

Current public entrypoint:

1. `https://attn.markets/skill.md`
