Bisibility Discovery API
Discover the API contract, capabilities, health, and public provider pricing.
Discover the API contract, capabilities, health, and public provider pricing.
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/bisibility-com:bisibility-com-discovery-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Bisibility Com Discovery API
version: 1.0.0
description: 'Operations tagged discovery across 2 of this provider''s published API definitions: eu.bisibility.com_v1_openapi.json, bisibility-com-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: /api/v1
tags:
- name: Discovery
description: Discover the API contract, capabilities, health, and public provider pricing.
x-group: Discovery
paths:
/capabilities:
get:
operationId: getCapabilities
responses:
'200':
content:
application/json:
schema:
properties:
apiVersions:
items:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
minItems: 1
type: array
authentication:
properties:
scheme:
const: bearer
type: string
scope:
type: string
required:
- scheme
- scope
type: object
x-bisibility-name: CapabilitiesAuthentication
data:
items:
$ref: '#/components/schemas/Capability'
type: array
description:
type: string
features:
description: Supported request protocols, independent of the caller's permissions.
properties:
reviewed_project_defaults:
const: v1
type: string
required:
- reviewed_project_defaults
type: object
x-bisibility-name: CapabilitiesFeatures
rank_check_scheduler_mode:
enum:
- cutover
- dispatcher
- invalid
- legacy
type: string
x-bisibility-enum: open
x-bisibility-name: RankCheckSchedulerMode
scheduler_driver:
enum:
- invalid
- legacy-auto
- none
- temporal
type: string
x-bisibility-enum: open
x-bisibility-name: SchedulerDriver
required:
- apiVersions
- authentication
- data
- description
- features
- rank_check_scheduler_mode
- scheduler_driver
type: object
x-bisibility-name: Capabilities
description: JSON response
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
summary: Get API capabilities
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
x-bisibility-idempotency: none
x-bisibility-pagination:
style: none
x-bisibility-sdk:
group: system
legacy:
go:
- GetCapabilities
python:
- get_capabilities
ts:
- getCapabilities
method: getCapabilities
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/cost-estimate:
get:
operationId: getCostEstimate
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
- description: Custom cron expression; an invalid or missing expression leaves monthly estimates unknown.
in: query
name: cron_expression
schema:
type: string
maxLength: 120
- description: Keyword count. Must be an integer greater than or equal to 0.
in: query
name: keywords
required: true
schema:
maximum: 100000
minimum: 0
type: integer
- description: Organic result depth per logical rank check.
in: query
name: depth
schema:
default: 100
enum:
- 10
- 20
- 50
- 100
type: integer
x-bisibility-enum: closed
x-bisibility-name: SerpDepth
- description: Market count per keyword; each market combines a location and language.
in: query
name: locations
schema:
default: 1
maximum: 100
minimum: 1
type: integer
- description: Device count per keyword.
in: query
name: devices
schema:
default: 1
maximum: 2
minimum: 1
type: integer
- description: Rank-check frequency used to estimate monthly checks.
in: query
name: frequency
schema:
default: daily
enum:
- daily
- weekly
- monthly
- manual
- paused
- custom_cron
type: string
x-bisibility-enum: closed
x-bisibility-name: CostEstimateFrequency
- description: Provider rate card ID from GET /provider-rates. An unknown provider returns 404.
in: query
name: provider
schema:
default: dataforseo
maxLength: 80
minLength: 1
type: string
- description: Flat-rate provider option key from the provider's rate card, such as standard, priority or live.
in: query
name: option
schema:
maxLength: 80
minLength: 1
type: string
- description: Plan-model provider plan key from the provider's rate card; unknown values use auto selection.
in: query
name: plan
schema:
maxLength: 80
minLength: 1
type: string
responses:
'200':
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/CostEstimate'
required:
- data
type: object
x-bisibility-name: CostEstimateResponse
description: JSON response
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Bad request
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Not found
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
'429':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Rate limited
summary: Estimate monthly SERP provider cost
x-bisibility-idempotency: none
x-bisibility-pagination:
style: none
x-bisibility-sdk:
group: pricing
legacy:
go:
- GetCostEstimate
python:
- get_cost_estimate
ts:
- getCostEstimate
method: estimate
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/health:
get:
description: Anonymous responses expose only status. Valid API credentials or INTERNAL_PROBE_TOKEN receive additional operator diagnostics outside the public SDK schema.
operationId: getHealth
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthStatus'
description: Composite health report is healthy
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthStatus'
description: Composite health report is degraded
summary: Check API health
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
x-bisibility-idempotency: none
x-bisibility-pagination:
style: none
x-bisibility-sdk:
group: system
legacy:
go:
- GetHealth
python:
- get_health
ts:
- getHealth
method: getHealth
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/liveness:
get:
operationId: getLiveness
responses:
'200':
content:
application/json:
schema:
properties:
status:
enum:
- ok
type: string
required:
- status
type: object
description: Web process is alive
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
summary: Check web process liveness
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/llms.txt:
get:
operationId: getLlmsTxt
responses:
'200':
content:
text/plain:
schema:
type: string
description: Agent-readable API capability summary
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
summary: Get API documentation for LLMs
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/openapi.json:
get:
operationId: getOpenApi
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/OpenApiDocument'
description: JSON response
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
summary: Get the OpenAPI document
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/provider-rates:
get:
operationId: getProviderRates
responses:
'200':
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/ProviderRateCard'
type: array
required:
- data
type: object
x-bisibility-name: ProviderRateCardList
description: JSON response
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
'429':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Rate limited
summary: List public SERP provider rate cards
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/readiness:
get:
operationId: getReadiness
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthStatus'
description: Web process is ready to serve traffic
'409':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unsupported API version
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthStatus'
description: Web process is not ready to serve traffic
summary: Check web traffic readiness
parameters:
- description: API contract version requested by the client. Omit this header to use the current backward-compatible behavior.
in: header
name: Bisibility-API-Version
required: false
schema:
enum:
- v1
type: string
x-bisibility-enum: open
x-bisibility-name: ApiVersion
tags:
- Discovery
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
components:
schemas:
Capability:
description: One operation in the public capability catalog.
properties:
description:
type: string
input_schema:
additionalProperties: true
description: JSON Schema for the operation input.
type: object
mcp_tool:
description: MCP tool name, or null when no MCP tool exposes the operation.
type:
- string
- 'null'
name:
type: string
operationId:
type: string
required:
- description
- input_schema
- mcp_tool
- name
- operationId
type: object
CostEstimate:
anyOf:
- properties:
billing_units_per_check:
minimum: 0
type: number
checks_per_run:
minimum: 0
type: number
depth:
minimum: 1
type: integer
effective_cost_per_check_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
exceeds_largest_plan:
type: boolean
exceeds_selected_plan:
type: boolean
monthly_billing_units:
minimum: 0
type:
- number
- 'null'
monthly_checks:
minimum: 0
type:
- number
- 'null'
monthly_cost_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
monthly_cost_usd:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_number
pricing_model:
const: flat
type: string
provider_id:
type: string
rate_checked_at:
type: string
rate_source_url:
type: string
result_pages_per_run:
minimum: 0
type: number
runs_per_month:
minimum: 0
type:
- number
- 'null'
selected_option:
properties:
additional_page_cost_cents:
minimum: 0
type: number
x-bisibility-money: usd_cents
additional_page_cost_usd:
minimum: 0
type: number
x-bisibility-money: usd_number
key:
type: string
label:
type: string
short_label:
type: string
top_100_check_cost_cents:
minimum: 0
type: number
x-bisibility-money: usd_cents
top_100_check_cost_usd:
minimum: 0
type: number
x-bisibility-money: usd_number
turnaround:
type: string
unit_cost_cents:
minimum: 0
type: number
x-bisibility-money: usd_cents
unit_cost_usd:
minimum: 0
type: number
x-bisibility-money: usd_number
required:
- additional_page_cost_cents
- additional_page_cost_usd
- key
- label
- short_label
- top_100_check_cost_cents
- top_100_check_cost_usd
- turnaround
- unit_cost_cents
- unit_cost_usd
type: object
x-bisibility-name: CostEstimateOption
required:
- billing_units_per_check
- checks_per_run
- depth
- effective_cost_per_check_cents
- exceeds_largest_plan
- exceeds_selected_plan
- monthly_billing_units
- monthly_checks
- monthly_cost_cents
- monthly_cost_usd
- pricing_model
- provider_id
- rate_checked_at
- rate_source_url
- result_pages_per_run
- runs_per_month
type: object
x-bisibility-name: FlatCostEstimate
- properties:
billing_units_per_check:
minimum: 0
type: number
checks_per_run:
minimum: 0
type: number
depth:
minimum: 1
type: integer
effective_cost_per_check_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
exceeds_largest_plan:
type: boolean
exceeds_selected_plan:
type: boolean
monthly_billing_units:
minimum: 0
type:
- number
- 'null'
monthly_checks:
minimum: 0
type:
- number
- 'null'
monthly_cost_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
monthly_cost_usd:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_number
pricing_model:
const: plan
type: string
provider_id:
type: string
rate_checked_at:
type: string
rate_source_url:
type: string
result_pages_per_run:
minimum: 0
type: number
runs_per_month:
minimum: 0
type:
- number
- 'null'
selected_plan:
properties:
included_checks:
minimum: 0
type: number
label:
type: string
monthly_price_cents:
minimum: 0
type: number
x-bisibility-money: usd_cents
monthly_price_usd:
minimum: 0
type: number
x-bisibility-money: usd_number
plan_key:
type: string
required:
- included_checks
- label
- monthly_price_cents
- monthly_price_usd
- plan_key
type: object
x-bisibility-name: CostEstimatePlan
required:
- billing_units_per_check
- checks_per_run
- depth
- effective_cost_per_check_cents
- exceeds_largest_plan
- exceeds_selected_plan
- monthly_billing_units
- monthly_checks
- monthly_cost_cents
- monthly_cost_usd
- pricing_model
- provider_id
- rate_checked_at
- rate_source_url
- result_pages_per_run
- runs_per_month
type: object
x-bisibility-name: PlanCostEstimate
- properties:
billing_units_per_check:
minimum: 0
type: number
checks_per_run:
minimum: 0
type: number
depth:
minimum: 1
type: integer
effective_cost_per_check_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
exceeds_largest_plan:
type: boolean
exceeds_selected_plan:
type: boolean
monthly_billing_units:
minimum: 0
type:
- number
- 'null'
monthly_checks:
minimum: 0
type:
- number
- 'null'
monthly_cost_cents:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_cents
monthly_cost_usd:
minimum: 0
type:
- number
- 'null'
x-bisibility-money: usd_number
pricing_model:
type: string
provider_id:
type: string
rate_checked_at:
type: string
rate_source_url:
type: string
result_pages_per_run:
minimum: 0
type: number
runs_per_month:
minimum: 0
type:
- number
- 'null'
required:
- billing_units_per_check
- checks_per_run
- depth
- effective_cost_per_check_cents
- exceeds_largest_plan
- exceeds_selected_plan
- monthly_billing_units
- monthly_checks
- monthly_cost_cents
- monthly_cost_usd
- pricing_model
- provider_id
- rate_checked_at
- rate_source_url
- result_pages_per_run
- runs_per_month
type: object
x-bisibility-name: OtherCostEstimate
description: Estimated rank-check volume and provider spend for a keyword portfolio.
x-bisibility-union:
cases:
- flat
- plan
- other
style: tagged
tag: pricing_model
OpenApiDocument:
additionalProperties: true
description: OpenAPI 3 document for REST API v1.
type: object
HealthStatus:
properties:
status:
enum:
- degraded
- ok
type: string
x-bisibility-enum: open
x-bisibility-name: HealthState
required:
- status
type: object
Problem:
properties:
detail:
type: string
details:
additionalProperties: true
type: object
docs_url:
type: string
errors: {}
instance:
type: string
status:
type: integer
title:
type: string
type:
type: string
required:
- type
- title
- status
- detail
- instance
- docs_url
type: object
ProviderRateCard:
additionalProperties: true
properties:
id:
type: string
name:
type: string
required:
- id
type: object
securitySchemes:
PersonalAccessToken:
bearerFormat: bsb_pat_live_...
description: Personal access token for account routes and projects visible to the authenticated user.
scheme: bearer
type: http
ProjectApiKey:
bearerFormat: bsb_key_live_...
description: Project-scoped API key. It cannot access account routes or create additional projects.
scheme: bearer
type: http
MigrationToken:
bearerFormat: mig_...
description: 'Migration token sent as `Authorization: Bearer mig_...`.'
scheme: bearer
type: http
AppOAuth:
description: 'OAuth 2.0 for the first-party Bisibility apps only; other clients cannot obtain these scopes. Use the authorization code flow with PKCE (S256) and no client secret, and do not send a `resource` parameter: `/api/v1` accepts only the opaque access tokens issued without one. Access tokens expire after 15 minutes. Refresh tokens rotate on every use, and replaying a used refresh token revokes the whole grant. To sign out, POST the refresh token with `token_type_hint=refresh_token` and the `client_id` to `/api/auth/oauth2/revoke`. Account deletion additionally requires a sign-in from the last 10 minutes (authorize again with `prompt=login`); otherwise it fails with 403 and `details.code` `reauthentication_required`. Admin operations are not available to app tokens.'
flows:
authorizationCode:
authorizationUrl: /api/auth/oauth2/authorize
refreshUrl: /api/auth/oauth2/token
scopes:
api:read: Read the account and projects visible to the user.
api:write: Read, and change projects within the user's role. Implies api:read.
tokenUrl: /api/auth/oauth2/token
type: oauth2
x-refined-from:
- eu.bisibility.com_v1_openapi.json
- bisibility-com-openapi.json