# X402 Checker (`onescales/x402-checker`) Actor

Check any URL for X402 Support — or a bulk list — to instantly discover whether it supports the X402 HTTP payment protocol. For every X402 enabled endpoint, the actor extracts the price, currency, network, payment endpoint, and raw payment headers.

- **URL**: https://apify.com/onescales/x402-checker.md
- **Developed by:** [One Scales](https://apify.com/onescales) (community)
- **Categories:** AI, Agents, Open source
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## X402 Checker

Check any URL — or a bulk list — to instantly discover whether it supports the **X402 HTTP payment protocol**. For every X402-enabled endpoint, the actor extracts the price, currency, network, payment address, and full structured payment options.

[![Watch our walkthrough video](https://img.youtube.com/vi/rdPnwRh9a2s/maxresdefault.jpg)](https://www.youtube.com/watch?v=rdPnwRh9a2s)

### What is X402?

x402 is an open standard that brings native payments to the internet. It fills the gap the web was built without — making value exchange between clients and servers as natural as any other request. The result: scalable, agentic payment economies that work for everyone.

### What does this app do?

- Sends a request to each URL
- Detects a `402 Payment Required` response
- Parses all X402-related headers and JSON body: `payment-required`, `x-payment-required`, `www-authenticate`, `x402-price`, `x402-currency`, `x402-network`, `x402-endpoint`, and more
- Handles both the modern `accepts` / `paymentRequirements` array format and legacy single-header formats
- Returns one structured dataset row per URL: payment options, networks, amounts, tokens, pay-to addresses, and error info

### Demo / Try it Out

- Register a free Apify account and try it out at https://apify.com/onescales/x402-checker?fpr=s9de8

### Supported Networks & Coins

- **Stablecoins:** USDC, USDT, DAI, EURC, PYUSD, USDG
- **EVM mainnets:** Ethereum, Base, Polygon, Optimism, Arbitrum, Avalanche, BSC, X Layer, Plasma
- **EVM testnets:** Ethereum Sepolia, Base Sepolia, OP Sepolia, Arbitrum Sepolia, Polygon Amoy, Avalanche Fuji, X Layer Sepolia
- **Solana:** Mainnet and Devnet
- **Unknown networks and tokens** are still reported with their raw values so you never lose data
- **Need a network or coin that isn't listed?** [Contact us](https://docs.google.com/forms/d/e/1FAIpQLSfsKyzZ3nRED7mML47I4LAfNh_mBwkuFMp1FgYYJ4AkDRgaRw/viewform?usp=dialog) and we'll add it. 

### Use cases

- **Developer research** — Discover which URLs in the x402 ecosystem require payment and at what price
- **Bulk auditing** — Check hundreds of endpoints at once to build a directory or monitor pricing changes
- **Integration testing** — Verify your own x402-enabled service is returning the correct headers
- **Competitive intelligence** — Track x402 adoption across public APIs

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | array | Yes | One or more URLs to check |

**Example input:**
```json
{
    "urls": [
        { "url": "https://x402.org/protected" },
        { "url": "https://api.example.com/data" }
    ]
}
````

### Output

Each URL produces one dataset row:

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | The checked URL |
| `supportsX402` | boolean | `true` if the server returned HTTP 402 |
| `statusCode` | number | Actual HTTP status code returned |
| `x402Version` | string | X402 protocol version from the payload |
| `description` | string | Resource description from the payload |
| `acceptsCount` | number | Number of payment options available |
| `acceptNetworks` | string\[] | Blockchain networks for each option (e.g. `Base`, `Ethereum`) |
| `acceptAmounts` | string\[] | Payment amounts for each option (human-readable, e.g. `0.001`) |
| `acceptSymbols` | string\[] | Token symbols for each option (e.g. `USDC`) |
| `acceptPayTos` | string\[] | Payment recipient addresses for each option |
| `accepts` | object\[] | Full structured payment options array |
| `rawHeaders` | object | Raw X402-related response headers (when present) |
| `error` | string | Error message if the request failed |
| `checkedAt` | string | ISO 8601 timestamp |

**Example output item (X402-enabled URL):**

```json
{
    "url": "https://x402.org/protected",
    "supportsX402": true,
    "statusCode": 402,
    "x402Version": "1",
    "description": "Protected resource",
    "acceptsCount": 1,
    "acceptNetworks": ["Base"],
    "acceptAmounts": ["0.001"],
    "acceptSymbols": ["USDC"],
    "acceptPayTos": ["0xABC123..."],
    "accepts": [
        {
            "scheme": "exact",
            "network": "Base",
            "amount": "0.001",
            "symbol": "USDC",
            "payTo": "0xABC123..."
        }
    ],
    "checkedAt": "2025-04-16T12:00:00.000Z"
}
```

**Example output item (non-X402 URL):**

```json
{
    "url": "https://api.example.com/data",
    "supportsX402": false,
    "statusCode": 200,
    "checkedAt": "2025-04-16T12:00:00.000Z"
}
```

### Open Source

x402checker is open source and freely available for personal and commercial use.

**Repository:** [github.com/onescales/x402checker](https://github.com/onescales/x402checker)

This project is licensed under the [MIT License with Attribution](./LICENSE) — you are free to use, modify, and distribute this software, provided that visible credit to **One Scales** and a link to <https://onescales.com/> is included in any derivative work

### Support

**[Contact Support](https://docs.google.com/forms/d/e/1FAIpQLSfsKyzZ3nRED7mML47I4LAfNh_mBwkuFMp1FgYYJ4AkDRgaRw/viewform?usp=dialog)** — feature requests and custom integrations welcome.

# Actor input Schema

## `urls` (type: `array`):

One or more URLs to check for X402 payment protocol support.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://x402.org/protected"
    }
  ]
}
```

# Actor output Schema

## `x402Results` (type: `string`):

All checked URLs with X402 support status and full payment details.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        {
            "url": "https://x402.org/protected"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("onescales/x402-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": [{ "url": "https://x402.org/protected" }] }

# Run the Actor and wait for it to finish
run = client.actor("onescales/x402-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    {
      "url": "https://x402.org/protected"
    }
  ]
}' |
apify call onescales/x402-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=onescales/x402-checker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "X402 Checker",
        "description": "Check any URL for X402 Support — or a bulk list — to instantly discover whether it supports the X402 HTTP payment protocol. For every X402 enabled endpoint, the actor extracts the price, currency, network, payment endpoint, and raw payment headers.",
        "version": "1.0",
        "x-build-id": "yjTtVhIETRS6Jsevq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/onescales~x402-checker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-onescales-x402-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/onescales~x402-checker/runs": {
            "post": {
                "operationId": "runs-sync-onescales-x402-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/onescales~x402-checker/run-sync": {
            "post": {
                "operationId": "run-sync-onescales-x402-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "URLs to check",
                        "type": "array",
                        "description": "One or more URLs to check for X402 payment protocol support.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
