> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.vitablehealth.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.vitablehealth.com/_mcp/server.

# Get a carrier application

GET https://api.vitablehealth.com/v1/carrier-applications/{carrier_application_id}

Returns application details, including finalized carrier-question responses and applicant information. The detail is served from Vitable's stored projection, never a live carrier call. Unknown applications and applications outside the caller's access return 404.

Reference: https://developer.vitablehealth.com/api/carrier-applications/get-carrier-application

## Authentication

- `Authorization` header (bearer token, required) — API Key or Access Token authentication using Bearer token in Authorization header. API keys use the vit_apk_ prefix, access tokens use the vit_at_ prefix.

## Servers

- `https://api.vitablehealth.com` (Production, default)
- `https://api.uat.vitablehealth.com` (UAT)

## Request

### Path parameters

- `carrier_application_id` (string, required)

### Headers

- `X-Vitable-Organization` (string, optional) — Organization to act as for this request (e.g. `org_SGVsbG8gV29ybGQ`). Optional when your credentials reach a single organization. Required when they reach several — omitting it then returns 400 `organization_required`. A malformed value returns 400 `invalid_organization_header`, and naming an organization you do not have access to returns 403 `organization_access_denied`.

## Response

### 200

- `data` (CarrierApplicationDetail, required)

## Errors

### 400 Bad Request Error

Invalid request.

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 401 Unauthorized Error

Unauthorized - Invalid or missing API key

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 403 Forbidden Error

Forbidden - Insufficient permissions for this resource

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 404 Not Found Error

Resource not found.

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 409 Conflict Error

Conflict - Resource already exists or conflicts with current state

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 429 Too Many Requests Error

Too Many Requests - Rate limit exceeded

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 500 Internal Server Error

Internal Server Error - An unexpected error occurred

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 502 Bad Gateway Error

Bad Gateway - External service error

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

## Types

### CarrierApplicationDetail

- `id` (string, required) — The carrier application `capp_<...>`.
- `enrollment_id` (string, required) — The enrollment `enrl_<...>` this application belongs to.
- `enrollment_channel` (enum, required) — Which party or system is authoritative for this application's facts. * `healthsherpa_api` - Healthsherpa Api * `healthsherpa_deeplink` - Healthsherpa Deeplink * `direct_to_carrier` - Direct To Carrier
  - Allowed values: `healthsherpa_api`, `healthsherpa_deeplink`, `direct_to_carrier`
- `provider_reference` (string, required, nullable) — The carrier-side or provider-side identifier for this application. Null when there is none yet, and also when the caller is not authorized to read it.
- `assignment` (CarrierApplicationAssignmentState, required) — Who the application is routed to.
- `agent_of_record` (CarrierApplicationAgentOfRecord, required) — The retained carrier attribution.
- `statuses` (CarrierApplicationStatuses, required) — The four stable status axes.
- `follow_up` (CarrierApplicationFollowUp, required) — Whether and why someone must act.
- `authorized_actions` (list of CarrierApplicationAuthorizedAction, required) — The actions this application currently permits, for this caller. `assign` is present only while the assignment endpoint would accept a change: not once processing has begun, not once the application is submitted, cancelled or terminal, not while an assignment change is already pending, and not for a caller that endpoint would refuse. The unpublished rels (`deeplink`, `manual-progress`) are withheld until their routes are published, so no advertised `href` can 404.
- `created_at` (datetime, required) — When the application was created.
- `updated_at` (datetime, required) — When the application last changed.
- `context` (CarrierApplicationQueueContext, required) — Who and what the application is about.
- `provider_confirmed_revision` (integer, required) — Revision of the last provider-confirmed action.
- `applicants` (list of CarrierApplicationApplicant, required) — Finalized household applicants.
- `carrier_question_responses` (list of CarrierApplicationQuestionResponse, required) — Finalized signed carrier-question answers. Raw provider payloads are never returned.

### CarrierApplicationAssignmentState

- `agency_id` (string, required, nullable) — The enrollment agency `enag_<...>` responsible for the application. Null when unassigned.
- `agent_id` (string, required, nullable) — The enrollment agent `enat_<...>` who owns the work. Null when unassigned.
- `status` (enum, required) — `confirmed` when the route above is authoritative, `pending` while a proposed change awaits confirmation. The confirmed route stays authoritative either way. * `confirmed` - Confirmed * `pending` - Pending
  - Allowed values: `confirmed`, `pending`
- `pending_change` (CarrierApplicationPendingAssignmentChange, required, nullable) — The proposed route change, or null when there is none.

### CarrierApplicationAgentOfRecord

- `agent_id` (string, required, nullable) — The enrollment agent `enat_<...>` attributed to the carrier as agent of record.

### CarrierApplicationStatuses

- `application` (enum, required) — How far the application itself has got. * `not_started` - Not Started * `in_progress` - In Progress * `submitted` - Submitted * `submission_failed` - Submission Failed * `cancelled` - Cancelled
  - Allowed values: `not_started`, `in_progress`, `submitted`, `submission_failed`, `cancelled`
- `documents` (enum, required) — Where the supporting documents stand. * `unknown` - Unknown * `not_required` - Not Required * `required` - Required * `submitted` - Submitted * `under_review` - Under Review * `rejected` - Rejected * `satisfied` - Satisfied
  - Allowed values: `unknown`, `not_required`, `required`, `submitted`, `under_review`, `rejected`, `satisfied`
- `coverage` (enum, required) — Where the resulting policy stands. * `not_submitted` - Not Submitted * `pending_effectuation` - Pending Effectuation * `active` - Active * `cancelled` - Cancelled * `terminated` - Terminated
  - Allowed values: `not_submitted`, `pending_effectuation`, `active`, `cancelled`, `terminated`
- `binder` (enum, required) — Where the binder payment stands. * `unknown` - Unknown * `not_applicable` - Not Applicable * `payment_required` - Payment Required * `pending_confirmation` - Pending Confirmation * `confirmed` - Confirmed
  - Allowed values: `unknown`, `not_applicable`, `payment_required`, `pending_confirmation`, `confirmed`

### CarrierApplicationFollowUp

- `required` (boolean, required) — Whether someone must act on this application.
- `reason` (enum, required, nullable) — The single highest-priority reason to act, or null when none applies. * `missing_agent` - Missing Agent * `missing_agent_of_record` - Missing Agent Of Record * `inactive_agent_of_record` - Inactive Agent Of Record * `agent_of_record_agency_mismatch` - Agent Of Record Agency Mismatch * `invalid_agent_of_record_identity` - Invalid Agent Of Record Identity * `missing_npn` - Missing Npn * `missing_healthsherpa_agent_slug` - Missing Healthsherpa Agent Slug * `invalid_npn` - Invalid Npn * `npn_validation_indeterminate` - Npn Validation Indeterminate * `assignment_coordination_pending` - Assignment Coordination Pending * `assignment_coordination_failed` - Assignment Coordination Failed * `routing_evidence_conflict` - Routing Evidence Conflict * `application_validation` - Application Validation * `unsupported_signed_evidence` - Unsupported Signed Evidence * `submission_failed` - Submission Failed * `supporting_document_rejected` - Supporting Document Rejected * `supporting_document_required` - Supporting Document Required * `payment_setup_required` - Payment Setup Required * `stale_pending` - Stale Pending * `manual_enrollment_not_started` - Manual Enrollment Not Started * `manual_documents_required` - Manual Documents Required * `manual_binder_required` - Manual Binder Required * `manual_submission_failed` - Manual Submission Failed * `manual_status_stale` - Manual Status Stale * `multiple_provider_matches` - Multiple Provider Matches * `create_outcome_unknown` - Create Outcome Unknown * `submission_reconciliation_stale` - Submission Reconciliation Stale * `provider_unavailable` - Provider Unavailable * `provider_action_rejected` - Provider Action Rejected * `provider_action_actor_revoked` - Provider Action Actor Revoked * `provider_state_drift` - Provider State Drift * `provider_state_uncertain` - Provider State Uncertain * `applicant_identity_ambiguous` - Applicant Identity Ambiguous
  - Allowed values: `missing_agent`, `missing_agent_of_record`, `inactive_agent_of_record`, `agent_of_record_agency_mismatch`, `invalid_agent_of_record_identity`, `missing_npn`, `missing_healthsherpa_agent_slug`, `invalid_npn`, `npn_validation_indeterminate`, `assignment_coordination_pending`, `assignment_coordination_failed`, `routing_evidence_conflict`, `application_validation`, `unsupported_signed_evidence`, `submission_failed`, `supporting_document_rejected`, `supporting_document_required`, `payment_setup_required`, `stale_pending`, `manual_enrollment_not_started`, `manual_documents_required`, `manual_binder_required`, `manual_submission_failed`, `manual_status_stale`, `multiple_provider_matches`, `create_outcome_unknown`, `submission_reconciliation_stale`, `provider_unavailable`, `provider_action_rejected`, `provider_action_actor_revoked`, `provider_state_drift`, `provider_state_uncertain`, `applicant_identity_ambiguous`
- `responsible_user_id` (string, required, nullable) — The user `usr_<...>` expected to act. Null when the application is unassigned. The responsible *organization* is not part of this representation: no organization-to-agency relationship exists yet (BPT-1627), and a field that can only ever be null is not a contract.

### CarrierApplicationAuthorizedAction

- `rel` (enum, required) — What the action does, as a stable relation name. * `assign` - Assign
  - Allowed values: `assign`
- `method` (string, required) — The HTTP method to call `href` with.
- `href` (string, required) — The path to call, relative to the API root.

### CarrierApplicationQueueContext

- `member` (CarrierApplicationQueueMember, required) — Who the application is for.
- `employer` (CarrierApplicationQueueEmployer, required) — Who they work for.
- `plan_year` (CarrierApplicationQueuePlanYear, required) — Which plan year they enrolled in.
- `plan` (CarrierApplicationQueuePlan, required) — Which individual-market plan they chose.
- `assignee` (CarrierApplicationQueueAssignee, required, nullable) — Who owns the work, or null when unassigned or when the assigned agent no longer exists.
- `agency` (CarrierApplicationQueueAgency, required, nullable) — Which agency is responsible, or null when unassigned.

### CarrierApplicationApplicant

- `applicant_id` (string, required) — The stable Vitable enrollment applicant identifier.
- `name` (string, required) — The applicant's display name from finalized signing evidence.
- `date_of_birth` (date, required) — The applicant's birth date for household disambiguation.
- `relationship` (string, required, nullable) — Relationship to the primary applicant.

### CarrierApplicationQuestionResponse

- `question_id` (string, required) — The stable carrier-question identifier.
- `applicant_id` (string, required) — The enrollment-scoped applicant identifier.
- `answer` (string, required) — The finalized signed answer.

### CarrierApplicationPendingAssignmentChange

- `agent_id` (string, required, nullable) — The enrollment agent `enat_<...>` the proposed route would assign the work to.
- `enrollment_channel` (enum, required, nullable) — The channel the proposed route would process the application through. * `healthsherpa_api` - Healthsherpa Api * `healthsherpa_deeplink` - Healthsherpa Deeplink * `direct_to_carrier` - Direct To Carrier
  - Allowed values: `healthsherpa_api`, `healthsherpa_deeplink`, `direct_to_carrier`

### CarrierApplicationQueueMember

- `id` (string, required) — The enrolling member `mbr_<...>`.
- `first_name` (string, required) — The member's first name.
- `last_name` (string, required) — The member's last name.

### CarrierApplicationQueueEmployer

- `id` (string, required) — The member's employer `empr_<...>`.
- `name` (string, required) — The employer's display name.

### CarrierApplicationQueuePlanYear

- `id` (string, required) — The benefit plan year `plyr_<...>` the enrollment belongs to.
- `coverage_start` (datetime, required) — When the plan year's coverage starts.
- `coverage_end` (datetime, required, nullable) — When the plan year's coverage ends, if set.

### CarrierApplicationQueuePlan

- `name` (string, required, nullable) — The selected plan's name.
- `carrier_name` (string, required, nullable) — The selected plan's carrier.
- `desired_effective_date` (date, required, nullable) — The coverage start date the member asked the carrier for.

### CarrierApplicationQueueAssignee

- `agent_id` (string, required) — The assigned enrollment agent `enat_<...>`.
- `first_name` (string, required, nullable) — The assigned agent's first name.
- `last_name` (string, required, nullable) — The assigned agent's last name.

### CarrierApplicationQueueAgency

- `id` (string, required) — The responsible enrollment agency `enag_<...>`.
- `name` (string, required, nullable) — The responsible agency's name.

## Examples

**Response**

```json
{
  "data": {
    "id": "string",
    "enrollment_id": "string",
    "enrollment_channel": "healthsherpa_api",
    "provider_reference": "string",
    "assignment": {
      "agency_id": "string",
      "agent_id": "string",
      "status": "confirmed",
      "pending_change": {
        "agent_id": "string",
        "enrollment_channel": "healthsherpa_api"
      }
    },
    "agent_of_record": {
      "agent_id": "string"
    },
    "statuses": {
      "application": "not_started",
      "documents": "unknown",
      "coverage": "not_submitted",
      "binder": "unknown"
    },
    "follow_up": {
      "required": true,
      "reason": "missing_agent",
      "responsible_user_id": "string"
    },
    "authorized_actions": [
      {
        "rel": "assign",
        "method": "string",
        "href": "string"
      }
    ],
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z",
    "context": {
      "member": {
        "id": "string",
        "first_name": "string",
        "last_name": "string"
      },
      "employer": {
        "id": "string",
        "name": "string"
      },
      "plan_year": {
        "id": "string",
        "coverage_start": "2024-01-15T09:30:00Z",
        "coverage_end": "2024-01-15T09:30:00Z"
      },
      "plan": {
        "name": "string",
        "carrier_name": "string",
        "desired_effective_date": "2023-01-15"
      },
      "assignee": {
        "agent_id": "string",
        "first_name": "string",
        "last_name": "string"
      },
      "agency": {
        "id": "string",
        "name": "string"
      }
    },
    "provider_confirmed_revision": 1,
    "applicants": [
      {
        "applicant_id": "string",
        "name": "string",
        "date_of_birth": "2023-01-15",
        "relationship": "string"
      }
    ],
    "carrier_question_responses": [
      {
        "question_id": "string",
        "applicant_id": "string",
        "answer": "string"
      }
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id"

headers = {"Authorization": "Bearer <apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id")
  .header("Authorization", "Bearer <apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id', [
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.vitablehealth.com/v1/carrier-applications/carrier_application_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```