BioFlow Analytics API
The Analytics API from BioFlow — 1 operation(s) for analytics.
The Analytics API from BioFlow — 1 operation(s) for analytics.
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/getbioflow-com:getbioflow-com-analytics-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: BioFlow Analytics API
version: 1.0.0
description: 'The BioFlow public REST API. Authenticate with a bf_live_/bf_test_ API key — as `Authorization: Bearer ` or `x-api-key: `. Errors are RFC 9457 problem+json with a stable `code`.'
contact:
email: support@getbioflow.com
servers:
- url: https://app.getbioflow.com
security:
- apiKeyBearer: []
- apiKeyHeader: []
tags:
- name: Analytics
paths:
/v1/analytics/summary:
get:
operationId: getAnalyticsSummary
summary: Get analytics summary
description: 'Workspace analytics for the last 7/30/90 days: views, clicks, unique visitors, CTR, top links, top referrers, and tip revenue.
Requires scope: analytics:read. Plan entitlement: public_api (Creator and Pro).'
security:
- apiKeyBearer: []
- apiKeyHeader: []
x-scopes:
- analytics:read
x-entitlement: public_api
x-meter-cost: 1
x-idempotent: false
parameters:
- in: query
name: range_days
schema:
default: 30
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
responses:
'200':
description: The analytics summary
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
RateLimit-Policy:
description: IETF draft-11 rate-limit policy (structured field).
schema:
type: string
RateLimit:
description: IETF draft-11 rate-limit state (structured field).
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/AnalyticsSummary'
'400':
description: Validation failed (invalid_request)
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'401':
description: Missing or invalid API key (invalid_api_key)
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'403':
description: 'Denied: insufficient_scope, feature_not_enabled, or test_key_read_only'
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'429':
description: 'Rate limited: rate_limited (per-key burst) or quota_exhausted (monthly)'
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'500':
description: Unexpected failure (internal_error)
headers:
X-Request-Id:
description: Unique request identifier — quote it in support requests.
schema:
type: string
example: req_01abc
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
tags:
- Analytics
components:
schemas:
Problem:
type: object
properties:
type:
type: string
description: Docs URL, https://getbioflow.com/docs/api/errors/<code>
title:
type: string
description: Human summary — never parse
status:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
description: HTTP status, mirrored in the body
detail:
description: Human detail — never parse
type: string
instance:
type: string
example: urn:request:req_01abc
code:
type: string
enum:
- invalid_request
- invalid_api_key
- insufficient_scope
- feature_not_enabled
- test_key_read_only
- resource_not_found
- stale_snapshot
- idempotency_in_progress
- idempotency_key_reused
- endpoint_verification_failed
- endpoint_limit_reached
- rate_limited
- quota_exhausted
- internal_error
description: The stable machine-readable code — branch on this
request_id:
type: string
example: req_01abc
errors:
description: Field-level validation errors (400 only)
type: array
items:
type: object
properties:
pointer:
type: string
example: /title
code:
type: string
message:
type: string
required:
- pointer
- code
- message
additionalProperties: false
required:
- type
- title
- status
- instance
- code
- request_id
additionalProperties: false
description: RFC 9457 problem details
AnalyticsSummary:
type: object
properties:
range_days:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
totals:
type: object
properties:
views:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
clicks:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
unique_visitors:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ctr_percent:
type: number
required:
- views
- clicks
- unique_visitors
- ctr_percent
additionalProperties: false
top_links:
type: array
items:
type: object
properties:
label:
type: string
url:
type: string
clicks:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
page_title:
type: string
required:
- label
- url
- clicks
- page_title
additionalProperties: false
top_referrers:
type: array
items:
type: object
properties:
label:
type: string
views:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- label
- views
additionalProperties: false
tips:
type: object
properties:
count:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
total_gross_cents:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
refunded_count:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
unique_fans:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
currency:
type:
- string
- 'null'
required:
- count
- total_gross_cents
- refunded_count
- unique_fans
- currency
additionalProperties: false
required:
- range_days
- totals
- top_links
- top_referrers
- tips
additionalProperties: false
securitySchemes:
apiKeyBearer:
type: http
scheme: bearer
description: API key (bf_live_… / bf_test_…) as a Bearer token.
apiKeyHeader:
type: apiKey
in: header
name: x-api-key
description: API key (bf_live_… / bf_test_…) in the x-api-key header.
x-bioflow-problems:
- code: invalid_request
status: 400
title: The request body or parameters failed validation
type: https://getbioflow.com/docs/api/errors/invalid-request
- code: invalid_api_key
status: 401
title: Missing, malformed, unknown, disabled, or expired API key
type: https://getbioflow.com/docs/api/errors/invalid-api-key
- code: insufficient_scope
status: 403
title: The API key was not granted the required scope
type: https://getbioflow.com/docs/api/errors/insufficient-scope
- code: feature_not_enabled
status: 403
title: The workspace plan does not include public API access
type: https://getbioflow.com/docs/api/errors/feature-not-enabled
- code: test_key_read_only
status: 403
title: Test-mode keys are restricted to read operations
type: https://getbioflow.com/docs/api/errors/test-key-read-only
- code: resource_not_found
status: 404
title: No resource with that ID exists in this workspace
type: https://getbioflow.com/docs/api/errors/resource-not-found
- code: stale_snapshot
status: 409
title: The draft changed since it was last read
type: https://getbioflow.com/docs/api/errors/stale-snapshot
- code: idempotency_in_progress
status: 409
title: A request with this Idempotency-Key is still executing
type: https://getbioflow.com/docs/api/errors/idempotency-in-progress
- code: idempotency_key_reused
status: 422
title: This Idempotency-Key was already used with a different request
type: https://getbioflow.com/docs/api/errors/idempotency-key-reused
- code: endpoint_verification_failed
status: 422
title: The webhook endpoint did not accept the signed test event
type: https://getbioflow.com/docs/api/errors/endpoint-verification-failed
- code: endpoint_limit_reached
status: 422
title: The workspace webhook endpoint limit was reached
type: https://getbioflow.com/docs/api/errors/endpoint-limit-reached
- code: rate_limited
status: 429
title: Per-key rate limit exceeded
type: https://getbioflow.com/docs/api/errors/rate-limited
- code: quota_exhausted
status: 429
title: Monthly API quota exhausted
type: https://getbioflow.com/docs/api/errors/quota-exhausted
- code: internal_error
status: 500
title: Something went wrong on our side
type: https://getbioflow.com/docs/api/errors/internal-error
x-provenance:
method: harvested
publisher: BioFlow
source: https://getbioflow.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)