Switchboard X402 Micropayments Skill
Purpose
Use X402 micropayments with Switchboard feeds to access any X402-protected resource (premium data APIs, paid RPC, metered endpoints) in a way that:
generates single-use payment authorization per request
injects authorization securely at runtime (via variable overrides)
avoids double-charging during simulation
keeps sensitive payment material out of stored feed definitions
Preconditions
OperatorPolicyexists (explicit approval for spending, secret handling rules).The target endpoint supports X402 and specifies:
required header name(s)
how signatures are derived (URL/method/body binding)
Inputs to Collect
X402-protected endpoint(s): URL, method, and any body/headers that are part of the signature
funding source (e.g., USDC/SOL wallet) and spend caps
crossbarUrl(default:https://crossbar.switchboard.xyz)whether this feed will be:
used atomically (update+use in same tx), or
cranked/pushed periodically (generally discouraged for X402 due to cost)
Key Constraints (from the X402 tutorial)
numSignaturesmust be 1Why: X402 payment signatures are single-use. If more than one oracle tries to use the same payment authorization, subsequent requests fail.
Simulation can charge you
Crossbar simulation can trigger the paid HTTP request and charge the payment method.
On-chain transaction simulation is safe (does not trigger the HTTP call).
Prefer inline feeds
Payment signatures change every request and headers contain sensitive authorization.
Storing a static definition on IPFS is generally incompatible with per-request payment authorization.
Generalized Playbook
1) Derive the X402 payment authorization off-chain
Use the X402 client tooling to derive the payment header/signature.
The derived authorization must match the exact request (URL, method, and sometimes body).
2) Define the Switchboard job with a placeholder header
Put the payment authorization in an HTTP header as a variable placeholder.
Use variable overrides to inject the real value at runtime.
Example (conceptual):
3) Execute the update with runtime overrides
Provide
variableOverrides = { X402_PAYMENT_HEADER: <derived_value> }Enforce
numSignatures = 1to avoid reuse/failure.
4) Cost controls
Treat each successful oracle HTTP call as a billable event.
Enforce per-request and daily spend caps.
Avoid Crossbar simulations against paid endpoints unless explicitly approved.
Outputs
Produce an X402IntegrationPlan including:
how payment authorization is derived and what request fields it binds to
job definition template with placeholders
required runtime overrides
numSignatures = 1constraint and operational implicationsanti-double-charge simulation guidance
spend cap and monitoring strategy
References
https://docs.switchboard.xyz/docs-by-chain/solana-svm/x402/x402-tutorial
https://docs.switchboard.xyz/custom-feeds/advanced-feed-configuration/data-feed-variable-overrides
https://docs.switchboard.xyz/tooling/crossbar
Last updated