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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/bisibility-com:bisibility-com-competitors-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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
openapi: 3.2.0
info:
title: Bisibility Com Competitors API
version: 1.0.0
description: 'Operations tagged competitors 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: competitors
description: Manage project competitors.
x-group: Competitors
paths:
/competitors/{competitor_id}:
delete:
operationId: removeCompetitor
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Competitor'
description: JSON response
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Bad request
'401':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unauthorized
'403':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Forbidden
'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
security:
- ProjectApiKey: []
- PersonalAccessToken: []
- AppOAuth:
- api:write
summary: Remove a competitor by ID
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
- in: path
name: competitor_id
required: true
schema:
example: cmp_a00000000000000000000000
pattern: ^cmp_[a-z][a-z0-9]{23}$
type: string
description: Public competitor ID.
x-bisibility-public-id: cmp
- $ref: '#/components/parameters/ProjectHeader'
- $ref: '#/components/parameters/ProjectQuery'
- $ref: '#/components/parameters/SourceHeader'
tags:
- competitors
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/projects/{project_id}/competitors:
get:
operationId: listCompetitors
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
- in: path
name: project_id
required: true
schema:
example: prj_a00000000000000000000000
pattern: ^prj_[a-z][a-z0-9]{23}$
type: string
description: Public project ID; membership and token scope are enforced.
x-bisibility-public-id: prj
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Cursor'
- $ref: '#/components/parameters/SourceHeader'
responses:
'200':
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/Competitor'
type: array
meta:
properties:
markets:
items:
$ref: '#/components/schemas/CompetitorMarket'
type: array
next_cursor:
type:
- string
- 'null'
suggestions:
items:
$ref: '#/components/schemas/CompetitorSuggestion'
type: array
required:
- next_cursor
type: object
x-bisibility-name: CompetitorPageMeta
required:
- data
- meta
type: object
x-bisibility-name: CompetitorPage
description: JSON response
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Bad request
'401':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unauthorized
'403':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Forbidden
'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
security:
- ProjectApiKey: []
- PersonalAccessToken: []
- AppOAuth:
- api:read
summary: List competitors
x-bisibility-idempotency: none
x-bisibility-pagination:
items: data
max_limit: 200
next: meta.next_cursor
style: cursor
x-bisibility-sdk:
group: competitors
legacy:
go:
- ListCompetitors
python:
- list_competitors
ts:
- listCompetitors
method: list
tags:
- competitors
x-bisibility-cost:
kind: free
post:
operationId: addCompetitor
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
- in: path
name: project_id
required: true
schema:
example: prj_a00000000000000000000000
pattern: ^prj_[a-z][a-z0-9]{23}$
type: string
description: Public project ID; membership and token scope are enforced.
x-bisibility-public-id: prj
- $ref: '#/components/parameters/IdempotencyKey'
- $ref: '#/components/parameters/SourceHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CompetitorCreate'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Competitor'
description: JSON response
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Bad request
'401':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unauthorized
'403':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Forbidden
'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
security:
- ProjectApiKey: []
- PersonalAccessToken: []
- AppOAuth:
- api:write
summary: Add a competitor
x-bisibility-sdk:
group: competitors
method: add
legacy:
ts:
- addCompetitor
python:
- add_competitor
go:
- AddCompetitor
x-bisibility-idempotency: optional
x-bisibility-pagination:
style: none
tags:
- competitors
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
/projects/{project_id}/competitors/{competitor_id}:
delete:
operationId: removeProjectCompetitor
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
- in: path
name: project_id
required: true
schema:
example: prj_a00000000000000000000000
pattern: ^prj_[a-z][a-z0-9]{23}$
type: string
description: Public project ID; membership and token scope are enforced.
x-bisibility-public-id: prj
- in: path
name: competitor_id
required: true
schema:
example: cmp_a00000000000000000000000
pattern: ^cmp_[a-z][a-z0-9]{23}$
type: string
x-bisibility-public-id: cmp
- $ref: '#/components/parameters/IdempotencyKey'
- $ref: '#/components/parameters/SourceHeader'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CompetitorDeleteResult'
description: JSON response
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Bad request
'401':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Unauthorized
'403':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
description: Forbidden
'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
security:
- ProjectApiKey: []
- PersonalAccessToken: []
- AppOAuth:
- api:write
summary: Remove a project competitor
x-bisibility-sdk:
group: competitors
method: remove
legacy:
ts:
- removeCompetitor
python:
- remove_project_competitor
go:
- RemoveProjectCompetitor
x-bisibility-idempotency: optional
x-bisibility-pagination:
style: none
tags:
- competitors
x-bisibility-cost:
kind: free
servers:
- url: /api/v1
components:
parameters:
IdempotencyKey:
description: Optional key that makes a retry of this request return the first response instead of running it again. Replays last 24 hours and are scoped to the credential, method and path.
in: header
name: Idempotency-Key
required: false
schema:
maxLength: 200
type: string
SourceHeader:
description: 'Declares the client that produced the request for usage reporting: sdk, cli or mcp. Optional; any other value counts as api. It never changes authentication or which budget applies (every bearer-authenticated request counts against the API, MCP and SDK budget).'
in: header
name: X-Bisibility-Source
required: false
schema:
enum:
- sdk
- cli
- mcp
type: string
x-bisibility-enum: open
x-bisibility-name: RequestSource
ProjectQuery:
description: 'Query-parameter equivalent of the X-Bisibility-Project header for personal-access-token project selection. Optional. Selection precedence is: {project_id} path parameter, X-Bisibility-Project header, project query parameter, then inference when the PAT owner belongs to exactly one project.'
in: query
name: project
required: false
schema:
type: string
Cursor:
description: Opaque v3 cursor returned as meta.next_cursor from the previous page.
in: query
name: cursor
schema:
type: string
ProjectHeader:
description: 'Project public ID (prj_...) targeted by this personal-access-token request. Optional. Selection precedence is: {project_id} path parameter, X-Bisibility-Project header, project query parameter, then inference when the PAT owner belongs to exactly one project. Project API keys and paths that already carry a project ID ignore it.'
in: header
name: X-Bisibility-Project
required: false
schema:
type: string
Limit:
description: Maximum items to return. Defaults to 50.
in: query
name: limit
schema:
default: 50
maximum: 200
minimum: 1
type: integer
schemas:
Competitor:
properties:
domain:
type: string
id:
example: cmp_a00000000000000000000000
pattern: ^cmp_[a-z][a-z0-9]{23}$
type: string
x-bisibility-public-id: cmp
label:
type:
- string
- 'null'
required:
- id
- domain
type: object
CompetitorCreate:
properties:
domain:
minLength: 1
type: string
label:
maxLength: 80
type: string
required:
- domain
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
CompetitorMarket:
properties:
quality:
type: object
x-bisibility-name: CompetitorMarketQuality
properties:
metric_id:
type: string
enum:
- competitor_share_of_voice_top10
x-bisibility-enum: open
x-bisibility-name: CompetitorQualityMetric
definition_version:
type: string
enum:
- bisibility-sov-top10-v2
x-bisibility-enum: open
x-bisibility-name: CompetitorQualityDefinition
domain_set:
type: array
items:
type: string
expected:
type: integer
measured:
type: integer
unknown:
type: integer
stale:
type: integer
data_coverage:
type:
- number
- 'null'
observed_coverage:
type:
- number
- 'null'
imputed_weight_share:
type:
- number
- 'null'
required:
- metric_id
- definition_version
- domain_set
- expected
- measured
- unknown
- stale
- data_coverage
- observed_coverage
- imputed_weight_share
checked_keyword_count:
description: Number of tracked keywords with a completed check in this market.
type: integer
country:
description: Resolved location display name.
type: string
data_state:
description: 'Why the matrix looks the way it does: ranked, quality_unknown, no_volume_data, completed_unranked, no_completed_checks, or filter_excludes_all.'
enum:
- ranked
- quality_unknown
- no_volume_data
- completed_unranked
- no_completed_checks
- filter_excludes_all
type: string
x-bisibility-enum: open
x-bisibility-name: CompetitorMarketDataState
device:
enum:
- Desktop
- Mobile
type: string
x-bisibility-enum: open
x-bisibility-name: CompetitorMarketDevice
domains:
items:
properties:
domain:
type: string
managed:
description: True for tracked competitors.
type: boolean
required:
- domain
- managed
type: object
x-bisibility-name: CompetitorMarketDomain
type: array
engine:
type: string
id:
description: 'Market key: location, device, and engine.'
type: string
measured_at:
description: Check date of the newest completed observation, when any exist.
format: date-time
type:
- string
- 'null'
observations:
items:
properties:
checked_at:
description: Check date that produced the ranks, when the check completed.
format: date-time
type:
- string
- 'null'
completed:
type: boolean
id:
type: string
keyword:
type: string
keyword_id:
type: string
ranked:
type: boolean
ranks:
additionalProperties:
type:
- integer
- 'null'
description: Best rank per domain in the latest completed check.
type: object
tags:
items:
type: string
type: array
required:
- id
- keyword
- keyword_id
- completed
- ranked
- tags
- checked_at
- ranks
type: object
x-bisibility-name: CompetitorMarketObservation
type: array
shared_keyword_count:
description: Completed keywords where a tracked competitor ranks.
type: integer
shares:
items:
properties:
domain:
type: string
share_of_voice:
description: Exact Top10 SoV fraction using shared median weights for unknown volume and the same qualified keyword cohort across selected domains. Null when the score denominator is zero.
type:
- number
- 'null'
shared_keywords:
type: integer
required:
- domain
- shared_keywords
- share_of_voice
type: object
x-bisibility-name: CompetitorShare
type: array
required:
- id
- country
- device
- engine
- data_state
- checked_keyword_count
- shared_keyword_count
- measured_at
- domains
- observations
- shares
type: object
CompetitorDeleteResult:
properties:
removed:
const: true
type: boolean
required:
- removed
type: object
CompetitorSuggestion:
properties:
domain:
type: string
overlap:
description: Keywords where the domain appears in results.
type: integer
required:
- domain
- overlap
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