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

# Forward an identity profile to another identity profile

> Merges the specified identity profile into the target identity profile. All activity associated with the source identity profile, is forwarded to the target identity profile. After the operation the source profile is no longer independently addressable; lookups by any of its identifiers resolve to the target. Used to consolidate duplicate profiles.



## OpenAPI

````yaml /api-reference/integration-server-to-extole.json post /v5/persons/{person_id}/forward
openapi: 3.0.1
info:
  description: >-
    Server-to-Extole integration endpoints: event submission, person lookup,
    zone rendering, token management, and reward retrieval for backend services
    authenticating with client credentials.
  title: Integration API - Server to Extole
  version: '1.0'
servers:
  - description: Production
    url: https://api.extole.io
security:
  - HEADER: []
  - QUERY: []
  - COOKIE: []
tags:
  - name: Authentication
  - name: Batch Jobs
  - name: Events
  - name: Files
  - name: Persons
  - name: Reward Suppliers
  - name: Rewards
  - name: SFTP Servers
  - name: Zone Rendering
paths:
  /v5/persons/{person_id}/forward:
    post:
      tags:
        - Persons
      summary: Forward an identity profile to another identity profile
      description: >-
        Merges the specified identity profile into the target identity profile.
        All activity associated with the source identity profile, is forwarded
        to the target identity profile. After the operation the source profile
        is no longer independently addressable; lookups by any of its
        identifiers resolve to the target. Used to consolidate duplicate
        profiles.
      operationId: forward
      parameters:
        - description: Source identity profile Extole unique identifier.
          in: path
          name: person_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            example:
              forward_to_profile_id: forward_to_profile_id
            schema:
              $ref: '#/components/schemas/PersonForwardRequest'
        description: Person forward request.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResponse'
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                forward_to_profile_is_device:
                  $ref: '#/components/examples/forward_to_profile_is_device'
                forwarding_profile_is_device:
                  $ref: '#/components/examples/forwarding_profile_is_device'
                identity_key_value_already_taken:
                  $ref: '#/components/examples/identity_key_value_already_taken'
                invalid_block_reason:
                  $ref: '#/components/examples/invalid_block_reason'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_key_value:
                  $ref: '#/components/examples/invalid_key_value'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
                person_not_found:
                  $ref: '#/components/examples/person_not_found'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
components:
  schemas:
    PersonForwardRequest:
      properties:
        forward_to_profile_id:
          description: Target identity profile Extole unique identifier.
          type: string
      required:
        - forward_to_profile_id
      type: object
    PersonResponse:
      description: Person profile returned by the Extole platform.
      properties:
        id:
          description: Extole-assigned unique identifier for this person.
          readOnly: true
          type: string
        identity_id:
          description: >-
            Identifier within the identity store that represents this person's
            merged profile.
          type: string
        identity_key:
          $ref: '#/components/schemas/IdentityKey'
        identity_key_value:
          description: Value of the identity key for this person.
          type: string
        locale:
          $ref: '#/components/schemas/PersonLocaleResponse'
        version:
          description: Optimistic-concurrency version token for the person record.
          type: string
      required:
        - id
        - identity_id
        - identity_key
        - identity_key_value
        - locale
        - version
      type: object
    RestExceptionResponse:
      description: Represents the API error response
      properties:
        code:
          description: Specific error code for this error type, documented per endpoint
          type: string
        http_status_code:
          description: >-
            HTTP status code that was returned with this error, useful if client
            get response code
          format: int32
          type: integer
        message:
          description: User readable English description of the error
          type: string
        parameters:
          additionalProperties:
            description: >-
              Attributes related to the error, varies be error code, documented
              per endpoint
            type: object
          description: >-
            Attributes related to the error, varies be error code, documented
            per endpoint
          type: object
        unique_id:
          description: >-
            Unique id associated with this error, useful for discussions with
            Extole
          type: string
      required:
        - code
        - http_status_code
        - message
        - parameters
        - unique_id
      type: object
    IdentityKey:
      description: Name of the identity key used to look up or create this person.
      properties:
        name:
          type: string
      type: object
    PersonLocaleResponse:
      properties:
        last_browser:
          description: >-
            BCP 47 locale tag last detected from the person's browser. Absent if
            not yet observed.
          type: string
        user_specified:
          description: >-
            BCP 47 locale tag explicitly set by the person. Absent if not
            specified.
          type: string
      type: object
  examples:
    binding_error:
      summary: binding_error
      value:
        code: binding_error
        http_status_code: 400
        message: Argument is not of the expected type
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    forward_to_profile_is_device:
      summary: forward_to_profile_is_device
      value:
        code: forward_to_profile_is_device
        http_status_code: 400
        message: Forward to profile is device
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    forwarding_profile_is_device:
      summary: forwarding_profile_is_device
      value:
        code: forwarding_profile_is_device
        http_status_code: 400
        message: Forwarding profile is device
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    identity_key_value_already_taken:
      summary: identity_key_value_already_taken
      value:
        code: identity_key_value_already_taken
        http_status_code: 400
        message: Identity key value already taken
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_block_reason:
      summary: invalid_block_reason
      value:
        code: invalid_block_reason
        http_status_code: 400
        message: Block reason can't be empty
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_json:
      summary: invalid_json
      value:
        code: invalid_json
        http_status_code: 400
        message: JSON is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_key_value:
      summary: invalid_key_value
      value:
        code: invalid_key_value
        http_status_code: 400
        message: Invalid key value
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_parameter:
      summary: invalid_parameter
      value:
        code: invalid_parameter
        http_status_code: 400
        message: Parameter is invalid.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    missing_request_body:
      summary: missing_request_body
      value:
        code: missing_request_body
        http_status_code: 400
        message: Missing request body
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    method_unauthorized:
      summary: method_unauthorized
      value:
        code: method_unauthorized
        http_status_code: 401
        message: Unauthorized access to this endpoint
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    payment_required:
      summary: payment_required
      value:
        code: payment_required
        http_status_code: 402
        message: The access_token provided is associated with an unpaid account.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    access_denied:
      summary: access_denied
      value:
        code: access_denied
        http_status_code: 403
        message: >-
          The access_token provided is not permitted to access the specified
          resource.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    missing_access_token:
      summary: missing_access_token
      value:
        code: missing_access_token
        http_status_code: 403
        message: No access_token was provided with this request.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    person_not_found:
      summary: person_not_found
      value:
        code: person_not_found
        http_status_code: 403
        message: Person not found
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    unsupported_media_type:
      summary: unsupported_media_type
      value:
        code: unsupported_media_type
        http_status_code: 415
        message: Request had an unsupported or no media type
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    too_many_requests:
      summary: too_many_requests
      value:
        code: too_many_requests
        http_status_code: 429
        message: >-
          The server is unable to process your request at the moment, please
          retry later.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
  securitySchemes:
    HEADER:
      in: header
      name: Authorization
      type: apiKey
      x-bearer-format: bearer
    QUERY:
      in: query
      name: access_token
      type: apiKey
    COOKIE:
      in: cookie
      name: extole_token
      type: apiKey

````