Reference

BookSounds API

Machine-readable spec: /api/openapi.json. Protected routes take Authorization: Bearer <access-token>; responses expose GUIDs and slugs, never numeric ids.

Auth

Register, sign in, rotate tokens, recover passwords, manage sessions. Access tokens are Bearer JWTs (15 min); refresh tokens rotate in HttpOnly cookies.

MethodPathDescription
POST/api/auth/registerCreate an account (rate limited 5/h/IP)
POST/api/auth/loginSign in (rate limited 10/15m/IP)
POST/api/auth/refreshRotate refresh cookie, issue new access token (reuse revokes the session family)
POST/api/auth/logout πŸ”’Revoke current session
POST/api/auth/logout-all πŸ”’Revoke every session
GET/api/auth/me πŸ”’Current user, plan + limits, accessible creators (owned + team)
POST/api/auth/forgot-passwordRequest a one-time reset link (always generic response)
POST/api/auth/reset-passwordConsume reset token, set new password, revoke sessions
POST/api/auth/verify-emailConsume verification token
POST/api/auth/resend-verification πŸ”’Resend verification email (3/h)
POST/api/auth/change-password πŸ”’Change password (current session survives)
POST/api/auth/change-email πŸ”’Step 1 of email change: sends confirmation link to the new address
POST/api/auth/confirm-emailStep 2 of email change: consume token, swap email, revoke sessions
GET/api/auth/sessions πŸ”’List active sessions (current flagged)
DELETE/api/auth/sessions/{guid} πŸ”’Revoke one session
Public

No authentication. GUIDs or slugs accepted. Numeric ids never appear.

MethodPathDescription
GET/api/public/creators/{guid}Public creator profile (GUID or slug)
GET/api/public/creators/{guid}/seriesCreator's active series
GET/api/public/creators/{guid}/worksCreator's published works (paginated: page, per_page ≀ 50)
GET/api/public/series/{guid}Public series (GUID or slug)
GET/api/public/series/{guid}/worksWorks in a series (paginated)
GET/api/public/works/{guid}Work detail with credits and destinations (GUID or slug)
GET/api/public/works/{guid}/destinationsActive destinations for a work
GET/api/public/searchSearch profiles and works (?q=, 60/min)
POST/api/public/analytics/eventsAnalytics ingestion (120/min)
GET/api/healthLiveness probe
Creators

Creator profiles β€” the public page and its settings. Plan-limited.

MethodPathDescription
GET/api/creators πŸ”’List my creators
POST/api/creators πŸ”’Create creator (plan-limited)
GET/api/creators/{guid} πŸ”’Creator (admin view, includes your_role)
PATCH/api/creators/{guid} πŸ”’Update creator (edit access)
DELETE/api/creators/{guid} πŸ”’Soft-delete creator (owner only)
Series

Book series, podcasts, and collections under a creator.

MethodPathDescription
GET/api/series πŸ”’List series for a creator (?creator_guid=, paginated)
POST/api/series πŸ”’Create series (edit access)
GET/api/series/{guid} πŸ”’Series (admin view)
PATCH/api/series/{guid} πŸ”’Update series
DELETE/api/series/{guid} πŸ”’Soft-delete series
Works

Books, audiobooks, episodes, playlists. Plan-limited per profile.

MethodPathDescription
GET/api/works πŸ”’List works for a creator (?creator_guid=, paginated)
POST/api/works πŸ”’Create work (plan-limited)
GET/api/works/{guid} πŸ”’Work (admin view with creator/series/destinations)
PATCH/api/works/{guid} πŸ”’Update work
DELETE/api/works/{guid} πŸ”’Soft-delete work
Destinations

Platform links attached to works (Spotify, Audible, Amazon…).

MethodPathDescription
GET/api/works/{guid}/destinations πŸ”’List destinations (view access)
POST/api/works/{guid}/destinations πŸ”’Add destination (edit access)
PATCH/api/destinations/{guid} πŸ”’Update destination / toggle active
DELETE/api/destinations/{guid} πŸ”’Remove destination
Credits

Collaborator credits with roles; the credited creator verifies their own credit.

MethodPathDescription
GET/api/works/{guid}/credits πŸ”’List credits on a work
POST/api/works/{guid}/credits πŸ”’Add credit (creator_guid or creator_ref = slug/URL)
GET/api/credits πŸ”’Credits received by my creator (?creator_guid=) β€” verification inbox
PATCH/api/credits/{guid} πŸ”’Edit role/order (work editor) or toggle verified (credited creator)
DELETE/api/credits/{guid} πŸ”’Remove credit (work editor)
Team

Invite members by email with admin/editor/viewer roles.

MethodPathDescription
GET/api/creators/{guid}/memberships πŸ”’List team (manage access)
POST/api/creators/{guid}/memberships πŸ”’Add member by email (owner only)
PATCH/api/memberships/{guid} πŸ”’Change member role (owner only)
DELETE/api/memberships/{guid} πŸ”’Remove member (owner) or leave (self)
Account

Uploads, data export, and account deletion.

MethodPathDescription
POST/api/uploads πŸ”’Upload an image (multipart "file", ≀ 5 MB, 30/h)
GET/api/account/export πŸ”’Download full JSON export of your data
POST/api/account/delete πŸ”’Delete account (password required; anonymizes + revokes everything)
Billing

Stripe checkout and portal (503 until configured).

MethodPathDescription
POST/api/billing/checkout πŸ”’Create Stripe checkout session (503 until configured)
POST/api/billing/portal πŸ”’Open Stripe billing portal
Admin

Platform administration (users.is_admin required).

MethodPathDescription
GET/api/admin/overview πŸ”’Platform counts + recents (admins only)
GET/api/admin/users πŸ”’List users
PATCH/api/admin/users/{guid} πŸ”’Suspend / disable / reactivate a user (revokes sessions)
GET/api/admin/creators πŸ”’All creator profiles with owners
PATCH/api/admin/creators/{guid} πŸ”’Moderate a profile (hide/restore/delete)
GET/api/admin/audit-logs πŸ”’Security audit log (?limit= ≀ 500)
Webhooks

Inbound provider events, signature-verified.

MethodPathDescription
POST/api/webhooks/stripeStripe events (signature-verified)
API reference β€” Notarial.Ink