Submit a listing to PayAPI Market
submit_listingList one or more APIs. The minimum is a paid URL (url, paid_route_url, or urls) and contact_email (email is accepted as the same field). Price, payTo, network, description and name are read from the HTTP 402 when you omit them. Category defaults to Data, which the listing schema accepts. urls takes at most 20 routes. Each route is probed and returned in results as listed, pending or rejected, with a code and a hint when it is turned away. A no-input GET that returns a valid 402 may omit sample_input. Placeholder examples are rejected. NEVER sets payment_verified or makes the listing live. PayAPI Market may test it with a real paid call (up to $0.10 USDC on Base). Listing is free. Providers keep 100%. Rate limited: max 10 submissions per hour per wallet and per contact email, 50 per day per IP and per payTo address. The cap still applies inside a urls array. If this wallet already submitted this API, the result is the existing listing id and the message "This API has already been submitted." No second row is created. The same wallet and email can update a listing that is still pending review.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | One https route that returns HTTP 402. Use this, paid_route_url, or urls. | |
| name | No | API name. Read from the 402 when omitted. | |
| urls | No | Up to 20 paid routes in one call. Each is probed on its own. | |
| No | Same as contact_email. | ||
| payTo | No | Base wallet that receives USDC. Read from the 402 when omitted. | |
| price | No | Price per request in USDC. Read from the Base accept when omitted. | |
| method | No | How we call the paid route. Read from the 402 when omitted. GET uses sample_input as a query string. POST uses it as a JSON body. | |
| network | No | Only listings that accept USDC on this network: base, solana, algorand, or a CAIP-2 id. Omit for all. Each listing reports its rails in `networks`. | |
| base_url | No | Base URL of the API (https only, no localhost or tunnels). Defaults to the paid route origin. | |
| category | No | API category. Defaults to Data when omitted. There is no Other category. | |
| networks | No | Networks this API accepts (e.g. ["base"], ["base", "solana"]). The Base rail is read from the 402. | |
| sample_url | No | Optional free sample or health URL. Called unpaid, before any paid check. | |
| description | No | API description. Read from the 402 or /.well-known/x402 when omitted. | |
| mcp_endpoint | No | Optional: MCP endpoint URL if this is an MCP server | |
| sample_input | No | Example request. A query string for GET (city=London) or a JSON body for POST ({"city":"London"}). Read from the 402 when omitted. A no-input GET with a valid 402 may leave this empty. Placeholders are rejected. | |
| contact_email | Yes | Contact email for the provider. Required. email is the same field. | |
| provider_name | No | Optional: provider/company name (defaults to API name) | |
| paid_route_url | No | The exact route that requires x402 payment. Same as url. | |
| input_param_to_vary | No | Optional parameter name to change between two free sample calls, for example city. | |
| settles_after_success | No | Confirm the paid route settles only after a successful response. Required only when the server switch is on. | |
| example_expected_output | No | Optional JSON shape or short sample the free check compares against. |