Skip to content

docs: initial OpenAPI 3.0 spec reverse-engineered from Android/iOS clients - #3

Open
stevie86 wants to merge 1 commit into
Adventech:mainfrom
stevie86:main
Open

docs: initial OpenAPI 3.0 spec reverse-engineered from Android/iOS clients#3
stevie86 wants to merge 1 commit into
Adventech:mainfrom
stevie86:main

Conversation

@stevie86

@stevie86 stevie86 commented Aug 1, 2026

Copy link
Copy Markdown

Summary

The sabbath-school-api-docs repo has been empty (LICENSE + 25-byte README) since 2024-04. The mobile clients consume a real backend API but the surface is undocumented.

This PR adds a 17 KB OpenAPI 3.0 spec (openapi.yaml) covering 19 endpoints across 6 Retrofit interfaces in the Android client, reconciled with the iOS client.

Endpoints documented

Auth (publicly callable, verified):

  • POST /api/v2/auth/signin/anonymous, /api/v3/auth/signin/anonymous
  • POST /api/v2/auth/signin/google
  • POST /api/v2/auth/refresh — flagged as currently broken (HTTP 500, see issue #204 in sabbath-school-ios)
  • POST /api/v2/auth/delete

Resources (v3):

  • GET /api/v3/resources/index.json
  • GET /api/v3/{language}/{type}/index.json
  • GET /api/v3/{language}/{type}/feeds/{groupId}/index.json
  • GET /api/v3/{index}/sections/index.json
  • GET /api/v3/{index}/index.json (document or segment)
  • GET /api/v3/resources/user/input/document/{documentId}
  • POST /api/v3/resources/user/input/{inputType}/{documentId}/{blockId}
  • GET /api/v3/{index}/audio.json, /api/v3/{index}/video.json

Lessons (v2):

  • GET /api/v2/{lesson}/index.json
  • GET /api/v2/{lang}/quarterlies/index.json
  • GET /api/v2/{lang}/quarterlies/{id}/index.json

Media:

  • GET /api/v1/{lang}/quarterlies/{quarterly_id}/audio.json (legacy v1)
  • GET /api/v2/video/languages.json
  • GET /api/v2/{lang}/video/latest.json

Verification

$ npx @redocly/cli lint openapi.yaml
openapi.yaml: validated in 108ms
Woohoo! Your API description is valid. 🎉
You have 25 warnings.  (cosmetic, all "Operation must have at least one 4XX response")

Caveats called out in the spec

  • Most data endpoints return the Cloudflare Pages SPA fallback (index.html) for non-auth paths. Only /api/v{2,3}/auth/* is publicly callable.
  • auth/refresh is broken (HTTP 500).
  • Schemas for BlockKit-derived types (ResourceDocument, Segment, UserInput) are marked additionalProperties: true because the actual BlockKit shape lives in a separate repo (https://github.com/Adventech/blockkit) and is not exhaustively documented here.

Authorship

Initial draft by an external contributor reverse-engineering the public Android and iOS source. No API keys, refresh tokens, or user data were stored beyond ephemeral anonymous sign-in responses used to verify endpoint shapes.

Happy to follow up with a separate PR for the broken auth/refresh endpoint once the maintainers confirm which leg is the regression.

…S clients

The sabbath-school-api-docs repo has been empty (LICENSE + 25-byte README)
since 2024-04. Mobile clients consume a real backend API but the surface is
undocumented. This commit adds a 17 KB OpenAPI 3.0 spec covering 19 endpoints
across 6 Retrofit interfaces in the Android client, reconciled with the iOS
client.

Endpoints documented:
- Auth: signin/anonymous, signin/google, refresh, delete (v2 + v3 parity)
- Resources: languages, feed, feedGroup, resource, document, segment,
  userInput, saveUserInput, audio, video (v3)
- Lessons: getLessonInfo, getQuarterlies, getQuarterlyInfo (v2)
- Media: getAudio (v1 legacy), getVideoLanguages, getLatestVideo (v2)

Caveats called out in the spec:
- POST /api/v{2,3}/auth/refresh returns HTTP 500 (issue #204 in
  Adventech/sabbath-school-ios)
- Most data endpoints return the Cloudflare Pages SPA fallback for
  non-auth paths; only /api/v{2,3}/auth/* is publicly callable

No API keys, refresh tokens, or user data were stored beyond ephemeral
anonymous sign-in responses used to verify endpoint shapes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant