Skip to main content
Glama

Server Details

Search settlement-verified x402 APIs for free. Pay providers in USDC on Base, Solana or Algorand.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.7% over 56 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

The four tools have mostly distinct roles: get by id/slug, list by category, search by text, and submit. list_apis and search_apis both browse the catalogue and could be confused, but the descriptions make the filter-vs-free-text distinction clear.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern: get_api, list_apis, search_apis, submit_listing. Singular/plural use is natural and predictable.

Tool Count4/5

Four tools is a tight, well-scoped set for discovery plus submission, with no redundant tools. It is slightly thin for a marketplace lifecycle, but each tool clearly earns its place.

Completeness3/5

Core discovery and initial submission are covered, but there is no dedicated update or delete/delist operation for live listings. Updating pending listings through submit_listing helps, yet the lifecycle surface has notable gaps.

Available Tools

4 tools
get_apiGet one PayAPI Market listingA
Read-onlyIdempotent
Inspect

Fetch a single live listing by its id or slug, including base_url, price range, network and verification state. payment_verified is true if at least one route was paid; verified_routes names each paid route with its on-chain receipt. test_payment_usdc is the test payment, not the per-call price. amount_usdc is deprecated and has the same value; it is the verification test payment, not the price. The per-call price is price_min and price_max. Also returns a reliability object: score (0 to 100 or null), band (strong, established, thin, caution or unscored) and computed_at. Reliability is a running score from paid verifications, health history and payTo integrity, not a star rating and not a guarantee; unscored means it has not been computed for that listing yet. Method: https://payapi.market/how-an-agent-finds-payapi. Returns the listing whether or not it is verified, and reports payment_verified honestly. Free and read-only; spends nothing.

NameRequiredDescriptionDefault
idYesListing uuid or slug, as returned by search_apis or list_apis.

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description still adds real behavioral context: it is free and spends nothing, it returns the listing regardless of verification status and reports payment_verified honestly, and it explains that reliability is a running score that is not a guarantee. That pre-empts exactly the misinterpretations an agent would otherwise make from the field names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but the middle is repetitive: 'not the per-call price', 'not the price', and 'The per-call price is price_min and price_max' make the same disambiguation three times. The reliability explanation is long for what it delivers, and the docs URL trails at the end where it is least useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description properly carries the return-value burden, covering verification fields, pricing fields, and the reliability object's score/band/computed_at. It stops short of describing not-found or error behavior, which is the main remaining gap for a single-record lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema description coverage, so the schema already carries the meaning of 'id'. The description's 'by its id or slug' restates the schema rather than adding format or lookup semantics, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetch a single live listing by id or slug, with an enumeration of what comes back (base_url, price range, network, verification state). 'Single' implicitly contrasts with the list/search siblings, but no sibling is named so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied – you call this when you already have an id or slug, and the schema note points at search_apis/list_apis as the id source. There is no explicit when-to-use / when-not statement, and no guidance on what to do when the id is unknown or the listing is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_apisList the PayAPI Market catalogueA
Read-onlyIdempotent
Inspect

Browse the live catalogue, optionally filtered to one category. Omit category for everything. Returns settlement-verified listings only unless verified_only is false. Free and read-only; spends nothing.

NameRequiredDescriptionDefault
limitNo
networkNoOnly 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`.
categoryNoExact category name. Call with no category first to see the valid values.
verified_onlyNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/destructive=false, yet the description adds genuinely new information: the tool is free and spends nothing, and by default only settlement-verified listings are returned unless verified_only is false. That default-behavior disclosure is beyond both the annotations and the bare schema default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying a distinct fact (scope, filter behavior, cost/safety). Front-loaded with the primary action and zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, no-required-arg list tool with no output schema, the description covers the selection semantics an agent needs. The only gap is pagination/limit handling, which is undocumented in both the schema and the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: network and category are described in-schema, while limit and verified_only are not. The description partially compensates by explaining verified_only's effect and the category-omission behavior, but says nothing about limit or paging. Baseline 3 for mid coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Browse the live catalogue') plus the optional scoping dimension (one category). It is clearly a listing tool, but it never distinguishes itself from the sibling search_apis, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Omit category for everything' and 'unless verified_only is false' give implied usage for the filters, but there is no guidance on when to pick this over search_apis or get_api. The agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_apisSearch the PayAPI Market catalogueA
Read-onlyIdempotent
Inspect

Free-text search across the live catalogue. Matches listing name, description, category and provider name. Returns settlement-verified listings only unless verified_only is false. Free and read-only; spends nothing.

NameRequiredDescriptionDefault
limitNo
queryYesWhat you are looking for, e.g. "uk property" or "sanctions screening".
networkNoOnly 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`.
verified_onlyNoRestrict to settlement-verified listings. Default true.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, but the description adds genuinely new context: that results are restricted to settlement-verified listings by default, and that the call is free ('spends nothing') — meaningful in a paid API catalogue. It stops short of disclosing result ordering, pagination, or how the limit interacts with total matches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, followed by match scope and then the default filter. No filler; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description conveys what matches, what is filtered by default, and the cost profile — enough to call it correctly. It omits any indication of result shape or paging, which is the only notable gap for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, with query, network and verified_only all self-documented in the schema. The description restates the verified_only default behavior but adds nothing for limit or network (e.g. CAIP-2 handling), so it does not meaningfully exceed the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Free-text search across the live catalogue') and enumerates exactly which fields are matched (name, description, category, provider). It is clearly distinguishable from get_api, though it never names list_apis as the non-search alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'free-text search' and the mention of the verified_only default, but there is no explicit when-to-use guidance and no routing to list_apis for unfiltered browsing or get_api for detail retrieval. The agent must infer the boundary from the siblings' names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_listingSubmit a listing to PayAPI MarketAInspect

List 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.

NameRequiredDescriptionDefault
urlNoOne https route that returns HTTP 402. Use this, paid_route_url, or urls.
nameNoAPI name. Read from the 402 when omitted.
urlsNoUp to 20 paid routes in one call. Each is probed on its own.
emailNoSame as contact_email.
payToNoBase wallet that receives USDC. Read from the 402 when omitted.
priceNoPrice per request in USDC. Read from the Base accept when omitted.
methodNoHow 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.
networkNoOnly 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_urlNoBase URL of the API (https only, no localhost or tunnels). Defaults to the paid route origin.
categoryNoAPI category. Defaults to Data when omitted. There is no Other category.
networksNoNetworks this API accepts (e.g. ["base"], ["base", "solana"]). The Base rail is read from the 402.
sample_urlNoOptional free sample or health URL. Called unpaid, before any paid check.
descriptionNoAPI description. Read from the 402 or /.well-known/x402 when omitted.
mcp_endpointNoOptional: MCP endpoint URL if this is an MCP server
sample_inputNoExample 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_emailYesContact email for the provider. Required. email is the same field.
provider_nameNoOptional: provider/company name (defaults to API name)
paid_route_urlNoThe exact route that requires x402 payment. Same as url.
input_param_to_varyNoOptional parameter name to change between two free sample calls, for example city.
settles_after_successNoConfirm the paid route settles only after a successful response. Required only when the server switch is on.
example_expected_outputNoOptional JSON shape or short sample the free check compares against.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior an agent cannot infer from annotations: real paid probes up to $0.10 USDC on Base, per-route probing with listed/pending/rejected outcomes, dedupe that returns the existing listing id without creating a second row, and hard rate limits (10/hr per wallet and per email, 50/day per IP and per payTo, applied per element inside urls). The non-live, non-verified boundary is stated explicitly. Minor tension with idempotentHint=false (duplicate submits are described as side-effect-free for the same wallet/API pair), but the description's disclosure is richer than the annotation, not contrary to it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the minimum viable input set before the edge cases, which is the right ordering for a 21-parameter tool. It runs long and repeats the 'read from the HTTP 402 when you omit them' idea that the schema already states per-field, and the quoted duplicate-submission message is more verbosity than the agent needs. Still, nearly every sentence carries operational weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter mutation with no output schema, the description covers the full contract: required inputs, derivable defaults, probe outcomes and their status vocabulary, cost exposure, rate limits, dedupe behavior, and the update-while-pending path. An agent could call this correctly and set expectations without opening any other artifact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by adding cross-field semantics the schema cannot express - that contact_email is the only schema-required field yet a paid route (url, paid_route_url, or urls) is also mandatory, that email is an alias, that urls caps at 20, and which fields are recovered from the 402 when omitted. Defaults for category and the rejection of placeholder examples are also clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title plus opening line 'List one or more APIs' identifies a marketplace submission, and the body makes clear it probes routes and creates/reuses a listing. The verb 'List' is unfortunately identical to the sibling list_apis, so an agent skimming the first sentence alone could misread the intent. The remainder of the description resolves this, but sibling differentiation isn't stated explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete entry criteria (minimum is a paid URL plus contact_email, email is an accepted alias), explains what can be omitted because it is re-derived from the 402, and states the 'NEVER makes the listing live' boundary. It also covers the resubmission path (same wallet + same API returns the existing id). What's missing is any pointer to siblings such as search_apis for checking whether an API is already listed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsubmit_listing15 fields changed
      • changedInput schema / properties / base_url / description
        Previous value: -"Base URL of the API (http(s) only, no localhost/tunnels)"New value: +"Base URL of the API (https only, no localhost or tunnels). Defaults to the paid route origin."
      • changedInput schema / properties / category / description
        Previous value: -"API category"New value: +"API category. Defaults to Data when omitted. There is no Other category."
      • changedInput schema / properties / contact_email / description
        Previous value: -"Contact email for the provider"New value: +"Contact email for the provider. Required. email is the same field."
      • changedInput schema / properties / description / description
        Previous value: -"API description"New value: +"API description. Read from the 402 or /.well-known/x402 when omitted."
      • addedInput schema / properties / email
        Added value: +{
        +  "description": "Same as contact_email.",
        +  "type": "string"
        +}
      • changedInput schema / properties / method / description
        Previous value: -"How we call the paid route. GET uses sample_input as a query string. POST uses it as a JSON body."New value: +"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."
      • changedInput schema / properties / name / description
        Previous value: -"API name"New value: +"API name. Read from the 402 when omitted."
      • changedInput schema / properties / networks / description
        Previous value: -"Networks this API accepts (e.g. [\"base\"], [\"base\", \"solana\"])"New value: +"Networks this API accepts (e.g. [\"base\"], [\"base\", \"solana\"]). The Base rail is read from the 402."
      • changedInput schema / properties / paid_route_url / description
        Previous value: -"The exact route that requires x402 payment (http(s) only)"New value: +"The exact route that requires x402 payment. Same as url."
      • changedInput schema / properties / payTo / description
        Previous value: -"Wallet address that receives payments (Base: 0x... address, Solana: base58 address)"New value: +"Base wallet that receives USDC. Read from the 402 when omitted."
      • changedInput schema / properties / price / description
        Previous value: -"Price per request in USDC"New value: +"Price per request in USDC. Read from the Base accept when omitted."
      • changedInput schema / properties / sample_input / description
        Previous value: -"Required example request. A query string for GET (city=London) or a JSON body for POST ({\"city\":\"London\"}). Placeholders are rejected."New value: +"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."
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "One https route that returns HTTP 402. Use this, paid_route_url, or urls.",
        +  "type": "string"
        +}
      • addedInput schema / properties / urls
        Added value: +{
        +  "description": "Up to 20 paid routes in one call. Each is probed on its own.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "description",
        -  "paid_route_url",
        -  "price",
        -  "payTo",
        -  "contact_email",
        -  "category",
        -  "sample_input"
        -]New value: +[
        +  "contact_email"
        +]
  2. 1 tool update
    • Changedsubmit_listing7 fields changed
      • addedInput schema / properties / example_expected_output
        Added value: +{
        +  "description": "Optional JSON shape or short sample the free check compares against.",
        +  "type": "string"
        +}
      • addedInput schema / properties / input_param_to_vary
        Added value: +{
        +  "description": "Optional parameter name to change between two free sample calls, for example city.",
        +  "type": "string"
        +}
      • addedInput schema / properties / method
        Added value: +{
        +  "description": "How we call the paid route. GET uses sample_input as a query string. POST uses it as a JSON body.",
        +  "enum": [
        +    "GET",
        +    "POST"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / sample_input / description
        Previous value: -"Optional: sample request body for POST routes"New value: +"Required example request. A query string for GET (city=London) or a JSON body for POST ({\"city\":\"London\"}). Placeholders are rejected."
      • addedInput schema / properties / sample_url
        Added value: +{
        +  "description": "Optional free sample or health URL. Called unpaid, before any paid check.",
        +  "type": "string"
        +}
      • addedInput schema / properties / settles_after_success
        Added value: +{
        +  "description": "Confirm the paid route settles only after a successful response. Required only when the server switch is on.",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "description",
        -  "paid_route_url",
        -  "price",
        -  "payTo",
        -  "contact_email",
        -  "category"
        -]New value: +[
        +  "name",
        +  "description",
        +  "paid_route_url",
        +  "price",
        +  "payTo",
        +  "contact_email",
        +  "category",
        +  "sample_input"
        +]
  3. 1 tool update
    • Addedsubmit_listing
  4. 2 tool updates
    • Changedlist_apis1 field changed
      • changedInput schema / properties / network / description
        Previous value: -"Only listings that accept USDC on this network: base, solana, or a CAIP-2 id. Omit for all. Each listing reports its rails in `networks`."New value: +"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`."
    • Changedsearch_apis1 field changed
      • changedInput schema / properties / network / description
        Previous value: -"Only listings that accept USDC on this network: base, solana, or a CAIP-2 id. Omit for all. Each listing reports its rails in `networks`."New value: +"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`."
  5. 2 tool updates
    • Changedlist_apis1 field changed
      • addedInput schema / properties / network
        Added value: +{
        +  "description": "Only listings that accept USDC on this network: base, solana, or a CAIP-2 id. Omit for all. Each listing reports its rails in `networks`.",
        +  "type": "string"
        +}
    • Changedsearch_apis1 field changed
      • addedInput schema / properties / network
        Added value: +{
        +  "description": "Only listings that accept USDC on this network: base, solana, or a CAIP-2 id. Omit for all. Each listing reports its rails in `networks`.",
        +  "type": "string"
        +}
  6. 3 tool updates
    • First observedget_api
    • First observedlist_apis
    • First observedsearch_apis

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources