# Update Invoice

Updates an existing invoice.
The `issuer_id` parameter is required and must be the Admin ID of the person updating the invoice.
For draft invoices, all fields can be updated.
For finalized invoices, only metadata fields (memo, footer, coupons) can be updated.

Endpoint: PATCH /v1/invoicing/invoices/{id}
Version: 1.0.0
Security: apiKeyAuth, practiceGroupId

## Security:

  - `apiKeyAuth` (unknown)
    apiKey in header x-api-key

  - `practiceGroupId` (unknown)
    apiKey in header x-practice-group-id

## Path parameters:

  - `id` (string, required)
    The invoice ID

## Request fields (application/json):

  - `issuer_id` (string, required)

  - `appointment_id` (string)

  - `practitioner_id` (string)

  - `service_date` (string)

  - `customer_stripe_id` (string)

  - `set_default_customer` (boolean)

  - `due_date` (string)

  - `collection_method` (string)
    Enum: "request_payment", "charge_automatically"

  - `payment_source` (string)

  - `insurer` (string)

  - `authentication_code` (string)

  - `membership_number` (string)

  - `diagnosis` (string)

  - `memo` (string)

  - `footer` (string)

  - `confidential` (boolean)

  - `mode` (string)
    Enum: "draft", "finalize"

  - `coupons` (array)

  - `coupons.id` (string, required)

  - `coupons.name` (string)

  - `invoice_items_attributes` (array)

  - `invoice_items_attributes.price` (string)

  - `invoice_items_attributes.product` (string)

  - `invoice_items_attributes.description` (string)

  - `invoice_items_attributes.quantity` (integer, required)

  - `invoice_items_attributes.unit_amount` (integer)

  - `invoice_items_attributes.unit_amount_in_pounds` (number)

  - `invoice_items_attributes.create` (boolean)

  - `invoice_items_attributes.stripe_id` (string)

## Response 200:

  - `200` (unknown)
    Invoice updated successfully

## Response 200 fields (application/json):

  - `id` (string)

  - `stripe_id` (string, required)

  - `status` (string)

  - `subtotal` (number)

  - `amount_due` (number)

  - `customer_id` (string)

  - `patient_record_id` (string)

  - `appointment_id` (string)

  - `created_at` (string)

  - `updated_at` (string)

## Response 400:

  - `400` (unknown)
    Bad request

## Response 400 fields (application/json):

  - `error` (boolean, required)
    Example: true

  - `statusCode` (number, required)
    Example: 400

  - `message` (array, required)

  - `message.code` (string, required)
    Example: invalid_type

  - `message.expected` (string, required)
    Example: string

  - `message.path` (array, required)
    Example: ["patient_id"]

  - `message.message` (string, required)
    Example: Required

## Response 401:

  - `401` (unknown)
    Unauthorised

## Response 404:

  - `404` (unknown)
    Invoice not found

## Response 422:

  - `422` (unknown)
    Validation error

## Response 422 fields (application/json):

  - `error` (boolean, required)
    Example: true

  - `statusCode` (number, required)
    Example: 400

  - `message` (array, required)

  - `message.code` (string, required)
    Example: invalid_type

  - `message.expected` (string, required)
    Example: string

  - `message.path` (array, required)
    Example: ["patient_id"]

  - `message.message` (string, required)
    Example: Required

## Response 429:

  - `429` (unknown)
    Too Many Requests

## Response 500:

  - `500` (unknown)
    Unknown error

