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

# List channels in a workspace

> Returns every channel in the selected workspace, whatever its `type`: WhatsApp,
Instagram and Facebook channels come back in one list. Use `id` (`ch_...`) for
HookMyApp API calls and `type` to branch. The provider-specific fields of the
other providers are `null`: use `whatsappDisplayPhoneNumber`, `instagramUsername`
or `facebookPageName` for customer-facing labels. A Page and the Instagram
account linked to it are two channels; the Instagram one carries the Page in
`metaPageId`.




## OpenAPI

````yaml api-reference/openapi.yaml GET /meta/channels
openapi: 3.1.0
info:
  title: HookMyApp API
  version: 1.0.0
  description: >
    The HookMyApp REST API. Everything the dashboard and the CLI can do, your

    code and your AI agents can do too.


    ## Authentication


    Two kinds of Bearer credentials exist. Do not mix them up:


    - **API key (`hmok_...`)** authenticates *you* (or your agent) to
      `https://api.hookmyapp.com`.
      Create one in the dashboard under **Org → API keys → Create API Key**
      (full org access, optional expiration date, reveal or
      revoke it any time from that page), or without a
      browser via the [agent auth flow](#tag/agent-auth) described in
      [`GET /auth.md`](https://api.hookmyapp.com/auth.md). That flow can mint a
      scope-limited key. Send it as `Authorization: Bearer hmok_...`, or on
      `/mcp` as `X-API-Key: hmok_...`. Use it for org, workspace, customer,
      channel and webhook management.
    - **Channel token (`hmat_...`)** sends messages, replies to comments, and
      publishes from one connected channel.
      Mint it with `GET /meta/channels/{id}/token`. It is not valid on
      `https://api.hookmyapp.com`.
      The same sends, replies and publishing are also available with the API key under
      `/channels/{ch}` (see the Channel actions tag).

    Browser sessions from the dashboard use the same endpoints with a session

    cookie or WorkOS JWT instead of `hmok_`.


    ## IDs


    Every ID on the wire is a typed public ID, never an internal UUID:

    `ws_` workspace/customer, `ch_` channel, `org_` organization,

    `cred_` connection credential, `ac_` agent credential.


    ## Workspace context


    Workspace-scoped routes (channels, webhook config, and deliveries) resolve
    the

    workspace from the `X-Workspace-Id: ws_XXXXXXXX` header.


    ## Errors


    Errors return a stable machine-readable `code` plus a human `message`.

    Agent tokens that exceed their granted scopes get `403
    AGENT_SCOPE_INSUFFICIENT`.


    ## Webhook signatures


    Deliveries to your webhook are signed with `X-HookMyApp-Signature-256`,

    an HMAC-SHA256 of the raw body keyed on the channel `WEBHOOK_HMAC_SECRET`.

    The Verify Token is a separate value used only for the GET ownership probe.
servers:
  - url: https://api.hookmyapp.com
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Agent auth
    description: Register an agent credential (`hmok_`) with email OTP, no browser needed
  - name: Organizations
    description: Your organization and its summary
  - name: Customers
    description: Customer workspaces you run messaging for (SaaS Mode)
  - name: Onboarding links
    description: Links your customers open to connect their own channels
  - name: Workspaces
    description: Team workspaces
  - name: Channels
    description: Connected WhatsApp and Instagram channels, and their channel tokens
  - name: Webhook config
    description: Where inbound events are delivered for a channel
  - name: Deliveries
    description: Inspect inbound delivery logs and app responses
  - name: Event subscriptions
    description: >-
      Extra URLs that receive a channel's events, next to its main webhook
      destination
  - name: Channel actions
    description: >-
      Send, reply, moderate and publish on a channel with the API key; the
      channel token stays server-side
paths:
  /meta/channels:
    get:
      tags:
        - Channels
      summary: List channels in a workspace
      description: >
        Returns every channel in the selected workspace, whatever its `type`:
        WhatsApp,

        Instagram and Facebook channels come back in one list. Use `id`
        (`ch_...`) for

        HookMyApp API calls and `type` to branch. The provider-specific fields
        of the

        other providers are `null`: use `whatsappDisplayPhoneNumber`,
        `instagramUsername`

        or `facebookPageName` for customer-facing labels. A Page and the
        Instagram

        account linked to it are two channels; the Instagram one carries the
        Page in

        `metaPageId`.
      operationId: listChannels
      parameters:
        - $ref: '#/components/parameters/WorkspaceHeader'
      responses:
        '200':
          description: Channels in the workspace
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Channel'
              examples:
                facebook:
                  summary: A Facebook Page and its linked Instagram account
                  value:
                    - id: ch_CRNMuHnE
                      type: facebook
                      workspaceId: ws_iCQbMfZp
                      metaResourceId: '675007665699897'
                      metaPageId: null
                      metaWabaId: null
                      updatedAt: '2026-09-19T06:39:12Z'
                      whatsappWabaName: null
                      whatsappDisplayPhoneNumber: null
                      whatsappPhoneNumberId: null
                      whatsappVerifiedName: null
                      whatsappProfilePictureUrl: null
                      whatsappQualityRating: null
                      instagramUsername: null
                      instagramProfileName: null
                      instagramProfilePictureUrl: null
                      facebookPageName: 7-Day Replay or Buy System
                      facebookPagePictureUrl: >-
                        https://api.hookmyapp.com/meta/channels/ch_CRNMuHnE/picture?sig=...
                      connectionType: facebook_login
                      metaConnected: true
                      forwardingEnabled: true
                      forwardingDisabledReason: null
                      channelStatus: connected
                      metaRetryDisabled: false
                      credentialPublicId: cred_9fA2kLm1
                      webhookUrl: https://example.com/webhook/facebook
                      verifyToken: null
                      hmacSecret: null
                    - id: ch_44yKfOlC
                      type: instagram
                      workspaceId: ws_iCQbMfZp
                      metaResourceId: '17841475496208061'
                      metaPageId: '675007665699897'
                      metaWabaId: null
                      updatedAt: '2026-09-19T06:39:12Z'
                      whatsappWabaName: null
                      whatsappDisplayPhoneNumber: null
                      whatsappPhoneNumberId: null
                      whatsappVerifiedName: null
                      whatsappProfilePictureUrl: null
                      whatsappQualityRating: null
                      instagramUsername: 7_day_replay_or_buy_system
                      instagramProfileName: Or Dvir
                      instagramProfilePictureUrl: >-
                        https://api.hookmyapp.com/meta/channels/ch_44yKfOlC/picture?sig=...
                      facebookPageName: null
                      facebookPagePictureUrl: null
                      connectionType: facebook_login
                      metaConnected: true
                      forwardingEnabled: true
                      forwardingDisabledReason: null
                      channelStatus: connected
                      metaRetryDisabled: false
                      credentialPublicId: cred_9fA2kLm1
                      webhookUrl: https://example.com/webhook/facebook
                      verifyToken: null
                      hmacSecret: null
                whatsapp:
                  summary: A WhatsApp number
                  value:
                    - id: ch_iu9u8iGF
                      type: whatsapp
                      workspaceId: ws_iCQbMfZp
                      metaResourceId: '2265635434179525'
                      metaPageId: null
                      metaWabaId: '2265635434179525'
                      updatedAt: '2026-09-12T07:20:41Z'
                      whatsappWabaName: Oros hookmyapp
                      whatsappDisplayPhoneNumber: +972 55-727-3610
                      whatsappPhoneNumberId: '112800000000000'
                      whatsappVerifiedName: Oros hookmyapp
                      whatsappProfilePictureUrl: >-
                        https://api.hookmyapp.com/meta/channels/ch_iu9u8iGF/picture?sig=...
                      whatsappQualityRating: GREEN
                      instagramUsername: null
                      instagramProfileName: null
                      instagramProfilePictureUrl: null
                      facebookPageName: null
                      facebookPagePictureUrl: null
                      connectionType: cloud_api
                      metaConnected: true
                      forwardingEnabled: true
                      forwardingDisabledReason: null
                      channelStatus: connected
                      metaRetryDisabled: false
                      credentialPublicId: cred_2wQz7Hn4
                      webhookUrl: null
                      verifyToken: null
                      hmacSecret: null
components:
  parameters:
    WorkspaceHeader:
      name: X-Workspace-Id
      in: header
      required: true
      schema:
        type: string
        pattern: ^ws_[A-Za-z0-9]{8}$
      description: Workspace ID for the request
  schemas:
    Channel:
      type: object
      properties:
        id:
          type: string
          description: ch_ publicId
        type:
          type: string
          enum:
            - whatsapp
            - instagram
            - facebook
            - messenger
          description: >-
            Channel type. `messenger` is a deprecated alias of `facebook`;
            servers emit `facebook`.
        workspaceId:
          type: string
          description: ws_ publicId
        metaResourceId:
          type: string
          description: >
            Advanced Meta provider identifier. For WhatsApp this is the WABA ID.

            For Instagram this is the Instagram account Graph ID. For Facebook
            this is

            the Page ID. Use `id` (`ch_...`) for HookMyApp API calls and
            friendly fields

            for display.
        metaPageId:
          type:
            - string
            - 'null'
          description: >-
            On an Instagram channel connected through a Facebook Page, the Page
            ID. Null on WhatsApp channels, on Facebook channels (their Page ID
            is `metaResourceId`) and on Instagram channels connected directly.
        metaWabaId:
          type:
            - string
            - 'null'
          description: >-
            WhatsApp WABA ID, retained for compatibility. Null for non-WhatsApp
            channels.
        updatedAt:
          type: string
          format: date-time
        whatsappWabaName:
          type:
            - string
            - 'null'
        whatsappDisplayPhoneNumber:
          type:
            - string
            - 'null'
        whatsappPhoneNumberId:
          type:
            - string
            - 'null'
        whatsappVerifiedName:
          type:
            - string
            - 'null'
        whatsappProfilePictureUrl:
          type:
            - string
            - 'null'
          description: |
            Short-lived signed HookMyApp URL for the channel's profile
            picture. Fetch it soon after reading the response; mint a fresh
            one by re-reading the channel when it expires.
        whatsappQualityRating:
          type:
            - string
            - 'null'
        instagramUsername:
          type:
            - string
            - 'null'
        instagramProfileName:
          type:
            - string
            - 'null'
        instagramProfilePictureUrl:
          type:
            - string
            - 'null'
        facebookPageName:
          type:
            - string
            - 'null'
        facebookPagePictureUrl:
          type:
            - string
            - 'null'
        connectionType:
          type: string
          description: >-
            How the channel was connected: `cloud_api` or `coexistence` for
            WhatsApp, `instagram_login` for Instagram connected directly,
            `facebook_login` for a Facebook Page and the Instagram account
            linked to it.
        metaConnected:
          type: boolean
          description: >-
            Whether Meta currently appears connected for this channel. This is
            Meta health, not the HookMyApp lifecycle state.
        forwardingEnabled:
          type: boolean
        forwardingDisabledReason:
          type:
            - string
            - 'null'
        channelStatus:
          type: string
          enum:
            - connected
            - disconnected
            - archived
          description: >-
            HookMyApp lifecycle state. Use this to decide whether the channel is
            active in HookMyApp.
        metaRetryDisabled:
          type: boolean
        credentialPublicId:
          type:
            - string
            - 'null'
          description: cred_ publicId
        webhookUrl:
          type:
            - string
            - 'null'
        verifyToken:
          type:
            - string
            - 'null'
        hmacSecret:
          type:
            - string
            - 'null'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: '`Authorization: Bearer hmok_...` API key or a dashboard session token'

````