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

# Retrieve Campaign Contact

> Devuelve el detalle de un contacto dentro de una Campaña.

<Info>
  **Rate Limit:** 12 requests per second
</Info>

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.altur.io/api/v1.0/campaigns/1234/contacts/42" \
    -H "Authorization: api-key YOUR_API_SECRET_KEY"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.altur.io/api/v1.0/campaigns/1234/contacts/42",
      headers={"Authorization": "api-key YOUR_API_SECRET_KEY"},
  )
  response.raise_for_status()
  contact = response.json()["contact"]
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch(
    "https://api.altur.io/api/v1.0/campaigns/1234/contacts/42",
    { headers: { Authorization: "api-key YOUR_API_SECRET_KEY" } },
  );
  const { contact } = await res.json();
  ```
</CodeGroup>


## OpenAPI

````yaml GET /campaigns/{id}/contacts/{contact_id}
openapi: 3.0.1
info:
  title: Altur API
  description: >-
    An API aimed to allow third-party developers to interact with the Altur
    platform through a RESTful interface.
  license:
    name: MIT
  version: '1.0'
servers:
  - url: https://api.altur.io/api/v1.0
security:
  - apiKeyAuth: []
paths:
  /campaigns/{id}/contacts/{contact_id}:
    get:
      description: Returns the detail of a single contact within a Campaign.
      parameters:
        - name: id
          in: path
          description: The identifier of the Campaign
          schema:
            type: integer
          required: true
        - name: contact_id
          in: path
          description: The identifier of the contact within the Campaign
          schema:
            type: integer
          required: true
      responses:
        '200':
          description: Contact detail response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignContactDetailResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign or contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignApiError'
components:
  schemas:
    CampaignContactDetailResponse:
      type: object
      properties:
        success:
          type: boolean
        contact:
          $ref: '#/components/schemas/CampaignContact'
    Error:
      required:
        - error
        - message
      type: object
      properties:
        error:
          type: integer
          format: int32
        message:
          type: string
    CampaignApiError:
      type: object
      description: Standard error envelope returned by the v1.0 campaigns API.
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          description: Stable, UPPER_SNAKE_CASE error key.
          enum:
            - FORBIDDEN
            - NOT_FOUND
            - RATE_LIMITED
            - SERVER_ERROR
            - INVALID_REQUEST
            - INVALID_STATUS
            - IMMUTABLE_FIELD
            - UNKNOWN_ACTION
            - AGENT_NOT_FOUND
            - INTEGRATION_NOT_FOUND
            - INVALID_INTEGRATION_TYPE
            - INVALID_FILTER_TAG
            - INVALID_PHONE_NUMBER
            - MISSING_CONTACT
            - CONTACT_NOT_FOUND
            - CONTACT_NOT_DELETABLE
            - CAMPAIGN_FINISHED
            - CYCLES_NOT_ENABLED
            - SCHEDULED_MODE_ONLY
            - INVALID_STATUS_TRANSITION
            - BILLING_LIMIT_REACHED
        message:
          type: string
        field:
          type: string
          description: >-
            Set when `error` is `IMMUTABLE_FIELD`; identifies the offending
            field path.
    CampaignContact:
      type: object
      properties:
        f_id:
          description: Unique External identifier for the Campaign Contact
          type: string
        id:
          description: Unique identifier for the Campaign Contact
          type: integer
        name:
          description: Name of the Campaign Contact
          type: string
        contact:
          description: Phone number of the contact
          type: string
        status:
          description: Status of the Campaign Contact
          type: string
        context:
          description: Context of the Campaign Contact
          type: string
        retries:
          description: Voicemail retries of the Campaign Contact
          type: integer
        has_follow_up:
          description: Boolean describing if the Campaign Contact has a follow up scheduled
          type: boolean
        call_count:
          description: Number of calls made to the Campaign Contact
          type: integer
        billed_duration:
          description: The total billed duration of the Campaign Contact Calls in seconds
          type: integer
          example: 270
        last_call_at:
          description: The datetime of the last call made to the Campaign Contact
          type: string
          example: '2025-10-03 19:11:39'
        extracted_data:
          description: Extracted data of the Campaign Contact
          type: object
          example:
            monto_prometido: '1000'
            fecha_limite: 01-01-2025
        tags:
          description: Tags assigned to the Campaign Contact
          type: array
          items:
            type: string
          example:
            - tag1
            - tag2
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Add `api-key YOUR_API_SECRET_KEY` as the value of the `Authorization`
        header.

````