> ## Documentation Index
> Fetch the complete documentation index at: https://docs.member.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Endpoint inventory

> Generated route inventory grouped by API tag.

# Endpoint inventory

Generated from the current API schema at `2026-08-17 13:18:18 UTC`.

This page is a coverage checklist for schema-visible routes. The generated OpenAPI section is the exact parameter and schema reference; this inventory helps you see the documented API surface at once.

* OpenAPI paths: `426`
* Route operations listed here: `581`
* Tags: `99`

## Tags

| Tag                                   | Operations |
| ------------------------------------- | ---------: |
| `access-overrides-admin`              |          5 |
| `access-rules-admin`                  |          5 |
| `access-rules-portal`                 |          1 |
| `achievements`                        |          4 |
| `achievements-admin`                  |         11 |
| `activity-admin`                      |          2 |
| `activity-portal`                     |          1 |
| `admin-alerts`                        |          1 |
| `admin-transcription`                 |          5 |
| `analytics-admin`                     |          3 |
| `api-keys`                            |          5 |
| `auth`                                |          5 |
| `automations`                         |         15 |
| `checkout-admin`                      |         19 |
| `checkout-me`                         |         12 |
| `checkout-portal`                     |          4 |
| `checkout-webhooks`                   |          2 |
| `comments`                            |         10 |
| `comments-admin`                      |          2 |
| `community-anon`                      |          7 |
| `community-attachment-upload`         |          2 |
| `community-avatar-upload`             |          2 |
| `community-banner-upload`             |          2 |
| `community-conversations`             |         12 |
| `community-directory`                 |          5 |
| `community-discussions`               |         25 |
| `community-discussions-admin`         |          5 |
| `community-dm-candidates`             |          1 |
| `community-dm-capabilities`           |          1 |
| `community-external-video-embed`      |          1 |
| `community-hub-member-counts`         |          1 |
| `community-member-activity`           |          2 |
| `community-mention-candidates`        |          1 |
| `community-messages`                  |          9 |
| `community-moderation`                |          4 |
| `community-moderation-admin`          |         19 |
| `community-profile-me`                |          3 |
| `community-search`                    |          1 |
| `community-spaces-admin`              |          6 |
| `community-spaces-member`             |          6 |
| `contact-attributes-admin`            |          9 |
| `contact-attributes-admin-hub-config` |          4 |
| `contact-attributes-admin-values`     |          2 |
| `contact-attributes-portal`           |          5 |
| `contact-auth`                        |         16 |
| `contacts-admin`                      |          6 |
| `content-admin`                       |          8 |
| `content-portal`                      |          7 |
| `domains`                             |          2 |
| `drip-campaigns`                      |         15 |
| `email-config`                        |          4 |
| `email-stats`                         |          1 |
| `email-suppressions-admin`            |          2 |
| `email-suppressions-hub`              |          3 |
| `email-unsubscribe`                   |          2 |
| `email-webhooks`                      |          1 |
| `external-login`                      |          4 |
| `external-login-providers`            |          5 |
| `follows`                             |          4 |
| `hub-custom-domains`                  |          5 |
| `hub-events`                          |          9 |
| `hub-memberships`                     |          6 |
| `hub-memberships-admin`               |          5 |
| `hubs-admin`                          |         14 |
| `hubs-portal`                         |          3 |
| `media-admin`                         |         32 |
| `media-admin-attachments`             |          8 |
| `media-admin-folders`                 |          6 |
| `media-admin-hub-media`               |          6 |
| `media-member`                        |          1 |
| `media-member-hub-media`              |          5 |
| `media-public`                        |          8 |
| `media-search`                        |          2 |
| `media-transcript`                    |          9 |
| `member-privacy`                      |          5 |
| `meta`                                |          1 |
| `notification-preferences`            |          2 |
| `notifications`                       |          8 |
| `oauth`                               |          6 |
| `oauth-clients`                       |          6 |
| `oauth-clients-admin`                 |          1 |
| `page-builder`                        |          1 |
| `pages-admin`                         |         18 |
| `pages-portal`                        |          5 |
| `permissions`                         |          1 |
| `platform-alerts`                     |          1 |
| `products-admin`                      |         27 |
| `products-portal`                     |          1 |
| `roles`                               |          7 |
| `saved-items`                         |          3 |
| `segments-admin`                      |          8 |
| `tags-admin`                          |          5 |
| `tags-assignments`                    |          4 |
| `teams`                               |          9 |
| `uncategorized`                       |          2 |
| `users`                               |          4 |
| `verified-domains`                    |          5 |
| `web-push`                            |          3 |
| `well-known`                          |          2 |

## access-overrides-admin

| Method   | Path                                                                   | Handler           |
| -------- | ---------------------------------------------------------------------- | ----------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-overrides`               | `list_overrides`  |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-overrides`               | `create_override` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-overrides/{override_id}` | `delete_override` |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-overrides/{override_id}` | `get_override`    |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-overrides/{override_id}` | `update_override` |

## access-rules-admin

| Method   | Path                                                           | Handler       |
| -------- | -------------------------------------------------------------- | ------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-rules`           | `list_rules`  |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-rules`           | `create_rule` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-rules/{rule_id}` | `delete_rule` |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-rules/{rule_id}` | `get_rule`    |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/access-rules/{rule_id}` | `update_rule` |

## access-rules-portal

| Method | Path                                | Handler        |
| ------ | ----------------------------------- | -------------- |
| `GET`  | `/api/v1/hub/{hub_id}/access-check` | `access_check` |

## achievements

| Method | Path                                                      | Handler                       |
| ------ | --------------------------------------------------------- | ----------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/achievements`                      | `get_catalog`                 |
| `GET`  | `/api/v1/hubs/{hub_id}/achievements/members`              | `get_batch_peer_achievements` |
| `GET`  | `/api/v1/hubs/{hub_id}/members/me/achievements`           | `get_own_history`             |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}/achievements` | `get_peer_achievements`       |

## achievements-admin

| Method   | Path                                                                                               | Handler                  |
| -------- | -------------------------------------------------------------------------------------------------- | ------------------------ |
| `GET`    | `/api/v1/teams/{team_id}/achievements`                                                             | `list_achievements`      |
| `POST`   | `/api/v1/teams/{team_id}/achievements`                                                             | `create_achievement`     |
| `DELETE` | `/api/v1/teams/{team_id}/achievements/{achievement_id}`                                            | `archive_achievement`    |
| `GET`    | `/api/v1/teams/{team_id}/achievements/{achievement_id}`                                            | `get_achievement`        |
| `PATCH`  | `/api/v1/teams/{team_id}/achievements/{achievement_id}`                                            | `update_achievement`     |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/achievements`                                               | `list_hub_achievements`  |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/achievements`                                               | `attach_hub_achievement` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/achievements/{achievement_id}`                              | `detach_hub_achievement` |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/achievements`                          | `grant_achievement`      |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/achievements/{achievement_id}`         | `revoke_achievement`     |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/achievements/{achievement_id}/restore` | `restore_achievement`    |

## activity-admin

| Method | Path                                                                   | Handler                |
| ------ | ---------------------------------------------------------------------- | ---------------------- |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/activity/contacts/{contact_id}` | `get_contact_activity` |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/activity/top-engaged`           | `list_top_engaged`     |

## activity-portal

| Method | Path                            | Handler           |
| ------ | ------------------------------- | ----------------- |
| `POST` | `/api/v1/hub/{hub_id}/activity` | `record_activity` |

## admin-alerts

| Method | Path                                   | Handler             |
| ------ | -------------------------------------- | ------------------- |
| `GET`  | `/api/v1/teams/{team_id}/admin-alerts` | `list_admin_alerts` |

## admin-transcription

| Method  | Path                                                   | Handler                                   |
| ------- | ------------------------------------------------------ | ----------------------------------------- |
| `POST`  | `/api/v1/admin/media/{media_id}/re-embed`              | `admin_re_embed`                          |
| `POST`  | `/api/v1/admin/media/{media_id}/re-transcribe`         | `admin_re_transcribe`                     |
| `POST`  | `/api/v1/admin/media/{media_id}/transcript`            | `admin_upload_transcript`                 |
| `GET`   | `/api/v1/admin/teams/{team_id}/transcription-settings` | `get_admin_team_transcription_settings`   |
| `PATCH` | `/api/v1/admin/teams/{team_id}/transcription-settings` | `patch_admin_team_transcription_settings` |

## analytics-admin

| Method | Path                                                         | Handler                    |
| ------ | ------------------------------------------------------------ | -------------------------- |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/analytics/email`      | `get_email_deliverability` |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/analytics/engagement` | `get_engagement`           |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/analytics/overview`   | `get_overview`             |

## api-keys

| Method   | Path                                        | Handler            |
| -------- | ------------------------------------------- | ------------------ |
| `GET`    | `/api/v1/teams/{team_id}/api-keys`          | `list_api_keys`    |
| `POST`   | `/api/v1/teams/{team_id}/api-keys`          | `mint_api_key`     |
| `DELETE` | `/api/v1/teams/{team_id}/api-keys/{key_id}` | `revoke_api_key`   |
| `GET`    | `/api/v1/teams/{team_id}/api-keys/{key_id}` | `retrieve_api_key` |
| `PATCH`  | `/api/v1/teams/{team_id}/api-keys/{key_id}` | `update_api_key`   |

## auth

| Method | Path                    | Handler         |
| ------ | ----------------------- | --------------- |
| `POST` | `/api/v1/auth/login`    | `login`         |
| `POST` | `/api/v1/auth/logout`   | `logout`        |
| `GET`  | `/api/v1/auth/me`       | `get_me`        |
| `POST` | `/api/v1/auth/refresh`  | `refresh_token` |
| `POST` | `/api/v1/auth/register` | `register`      |

## automations

| Method   | Path                                                                            | Handler                    |
| -------- | ------------------------------------------------------------------------------- | -------------------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations`                             | `list_automations`         |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations`                             | `create_automation`        |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/events`                      | `fire_custom_event`        |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}`             | `get_automation`           |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}`             | `update_automation`        |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/activate`    | `activate_automation`      |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/deactivate`  | `deactivate_automation`    |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/enrollments` | `list_enrollments`         |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/enrollments` | `manual_enroll`            |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/publish`     | `publish_automation`       |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/test`        | `dry_run_automation`       |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/automations/{automation_id}/versions`    | `list_automation_versions` |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/webhook-endpoints`                       | `list_webhook_endpoints`   |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/webhook-endpoints`                       | `create_webhook_endpoint`  |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/webhook-endpoints/{endpoint_id}`         | `delete_webhook_endpoint`  |

## checkout-admin

| Method | Path                                                                       | Handler                     |
| ------ | -------------------------------------------------------------------------- | --------------------------- |
| `GET`  | `/api/v1/connect/callback`                                                 | `connect_callback`          |
| `POST` | `/api/v1/teams/{team_id}/checkout/sync/import-from-stripe`                 | `start_import_from_stripe`  |
| `GET`  | `/api/v1/teams/{team_id}/checkout/sync/import-runs/{run_id}`               | `get_import_run`            |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/orders`                             | `list_orders`               |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/orders/{order_id}`                  | `retrieve_order`            |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/payment-webhooks`                   | `list_webhook_events`       |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/payment-webhooks/{event_id}`        | `retrieve_webhook_event`    |
| `POST` | `/api/v1/teams/{team_id}/hubs/{hub_id}/payment-webhooks/{event_id}/replay` | `replay_webhook_event`      |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/payments`                           | `list_payments`             |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/payments/{payment_id}`              | `retrieve_payment`          |
| `POST` | `/api/v1/teams/{team_id}/hubs/{hub_id}/payments/{payment_id}/refund`       | `admin_refund_payment`      |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/subscriptions`                      | `list_subscriptions`        |
| `GET`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/subscriptions/{sub_id}`             | `retrieve_subscription`     |
| `POST` | `/api/v1/teams/{team_id}/hubs/{hub_id}/subscriptions/{sub_id}/cancel`      | `cancel_subscription`       |
| `GET`  | `/api/v1/teams/{team_id}/payment-accounts`                                 | `list_payment_accounts`     |
| `POST` | `/api/v1/teams/{team_id}/payment-accounts/onboarding-link`                 | `create_onboarding_link`    |
| `GET`  | `/api/v1/teams/{team_id}/payment-accounts/onboarding-return`               | `onboarding_return`         |
| `GET`  | `/api/v1/teams/{team_id}/payment-accounts/{account_id}`                    | `retrieve_payment_account`  |
| `POST` | `/api/v1/teams/{team_id}/products/adopt-from-stripe`                       | `adopt_product_from_stripe` |

## checkout-me

| Method | Path                                                    | Handler                        |
| ------ | ------------------------------------------------------- | ------------------------------ |
| `GET`  | `/api/v1/hub/{hub_id}/me/billing-portal-link`           | `hub_me_billing_portal_link`   |
| `GET`  | `/api/v1/hub/{hub_id}/me/orders`                        | `hub_me_list_orders`           |
| `GET`  | `/api/v1/hub/{hub_id}/me/orders/{order_id}`             | `hub_me_retrieve_order`        |
| `GET`  | `/api/v1/hub/{hub_id}/me/subscriptions`                 | `hub_me_list_subscriptions`    |
| `GET`  | `/api/v1/hub/{hub_id}/me/subscriptions/{sub_id}`        | `hub_me_retrieve_subscription` |
| `POST` | `/api/v1/hub/{hub_id}/me/subscriptions/{sub_id}/cancel` | `hub_me_cancel_subscription`   |
| `GET`  | `/me/billing-portal-links`                              | `me_billing_portal_links`      |
| `GET`  | `/me/orders`                                            | `me_list_orders`               |
| `GET`  | `/me/orders/{order_id}`                                 | `me_retrieve_order`            |
| `GET`  | `/me/subscriptions`                                     | `me_list_subscriptions`        |
| `GET`  | `/me/subscriptions/{sub_id}`                            | `me_retrieve_subscription`     |
| `POST` | `/me/subscriptions/{sub_id}/cancel`                     | `me_cancel_subscription`       |

## checkout-portal

| Method | Path                                      | Handler              |
| ------ | ----------------------------------------- | -------------------- |
| `POST` | `/api/v1/hub/{hub_id}/checkout`           | `start_checkout`     |
| `GET`  | `/api/v1/hub/{hub_id}/checkout/cancel`    | `checkout_cancel`    |
| `GET`  | `/api/v1/hub/{hub_id}/checkout/readiness` | `checkout_readiness` |
| `GET`  | `/api/v1/hub/{hub_id}/checkout/success`   | `checkout_success`   |

## checkout-webhooks

| Method | Path                        | Handler                   |
| ------ | --------------------------- | ------------------------- |
| `POST` | `/webhooks/stripe/connect`  | `stripe_connect_webhook`  |
| `POST` | `/webhooks/stripe/platform` | `stripe_platform_webhook` |

## comments

| Method   | Path                                                    | Handler                         |
| -------- | ------------------------------------------------------- | ------------------------------- |
| `GET`    | `/api/v1/comments`                                      | `list_comments`                 |
| `POST`   | `/api/v1/comments`                                      | `create_comment`                |
| `DELETE` | `/api/v1/comments/{comment_id}`                         | `delete_comment`                |
| `GET`    | `/api/v1/comments/{comment_id}`                         | `get_comment`                   |
| `PATCH`  | `/api/v1/comments/{comment_id}`                         | `update_comment`                |
| `GET`    | `/api/v1/comments/{comment_id}/reactions`               | `get_comment_reactions`         |
| `POST`   | `/api/v1/comments/{comment_id}/reactions`               | `add_reaction`                  |
| `GET`    | `/api/v1/comments/{comment_id}/reactions/reactors`      | `get_comment_reaction_reactors` |
| `DELETE` | `/api/v1/comments/{comment_id}/reactions/{reaction_id}` | `remove_reaction`               |
| `GET`    | `/api/v1/comments/{comment_id}/replies`                 | `list_comment_replies`          |

## comments-admin

| Method   | Path                                                                | Handler                |
| -------- | ------------------------------------------------------------------- | ---------------------- |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/comments`              | `admin_list_comments`  |
| `DELETE` | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/comments/{comment_id}` | `admin_delete_comment` |

## community-anon

| Method | Path                                                                                     | Handler                         |
| ------ | ---------------------------------------------------------------------------------------- | ------------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/public/discussions`                                               | `list_hub_discussions_anon`     |
| `GET`  | `/api/v1/hubs/{hub_id}/public/discussions/{discussion_id}`                               | `get_discussion_anon`           |
| `GET`  | `/api/v1/hubs/{hub_id}/public/discussions/{discussion_id}/comments`                      | `list_discussion_comments_anon` |
| `GET`  | `/api/v1/hubs/{hub_id}/public/discussions/{discussion_id}/comments/{comment_id}/replies` | `list_comment_replies_anon`     |
| `GET`  | `/api/v1/hubs/{hub_id}/public/discussions/{discussion_id}/reactions`                     | `get_discussion_reactions_anon` |
| `GET`  | `/api/v1/hubs/{hub_id}/public/spaces`                                                    | `list_public_spaces_anon`       |
| `GET`  | `/api/v1/hubs/{hub_id}/public/spaces/{space_id}/discussions`                             | `list_space_discussions_anon`   |

## community-attachment-upload

| Method | Path                                                         | Handler                      |
| ------ | ------------------------------------------------------------ | ---------------------------- |
| `POST` | `/api/v1/hub/{hub_id}/attachment-uploads`                    | `initiate_attachment_upload` |
| `POST` | `/api/v1/hub/{hub_id}/attachment-uploads/{file_id}/finalize` | `finalize_attachment_upload` |

## community-avatar-upload

| Method | Path                                                        | Handler                  |
| ------ | ----------------------------------------------------------- | ------------------------ |
| `POST` | `/api/v1/portal/hubs/{hub_id}/me/avatar`                    | `initiate_avatar_upload` |
| `POST` | `/api/v1/portal/hubs/{hub_id}/me/avatar/{file_id}/finalize` | `finalize_avatar_upload` |

## community-banner-upload

| Method | Path                                                        | Handler                  |
| ------ | ----------------------------------------------------------- | ------------------------ |
| `POST` | `/api/v1/portal/hubs/{hub_id}/me/banner`                    | `initiate_banner_upload` |
| `POST` | `/api/v1/portal/hubs/{hub_id}/me/banner/{file_id}/finalize` | `finalize_banner_upload` |

## community-conversations

| Method   | Path                                                   | Handler                       |
| -------- | ------------------------------------------------------ | ----------------------------- |
| `PATCH`  | `/api/v1/conversations/{conversation_id}/audiences/me` | `update_own_audience_state`   |
| `POST`   | `/api/v1/conversations/{conversation_id}/typing`       | `signal_typing`               |
| `GET`    | `/api/v1/conversations/{id}`                           | `get_conversation`            |
| `PATCH`  | `/api/v1/conversations/{id}`                           | `update_conversation`         |
| `GET`    | `/api/v1/conversations/{id}/audiences`                 | `list_conversation_audiences` |
| `POST`   | `/api/v1/conversations/{id}/audiences`                 | `add_member`                  |
| `DELETE` | `/api/v1/conversations/{id}/audiences/{audience_id}`   | `remove_member`               |
| `POST`   | `/api/v1/conversations/{id}/leave`                     | `leave_conversation`          |
| `GET`    | `/api/v1/hubs/{hub_id}/conversations`                  | `list_conversations`          |
| `POST`   | `/api/v1/hubs/{hub_id}/conversations`                  | `create_conversation`         |
| `POST`   | `/api/v1/hubs/{hub_id}/conversations/mark-all-read`    | `mark_all_conversations_read` |
| `GET`    | `/api/v1/hubs/{hub_id}/conversations/unread-total`     | `get_hub_unread_total`        |

## community-directory

| Method | Path                                                            | Handler                         |
| ------ | --------------------------------------------------------------- | ------------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/directory-filters`                       | `list_directory_filters`        |
| `GET`  | `/api/v1/hubs/{hub_id}/members`                                 | `list_members`                  |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}`                    | `get_member`                    |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}/profile-attributes` | `get_member_profile_attributes` |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}/spaces`             | `get_member_spaces`             |

## community-discussions

| Method   | Path                                                          | Handler                            |
| -------- | ------------------------------------------------------------- | ---------------------------------- |
| `DELETE` | `/api/v1/discussions/{discussion_id}`                         | `delete_discussion`                |
| `GET`    | `/api/v1/discussions/{discussion_id}`                         | `get_discussion`                   |
| `PATCH`  | `/api/v1/discussions/{discussion_id}`                         | `update_discussion`                |
| `GET`    | `/api/v1/discussions/{discussion_id}/poll/votes`              | `get_poll_voters`                  |
| `POST`   | `/api/v1/discussions/{discussion_id}/poll/votes`              | `vote_on_poll`                     |
| `POST`   | `/api/v1/discussions/{discussion_id}/publish`                 | `publish_discussion`               |
| `GET`    | `/api/v1/discussions/{discussion_id}/reactions`               | `get_discussion_reactions`         |
| `POST`   | `/api/v1/discussions/{discussion_id}/reactions`               | `add_reaction`                     |
| `GET`    | `/api/v1/discussions/{discussion_id}/reactions/reactors`      | `get_discussion_reaction_reactors` |
| `DELETE` | `/api/v1/discussions/{discussion_id}/reactions/{reaction_id}` | `remove_reaction`                  |
| `GET`    | `/api/v1/discussions/{discussion_id}/reposters`               | `get_discussion_reposters`         |
| `DELETE` | `/api/v1/discussions/{discussion_id}/schedule`                | `cancel_schedule`                  |
| `PUT`    | `/api/v1/discussions/{discussion_id}/schedule`                | `schedule_discussion`              |
| `DELETE` | `/api/v1/discussions/{discussion_id}/unpin`                   | `delete_unpin`                     |
| `POST`   | `/api/v1/discussions/{discussion_id}/unpin`                   | `create_unpin`                     |
| `GET`    | `/api/v1/hubs/{hub_id}/discussions`                           | `list_hub_discussions`             |
| `DELETE` | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/lock`      | `unlock_discussion_as_contact`     |
| `POST`   | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/lock`      | `lock_discussion_as_contact`       |
| `POST`   | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/move`      | `move_discussion_as_contact`       |
| `DELETE` | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/pin`       | `unpin_discussion_as_contact`      |
| `POST`   | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/pin`       | `pin_discussion_as_contact`        |
| `GET`    | `/api/v1/hubs/{hub_id}/me/discussion-drafts`                  | `list_my_drafts`                   |
| `GET`    | `/api/v1/hubs/{hub_id}/me/scheduled-discussions`              | `list_my_scheduled`                |
| `GET`    | `/api/v1/hubs/{hub_id}/spaces/{space_id}/discussions`         | `list_discussions`                 |
| `POST`   | `/api/v1/hubs/{hub_id}/spaces/{space_id}/discussions`         | `create_discussion`                |

## community-discussions-admin

| Method   | Path                                                                      | Handler                   |
| -------- | ------------------------------------------------------------------------- | ------------------------- |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/discussions`                 | `admin_list_discussions`  |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/discussions`                 | `admin_create_discussion` |
| `DELETE` | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/discussions/{discussion_id}` | `admin_delete_discussion` |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/discussions/{discussion_id}` | `admin_get_discussion`    |
| `PATCH`  | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/discussions/{discussion_id}` | `admin_patch_discussion`  |

## community-dm-candidates

| Method | Path                                              | Handler                          |
| ------ | ------------------------------------------------- | -------------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/direct-message-candidates` | `list_direct_message_candidates` |

## community-dm-capabilities

| Method | Path                                                                    | Handler                         |
| ------ | ----------------------------------------------------------------------- | ------------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/direct-message-capabilities/{target_contact_id}` | `get_direct_message_capability` |

## community-external-video-embed

| Method | Path                                         | Handler                        |
| ------ | -------------------------------------------- | ------------------------------ |
| `POST` | `/api/v1/hub/{hub_id}/external-video-embeds` | `resolve_external_video_embed` |

## community-hub-member-counts

| Method | Path                                  | Handler                 |
| ------ | ------------------------------------- | ----------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/member-counts` | `get_hub_member_counts` |

## community-member-activity

| Method | Path                                                        | Handler                     |
| ------ | ----------------------------------------------------------- | --------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}/activity/feed`  | `get_member_activity_feed`  |
| `GET`  | `/api/v1/hubs/{hub_id}/members/{contact_id}/activity/stats` | `get_member_activity_stats` |

## community-mention-candidates

| Method | Path                                       | Handler                   |
| ------ | ------------------------------------------ | ------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/mention-candidates` | `list_mention_candidates` |

## community-messages

| Method   | Path                                                         | Handler                         |
| -------- | ------------------------------------------------------------ | ------------------------------- |
| `GET`    | `/api/v1/conversations/{conversation_id}/messages`           | `list_messages`                 |
| `POST`   | `/api/v1/conversations/{conversation_id}/messages`           | `send_message`                  |
| `POST`   | `/api/v1/conversations/{conversation_id}/messages/mark-read` | `mark_read`                     |
| `DELETE` | `/api/v1/messages/{message_id}`                              | `delete_message`                |
| `PATCH`  | `/api/v1/messages/{message_id}`                              | `edit_message`                  |
| `GET`    | `/api/v1/messages/{message_id}/reactions`                    | `get_message_reactions`         |
| `POST`   | `/api/v1/messages/{message_id}/reactions`                    | `add_reaction`                  |
| `GET`    | `/api/v1/messages/{message_id}/reactions/reactors`           | `get_message_reaction_reactors` |
| `DELETE` | `/api/v1/messages/{message_id}/reactions/{reaction_id}`      | `remove_reaction`               |

## community-moderation

| Method | Path                                                       | Handler                        |
| ------ | ---------------------------------------------------------- | ------------------------------ |
| `POST` | `/api/v1/hubs/{hub_id}/comments/{comment_id}/remove`       | `remove_comment_as_contact`    |
| `POST` | `/api/v1/hubs/{hub_id}/discussions/{discussion_id}/remove` | `remove_discussion_as_contact` |
| `GET`  | `/api/v1/hubs/{hub_id}/report-reasons`                     | `list_report_reasons`          |
| `POST` | `/api/v1/hubs/{hub_id}/reports`                            | `file_report`                  |

## community-moderation-admin

| Method   | Path                                                                                                        | Handler                         |
| -------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------- |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/ban`                                      | `ban_member`                    |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/soft_ban`                                 | `soft_ban_member`               |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/unban`                                    | `unban_member`                  |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/warn`                                     | `warn_member`                   |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/audit-log`                                          | `list_audit_log`                |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/banned-members`                                     | `list_banned_members`           |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/content/{content_type}/{content_id}`                | `view_moderation_content`       |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/content/{content_type}/{content_id}/remove`         | `remove_content`                |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/content/{content_type}/{content_id}/report-summary` | `get_moderation_report_summary` |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/content/{content_type}/{content_id}/restore`        | `restore_content`               |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/counts`                                             | `get_moderation_counts`         |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/queue`                                              | `list_moderation_queue`         |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/removed`                                            | `list_removed_content`          |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/reports/{report_id}`                                | `get_report`                    |
| `PATCH`  | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/moderation/reports/{report_id}`                                | `resolve_report`                |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/report-reasons`                                                | `list_report_reasons`           |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/report-reasons`                                                | `create_report_reason`          |
| `DELETE` | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/report-reasons/{reason_id}`                                    | `delete_report_reason`          |
| `PATCH`  | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/report-reasons/{reason_id}`                                    | `update_report_reason`          |

## community-profile-me

| Method  | Path                                        | Handler            |
| ------- | ------------------------------------------- | ------------------ |
| `POST`  | `/api/v1/portal/hubs/{hub_id}/me/heartbeat` | `post_heartbeat`   |
| `GET`   | `/api/v1/portal/hubs/{hub_id}/me/profile`   | `get_my_profile`   |
| `PATCH` | `/api/v1/portal/hubs/{hub_id}/me/profile`   | `patch_my_profile` |

## community-search

| Method | Path                                     | Handler            |
| ------ | ---------------------------------------- | ------------------ |
| `GET`  | `/api/v1/hubs/{hub_id}/search/community` | `search_community` |

## community-spaces-admin

| Method   | Path                                                            | Handler                |
| -------- | --------------------------------------------------------------- | ---------------------- |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/`           | `admin_list_spaces`    |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/`           | `admin_create_space`   |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/reorder`    | `admin_reorder_spaces` |
| `DELETE` | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/{space_id}` | `admin_delete_space`   |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/{space_id}` | `admin_get_space`      |
| `PATCH`  | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/spaces/{space_id}` | `admin_update_space`   |

## community-spaces-member

| Method  | Path                                                | Handler                  |
| ------- | --------------------------------------------------- | ------------------------ |
| `GET`   | `/api/v1/hubs/{hub_id}/spaces/`                     | `member_list_spaces`     |
| `GET`   | `/api/v1/hubs/{hub_id}/spaces/{space_id}`           | `member_get_space`       |
| `POST`  | `/api/v1/hubs/{hub_id}/spaces/{space_id}/join`      | `member_join_space`      |
| `POST`  | `/api/v1/hubs/{hub_id}/spaces/{space_id}/leave`     | `member_leave_space`     |
| `POST`  | `/api/v1/hubs/{hub_id}/spaces/{space_id}/mark-read` | `member_mark_space_read` |
| `PATCH` | `/api/v1/hubs/{hub_id}/spaces/{space_id}/mute`      | `member_mute_space`      |

## contact-attributes-admin

| Method   | Path                                                                             | Handler             |
| -------- | -------------------------------------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/teams/{team_id}/contact-attributes`                                     | `list_definitions`  |
| `POST`   | `/api/v1/teams/{team_id}/contact-attributes`                                     | `create_definition` |
| `DELETE` | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}`                     | `delete_definition` |
| `GET`    | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}`                     | `get_definition`    |
| `PATCH`  | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}`                     | `update_definition` |
| `GET`    | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}/options`             | `list_options`      |
| `POST`   | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}/options`             | `create_option`     |
| `DELETE` | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}/options/{option_id}` | `delete_option`     |
| `PATCH`  | `/api/v1/teams/{team_id}/contact-attributes/{definition_id}/options/{option_id}` | `update_option`     |

## contact-attributes-admin-hub-config

| Method   | Path                                                                       | Handler             |
| -------- | -------------------------------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/contact-attributes`                 | `list_hub_configs`  |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/contact-attributes`                 | `upsert_hub_config` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/contact-attributes/{definition_id}` | `delete_hub_config` |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/contact-attributes/{definition_id}` | `patch_hub_config`  |

## contact-attributes-admin-values

| Method  | Path                                                            | Handler                |
| ------- | --------------------------------------------------------------- | ---------------------- |
| `GET`   | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/attributes` | `list_contact_values`  |
| `PATCH` | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/attributes` | `patch_contact_values` |

## contact-attributes-portal

| Method  | Path                                                        | Handler                      |
| ------- | ----------------------------------------------------------- | ---------------------------- |
| `GET`   | `/api/v1/hub/{team_id}/hubs/{hub_id}/me/attributes`         | `get_me_attributes`          |
| `PATCH` | `/api/v1/hub/{team_id}/hubs/{hub_id}/me/attributes`         | `patch_me_attributes`        |
| `GET`   | `/api/v1/hub/{team_id}/hubs/{hub_id}/me/profile-attributes` | `get_me_profile_attributes`  |
| `GET`   | `/api/v1/hub/{team_id}/hubs/{hub_id}/onboarding-attributes` | `get_onboarding_attributes`  |
| `POST`  | `/api/v1/hub/{team_id}/hubs/{hub_id}/onboarding-attributes` | `post_onboarding_attributes` |

## contact-auth

| Method  | Path                                              | Handler              |
| ------- | ------------------------------------------------- | -------------------- |
| `POST`  | `/api/v1/contact-auth/forgot`                     | `forgot_password`    |
| `POST`  | `/api/v1/contact-auth/login`                      | `login`              |
| `POST`  | `/api/v1/contact-auth/logout`                     | `logout`             |
| `POST`  | `/api/v1/contact-auth/logout-everywhere`          | `logout_everywhere`  |
| `POST`  | `/api/v1/contact-auth/magic`                      | `request_magic_link` |
| `POST`  | `/api/v1/contact-auth/magic/consume`              | `consume_magic_link` |
| `GET`   | `/api/v1/contact-auth/me`                         | `get_me`             |
| `PATCH` | `/api/v1/contact-auth/me`                         | `patch_me`           |
| `GET`   | `/api/v1/contact-auth/me/hubs`                    | `get_me_hubs`        |
| `POST`  | `/api/v1/contact-auth/me/password`                | `set_password`       |
| `POST`  | `/api/v1/contact-auth/me/password/change`         | `change_password`    |
| `GET`   | `/api/v1/contact-auth/me/teams/{team_id}/profile` | `get_team_profile`   |
| `PATCH` | `/api/v1/contact-auth/me/teams/{team_id}/profile` | `patch_team_profile` |
| `POST`  | `/api/v1/contact-auth/refresh`                    | `refresh`            |
| `POST`  | `/api/v1/contact-auth/register`                   | `register`           |
| `POST`  | `/api/v1/contact-auth/reset`                      | `reset_password`     |

## contacts-admin

| Method   | Path                                                         | Handler           |
| -------- | ------------------------------------------------------------ | ----------------- |
| `GET`    | `/api/v1/teams/{team_id}/contacts/`                          | `list_contacts`   |
| `POST`   | `/api/v1/teams/{team_id}/contacts/`                          | `create_contact`  |
| `DELETE` | `/api/v1/teams/{team_id}/contacts/{team_contact_id}`         | `delete_contact`  |
| `GET`    | `/api/v1/teams/{team_id}/contacts/{team_contact_id}`         | `get_contact`     |
| `PATCH`  | `/api/v1/teams/{team_id}/contacts/{team_contact_id}`         | `update_contact`  |
| `POST`   | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/restore` | `restore_contact` |

## content-admin

| Method   | Path                                                               | Handler                       |
| -------- | ------------------------------------------------------------------ | ----------------------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/`                   | `admin_list_root_nodes`       |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/`                   | `admin_create_content_node`   |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/reorder`            | `admin_reorder_content_nodes` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/{node_id}`          | `admin_delete_content_node`   |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/{node_id}`          | `admin_get_content_node`      |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/{node_id}`          | `admin_update_content_node`   |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/{node_id}/children` | `admin_list_children`         |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/{node_id}/restore`  | `admin_restore_content_node`  |

## content-portal

| Method | Path                                              | Handler                      |
| ------ | ------------------------------------------------- | ---------------------------- |
| `GET`  | `/api/v1/hub/{hub_id}/content`                    | `portal_list_root_nodes`     |
| `GET`  | `/api/v1/hub/{hub_id}/content/{node_id}`          | `portal_get_content_node`    |
| `GET`  | `/api/v1/hub/{hub_id}/content/{node_id}/children` | `portal_list_children`       |
| `GET`  | `/api/v1/hub/{hub_id}/content/{node_id}/progress` | `portal_get_progress`        |
| `POST` | `/api/v1/hub/{hub_id}/content/{node_id}/progress` | `portal_track_progress`      |
| `GET`  | `/api/v1/hub/{hub_id}/progress`                   | `portal_list_progress`       |
| `POST` | `/api/v1/hub/{hub_id}/progress`                   | `portal_bulk_track_progress` |

## domains

| Method | Path                               | Handler                 |
| ------ | ---------------------------------- | ----------------------- |
| `GET`  | `/api/v1/portal/bootstrap`         | `get_portal_bootstrap`  |
| `GET`  | `/api/v1/portal/domain-resolution` | `get_domain_resolution` |

## drip-campaigns

| Method   | Path                                                                         | Handler                      |
| -------- | ---------------------------------------------------------------------------- | ---------------------------- |
| `GET`    | `/v1/contacts/{contact_id}/drip-enrollments`                                 | `list_contact_enrollments`   |
| `GET`    | `/v1/hubs/{hub_id}/drip-campaigns`                                           | `list_drip_campaigns`        |
| `POST`   | `/v1/hubs/{hub_id}/drip-campaigns`                                           | `create_drip_campaign`       |
| `DELETE` | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}`                             | `delete_drip_campaign`       |
| `GET`    | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}`                             | `get_drip_campaign`          |
| `PATCH`  | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}`                             | `patch_drip_campaign`        |
| `POST`   | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/activate`                    | `activate_drip_campaign`     |
| `GET`    | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/enrollments`                 | `list_campaign_enrollments`  |
| `POST`   | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/enrollments`                 | `enroll_contact_in_campaign` |
| `DELETE` | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/enrollments/{enrollment_id}` | `exit_drip_enrollment`       |
| `POST`   | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/pause`                       | `pause_drip_campaign`        |
| `GET`    | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/steps`                       | `list_drip_steps`            |
| `POST`   | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/steps`                       | `create_drip_step`           |
| `DELETE` | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/steps/{step_id}`             | `delete_drip_step`           |
| `PATCH`  | `/v1/hubs/{hub_id}/drip-campaigns/{campaign_id}/steps/{step_id}`             | `patch_drip_step`            |

## email-config

| Method   | Path                                  | Handler               |
| -------- | ------------------------------------- | --------------------- |
| `DELETE` | `/v1/hubs/{hub_id}/email-config`      | `delete_email_config` |
| `GET`    | `/v1/hubs/{hub_id}/email-config`      | `get_email_config`    |
| `PUT`    | `/v1/hubs/{hub_id}/email-config`      | `put_email_config`    |
| `POST`   | `/v1/hubs/{hub_id}/email-config/test` | `test_email_config`   |

## email-stats

| Method | Path                            | Handler               |
| ------ | ------------------------------- | --------------------- |
| `GET`  | `/v1/hubs/{hub_id}/email-stats` | `get_hub_email_stats` |

## email-suppressions-admin

| Method   | Path                                            | Handler                   |
| -------- | ----------------------------------------------- | ------------------------- |
| `GET`    | `/v1/admin/email-suppressions`                  | `admin_list_suppressions` |
| `DELETE` | `/v1/admin/email-suppressions/{suppression_id}` | `admin_lift_suppression`  |

## email-suppressions-hub

| Method   | Path                                                    | Handler                  |
| -------- | ------------------------------------------------------- | ------------------------ |
| `GET`    | `/v1/hubs/{hub_id}/email-suppressions`                  | `hub_list_suppressions`  |
| `POST`   | `/v1/hubs/{hub_id}/email-suppressions`                  | `hub_create_suppression` |
| `DELETE` | `/v1/hubs/{hub_id}/email-suppressions/{suppression_id}` | `hub_lift_suppression`   |

## email-unsubscribe

| Method | Path           | Handler            |
| ------ | -------------- | ------------------ |
| `GET`  | `/unsubscribe` | `get_unsubscribe`  |
| `POST` | `/unsubscribe` | `post_unsubscribe` |

## email-webhooks

| Method | Path                       | Handler                   |
| ------ | -------------------------- | ------------------------- |
| `POST` | `/webhooks/mailgun/events` | `receive_mailgun_webhook` |

## external-login

| Method | Path                                         | Handler                   |
| ------ | -------------------------------------------- | ------------------------- |
| `GET`  | `/api/v1/external-login/callback`            | `external_login_callback` |
| `POST` | `/api/v1/external-login/session`             | `external_login_session`  |
| `POST` | `/api/v1/external-login/{config_id}/connect` | `external_login_connect`  |
| `GET`  | `/api/v1/external-login/{config_id}/start`   | `external_login_start`    |

## external-login-providers

| Method   | Path                                                             | Handler             |
| -------- | ---------------------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/teams/{team_id}/external-login-providers`               | `list_providers`    |
| `POST`   | `/api/v1/teams/{team_id}/external-login-providers`               | `create_provider`   |
| `DELETE` | `/api/v1/teams/{team_id}/external-login-providers/{provider_id}` | `delete_provider`   |
| `GET`    | `/api/v1/teams/{team_id}/external-login-providers/{provider_id}` | `retrieve_provider` |
| `PATCH`  | `/api/v1/teams/{team_id}/external-login-providers/{provider_id}` | `update_provider`   |

## follows

| Method   | Path                                                   | Handler                 |
| -------- | ------------------------------------------------------ | ----------------------- |
| `DELETE` | `/api/v1/hubs/{hub_id}/members/{contact_id}/follow`    | `unfollow_member`       |
| `POST`   | `/api/v1/hubs/{hub_id}/members/{contact_id}/follow`    | `follow_member`         |
| `GET`    | `/api/v1/hubs/{hub_id}/members/{contact_id}/followers` | `list_member_followers` |
| `GET`    | `/api/v1/hubs/{hub_id}/members/{contact_id}/following` | `list_member_following` |

## hub-custom-domains

| Method   | Path                                                                          | Handler                  |
| -------- | ----------------------------------------------------------------------------- | ------------------------ |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}/custom-domains`                    | `list_custom_domains`    |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{identifier}/custom-domains`                    | `register_custom_domain` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{identifier}/custom-domains/{domain_id}`        | `delete_custom_domain`   |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}/custom-domains/{domain_id}`        | `retrieve_custom_domain` |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{identifier}/custom-domains/{domain_id}/verify` | `verify_custom_domain`   |

## hub-events

| Method   | Path                                                   | Handler                  |
| -------- | ------------------------------------------------------ | ------------------------ |
| `GET`    | `/api/v1/hubs/{hub_id}/events`                         | `list_events`            |
| `POST`   | `/api/v1/hubs/{hub_id}/events`                         | `create_event`           |
| `GET`    | `/api/v1/hubs/{hub_id}/events/{event_id}`              | `get_event_detail`       |
| `PATCH`  | `/api/v1/hubs/{hub_id}/events/{event_id}`              | `patch_event`            |
| `GET`    | `/api/v1/hubs/{hub_id}/events/{event_id}/calendar.ics` | `hub_event_calendar_ics` |
| `POST`   | `/api/v1/hubs/{hub_id}/events/{event_id}/cancel`       | `cancel_event`           |
| `DELETE` | `/api/v1/hubs/{hub_id}/events/{event_id}/rsvp`         | `withdraw_event_rsvp`    |
| `PUT`    | `/api/v1/hubs/{hub_id}/events/{event_id}/rsvp`         | `set_event_rsvp`         |
| `GET`    | `/api/v1/hubs/{hub_id}/events/{event_id}/rsvps`        | `list_event_rsvps`       |

## hub-memberships

| Method  | Path                                                        | Handler                     |
| ------- | ----------------------------------------------------------- | --------------------------- |
| `POST`  | `/api/v1/contact-auth/me/hubs/{hub_id}/join`                | `join_free_hub`             |
| `POST`  | `/api/v1/contact-auth/me/hubs/{hub_id}/leave`               | `leave_hub`                 |
| `GET`   | `/api/v1/contact-auth/me/hubs/{hub_id}/membership`          | `get_membership`            |
| `PATCH` | `/api/v1/contact-auth/me/hubs/{hub_id}/notification-prefs`  | `update_notification_prefs` |
| `POST`  | `/api/v1/contact-auth/me/hubs/{hub_id}/onboarding/complete` | `mark_onboarded`            |
| `POST`  | `/api/v1/contact-auth/me/hubs/{hub_id}/tos/accept`          | `accept_tos`                |

## hub-memberships-admin

| Method   | Path                                                                    | Handler              |
| -------- | ----------------------------------------------------------------------- | -------------------- |
| `GET`    | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members`                   | `list_hub_members`   |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members`                   | `add_hub_member`     |
| `DELETE` | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}`      | `remove_hub_member`  |
| `PATCH`  | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/members/{contact_id}/role` | `set_member_role`    |
| `POST`   | `/api/v1/admin/teams/{team_id}/hubs/{hub_id}/ownership-transfer`        | `transfer_ownership` |

## hubs-admin

| Method   | Path                                                         | Handler                            |
| -------- | ------------------------------------------------------------ | ---------------------------------- |
| `GET`    | `/api/v1/teams/{team_id}/hubs/`                              | `admin_list_hubs`                  |
| `POST`   | `/api/v1/teams/{team_id}/hubs/`                              | `admin_create_hub`                 |
| `POST`   | `/api/v1/teams/{team_id}/hubs/from-template`                 | `admin_scaffold_hub_from_template` |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/content/reconcile`    | `reconcile_hub_content`            |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{identifier}`                  | `admin_delete_hub`                 |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}`                  | `admin_get_hub`                    |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{identifier}`                  | `admin_update_hub`                 |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}/email-settings`   | `admin_get_hub_email_sender`       |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{identifier}/email-settings`   | `admin_update_hub_email_sender`    |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}/policies`         | `admin_get_hub_policies`           |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{identifier}/policies`         | `admin_update_hub_policy`          |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{identifier}/policies/gate`    | `admin_update_hub_policy_gate`     |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{identifier}/redirect-origins` | `admin_get_hub_redirect_origins`   |
| `PUT`    | `/api/v1/teams/{team_id}/hubs/{identifier}/redirect-origins` | `admin_put_hub_redirect_origins`   |

## hubs-portal

| Method | Path                                    | Handler                       |
| ------ | --------------------------------------- | ----------------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/policies`        | `get_hub_policies`            |
| `GET`  | `/api/v1/hubs/{slug}`                   | `portal_get_hub_by_slug`      |
| `GET`  | `/api/v1/hubs/{slug}/pages/{page_type}` | `portal_get_anon_page_render` |

## media-admin

| Method   | Path                                                                                                          | Handler                               |
| -------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| `POST`   | `/api/v1/admin/teams/{team_id}/files/synthetic`                                                               | `admin_register_synthetic_file`       |
| `GET`    | `/api/v1/teams/{team_id}/files`                                                                               | `list_files`                          |
| `POST`   | `/api/v1/teams/{team_id}/files`                                                                               | `create_file`                         |
| `POST`   | `/api/v1/teams/{team_id}/files/multipart`                                                                     | `multipart_init`                      |
| `DELETE` | `/api/v1/teams/{team_id}/files/{id}`                                                                          | `delete_file`                         |
| `GET`    | `/api/v1/teams/{team_id}/files/{id}`                                                                          | `show_file`                           |
| `PATCH`  | `/api/v1/teams/{team_id}/files/{id}`                                                                          | `update_file`                         |
| `GET`    | `/api/v1/teams/{team_id}/files/{id}/cards`                                                                    | `list_file_cards`                     |
| `PUT`    | `/api/v1/teams/{team_id}/files/{id}/cards`                                                                    | `replace_file_cards`                  |
| `GET`    | `/api/v1/teams/{team_id}/files/{id}/chapters`                                                                 | `list_file_chapters`                  |
| `PUT`    | `/api/v1/teams/{team_id}/files/{id}/chapters`                                                                 | `replace_file_chapters`               |
| `GET`    | `/api/v1/teams/{team_id}/files/{id}/download/{variant:path}`                                                  | `admin_download_file_variant`         |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/finalize`                                                                 | `finalize_file`                       |
| `GET`    | `/api/v1/teams/{team_id}/files/{id}/media`                                                                    | `get_admin_file_media`                |
| `DELETE` | `/api/v1/teams/{team_id}/files/{id}/multipart/{upload_id}`                                                    | `multipart_abort`                     |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/multipart/{upload_id}/complete`                                           | `multipart_complete`                  |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/multipart/{upload_id}/parts/{part_number}`                                | `multipart_part_url`                  |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/replace`                                                                  | `init_file_replacement`               |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/replace/multipart`                                                        | `multipart_file_replacement_init`     |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/replace/{replacement_media_id}/finalize`                                  | `finalize_file_replacement`           |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/replace/{replacement_media_id}/multipart/{upload_id}/complete`            | `multipart_file_replacement_complete` |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/replace/{replacement_media_id}/multipart/{upload_id}/parts/{part_number}` | `multipart_file_replacement_part_url` |
| `POST`   | `/api/v1/teams/{team_id}/files/{id}/transcode`                                                                | `trigger_transcode`                   |
| `GET`    | `/api/v1/teams/{team_id}/playlists`                                                                           | `list_playlists`                      |
| `POST`   | `/api/v1/teams/{team_id}/playlists`                                                                           | `create_playlist`                     |
| `DELETE` | `/api/v1/teams/{team_id}/playlists/{id}`                                                                      | `delete_playlist`                     |
| `GET`    | `/api/v1/teams/{team_id}/playlists/{id}`                                                                      | `show_playlist`                       |
| `PATCH`  | `/api/v1/teams/{team_id}/playlists/{id}`                                                                      | `update_playlist`                     |
| `GET`    | `/api/v1/teams/{team_id}/playlists/{id}/items`                                                                | `list_playlist_items`                 |
| `POST`   | `/api/v1/teams/{team_id}/playlists/{id}/items`                                                                | `attach_playlist_item`                |
| `DELETE` | `/api/v1/teams/{team_id}/playlists/{id}/items/{item_id}`                                                      | `delete_playlist_item`                |
| `PATCH`  | `/api/v1/teams/{team_id}/playlists/{id}/items/{item_id}`                                                      | `update_playlist_item`                |

## media-admin-attachments

| Method   | Path                                                  | Handler                            |
| -------- | ----------------------------------------------------- | ---------------------------------- |
| `GET`    | `/api/v1/teams/{team_id}/attachments`                 | `list_attachments`                 |
| `DELETE` | `/api/v1/teams/{team_id}/attachments/{attachment_id}` | `delete_attachment`                |
| `GET`    | `/api/v1/teams/{team_id}/attachments/{attachment_id}` | `show_attachment`                  |
| `PATCH`  | `/api/v1/teams/{team_id}/attachments/{attachment_id}` | `update_attachment`                |
| `POST`   | `/api/v1/teams/{team_id}/content-node-attachments`    | `create_content_node_attachment`   |
| `POST`   | `/api/v1/teams/{team_id}/hub-branding-attachments`    | `create_hub_branding_attachment`   |
| `POST`   | `/api/v1/teams/{team_id}/page-section-attachments`    | `create_page_section_attachment`   |
| `POST`   | `/api/v1/teams/{team_id}/playlist-cover-attachments`  | `create_playlist_cover_attachment` |

## media-admin-folders

| Method   | Path                                        | Handler         |
| -------- | ------------------------------------------- | --------------- |
| `GET`    | `/api/v1/teams/{team_id}/folders`           | `list_folders`  |
| `POST`   | `/api/v1/teams/{team_id}/folders`           | `create_folder` |
| `DELETE` | `/api/v1/teams/{team_id}/folders/{id}`      | `delete_folder` |
| `GET`    | `/api/v1/teams/{team_id}/folders/{id}`      | `show_folder`   |
| `PATCH`  | `/api/v1/teams/{team_id}/folders/{id}`      | `rename_folder` |
| `POST`   | `/api/v1/teams/{team_id}/folders/{id}/move` | `move_folder`   |

## media-admin-hub-media

| Method   | Path                                                            | Handler                        |
| -------- | --------------------------------------------------------------- | ------------------------------ |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/media`                   | `list_hub_media_files`         |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/media`                   | `publish_hub_media_file`       |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/media/{file_id}`         | `unpublish_hub_media_file`     |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/playlists`               | `list_hub_media_playlists`     |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/playlists`               | `publish_hub_media_playlist`   |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/playlists/{playlist_id}` | `unpublish_hub_media_playlist` |

## media-member

| Method | Path                                    | Handler              |
| ------ | --------------------------------------- | -------------------- |
| `POST` | `/api/v1/hub/{hub_id}/files/upload-url` | `member_create_file` |

## media-member-hub-media

| Method | Path                                                          | Handler                           |
| ------ | ------------------------------------------------------------- | --------------------------------- |
| `GET`  | `/api/v1/hub/{hub_id}/content/attachments/{file_id}/download` | `download_content_attachment`     |
| `GET`  | `/api/v1/hub/{hub_id}/media`                                  | `list_public_hub_media_files`     |
| `GET`  | `/api/v1/hub/{hub_id}/playlist-cards`                         | `list_hub_playlist_cards`         |
| `GET`  | `/api/v1/hub/{hub_id}/playlists`                              | `list_public_hub_media_playlists` |
| `GET`  | `/api/v1/hub/{hub_id}/playlists/{playlist_id}/item-cards`     | `list_hub_playlist_item_cards`    |

## media-public

| Method | Path                                             | Handler                        |
| ------ | ------------------------------------------------ | ------------------------------ |
| `GET`  | `/api/v1/file/{file_id}/chapters`                | `get_file_chapters_public`     |
| `GET`  | `/api/v1/file/{file_id}/download/{variant:path}` | `download_file_variant`        |
| `GET`  | `/api/v1/file/{file_id}/image/{variant}`         | `get_file_image_variant`       |
| `GET`  | `/api/v1/file/{file_id}/media`                   | `get_file_media`               |
| `GET`  | `/api/v1/file/{file_id}/transcript`              | `get_file_transcript_segments` |
| `GET`  | `/api/v1/playlist/{playlist_id}`                 | `get_public_playlist`          |
| `GET`  | `/api/v1/playlist/{playlist_id}/files`           | `list_public_playlist_files`   |
| `GET`  | `/api/v1/playlists/{playlist_id}/feed.xml`       | `playlist_podcast_feed`        |

## media-search

| Method | Path                                   | Handler               |
| ------ | -------------------------------------- | --------------------- |
| `GET`  | `/api/v1/hub/{hub_id}/search/media`    | `member_search_media` |
| `GET`  | `/api/v1/teams/{team_id}/search/media` | `admin_search_media`  |

## media-transcript

| Method  | Path                                                                     | Handler                           |
| ------- | ------------------------------------------------------------------------ | --------------------------------- |
| `GET`   | `/api/v1/teams/{team_id}/media/{media_id}/transcript`                    | `get_transcript`                  |
| `PATCH` | `/api/v1/teams/{team_id}/media/{media_id}/transcript`                    | `edit_transcript_route`           |
| `GET`   | `/api/v1/teams/{team_id}/media/{media_id}/transcript.vtt`                | `get_transcript_vtt`              |
| `GET`   | `/api/v1/teams/{team_id}/media/{media_id}/transcript/content`            | `get_transcript_content`          |
| `POST`  | `/api/v1/teams/{team_id}/media/{media_id}/transcript/revert`             | `revert_transcript_route`         |
| `GET`   | `/api/v1/teams/{team_id}/media/{media_id}/transcript/versions`           | `list_transcript_versions`        |
| `GET`   | `/api/v1/teams/{team_id}/media/{media_id}/transcript/versions/{version}` | `get_transcript_version`          |
| `GET`   | `/api/v1/teams/{team_id}/settings/transcription-language`                | `get_team_transcription_language` |
| `PUT`   | `/api/v1/teams/{team_id}/settings/transcription-language`                | `set_team_transcription_language` |

## member-privacy

| Method   | Path                                                                                 | Handler                |
| -------- | ------------------------------------------------------------------------------------ | ---------------------- |
| `GET`    | `/api/v1/contact-auth/me/hubs/{hub_id}/privacy`                                      | `get_privacy`          |
| `PATCH`  | `/api/v1/contact-auth/me/hubs/{hub_id}/privacy`                                      | `patch_privacy`        |
| `GET`    | `/api/v1/contact-auth/me/hubs/{hub_id}/privacy/blocked-members`                      | `list_blocked_members` |
| `DELETE` | `/api/v1/contact-auth/me/hubs/{hub_id}/privacy/blocked-members/{blocked_contact_id}` | `unblock_member`       |
| `PUT`    | `/api/v1/contact-auth/me/hubs/{hub_id}/privacy/blocked-members/{blocked_contact_id}` | `block_member`         |

## meta

| Method | Path       | Handler       |
| ------ | ---------- | ------------- |
| `GET`  | `/version` | `get_version` |

## notification-preferences

| Method  | Path                                                             | Handler                          |
| ------- | ---------------------------------------------------------------- | -------------------------------- |
| `GET`   | `/api/v1/contact-auth/me/hubs/{hub_id}/notification-preferences` | `get_notification_preferences`   |
| `PATCH` | `/api/v1/contact-auth/me/hubs/{hub_id}/notification-preferences` | `patch_notification_preferences` |

## notifications

| Method   | Path                                                         | Handler                       |
| -------- | ------------------------------------------------------------ | ----------------------------- |
| `GET`    | `/api/v1/hubs/{hub_id}/notifications`                        | `list_notifications`          |
| `GET`    | `/api/v1/hubs/{hub_id}/notifications/counts`                 | `get_notification_counts`     |
| `PUT`    | `/api/v1/hubs/{hub_id}/notifications/last-opened-at`         | `update_last_opened_at`       |
| `POST`   | `/api/v1/hubs/{hub_id}/notifications/mark-all-read`          | `mark_all_notifications_read` |
| `GET`    | `/api/v1/hubs/{hub_id}/notifications/unread-count`           | `get_unread_count`            |
| `DELETE` | `/api/v1/hubs/{hub_id}/notifications/{notification_id}`      | `dismiss_notification`        |
| `GET`    | `/api/v1/hubs/{hub_id}/notifications/{notification_id}`      | `get_notification`            |
| `POST`   | `/api/v1/hubs/{hub_id}/notifications/{notification_id}/read` | `mark_notification_read`      |

## oauth

| Method | Path                      | Handler                  |
| ------ | ------------------------- | ------------------------ |
| `GET`  | `/oauth/authorize`        | `oauth_authorize`        |
| `GET`  | `/oauth/authorize/resume` | `oauth_authorize_resume` |
| `POST` | `/oauth/consent`          | `oauth_consent`          |
| `POST` | `/oauth/revoke`           | `oauth_revoke`           |
| `POST` | `/oauth/token`            | `oauth_token`            |
| `GET`  | `/oauth/userinfo`         | `oauth_userinfo`         |

## oauth-clients

| Method   | Path                                                                       | Handler                 |
| -------- | -------------------------------------------------------------------------- | ----------------------- |
| `GET`    | `/api/v1/teams/{team_id}/oauth-clients`                                    | `list_oauth_clients`    |
| `POST`   | `/api/v1/teams/{team_id}/oauth-clients`                                    | `create_oauth_client`   |
| `DELETE` | `/api/v1/teams/{team_id}/oauth-clients/{client_pk}`                        | `delete_oauth_client`   |
| `GET`    | `/api/v1/teams/{team_id}/oauth-clients/{client_pk}`                        | `retrieve_oauth_client` |
| `POST`   | `/api/v1/teams/{team_id}/oauth-clients/{client_pk}/redirect-uris`          | `add_redirect_uri`      |
| `DELETE` | `/api/v1/teams/{team_id}/oauth-clients/{client_pk}/redirect-uris/{uri_id}` | `delete_redirect_uri`   |

## oauth-clients-admin

| Method  | Path                                | Handler                        |
| ------- | ----------------------------------- | ------------------------------ |
| `PATCH` | `/api/v1/oauth-clients/{client_pk}` | `platform_admin_update_client` |

## page-builder

| Method | Path                           | Handler            |
| ------ | ------------------------------ | ------------------ |
| `GET`  | `/api/v1/page-builder/catalog` | `get_page_catalog` |

## pages-admin

| Method   | Path                                                                          | Handler                        |
| -------- | ----------------------------------------------------------------------------- | ------------------------------ |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/`                                | `admin_list_pages`             |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/`                                | `admin_create_page`            |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/content`                         | `admin_get_content_page`       |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/from-template`                   | `admin_page_from_template`     |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/home`                            | `admin_get_homepage`           |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/scaffold-from-template`          | `admin_scaffold_from_template` |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{identifier}`                    | `admin_delete_page`            |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{identifier}`                    | `admin_get_page`               |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{identifier}`                    | `admin_update_page`            |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/preview-token`         | `admin_create_preview_token`   |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/publish`               | `admin_publish_page`           |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/sections`              | `admin_list_sections`          |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/sections`              | `admin_reorder_sections`       |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/sections`              | `admin_add_section`            |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/sections/{section_id}` | `admin_delete_section`         |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/sections/{section_id}` | `admin_update_section`         |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/tree`                  | `admin_get_author_draft_tree`  |
| `PUT`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/pages/{page_id}/tree`                  | `admin_put_page_tree`          |

## pages-portal

| Method | Path                                            | Handler                   |
| ------ | ----------------------------------------------- | ------------------------- |
| `GET`  | `/api/v1/hub/{hub_id}/pages/`                   | `portal_list_pages`       |
| `GET`  | `/api/v1/hub/{hub_id}/pages/content`            | `portal_get_content_page` |
| `GET`  | `/api/v1/hub/{hub_id}/pages/home`               | `portal_get_homepage`     |
| `GET`  | `/api/v1/hub/{hub_id}/pages/{identifier}`       | `portal_get_page`         |
| `GET`  | `/api/v1/hub/{hub_id}/pages/{page_id}/sections` | `portal_list_sections`    |

## permissions

| Method | Path                  | Handler            |
| ------ | --------------------- | ------------------ |
| `GET`  | `/api/v1/permissions` | `list_permissions` |

## platform-alerts

| Method | Path                            | Handler                |
| ------ | ------------------------------- | ---------------------- |
| `GET`  | `/api/v1/admin/platform-alerts` | `list_platform_alerts` |

## products-admin

| Method   | Path                                                                          | Handler                            |
| -------- | ----------------------------------------------------------------------------- | ---------------------------------- |
| `GET`    | `/api/v1/teams/{team_id}/coupons/`                                            | `admin_list_coupons`               |
| `POST`   | `/api/v1/teams/{team_id}/coupons/`                                            | `admin_create_coupon`              |
| `DELETE` | `/api/v1/teams/{team_id}/coupons/{coupon_id}`                                 | `admin_delete_coupon`              |
| `GET`    | `/api/v1/teams/{team_id}/coupons/{coupon_id}`                                 | `admin_get_coupon`                 |
| `PATCH`  | `/api/v1/teams/{team_id}/coupons/{coupon_id}`                                 | `admin_update_coupon`              |
| `GET`    | `/api/v1/teams/{team_id}/coupons/{coupon_id}/products/`                       | `admin_list_coupon_products`       |
| `POST`   | `/api/v1/teams/{team_id}/coupons/{coupon_id}/products/`                       | `admin_attach_product_to_coupon`   |
| `DELETE` | `/api/v1/teams/{team_id}/coupons/{coupon_id}/products/{product_id}`           | `admin_detach_product_from_coupon` |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/prices/`                               | `admin_list_hub_price_displays`    |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/prices/{display_id}`                   | `admin_update_hub_price_display`   |
| `GET`    | `/api/v1/teams/{team_id}/hubs/{hub_id}/products/`                             | `admin_list_hub_products`          |
| `POST`   | `/api/v1/teams/{team_id}/hubs/{hub_id}/products/`                             | `admin_attach_product_to_hub`      |
| `DELETE` | `/api/v1/teams/{team_id}/hubs/{hub_id}/products/{display_id}`                 | `admin_detach_product_from_hub`    |
| `PATCH`  | `/api/v1/teams/{team_id}/hubs/{hub_id}/products/{display_id}`                 | `admin_update_hub_product_display` |
| `GET`    | `/api/v1/teams/{team_id}/products/`                                           | `admin_list_products`              |
| `POST`   | `/api/v1/teams/{team_id}/products/`                                           | `admin_create_product`             |
| `DELETE` | `/api/v1/teams/{team_id}/products/{product_id}`                               | `admin_delete_product`             |
| `GET`    | `/api/v1/teams/{team_id}/products/{product_id}`                               | `admin_get_product`                |
| `PATCH`  | `/api/v1/teams/{team_id}/products/{product_id}`                               | `admin_update_product`             |
| `GET`    | `/api/v1/teams/{team_id}/products/{product_id}/deliverables/`                 | `admin_list_deliverables`          |
| `POST`   | `/api/v1/teams/{team_id}/products/{product_id}/deliverables/`                 | `admin_create_deliverable`         |
| `DELETE` | `/api/v1/teams/{team_id}/products/{product_id}/deliverables/{deliverable_id}` | `admin_delete_deliverable`         |
| `GET`    | `/api/v1/teams/{team_id}/products/{product_id}/prices/`                       | `admin_list_prices`                |
| `POST`   | `/api/v1/teams/{team_id}/products/{product_id}/prices/`                       | `admin_create_price`               |
| `DELETE` | `/api/v1/teams/{team_id}/products/{product_id}/prices/{price_id}`             | `admin_delete_price`               |
| `GET`    | `/api/v1/teams/{team_id}/products/{product_id}/prices/{price_id}`             | `admin_get_price`                  |
| `PATCH`  | `/api/v1/teams/{team_id}/products/{product_id}/prices/{price_id}`             | `admin_update_price`               |

## products-portal

| Method | Path                                    | Handler                       |
| ------ | --------------------------------------- | ----------------------------- |
| `GET`  | `/api/v1/hub/{hub_id}/checkout-display` | `portal_get_checkout_display` |

## roles

| Method   | Path                                                    | Handler                       |
| -------- | ------------------------------------------------------- | ----------------------------- |
| `GET`    | `/api/v1/roles`                                         | `list_roles`                  |
| `POST`   | `/api/v1/roles`                                         | `create_role`                 |
| `DELETE` | `/api/v1/roles/{role_id}`                               | `delete_role`                 |
| `GET`    | `/api/v1/roles/{role_id}`                               | `get_role`                    |
| `PATCH`  | `/api/v1/roles/{role_id}`                               | `update_role`                 |
| `POST`   | `/api/v1/roles/{role_id}/permissions`                   | `assign_permission_to_role`   |
| `DELETE` | `/api/v1/roles/{role_id}/permissions/{permission_slug}` | `remove_permission_from_role` |

## saved-items

| Method   | Path                                                 | Handler            |
| -------- | ---------------------------------------------------- | ------------------ |
| `GET`    | `/api/v1/hub/{hub_id}/me/saved-items`                | `list_saved_items` |
| `POST`   | `/api/v1/hub/{hub_id}/saved-items`                   | `save_item`        |
| `DELETE` | `/api/v1/hub/{hub_id}/saved-items/{content_node_id}` | `unsave_item`      |

## segments-admin

| Method   | Path                                                          | Handler             |
| -------- | ------------------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/teams/{team_id}/segments`                            | `list_segments`     |
| `POST`   | `/api/v1/teams/{team_id}/segments`                            | `create_segment`    |
| `POST`   | `/api/v1/teams/{team_id}/segments/search`                     | `contacts_matching` |
| `DELETE` | `/api/v1/teams/{team_id}/segments/{segment_id}`               | `delete_segment`    |
| `GET`    | `/api/v1/teams/{team_id}/segments/{segment_id}`               | `get_segment`       |
| `PATCH`  | `/api/v1/teams/{team_id}/segments/{segment_id}`               | `update_segment`    |
| `GET`    | `/api/v1/teams/{team_id}/segments/{segment_id}/members`       | `list_members`      |
| `GET`    | `/api/v1/teams/{team_id}/segments/{segment_id}/members/count` | `count_members`     |

## tags-admin

| Method   | Path                                    | Handler      |
| -------- | --------------------------------------- | ------------ |
| `GET`    | `/api/v1/teams/{team_id}/tags`          | `list_tags`  |
| `POST`   | `/api/v1/teams/{team_id}/tags`          | `create_tag` |
| `DELETE` | `/api/v1/teams/{team_id}/tags/{tag_id}` | `delete_tag` |
| `GET`    | `/api/v1/teams/{team_id}/tags/{tag_id}` | `get_tag`    |
| `PATCH`  | `/api/v1/teams/{team_id}/tags/{tag_id}` | `update_tag` |

## tags-assignments

| Method   | Path                                                               | Handler              |
| -------- | ------------------------------------------------------------------ | -------------------- |
| `GET`    | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/tags`          | `list_contact_tags`  |
| `POST`   | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/tags`          | `assign_tag`         |
| `POST`   | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/tags/bulk`     | `bulk_assign_tags`   |
| `DELETE` | `/api/v1/teams/{team_id}/contacts/{team_contact_id}/tags/{tag_id}` | `remove_contact_tag` |

## teams

| Method   | Path                                        | Handler         |
| -------- | ------------------------------------------- | --------------- |
| `GET`    | `/api/v1/teams`                             | `list_teams`    |
| `POST`   | `/api/v1/teams`                             | `create_team`   |
| `DELETE` | `/api/v1/teams/{team_id}`                   | `delete_team`   |
| `GET`    | `/api/v1/teams/{team_id}`                   | `get_team`      |
| `PATCH`  | `/api/v1/teams/{team_id}`                   | `update_team`   |
| `GET`    | `/api/v1/teams/{team_id}/members`           | `list_members`  |
| `POST`   | `/api/v1/teams/{team_id}/members`           | `add_member`    |
| `DELETE` | `/api/v1/teams/{team_id}/members/{user_id}` | `remove_member` |
| `POST`   | `/api/v1/teams/{team_id}/switch`            | `switch_team`   |

## uncategorized

| Method | Path                           | Handler              |
| ------ | ------------------------------ | -------------------- |
| `GET`  | `/api/v1/hubs/{hub_id}/search` | `search_hub_global`  |
| `GET`  | `/m`                           | `magic_link_landing` |

## users

| Method  | Path                      | Handler       |
| ------- | ------------------------- | ------------- |
| `GET`   | `/api/v1/users`           | `list_users`  |
| `GET`   | `/api/v1/users/me`        | `get_me`      |
| `GET`   | `/api/v1/users/{user_id}` | `get_user`    |
| `PATCH` | `/api/v1/users/{user_id}` | `update_user` |

## verified-domains

| Method   | Path                                                          | Handler           |
| -------- | ------------------------------------------------------------- | ----------------- |
| `GET`    | `/api/v1/teams/{team_id}/verified-domains`                    | `list_domains`    |
| `POST`   | `/api/v1/teams/{team_id}/verified-domains`                    | `create_domain`   |
| `DELETE` | `/api/v1/teams/{team_id}/verified-domains/{domain_id}`        | `delete_domain`   |
| `GET`    | `/api/v1/teams/{team_id}/verified-domains/{domain_id}`        | `retrieve_domain` |
| `POST`   | `/api/v1/teams/{team_id}/verified-domains/{domain_id}/verify` | `verify_domain`   |

## web-push

| Method   | Path                                                             | Handler                |
| -------- | ---------------------------------------------------------------- | ---------------------- |
| `POST`   | `/api/v1/hubs/{hub_id}/web-push/subscriptions`                   | `subscribe`            |
| `DELETE` | `/api/v1/hubs/{hub_id}/web-push/subscriptions/{subscription_id}` | `unsubscribe`          |
| `GET`    | `/api/v1/hubs/{hub_id}/web-push/vapid-public-key`                | `get_vapid_public_key` |

## well-known

| Method | Path                                | Handler                |
| ------ | ----------------------------------- | ---------------------- |
| `GET`  | `/.well-known/jwks.json`            | `jwks_endpoint`        |
| `GET`  | `/.well-known/openid-configuration` | `openid_configuration` |
