bitcoin++ API reference v1

§ Developer platform

Build on
bitcoin++.

Published event data is open to everyone. Account and administrative operations use narrowly scoped bearer tokens with live ownership and role checks.

01 / Start here

Quick start

The stable base URL is https://btcpp.dev/api/v1. Public reads need no credentials and return only data already published on the website.

curl -H 'Accept: application/json' \
  https://btcpp.dev/api/v1/bootstrap
Canonical contract

The OpenAPI 3.1 JSON document contains complete schemas and response definitions.

02 / Public resources

Conferences

Discover published events, their configured days, public agenda, speakers, sponsors, and talks.

03 / Public resources

People

Public people records are holistic: profiles include published talks, conference appearances, and hackathon projects without exposing email addresses or private contact data.

04 / Public + admin

Recordings

Browse published recordings anonymously. Conference and global admins can discover eligible talks and idempotently update recording metadata with a scoped token.

05 / Public resources

Hackathons

Browse public competitions, submitted projects, confirmed teammates, published awards, and finalized results. Draft and disqualified projects remain private.

06 / Authentication

Bearer tokens

Protected endpoints accept a personal API token created in Account Settings or an OAuth access token. Credentials belong only in the HTTP Authorization header—never in URLs.

curl -H 'Authorization: Bearer YOUR_TOKEN' \
  https://btcpp.dev/api/v1/me
Scopes are not roles

Administrative calls require both the requested token scope and the account’s current conference or global-admin role.

07 / Protected resources

Account + talks

Applications can read and update the current person’s profile, list their talks, and edit shared talk content. Schedule placement remains restricted to event administrators.

08 / Authorization

Scopes

profile:self:read

Read your private account projection.

profile:self:write

Update your public profile fields.

talks:read

Read talks associated with your account.

talks:write

Edit talks you speak at.

schedule:write

Schedule talks when you administer the event.

recordings:write

Manage event recording metadata.

offline_access

OAuth only: request a rotating refresh token.

09 / OAuth

Authorization code + PKCE

Native, browser, and server-backed applications use the authorization-code flow. S256 PKCE, an exact registered redirect URI, and state are required.

Authorize/oauth/authorize
Exchange/oauth/token
Revoke/oauth/revoke
Discovery/.well-known/oauth-authorization-server

Access tokens last one hour. Approved offline_access grants a rotating 30-day refresh token. Bitcoin++ currently provides OAuth authorization, not OpenID Connect; identify the signed-in person through GET /api/v1/me.

10 / Protocol

Conventions + errors

  • JSON keys use snake_case; timestamps use RFC 3339.
  • Growing collections accept limit (maximum 100) and an opaque cursor.
  • Public GET responses use ETags and short-lived caching.
  • Mutations reject unknown fields; schedule collisions return 409 schedule_conflict.
  • Errors include a stable code, human-readable message, and request ID.
{
  "error": {
    "code": "insufficient_scope",
    "message": "The token does not grant the required scope.",
    "request_id": "..."
  }
}

11 / Operations

Rate limits

Initial limits are 120 public reads per minute per IP, 600 authenticated reads per minute per token, 60 ordinary mutations per minute, and 10 recording writes per minute. A 429 response includes Retry-After.