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

# Reauthorize cloud credentials

> **Protocols:** Meta Cloud API

**Required scope:** `quicklink:manage`

Requires a project token with `quicklink:manage`. Creates a QuickLink with purpose `reauthorization` that renews the Number's Meta authorization through Embedded Signup. The link is bound to the same Number and phone number and always uses the Meta Cloud API. The Number must be stopped or disconnected; this request never stops it. Cancelling the link before Meta work starts keeps the Number.



## OpenAPI

````yaml api-reference/features/numbers.json POST /messaging/{session}/cloud-credentials/reauthorize
openapi: 3.0.3
info:
  title: Numbers and sessions API methods
  version: 1.0.0
  description: >-
    Task-focused numbers and sessions methods across supported Polymorfa
    connection types.
servers: []
security: []
paths:
  /messaging/{session}/cloud-credentials/reauthorize:
    post:
      tags:
        - Sessions
      summary: Reauthorize cloud credentials
      description: >-
        **Protocols:** Meta Cloud API


        **Required scope:** `quicklink:manage`


        Requires a project token with `quicklink:manage`. Creates a QuickLink
        with purpose `reauthorization` that renews the Number's Meta
        authorization through Embedded Signup. The link is bound to the same
        Number and phone number and always uses the Meta Cloud API. The Number
        must be stopped or disconnected; this request never stops it. Cancelling
        the link before Meta work starts keeps the Number.
      operationId: nativeReauthorizeCloudCredentials
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 128
          required: true
          name: session
          in: path
          description: |-
            Identifier of the connected Polymorfa session.

            <!-- polymorfa-input-table -->
            **Value constraints**
            | Constraint | Accepted input |
            | --- | --- |
            | String length | `1` through `128` characters |
      responses:
        '201':
          description: Reauthorization link created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__CloudReauthorizationResponse'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '400':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '401':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '402':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '403':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '404':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '409':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '500':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '501':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
        '503':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/native__X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/native__X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/native__X-RateLimit-Reset'
      security:
        - native__BearerAuth: []
      servers:
        - url: https://api.polymorfa.com
components:
  schemas:
    native__CloudReauthorizationResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
          description: |-
            Whether the request succeeded.

            <!-- polymorfa-input-table -->
            **Allowed values**
            | Value | Meaning |
            | --- | --- |
            | `true` | True. |
        data:
          allOf:
            - $ref: '#/components/schemas/native__CloudReauthorization'
          description: Structured data carried by this object.
      required:
        - success
        - data
    native__PublicError:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - invalid_request_error
                - authentication_error
                - permission_error
                - conflict_error
                - rate_limit_error
                - api_error
                - upstream_error
              description: |-
                Type discriminator for this object.

                <!-- polymorfa-input-table -->
                **Allowed values**
                | Value | Meaning |
                | --- | --- |
                | `invalid_request_error` | Invalid request error. |
                | `authentication_error` | Authentication error. |
                | `permission_error` | Permission error. |
                | `conflict_error` | Conflict error. |
                | `rate_limit_error` | Rate limit error. |
                | `api_error` | Api error. |
                | `upstream_error` | Upstream error. |
            code:
              type: string
              enum:
                - invalid_parameter
                - invalid_credential
                - entitlement_required
                - gate_limit_reached
                - method_not_allowed
                - permission_denied
                - missing_scope
                - resource_not_found
                - hms_not_enabled
                - media_fetch_failed
                - resource_gone
                - feature_unavailable
                - stream_cursor_invalid
                - stream_cursor_expired
                - stream_connection_limit_reached
                - state_conflict
                - hybrid_choice_required
                - idempotency_conflict
                - idempotency_in_progress
                - idempotency_completed
                - idempotency_outcome_unknown
                - call_claimed
                - call_not_ringing
                - connection_limit
                - unsupported_for_connection
                - call_permission_required
                - invalid_sip_trunk
                - calls_disabled
                - call_recipient_opted_out
                - call_destination_blocked
                - call_permission_request_limited
                - call_permission_granted
                - call_opt_out_limit
                - number_restricted
                - sip_trunk_in_use
                - sip_trunk_revision_conflict
                - sip_trunk_limit
                - sip_unavailable
                - voice_not_enabled
                - provider_credential_invalid
                - provider_unavailable
                - asset_not_ready
                - voice_asset_in_use
                - voice_asset_revision_conflict
                - voice_unavailable
                - rate_limit_exceeded
                - internal_error
                - operation_not_supported
                - upstream_failure
                - service_unavailable
                - credential_verification_unavailable
                - session_not_ready
                - command_dispatch_failed
                - result_unknown
                - recipient_not_on_whatsapp
                - conversation_window_closed
                - template_not_approved
                - media_too_large
                - whatsapp_rate_limited
                - new_chat_limit_reached
                - whatsapp_account_restricted
                - bansafe_suspended
                - bansafe_org_suspended
                - bansafe_cold_blocked
                - bansafe_cold_held
                - bansafe_throttled
                - bansafe_daily_allowance_reached
                - bansafe_accounting_unavailable
                - bansafe_send_outcome_unknown
                - campaigns_not_entitled
                - campaign_throughput_capped
              description: >-
                Stable machine-readable code for this result.


                <!-- polymorfa-input-table -->

                **Allowed values**

                | Value | Meaning |

                | --- | --- |

                | `invalid_parameter` | Invalid parameter. |

                | `invalid_credential` | Invalid credential. |

                | `entitlement_required` | Entitlement required. |

                | `gate_limit_reached` | Gate limit reached. |

                | `method_not_allowed` | Method not allowed. |

                | `permission_denied` | Permission denied. |

                | `missing_scope` | Missing scope. |

                | `resource_not_found` | Resource not found. |

                | `hms_not_enabled` | Hms not enabled. |

                | `media_fetch_failed` | Media fetch failed. |

                | `resource_gone` | Resource gone. |

                | `feature_unavailable` | Feature unavailable. |

                | `stream_cursor_invalid` | Stream cursor invalid. |

                | `stream_cursor_expired` | Stream cursor expired. |

                | `stream_connection_limit_reached` | Stream connection limit
                reached. |

                | `state_conflict` | State conflict. |

                | `hybrid_choice_required` | Hybrid choice required. |

                | `idempotency_conflict` | Idempotency conflict. |

                | `idempotency_in_progress` | Idempotency in progress. |

                | `idempotency_completed` | Idempotency completed. |

                | `idempotency_outcome_unknown` | Idempotency outcome unknown. |

                | `call_claimed` | Call claimed. |

                | `call_not_ringing` | Call not ringing. |

                | `connection_limit` | Connection limit. |

                | `unsupported_for_connection` | Unsupported for connection. |

                | `call_permission_required` | Call permission required. |

                | `invalid_sip_trunk` | Invalid sip trunk. |

                | `calls_disabled` | Calls disabled. |

                | `call_recipient_opted_out` | Call recipient opted out. |

                | `call_destination_blocked` | Call destination blocked. |

                | `call_permission_request_limited` | Call permission request
                limited. |

                | `call_permission_granted` | Call permission granted. |

                | `call_opt_out_limit` | Call opt out limit. |

                | `number_restricted` | Number restricted. |

                | `sip_trunk_in_use` | Sip trunk in use. |

                | `sip_trunk_revision_conflict` | Sip trunk revision conflict. |

                | `sip_trunk_limit` | Sip trunk limit. |

                | `sip_unavailable` | Sip unavailable. |

                | `voice_not_enabled` | Voice not enabled. |

                | `provider_credential_invalid` | Provider credential invalid. |

                | `provider_unavailable` | Provider unavailable. |

                | `asset_not_ready` | Asset not ready. |

                | `voice_asset_in_use` | Voice asset in use. |

                | `voice_asset_revision_conflict` | Voice asset revision
                conflict. |

                | `voice_unavailable` | Voice unavailable. |

                | `rate_limit_exceeded` | Rate limit exceeded. |

                | `internal_error` | Internal error. |

                | `operation_not_supported` | Operation not supported. |

                | `upstream_failure` | Upstream failure. |

                | `service_unavailable` | Service unavailable. |

                | `credential_verification_unavailable` | Credential
                verification unavailable. |

                | `session_not_ready` | Session not ready. |

                | `command_dispatch_failed` | Command dispatch failed. |

                | `result_unknown` | Result unknown. |

                | `recipient_not_on_whatsapp` | Recipient not on whatsapp. |

                | `conversation_window_closed` | Conversation window closed. |

                | `template_not_approved` | Template not approved. |

                | `media_too_large` | Media too large. |

                | `whatsapp_rate_limited` | Whatsapp rate limited. |

                | `new_chat_limit_reached` | New chat limit reached. |

                | `whatsapp_account_restricted` | Whatsapp account restricted. |

                | `bansafe_suspended` | Bansafe suspended. |

                | `bansafe_org_suspended` | Bansafe org suspended. |

                | `bansafe_cold_blocked` | Bansafe cold blocked. |

                | `bansafe_cold_held` | Bansafe cold held. |

                | `bansafe_throttled` | Bansafe throttled. |

                | `bansafe_daily_allowance_reached` | Bansafe daily allowance
                reached. |

                | `bansafe_accounting_unavailable` | Bansafe accounting
                unavailable. |

                | `bansafe_send_outcome_unknown` | Bansafe send outcome unknown.
                |

                | `campaigns_not_entitled` | Campaigns not entitled. |

                | `campaign_throughput_capped` | Campaign throughput capped. |
            message:
              type: string
              description: Human-readable message associated with this result.
            param:
              type: string
              nullable: true
              description: |-
                Specifies param for this error.

                <!-- polymorfa-input-table -->
                **Accepted alternatives**
                | Alternative | Accepted input |
                | --- | --- |
                | Alternative 1 | Type: `string` |
                | Alternative 2 | `null` |
            request_id:
              type: string
              description: >-
                Matches the X-Request-Id response header. Include it when you
                contact support.
            request_log_url:
              type: string
              format: uri
              description: >-
                Console page that shows this request. Returned only to
                organization and project credentials whose request was logged.


                <!-- polymorfa-input-table -->

                **Value constraints**

                | Constraint | Accepted input |

                | --- | --- |

                | Format | `uri` |
          required:
            - type
            - code
            - message
            - param
            - request_id
          description: Error details returned when the operation fails.
        data:
          type: string
          nullable: true
          enum:
            - null
          description: |-
            Always null for a failed request.

            <!-- polymorfa-input-table -->
            **Allowed values**
            | Value | Meaning |
            | --- | --- |
            | `null` | Null. |

            **Accepted alternatives**
            | Alternative | Accepted input |
            | --- | --- |
            | Alternative 1 | Type: `string` |
            | Alternative 2 | `null` |
        docs:
          type: string
          format: uri
          description: |-
            Specifies docs for this native public error.

            <!-- polymorfa-input-table -->
            **Value constraints**
            | Constraint | Accepted input |
            | --- | --- |
            | Format | `uri` |
      required:
        - error
        - data
        - docs
    native__CloudReauthorization:
      type: object
      properties:
        quicklinkId:
          type: string
          description: >-
            QuickLink identifier, prefixed `ql_`. Read its progress with `GET
            /messaging/quicklinks/{id}`.
        url:
          type: string
          description: >-
            Hosted link. Share it only with the person who manages the Number's
            Meta assets.
        session:
          type: string
          description: Identifier of the connected Polymorfa session.
      required:
        - quicklinkId
        - url
        - session
  headers:
    native__X-RateLimit-Limit:
      description: >-
        Team request quota per rolling minute, when the per-team request limiter
        applies.
      schema:
        type: integer
        minimum: 1
    native__X-RateLimit-Remaining:
      description: >-
        Requests left in the per-team quota; zero when this limiter rejects the
        request.
      schema:
        type: integer
        minimum: 0
    native__X-RateLimit-Reset:
      description: >-
        Unix timestamp in seconds when the oldest counted request leaves the
        rolling window, when the per-team request limiter applies. Follow
        Retry-After on a rejected request.
      schema:
        type: integer
        minimum: 0
  securitySchemes:
    native__BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Polymorfa organization key (pmfa_ prefix), project token (pmfa_pt_
        prefix) where supported, or short-lived client token (pmfa_ct_ prefix).
        Organization and project keys may be personal or service-account owned
        and enforce selected action scopes. Organization keys cover the team and
        its projects; project tokens stay inside one project. Client tokens stay
        inside their live project and session and enforce their client rules.

````

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