Skip to main content
A typical member journey touches several modules, but the story is straightforward.

1. Resolve the hub

The frontend starts with a slug:
curl -s "$MIO_BASE_URL/api/v1/hubs/member-academy" | jq
Use the returned hub id for hub-scoped routes.

2. Authenticate or register the contact

Use contact auth to register, request a magic link, log in, or refresh a member token.
POST /api/v1/contact-auth/register
POST /api/v1/contact-auth/magic
POST /api/v1/contact-auth/login
POST /api/v1/contact-auth/refresh

3. Join or purchase

For a free hub, a member can join:
POST /api/v1/contact-auth/me/hubs/{hub_id}/join
For a paid hub, checkout creates the order and Stripe session:
POST /api/v1/hub/{hub_id}/checkout

4. Complete onboarding

Members can accept terms, fill onboarding/profile attributes, and mark onboarding complete.
POST /api/v1/contact-auth/me/hubs/{hub_id}/tos/accept
GET  /api/v1/hub/{team_id}/hubs/{hub_id}/onboarding-attributes
POST /api/v1/hub/{team_id}/hubs/{hub_id}/onboarding-attributes
POST /api/v1/contact-auth/me/hubs/{hub_id}/onboarding/complete

5. Use the hub

Once authorized, the member can read pages, content, media, community, billing, and notification settings. Access rules still run on protected content, so the frontend should handle locked or hidden resources.