---
title: "Import or update a legacy patient care plan"
method: POST
path: "/ext/v2/patient-care-plans/import/"
tags: ["Care Plans"]
---

# Import or update a legacy patient care plan

`POST /ext/v2/patient-care-plans/import/`

## Request

- Base URL: `https://connect.vetcove.com`
- URL: `https://connect.vetcove.com/ext/v2/patient-care-plans/import/`
- Auth: HTTP bearer

Imports or updates a legacy patient care plan for a clinic patient.

If an existing patient care plan for the same PIM patient ID and core Care Plan ID already exists and has a `status` of `IMPORTED`, it will be updated instead. Patient care plans with any other status, including imported patient care plans that have already been marked `ACTIVE`, cannot be updated through this endpoint.

## Request body

- ExternalLegacyPatientCarePlanImportSchema: Schema for importing a legacy patient care plan via the external API.
  - `amount_paid` integer, required: The amount paid for the care plan
  - `care_benefits` ExternalLegacyPatientCareBenefitImportSchema[], required: The care benefits to import for the care plan
    - `care_benefit_id` integer, required: The ID of the care benefit to upload
    - `points_used` integer, nullable: The number of points used for the care benefit if applicable
    - `redemptions` ExternalLegacyPatientCareBenefitRedemptionImportSchema[], required: The redemptions for the care benefit
      - `amount_discounted` integer, required: The amount discounted for the care benefit
      - `points_redeemed` integer, nullable: The number of points redeemed for the care benefit if applicable
  - `care_plan_id` integer, required: The core Care Plan ID to enroll the patient into
  - `clinic_client_id` integer, nullable: Optional Vetcove client ID. When provided, bypasses PIM ID lookup and resolves the client by primary key (scoped to clinic). Use this to disambiguate when multiple clients share the same pim_client_id.
  - `clinic_id` integer, required: The clinic ID for the patient and client being imported
  - `clinic_patient_id` integer, nullable: Optional Vetcove patient ID. When provided, bypasses PIM ID lookup and resolves the patient by primary key (scoped to clinic). Use this to disambiguate when multiple patients share the same pim_patient_id.
  - `end_date` string, date, required: End date for the care plan (YYYY-MM-DD). This is non-inclusive, meaning a plan ending on 2/1/2026 would not be considered active/usable on 2/1/2026.
  - `enrollment_fee` integer, required: The enrollment fee of the care plan
  - `is_billed_monthly` boolean, required: Whether billing is monthly (True) or upfront (False)
  - `next_plan_id` integer, nullable: Optional next core Care Plan ID for automatic renewal
  - `payment_method_id` integer, nullable: Optional Vetcove payment method ID. When provided, takes precedence over stripe_payment_method_id and resolves the payment method by primary key (scoped to the client). Both payment method fields are optional for all statuses. Omitting both means the payment method must be updated later before billing.
  - `pim_client_id` string, required: The PIM client ID to import the care plan for
  - `pim_patient_id` string, required: The PIM patient ID to import the care plan for
  - `plan_cost` integer, required: The cost of the care plan
  - `should_renew` boolean, required: Whether the plan should automatically renew at the end of term
  - `start_date` string, date, required: Start date for the enrollment (YYYY-MM-DD)
  - `status` 'IMPORTED' | 'CLIENT_CREATED' | 'CLINIC_CREATED' | 'ACTIVE' | 'TERMINATED' | 'PAYMENT_FAILED' | 'SUSPENDED', required
  - `stripe_payment_method_id` string, nullable: Optional legacy Stripe payment method ID to use for billing. payment_method_id takes precedence when both fields are provided. Both payment method fields are optional for all statuses. Omitting both means the payment method must be updated later before billing.

## Response `200`

OK

- ExternalPatientCarePlanSchema
  - `care_plan_id` integer, required: The ID of the Care Plan this patient-specific plan is linked to
  - `care_plan_kind` 'CORE' | 'ADD_ON' | 'SERVICE_PACKAGE', required
  - `care_plan_name` string, required: The name of the care plan this patient care plan is linked to
  - `clinic_client_id` integer, required: The ID of the clinic client this patient care plan is associated with
  - `clinic_id` integer, required: The ID of the clinic this patient care plan is associated with
  - `clinic_patient_id` integer, required: The ID of the clinic patient this care plan is associated with
  - `core_plan_id` integer, nullable, required: The ID of the core patient care plan this one is linked to, if this is an add-on plan
  - `deactivated_at` string, date-time, nullable, required: When this care plan was deactivated, if applicable
  - `deactivated_by` string, nullable, required: The name of the user who deactivated the care plan, if applicable
  - `end_date` string, date, required: End date for the care plan (YYYY-MM-DD). This is non-inclusive, meaning a plan ending on 2/1/2026 would not be considered active/usable on 2/1/2026.
  - `enrollment_fee` integer, required: The enrollment fee of the care plan
  - `id` integer, required: The unique identifier for the patient care plan
  - `is_billed_monthly` boolean, required: Whether the care plan is billed monthly or upfront
  - `monthly_cost` integer, nullable, required: The monthly cost of the care plan, in cents. Only applicable to monthly billed care plans.
  - `next_payment_date` string, date, nullable, required: The date of the next payment for the care plan, if applicable
  - `next_plan_id` integer, nullable, required: The ID of the next care plan, if applicable
  - `payment_method_id` integer, nullable, required: The ID of the payment method associated with this care plan
  - `plan_cost` integer, required: The cost of the care plan
  - `remaining_balance` integer, required: The remaining balance of the care plan, in cents
  - `should_renew` boolean, required: Whether this care plan will automatically be renewed
  - `start_date` string, date, required: The start date of the care plan
  - `status` union, required: The status of the patient care plan
    - 'IMPORTED' | 'CLIENT_CREATED' | 'CLINIC_CREATED' | 'ACTIVE' | 'TERMINATED' | 'PAYMENT_FAILED' | 'SUSPENDED'
    - ''

## Other responses

- `201`: Created
- `409`: Conflict

---

[API](https://skmtc.dev/vetcove/apis/ninjaapi.md) - [All operations](https://skmtc.dev/vetcove/apis/ninjaapi/llms.txt) - [OpenAPI document](https://skmtc.dev/vetcove/apis/ninjaapi/revisions/4ceaed956e15?raw)
