What this API is
The HoJ distribution API is a source-agnostic HTTP layer in front of your content CMS. Clients integrate against stable JSON DTOs and OpenAPI — not raw upstream shapes.- Auth: OAuth2 client credentials (
POST /v1/oauth/token) or API keys (Authorization: Bearerplus your API key). - Brand / tenant routing: Product and category routes resolve
brand(and optional server defaults) usingGET /v1/distribution-channels. - Contracts: OpenAPI 3.1 lives in the repo at
packages/contracts/openapi/hoj-distribution-v1.openapi.jsonand is served at runtime asGET /v1/openapi.json.
Documentation experience
This site is built for Mintlify (or compatible static hosts):| Capability | How |
|---|---|
| Interactive API reference | OpenAPI-driven tab with try-it / playground (servers: production, sandbox, localhost). |
| Sandbox | Use the Sandbox or Local server in the API Reference; set CONTENT_* on your BFF so the upstream matches your environment. |
| Postman | Downloads — versioned collection JSON in the repo. |
| Code samples | Integrations — curl, JavaScript, Python patterns. |
Suggested next steps
Run the BFF locally
From the monorepo:
npm install, configure apps/bff/.env, then npm run dev. Default base URL: http://localhost:8080.Authenticate
See Authentication — use a dev API key or OAuth token, then call
/v1/* routes.Recommendations (DX)
- CI: Run
npm run docs:sync-openapiwhenever the canonical OpenAPI file changes, then commitdeveloper-docs/openapi/so Mintlify stays in sync. - SDKs: Generate clients with OpenAPI Generator or Stainless from
hoj-distribution-v1.openapi.json. - Changelog: Keep CHANGELOG.md in sync with breaking vs additive changes (deprecation policy).
- Status: Provide a public status page (e.g. Better Stack, Instatus) for
api.hofj.comand sandbox. - Rate limits: Document
429+retryAfterSecondsfor integrators (see registry quotas in the main README).

