Inscribe content and query Ordinals data via the Ordiscan API. Every request is paid with USDC on Base using the x402 payment protocol -- no API key needed.
Two payment modes are supported. Use the signing script by default. Only use awal if it's already installed and authenticated.
Requires node and the X402_PRIVATE_KEY environment variable (an Ethereum private key with USDC on Base).
If X402_PRIVATE_KEY is not already set, check if ~/.evm-wallet.json exists (created by the evm-wallet skill). If it does, read the private key from it:
X402_PRIVATE_KEY=$(node -e "console.log(JSON.parse(require('fs').readFileSync(require('os').homedir()+'/.evm-wallet.json','utf8')).privateKey)")
If neither the env var nor the wallet file is available, suggest using the awal wallet.
# Install dependencies (only once)
npm install --prefix <skill-dir>
# Verify connectivity
X402_PRIVATE_KEY=$X402_PRIVATE_KEY node <skill-dir>/scripts/x402-sign.mjs balance
awal)If awal is already installed and authenticated, it can be used instead. One command handles the full x402 negotiate-sign-pay flow.
# Check if awal is already available and authenticated
which awal && npx awal status
This is a 3-step flow: request -> sign -> retry. The example below inscribes text, but the same pattern works for any endpoint.
CONTENT=$(echo -n "Hello from OpenClaw!" | base64)
BODY="{\"contentType\":\"text/plain\",\"base64_content\":\"$CONTENT\",\"recipientAddress\":\"bc1p...\"}"
HEADER=$(curl -s -o /tmp/x402_body.json -w '%header{Payment-Required}' \
-X POST -H "Content-Type: application/json" \
-d "$BODY" \
"https://api.ordiscan.com/v1/inscribe")
Check the price before paying:
cat /tmp/x402_body.json
For GET requests (e.g. querying data), omit -X POST and -d.
PAYMENT=$(X402_PRIVATE_KEY=$X402_PRIVATE_KEY node <skill-dir>/scripts/x402-sign.mjs sign "$HEADER")
The script reads the base64-encoded Payment-Required header, signs an ERC-3009 TransferWithAuthorization, and outputs the base64-encoded Payment-Signature header to stdout. Diagnostics go to stderr.
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Payment-Signature: $PAYMENT" \
-d "$BODY" \
"https://api.ordiscan.com/v1/inscribe"
If awal is already available, it handles the full x402 flow in one command:
npx awal x402 pay "https://api.ordiscan.com/v1/inscription/0"
npx awal x402 pay "https://api.ordiscan.com/v1/inscribe" \
--method POST \
--data '{"contentType":"text/plain","base64_content":"SGVsbG8gd29ybGQ=","recipientAddress":"bc1p..."}' \
--max-amount 5000000
The --max-amount flag caps the payment in USDC base units (6 decimals). 5000000 = $5.00 USDC.
When the user asks to inscribe something, follow these steps:
text/plain| Extension | Content type |
|---|---|
| .txt | text/plain |
| .html, .htm | text/html |
| .svg | image/svg+xml |
| .json | application/json |
| .png | image/png |
| .jpg, .jpeg | image/jpeg |
| .gif | image/gif |
| .webp | image/webp |
| .mp3 | audio/mpeg |
| .mp4 | video/mp4 |
| .pdf | application/pdf |
For text:
CONTENT=$(echo -n 'Hello world' | base64)
For a file:
CONTENT=$(base64 -w0 path/to/file)
-w0 disables line wrapping (important -- the API expects a single unbroken base64 string). On macOS, base64 doesn't wrap by default, so -w0 can be omitted.
Ask the user for their Bitcoin address if not already provided. This is the address that will own the inscription.
See the worked examples below.
POST /v1/inscribe creates a Bitcoin inscription. The server builds and broadcasts the commit + reveal transactions.
| Field | Type | Required | Description |
|---|---|---|---|
| --- | --- | --- | --- |
contentType | string | yes | MIME type (e.g. text/plain, image/png, text/html) |
base64_content | string | yes | Base64-encoded content (max 400KB decoded) |
recipientAddress | string | yes | Bitcoin address to receive the inscription |
feeRate | number | no | Custom fee rate in sat/vB (defaults to medium) |
When called without payment, the server returns 402 with dynamic pricing:
{
"error": { "message": "Payment required..." },
"priceUsdc": 1.23,
"totalSats": 4567,
"feeRate": 12,
"btcPriceUsd": 100000
}
The Payment-Required header contains the base64-encoded x402 v2 payment details.
Use the 3-step signing script flow above to handle this. If using awal, it handles the 402 flow automatically.
{
"data": {
"commitTxid": "abc123...",
"revealTxid": "def456...",
"inscriptionId": "def456...i0"
}
}
After a successful inscription, always show the user a link to their inscription: https://ordiscan.com/inscription/{inscriptionId}
CONTENT=$(echo -n "Hello Bitcoin!" | base64)
BODY="{\"contentType\":\"text/plain\",\"base64_content\":\"$CONTENT\",\"recipientAddress\":\"bc1p...\"}"
# Step 1: Get price and payment header
HEADER=$(curl -s -o /tmp/x402_body.json -w '%header{Payment-Required}' \
-X POST -H "Content-Type: application/json" \
-d "$BODY" \
"https://api.ordiscan.com/v1/inscribe")
# Check the price
cat /tmp/x402_body.json
# Step 2: Sign
PAYMENT=$(X402_PRIVATE_KEY=$X402_PRIVATE_KEY node <skill-dir>/scripts/x402-sign.mjs sign "$HEADER")
# Step 3: Send with payment
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Payment-Signature: $PAYMENT" \
-d "$BODY" \
"https://api.ordiscan.com/v1/inscribe"
CONTENT=$(echo -n "Hello Bitcoin!" | base64)
npx awal x402 pay "https://api.ordiscan.com/v1/inscribe" \
--method POST \
--data "{\"contentType\":\"text/plain\",\"base64_content\":\"$CONTENT\",\"recipientAddress\":\"bc1p...\"}" \
--max-amount 5000000
CONTENT=$(base64 -w0 image.png)
npx awal x402 pay "https://api.ordiscan.com/v1/inscribe" \
--method POST \
--data "{\"contentType\":\"image/png\",\"base64_content\":\"$CONTENT\",\"recipientAddress\":\"bc1p...\"}" \
--max-amount 10000000
CONTENT=$(echo -n '<html><body><h1>On-chain page</h1></body></html>' | base64)
npx awal x402 pay "https://api.ordiscan.com/v1/inscribe" \
--method POST \
--data "{\"contentType\":\"text/html\",\"base64_content\":\"$CONTENT\",\"recipientAddress\":\"bc1p...\"}" \
--max-amount 5000000
See the Ordiscan API documentation
Success:
{ "data": { ... } }
Error:
{ "error": { "message": "..." } }
| Status | Meaning | Action |
|---|---|---|
| --- | --- | --- |
| 400 | Bad request (invalid params) | Fix the request body or parameters |
| 402 | Payment required | Sign and send payment via x402 |
| 429 | Rate limited | Wait and retry (max 10 requests/min for inscribe) |
| 503 | Service unavailable | Server issue, retry later |
X402_PRIVATE_KEY by default. Only use awal if it's already installed and authenticated (which awal succeeds).priceUsdc field tells you the exact cost.commitTxid and revealTxid. Track them on https://mempool.space/tx/{txid} or https://ordiscan.com/inscription/{inscriptionId}.| Endpoint | Method | Data sent |
|---|---|---|
| --- | --- | --- |
https://api.ordiscan.com/v1/* | GET | Query parameters only |
https://api.ordiscan.com/v1/inscribe | POST | Content type, base64-encoded content, recipient Bitcoin address |
All requests are paid via x402 (USDC on Base). Payment is handled by awal or the signing script.
api.ordiscan.com over HTTPS.awal manages for x402 payments. No data is stored locally.X402_PRIVATE_KEY from the environment to sign USDC payments on Base. The private key is never sent over the network -- only the resulting EIP-3009 signature is transmitted. No data is stored locally.By using this skill, your requests and inscription content are sent to Ordiscan. Only install if you trust Ordiscan.
共 1 个版本