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

# Update WhatsApp business profile

> Use only for requested edits to the discovered WhatsApp channel profile. The native provider update may affect the public business profile. Read profile first and again after an uncertain result before retrying; no idempotent provider receipt is claimed. profilePictureHandle must come from an existing provider upload; MCP has no profile image upload flow. Does not change channel OAuth permissions. Requires `channels:manage:write`.



## OpenAPI

````yaml /openapi.json patch /channels/{channelId}/whatsapp/profile
openapi: 3.0.3
info:
  title: Visito M2M API
  version: 1.0.0
  description: >-
    Tenant-scoped server-to-server API for channels, conversations, commerce,
    custom AI tools, and WhatsApp templates. Send operations are asynchronous
    and return queued acknowledgements. Expansion adds conversation controls,
    knowledge, sales opportunities, delivery status, reporting, and signed
    webhooks.
servers:
  - url: https://platform-api.visitoai.com/m2m/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Channels
  - name: Conversations
  - name: Commerce
  - name: Custom tools
  - name: WhatsApp templates
  - name: Properties
  - name: Knowledge
  - name: Sales CRM
  - name: Delivery
  - name: Reporting
  - name: Webhooks
paths:
  /channels/{channelId}/whatsapp/profile:
    patch:
      tags:
        - Channels
      summary: Update WhatsApp business profile
      description: >-
        Use only for requested edits to the discovered WhatsApp channel profile.
        The native provider update may affect the public business profile. Read
        profile first and again after an uncertain result before retrying; no
        idempotent provider receipt is claimed. profilePictureHandle must come
        from an existing provider upload; MCP has no profile image upload flow.
        Does not change channel OAuth permissions. Requires
        `channels:manage:write`.
      operationId: update_whatsapp_channel_profile
      parameters:
        - name: channelId
          in: path
          required: true
          description: >-
            Stored channel.id from list_channels or get_channel. Provider page,
            phone, account and WABA IDs are not this ID.
          schema:
            type: string
            pattern: ^[a-fA-F0-9]{24}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                about:
                  type: string
                  maxLength: 140
                address:
                  type: string
                  maxLength: 256
                description:
                  type: string
                  maxLength: 512
                email:
                  type: string
                  maxLength: 120
                vertical:
                  type: string
                  maxLength: 80
                profilePictureHandle:
                  type: string
                  maxLength: 220
                websites:
                  type: array
                  items:
                    type: string
                    format: uri
                  maxItems: 2
              additionalProperties: false
      responses:
        '200':
          description: Update WhatsApp business profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppChannelProfile'
        default:
          $ref: '#/components/responses/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    WhatsAppChannelProfile:
      type: object
      properties:
        channelId:
          type: string
        phoneNumberId:
          type: string
        profile:
          type: object
          properties:
            about:
              type: string
            address:
              type: string
            description:
              type: string
            email:
              type: string
            vertical:
              type: string
            profilePictureUrl:
              type: string
            websites:
              type: array
              items:
                type: string
              maxItems: 2
          additionalProperties: false
          required:
            - websites
      additionalProperties: false
      required:
        - channelId
        - phoneNumberId
        - profile
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              example: M2M_AUTH_INSUFFICIENT_SCOPE
            message:
              type: string
            details:
              type: object
              additionalProperties: true
      example:
        error:
          code: M2M_AUTH_INSUFFICIENT_SCOPE
          message: M2M credential does not have required scope.
          details:
            requiredScopes:
              - conversations:write
            missingScopes:
              - conversations:write
  responses:
    Error:
      description: Structured error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Visito M2M API key
      description: Server-side tenant-scoped credential created from Build > API Keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.