# Create Invoice

Creates a new invoice for a patient.
The `issuer_id` parameter is required and must be the Admin ID of the person issuing the invoice.
Either `patient_id` or `appointment_id` must be provided.
If `appointment_id` is provided, the patient will be derived from the appointment.
Use the List Products endpoint to retrieve available invoice items.

Endpoint: POST /v1/invoicing/invoices
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

## Request fields (application/json):

  - `issuer_id` (string, required)

  - `patient_id` (string)

  - `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 201:

  - `201` (unknown)
    Invoice created successfully

## Response 201 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 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

