---
title: "Upsert usage records for contract obligations"
method: POST
path: "/public/v2/contracts/{contract_id}/usage/bulk-upsert/"
tags: ["Contracts"]
---

# Upsert usage records for contract obligations

`POST /public/v2/contracts/{contract_id}/usage/bulk-upsert/`

Create or update usage records in batch. Items with an 'id' field are updated; items without are created. Generates revenue recognitions and invoices.

## Path parameters

- `contract_id` integer, required

## Request body

- ObligationUsageBatchIn — Batch input for creating/updating multiple usage records.
  - `items` ObligationUsageItemIn[], required
    - `id` integer, nullable
    - `obligation_id` integer, required
    - `usage_date` string, date, required
    - `quantity` union, required
      - number
      - string
    - `rate` union
      - number
      - string
    - `status` 'draft' | 'invoiced' | 'archived'
    - `memo` string, nullable
    - `classifications` RecordClassificationsSchemaOut[], nullable
      - `id` integer, required
      - `name` string, required
      - `line_id` integer, required
      - `line_name` string, required
      - `parent_classification_id` integer, nullable
      - `parent_classification_line_id` integer, nullable

## Response `200`

OK

- ObligationUsageSchemaOut[]
  - `id` integer, required
  - `contract_id` integer, required
  - `obligation_id` integer, required
  - `usage_date` string, date, required
  - `quantity` string, required
  - `rate` string, nullable
  - `amount` string, required
  - `effective_rate` string, required
  - `revenue_recognition_id` integer, nullable
  - `status` 'draft' | 'invoiced' | 'archived', required
  - `invoice_status` string, nullable
  - `memo` string
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `classifications` RecordClassificationsSchemaOut[]
    - `id` integer, required
    - `name` string, required
    - `line_id` integer, required
    - `line_name` string, required
    - `parent_classification_id` integer, nullable
    - `parent_classification_line_id` integer, nullable

## Other responses

- `422` — Unprocessable Content

---

[API](https://skmtc.net/dualentry/apis/dualentry-public-api.md) · [All operations](https://skmtc.net/dualentry/apis/dualentry-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dualentry/dualentry-public-api/versions/525a590a98f8/schema)
