BotFriendly Services API
The Services API from BotFriendly — 2 operation(s) for services.
The Services API from BotFriendly — 2 operation(s) for services.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/botfriendly-xyz:botfriendly-xyz-services-api"
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.
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: 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