Developers
Reporting API v1
A read-only API over your organisation's campaign data — the same numbers your console shows, machine-readable. Available on the Business plan and above.
Authentication
Create an API key in your console (API access section). The key is shown once — store it in a secret manager, never in client-side code or a repository. Send it as a Bearer token:
curl https://bloccarbon.com/api/v1/campaigns \
-H "Authorization: Bearer bc_live_..."Keys can be revoked instantly from the console. A revoked key, a downgraded plan or a suspended organisation all cut access on the next request.
Endpoints
GET /api/v1/campaigns
Your campaigns (all statuses): id, slug, title, status, payMode, accessMode, locale, createdAt.
GET /api/v1/campaigns/{id}/analytics
The console analytics numbers: funnel, per-participant kg by calculator, settlement position. Optional ?from=YYYY-MM-DD&to=YYYY-MM-DD half-open UTC window.
GET /api/v1/campaigns/{id}/participants
Verified participants: id, email, verifiedAt.
GET /api/v1/campaigns/{id}/submissions
Submissions with line items — each line pins the emission-factor value and source it was computed with.
GET /api/v1/certificates
Certificates for your paid orders (organisation settlements and participant funding): number, fundedKg, issuedAt, public certificate URL.
Pagination
List endpoints return { "data": [...], "nextCursor": "..." | null }. Pass ?cursor= the previous response's nextCursor to fetch the next page; null means you have everything. ?limit= accepts 1–100 (default 50).
Errors & rate limits
Errors are { "error": { "code": "...", "message": "..." } } with conventional status codes: 400 (invalid parameter — bad limit, cursor or from/to date), 401 (bad key), 403 (plan or suspension), 404 (not found — including ids that belong to another organisation), 429 (rate limited). Each key may make 300 requests per minute; failed authentication attempts are separately limited to 30 per minute per IP, so a misconfigured key can 429 before it 401s.
Versioning & data protection
v1 is additive-only: new fields and endpoints may appear, but existing fields are never renamed, retyped or removed. Breaking changes would ship as /api/v2 with notice.
Participant emails appear in participant and analytics responses — they are your organisation's campaign data, and your systems become a processor of them. Handle them under your privacy notice and our privacy policy.