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

# Get one contact's journey

> Every touch for a single campaign contact, oldest first: each outbound attempt with its disposition and cost, plus any inbound call the contact made back. Use it to answer "what actually happened to this lead" without stitching sessions together yourself.



## OpenAPI

````yaml /openapi.json get /campaigns/{id}/contacts/{contactId}/journey
openapi: 3.1.0
info:
  title: Vocobase API
  version: '2.0'
  description: >-
    API for managing voice AI agents, documents, and calls on the Vocobase
    platform.
servers:
  - url: https://api.vocobase.com/api/v2
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Config
    description: >-
      Read and update account configuration, webhook settings, and telephony
      credentials.
  - name: Agents
    description: Create, read, update, and delete voice AI agents.
  - name: Voices
    description: >-
      List voice tiers, available voices, and stream preview audio for agent
      configuration.
  - name: Documents
    description: Upload, manage, and delete knowledge base documents.
  - name: Agent Documents
    description: Link and unlink documents to agents for knowledge base integration.
  - name: Calls
    description: Initiate outbound calls and view call history.
  - name: Phone Numbers
    description: >-
      Import DIDs, assign agents for inbound routing, and re-sync carrier
      Application bindings.
  - name: Inbound Routing Policies
    description: >-
      Define pre-answer routing decisions for inbound calls before AI sessions
      are created.
  - name: Telephony Connections
    description: Create, list, rename, and disconnect named V2 telephony connections.
  - name: VoiceLink Management
    description: Manage VoiceLink reseller clients, DID mapping, and readiness sync.
  - name: Projects
    description: Organize agents into projects. Every agent belongs to exactly one project.
  - name: Dictionaries
    description: Speech-recognition dictionary CRUD and agent attachment.
  - name: Sessions
    description: Browser-initiated WebRTC voice sessions for in-app voice agents.
  - name: Campaigns
    description: Batch outbound calling.
  - name: Billing
    description: Balance, transactions, and usage summaries.
  - name: Custom Functions
    description: HTTP endpoints the agent can call mid-conversation.
  - name: Extraction Sets
    description: Reusable sets of post-call extraction fields.
  - name: Lifecycle Hooks
    description: Automatic pre-call and post-call integration steps.
  - name: Messaging
    description: Bring-your-own WhatsApp sending.
  - name: Integration Logs
    description: Audit trail for integration calls.
  - name: Connectors
    description: Catalog of tools an agent can be connected to.
  - name: Customers
    description: B2B2B sub-tenants and their tool connections.
  - name: Agent Tools
    description: Binding connectors and connections to an agent.
paths:
  /campaigns/{id}/contacts/{contactId}/journey:
    get:
      tags:
        - Campaigns
      summary: Get one contact's journey
      description: >-
        Every touch for a single campaign contact, oldest first: each outbound
        attempt with its disposition and cost, plus any inbound call the contact
        made back. Use it to answer "what actually happened to this lead"
        without stitching sessions together yourself.
      operationId: getCampaignContactJourney
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Campaign ID.
        - name: contactId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Campaign contact ID, not the library contact ID.
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    type: object
                    properties:
                      contact:
                        type: object
                        properties:
                          contact_id:
                            type: string
                            format: uuid
                          name:
                            type: string
                            nullable: true
                          phone:
                            type: string
                      events:
                        type: array
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - outbound_attempt
                                - inbound_call
                            occurred_at:
                              type: string
                              format: date-time
                            session_id:
                              type: string
                              format: uuid
                              nullable: true
                            data:
                              type: object
                              additionalProperties: true
                            session:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                Session summary, present when the attempt
                                reached a session.
              example:
                success: true
                data:
                  contact:
                    contact_id: ct_9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
                    name: Asha Menon
                    phone: '+919876543210'
                  events:
                    - type: outbound_attempt
                      occurred_at: '2026-08-20T09:04:11.000Z'
                      session_id: s1234567-abcd-1234-abcd-123456789012
                      data:
                        attempt_no: 1
                        disposition: no_answer
                        answered_by: not_answered
                        duration_seconds: 0
                        credits_used: 0
                    - type: outbound_attempt
                      occurred_at: '2026-08-20T09:34:52.000Z'
                      session_id: s2345678-abcd-1234-abcd-123456789012
                      data:
                        attempt_no: 2
                        disposition: completed
                        answered_by: human
                        duration_seconds: 96
                        credits_used: 5.76
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: UNAUTHORIZED
              message: Invalid or missing API key
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: NOT_FOUND
              message: Resource not found
    RateLimitExceeded:
      description: Per-account rate limit exceeded. Retry after a short backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: RATE_LIMITED
              message: Rate limit exceeded. Retry after 60 seconds.
    InternalError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: INTERNAL_ERROR
              message: An unexpected error occurred
  schemas:
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
          required:
            - code
            - message
      required:
        - success
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key in format: `rg_live_xxxx`. Pass as a Bearer token in the
        Authorization header.

````