BotFriendly Services API

The Services API from BotFriendly — 2 operation(s) for services.

Operations 2

GET /services List and filter services #
GET /services/{slug} Get a single service by slug #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/botfriendly-xyz:botfriendly-xyz-services-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

botfriendly-xyz-services-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BotFriendly Services API
  description: A directory of services AI agents can actually use. Query, filter, and discover bot-friendly APIs, tools, and merchants by category, interface (MCP, OpenAPI, llms.txt) and agent payment/commerce protocol.
  version: 1.0.0
  contact:
    url: https://botfriendly.xyz
servers:
- url: https://botfriendly.xyz/api/v1
tags:
- name: Services
paths:
  /services:
    get:
      operationId: listServices
      summary: List and filter services
      description: Returns a paginated list of bot-friendly services. Supports filtering by category, protocol support, auth method, and search.
      parameters:
      - name: category
        in: query
        schema:
          type: string
          enum:
          - think
          - see
          - hear-speak
          - create
          - remember
          - search
          - browse
          - communicate
          - execute
          - pay
          - shop
          - markets
          - platforms
          - identify
          - monitor
          - other
          - locate
          - book
          - hire
          - sign
          - trade
          - bet
          - connect
          - automate
        description: Filter by category id (think, see, hear-speak, create, remember, search, browse, communicate, execute, pay, shop, markets, platforms, identify, monitor, other). A merged category's old slugs (trade, bet, connect, automate, locate, book, sign, hire) are still accepted and select just that slug's listings; the id selects the whole group.
      - name: has_mcp
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: Filter to services with MCP servers
      - name: no_human
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: 'Only services an agent can start using with no human setting up a key: probe-backed — its own (non-documentation) MCP server lists its tools to an unauthenticated client and the service needs no key (no auth, or a wallet), or one of its interfaces answers HTTP 402 to be paid per request'
      - name: accepts_mpp
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: Filter to services accepting MPP payments
      - name: accepts_x402
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: Filter to services accepting x402 payments
      - name: protocol
        in: query
        schema:
          type: string
          enum:
          - x402
          - mpp
          - l402
          - ap2
          - tap
          - agent-pay
          - ace
          - acp
          - ucp
          - actp
          - icc
        description: Filter to services supporting this agent payment/commerce protocol. Repeat or comma-separate for 'supports all of these'.
      - name: has_skill_file
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: Filter to services with skill files
      - name: has_llms_txt
        in: query
        schema:
          type: string
          enum:
          - 'true'
        description: Filter to services with llms.txt
      - name: auth_method
        in: query
        schema:
          type: string
          enum:
          - api-key
          - m2m-oauth
          - bot-token
          - wallet
          - x402-none
          - none
      - name: search
        in: query
        schema:
          type: string
        description: Full-text search across name, description, and tags
      - name: min_score
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 5
        description: Minimum bot-friendly score
      - name: promoted
        in: query
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
        description: 'Filter by promoted status: true for promoted only, false for organic only'
      - name: sort
        in: query
        schema:
          type: string
          enum:
          - score
          - votes
          - name
          - newest
          default: score
        description: 'Sort order: score (default), votes, name, newest'
      - name: page
        in: query
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        schema:
          type: integer
          default: 20
          maximum: 100
      responses:
        '200':
          description: List of services
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Service'
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      per_page:
                        type: integer
                      total_pages:
                        type: integer
                      organic_count:
                        type: integer
                        description: Number of organic (non-ad) results
                      ad_count:
                        type: integer
                        description: Number of ad/promoted results
                      ad_positions:
                        type: array
                        items:
                          type: integer
                        description: 1-indexed positions of ads in the results array
      tags:
      - Services
  /services/{slug}:
    get:
      operationId: getService
      summary: Get a single service by slug
      description: 'Full details for one listed service: auth method, MCP/OpenAPI/skill-file URLs, supported payment protocols, bot score, and verification status. Slugs come from listServices or searchServices results.'
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
        description: Service slug, e.g. browserbase
      responses:
        '200':
          description: Service detail
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  data:
                    $ref: '#/components/schemas/Service'
        '404':
          description: Service not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Services
components:
  schemas:
    Error:
      type: object
      description: Standard error envelope returned by every non-2xx response
      properties:
        ok:
          type: boolean
          enum:
          - false
        error:
          type: object
          properties:
            message:
              type: string
            code:
              type: string
            hint:
              type: string
          required:
          - message
    Service:
      type: object
      properties:
        slug:
          type: string
        name:
          type: string
        description:
          type: string
        category:
          type: string
          description: Category slug the listing carries; map it to a label via /categories (slugs array)
        url:
          type: string
          format: uri
        docs_url:
          type:
          - string
          - 'null'
          format: uri
        icon_url:
          type:
          - string
          - 'null'
          format: uri
          description: Service icon URL
        auth_method:
          type:
          - string
          - 'null'
          enum:
          - api-key
          - m2m-oauth
          - bot-token
          - wallet
          - x402-none
          - none
        has_mcp_server:
          type: boolean
        mcp_server_url:
          type:
          - string
          - 'null'
        has_openapi_spec:
          type: boolean
        openapi_spec_url:
          type:
          - string
          - 'null'
        has_api:
          type: boolean
          description: A live API host answered in JSON when probed
        api_url:
          type:
          - string
          - 'null'
        no_human_needed:
          type: boolean
          description: 'Probe-backed: the service''s own (non-documentation) MCP server listed its tools to an unauthenticated client and its auth needs no key (none or wallet), or a callable interface answered HTTP 402. An agent can start with nobody setting up a key'
        payment_protocols:
          type: array
          items:
            type: string
            enum:
            - x402
            - mpp
            - l402
            - ap2
            - tap
            - agent-pay
            - ace
            - acp
            - ucp
            - actp
            - icc
          description: Agent payment / commerce protocols this service supports
        accepts_mpp:
          type: boolean
          description: Derived from payment_protocols
        accepts_x402:
          type: boolean
          description: Derived from payment_protocols
        supports_acp:
          type: boolean
          description: Derived from payment_protocols
        supports_ucp:
          type: boolean
          description: Derived from payment_protocols
        has_skill_file:
          type: boolean
        skill_file_url:
          type:
          - string
          - 'null'
        has_llms_txt:
          type: boolean
        llms_txt_url:
          type:
          - string
          - 'null'
        has_structured_feed:
          type: boolean
        structured_feed_url:
          type:
          - string
          - 'null'
        billing_model:
          type:
          - string
          - 'null'
        has_free_tier:
          type: boolean
        has_webhooks:
          type: boolean
        programmatic_onboarding:
          type:
          - string
          - 'null'
          enum:
          - full
          - partial
          - none
        bot_friendly_tos:
          type:
          - string
          - 'null'
          enum:
          - explicit-welcome
          - neutral
          - restricts-bots
          - unknown
        bot_score:
          type: integer
          minimum: 1
          maximum: 5
        vote_count:
          type: integer
          description: Community upvote count
        tags:
          type: array
          items:
            type: string
        is_pro:
          type: boolean
        is_verified:
          type: boolean
        verified_interfaces:
          type: array
          items:
            type: string
          description: The machine-readable interface flags we have actually fetched and confirmed. A flag that is true on the service but absent here is claimed rather than verified — the listing says it exists and nothing has reached it yet. Prefer a verified interface when choosing how to call a service.
        promoted:
          type: boolean
          description: Whether this is a paid promoted placement (ad)
        ad:
          type: boolean
          description: Whether this is an ad (redundant with promoted for compatibility)
        promotion_type:
          type:
          - string
          - 'null'
          enum:
          - site
          - category
          description: Type of promotion if promoted
        created_at:
          type: string
          format: date-time
        last_verified_at:
          type:
          - string
          - 'null'
          format: date-time