---
title: "Create Bill Credit Notes in batch"
method: POST
path: "/accounting/bill-credit-notes/batch"
tags: ["Bill Credit Notes"]
---

# Create Bill Credit Notes in batch

`POST /accounting/bill-credit-notes/batch`

## Request

- Base URL: `https://unify.apideck.com`
- URL: `https://unify.apideck.com/accounting/bill-credit-notes/batch`
- Auth: API key in header `Authorization`

Create multiple bill credit notes in a single request. Each item is processed independently, so some may be created while others fail; the response returns `200` with one result per item, in the order the items were sent. The maximum number of items accepted per request depends on the connector.

## Query parameters

- `raw` boolean

## Headers

- `x-apideck-consumer-id` string, required
- `x-apideck-app-id` string, required
- `x-apideck-service-id` string
- `x-apideck-company-id` string

## Request body

- BatchBillCreditNotesRequest: A batch of bill credit notes to write in a single request. Each item is processed independently: some may succeed while others fail, and the response carries one result per item in the order they were sent.
  - `items` object[], required: The records to write. The per-connector limit is the real cap and is usually lower than the ceiling here: read `batch_support.resources[<resource>].max_items` on the Connector API for the connector you are calling, or the resource gotchas. This ceiling exists so an oversized array is rejected by request validation before any per-item work runs, rather than after it.
    - `_ref` string: A caller-supplied reference for this item, echoed back on the matching result so each outcome can be tied to the record it came from. Must be unique within the request. Never sent to the connector.
    - `data` BillCreditNoteCreateInput, required: The writable shape of BillCreditNote for a batch create. Identical to [BillCreditNote](the model returned on reads) with the read-only properties removed — the same properties the single-record create endpoint rejects, so a batched record and a single-record create accept exactly the same body.
      - `number` string, nullable: Bill credit note number.
      - `supplier` LinkedSupplier, nullable: The supplier this entity is linked to.
        - `id` string: The ID of the supplier this entity is linked to.
        - `display_id` string, nullable: The display ID of the supplier.
        - `display_name` string, nullable: The display name of the supplier.
        - `company_name` string, nullable: The company name of the supplier.
        - `address` Address
          - `id` string, nullable: Unique identifier for the address.
          - `type` 'primary' | 'secondary' | 'home' | 'office' | 'shipping' | 'billing' | 'work' | 'other', nullable: The type of address.
          - `string` string, nullable: The address string. Some APIs don't provide structured address data.
          - `name` string, nullable: The name of the address.
          - `line1` string, nullable: Line 1 of the address e.g. number, street, suite, apt #, etc.
          - `line2` string, nullable: Line 2 of the address
          - `line3` string, nullable: Line 3 of the address
          - `line4` string, nullable: Line 4 of the address
          - `line5` string, nullable: Line 5 of the address
          - `street_number` string, nullable: Street number
          - `city` string, nullable: Name of city.
          - `state` string, nullable: Name of state
          - `postal_code` string, nullable: Zip code or equivalent.
          - `country` string, nullable: country code according to ISO 3166-1 alpha-2.
          - `latitude` string, nullable: Latitude of the address
          - `longitude` string, nullable: Longitude of the address
          - `county` string, nullable: Address field that holds a sublocality, such as a county
          - `contact_name` string, nullable: Name of the contact person at the address
          - `salutation` string, nullable: Salutation of the contact person at the address
          - `phone_number` string, nullable: Phone number of the address
          - `fax` string, nullable: Fax number of the address
          - `email` string, nullable: Email address of the address
          - `website` string, nullable: Website of the address
          - `notes` string, nullable: Additional notes
          - `row_version` string, nullable: A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
      - `subsidiary` LinkedSubsidiary, nullable
        - `id` string: A unique identifier for an object.
        - `display_id` string, nullable: Id to be displayed.
        - `name` string, nullable: The name of the resource.
      - `location` LinkedLocation, nullable
        - `id` string: The unique identifier for the location.
        - `display_id` string, nullable: Id to be displayed.
        - `name` string, nullable: The name of the location.
        - `downstream_id` string, nullable: The third-party API ID of original entity
      - `department` LinkedDepartment, nullable
        - `id` string: A unique identifier for an object.
        - `display_id` string, nullable: Id to be displayed.
        - `name` string, nullable: The name of the resource.
        - `downstream_id` string, nullable: The third-party API ID of original entity
      - `currency` 'UNKNOWN_CURRENCY' | 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOV' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LTL' | 'LVL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRC' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'USN' | 'USS' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XAG' | 'XAU' | 'XBA' | 'XBB' | 'XBC' | 'XBD' | 'XCD' | 'XDR' | 'XOF' | 'XPD' | 'XPF' | 'XPT' | 'XTS' | 'XXX' | 'YER' | 'ZAR' | 'ZMK' | 'ZMW' | 'BTC' | 'ETH', nullable: Indicates the associated currency for an amount of money. Values correspond to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
      - `currency_rate` number, nullable: Currency Exchange Rate at the time entity was recorded/generated.
      - `tax_inclusive` boolean, nullable: Amounts are including tax
      - `sub_total` number, nullable: Sub-total amount, normally before tax.
      - `total_amount` number: Amount of transaction
      - `total_tax` number, nullable: Total tax amount applied to this bill credit note.
      - `tax_code` string, nullable: Applicable tax id/code override if tax is not supplied on a line item basis.
      - `balance` number, nullable: The balance reflecting any payments made against the transaction.
      - `remaining_credit` number, nullable: Indicates the total credit amount still available to apply towards the payment.
      - `status` 'draft' | 'authorised' | 'posted' | 'partially_paid' | 'paid' | 'voided' | 'deleted': Status of bill credit notes
      - `reference` string, nullable: Optional reference message ie: Debit remittance detail.
      - `date_issued` string, date-time: Date bill credit note issued - YYYY:MM::DDThh:mm:ss.sTZD
      - `date_paid` string, date-time, nullable: Date bill credit note paid - YYYY:MM::DDThh:mm:ss.sTZD
      - `type` 'accounts_payable_credit': The type of credit note. A bill credit note is always an accounts payable (supplier-side) credit.
      - `account` LinkedLedgerAccount, nullable
        - `id` string: The unique identifier for the account.
        - `name` string, nullable: The name of the account.
        - `nominal_code` string, nullable: The nominal code of the account.
        - `code` string, nullable: The code assigned to the account.
        - `parent_id` string, nullable: The parent ID of the account.
        - `display_id` string, nullable: The display ID of the account.
      - `line_items` BillCreditNoteLineItem[]
        - `id` string: A unique identifier for an object.
        - `row_id` string, nullable: The unique row identifier of the line item, when the connector exposes one.
        - `code` string, nullable: User defined item code.
        - `line_number` integer, nullable: Line number of the resource
        - `description` string, nullable: User defined description for the line item.
        - `type` 'expense_item' | 'expense_account' | 'other', nullable: Line Item type
        - `tax_amount` number, nullable: Tax amount
        - `total_amount` number, nullable: Total amount of the line item.
        - `quantity` number, nullable
        - `unit_price` number, nullable
        - `unit_of_measure` string, nullable: Description of the unit type the item is sold as, ie: kg, hour.
        - `discount_percentage` number, nullable: Discount percentage applied to the line item when supported downstream.
        - `discount_amount` number, nullable: Discount amount applied to the line item when supported downstream.
        - `service_date` string, date, nullable: Date on which the service was provided or performed - YYYY-MM-DD.
        - `location` LinkedLocation, nullable
          - `id` string: The unique identifier for the location.
          - `display_id` string, nullable: Id to be displayed.
          - `name` string, nullable: The name of the location.
          - `downstream_id` string, nullable: The third-party API ID of original entity
        - `department` LinkedDepartment, nullable
          - `id` string: A unique identifier for an object.
          - `display_id` string, nullable: Id to be displayed.
          - `name` string, nullable: The name of the resource.
          - `downstream_id` string, nullable: The third-party API ID of original entity
        - `item` LinkedInvoiceItem
          - `id` string, nullable: ID of the linked item. A reference to the [invoice item](https://developers.apideck.com/apis/accounting/reference#tag/Invoice-Items) that was used to create this line item
          - `code` string, nullable: User defined item code
          - `name` string, nullable: User defined item name
        - `tax_rate` LinkedTaxRate
          - `id` string, nullable: The ID of the object.
          - `code` string, nullable: Tax rate code
          - `name` string, nullable: Name of the tax rate
          - `rate` number, nullable: Rate of the tax rate
        - `ledger_account` LinkedLedgerAccount, nullable
          - `id` string: The unique identifier for the account.
          - `name` string, nullable: The name of the account.
          - `nominal_code` string, nullable: The nominal code of the account.
          - `code` string, nullable: The code assigned to the account.
          - `parent_id` string, nullable: The parent ID of the account.
          - `display_id` string, nullable: The display ID of the account.
        - `tracking_categories` LinkedTrackingCategory[], nullable: A list of linked tracking categories.
          - `id` string: The unique identifier for the tracking category.
          - `code` string, nullable: The code of the tracking category.
          - `name` string, nullable: The name of the tracking category.
          - `parent_id` string: The unique identifier for the parent tracking category.
          - `parent_name` string, nullable: The name of the parent tracking category.
        - `row_version` string, nullable: A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
        - `updated_by` string, nullable: The user who last updated the object.
        - `created_by` string, nullable: The user who created the object.
        - `created_at` string, date-time, nullable: The date and time when the object was created.
        - `updated_at` string, date-time, nullable: The date and time when the object was last updated.
      - `allocations` Allocation[]
        - `id` string: Unique identifier of entity this payment should be attributed to.
        - `type` 'invoice' | 'order' | 'expense' | 'credit_memo' | 'over_payment' | 'pre_payment' | 'journal_entry' | 'other' | 'bill': Type of entity this payment should be attributed to.
        - `code` string
        - `amount` number, nullable: Amount of payment that should be attributed to this allocation. If null, the total_amount will be used.
        - `allocation_id` string: Unique identifier of the allocation
      - `note` string, nullable: Optional note to be associated with the bill credit note.
      - `terms` string, nullable: Optional terms to be associated with the bill credit note.
      - `tracking_categories` LinkedTrackingCategory[], nullable: A list of linked tracking categories.
        - `id` string: The unique identifier for the tracking category.
        - `code` string, nullable: The code of the tracking category.
        - `name` string, nullable: The name of the tracking category.
        - `parent_id` string: The unique identifier for the parent tracking category.
        - `parent_name` string, nullable: The name of the parent tracking category.
      - `custom_fields` CustomField[]
        - union
          - object
            - `id` string, nullable, required: Unique identifier for the custom field.
            - `name` string, nullable: Name of the custom field.
            - `ref_name` string, nullable: Display name of the record a reference-type custom field points at. `value` carries that record's id; this carries its human-readable name, so a consumer does not need a second lookup to render it.
            - `description` string, nullable: More information about the custom field
            - `value` union
              - …
          - object
            - `id` string, nullable: Unique identifier for the custom field.
            - `name` string, nullable, required: Name of the custom field.
            - `ref_name` string, nullable: Display name of the record a reference-type custom field points at. `value` carries that record's id; this carries its human-readable name, so a consumer does not need a second lookup to render it.
            - `description` string, nullable: More information about the custom field
            - `value` union
              - …
      - `row_version` string, nullable: A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
      - `pass_through` object[]: The pass_through property allows passing service-specific, custom data or structured modifications in request body when creating or updating resources.
        - `service_id` string, required: Identifier for the service to which this pass_through should be applied.
        - `operation_id` string: Optional identifier for a workflow operation to which this pass_through should be applied. This is useful for Unify calls that are making more than one downstream request.
        - `extend_object` object: Simple object allowing any properties for direct extension.
        - `extend_paths` object[]: Array of objects for structured data modifications via paths.
          - `path` string, required: JSONPath string specifying where to apply the value.
          - `value` unknown, required

## Response `200`

Bill Credit Notes batch processed

- BatchBillCreditNotesResponse
  - `status_code` integer, required: HTTP Response Status Code
  - `status` string, required: HTTP Response Status
  - `service` string, required: Apideck ID of service provider
  - `resource` string, required: Unified API resource name
  - `operation` string, required: Operation performed
  - `data` BatchItemResult[], required: One result per item in the request, in the order the items were sent.
    - `_ref` string: A caller-supplied reference for this item, echoed back on the matching result so each outcome can be tied to the record it came from. Must be unique within the request. Never sent to the connector.
    - `id` string: A unique identifier for an object.
    - `downstream_id` string, nullable: The third-party API ID of original entity
    - `status` 'created' | 'updated' | 'failed' | 'uncertain', required: The outcome for this item. - `created` / `updated` — the record was written. - `failed` — it was not written, and `error` says why. - `uncertain` — the request to the connector did not complete (typically a timeout), so whether this record was written is genuinely unknown. Do not blindly retry: list the resource to find what exists first, or a retry may duplicate it. A `created` or `updated` result can also carry an `error`: the record was written, but work that runs after the write did not complete. Read this rather than `id` to decide what happened. `id` is present when the identifier could also be read back, which is not the same question — a written record whose id could not be parsed still reports `created`.
    - `error` object: Why this item did not complete. Present when `status` is `failed`, meaning the record was not written, and when `status` is `uncertain`, meaning it is unknown whether it was. Also present, more rarely, alongside `created`/`updated`: the record WAS written and post-write processing failed, so the item reports the error beside its success status. Per-item failures are independent — one item's rejection says nothing about the others. The exception is a failure of the request itself, such as a timeout: where a connector writes the whole batch in one call, every item shares that outcome and carries the same error.
      - `status_code` number: HTTP status code
      - `error` string: Contains an explanation of the status_code as defined in HTTP/1.1 standard (RFC 7231)
      - `type_name` string: The type of error returned
      - `message` string: A human-readable message providing more details about the error.
      - `detail` union: Contains parameter or domain specific information related to the error and why it occurred.
        - string
        - object
      - `ref` string: Link to documentation of error type
    - `warnings` object[]: Non-fatal problems with THIS item — a currency the connector could not match, for example, which is sent without it. Present per item rather than per request, because a caller with twenty records needs to know which one was affected. A warning does not imply the record was written: some are raised while preparing the item, before the write is attempted, so they can appear on a `failed` item too. Read `status` for what happened.
      - `type` string
      - `operation` string
      - `message` string
      - `status_code` number
      - `error` string
  - `_raw` Raw, nullable: Raw response from the integration when raw=true query param is provided

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `404`: The specified resource was not found
- `422`: Unprocessable
- `default`: Unexpected error

## Changes

- **2026-09-28** `596c2fc95e2a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/apideck-libraries/apis/accounting-api/changes/accounting/bill-credit-notes/batch/post.md)

---

[API](https://skmtc.dev/apideck-libraries/apis/accounting-api.md) · [All operations](https://skmtc.dev/apideck-libraries/apis/accounting-api/llms.txt) · [OpenAPI document](https://skmtc.dev/apideck-libraries/apis/accounting-api/revisions/d02fc67b26ca?raw)
