# Upsert usage records for contract obligations Create or update usage records in batch. Items with an 'id' field are updated; items without are created. Generates revenue recognitions and invoices. Endpoint: POST /public/v1/contracts/{contract_id}/usage/bulk-upsert/ Version: 1.0.0 ## Path parameters: - `contract_id` (integer, required) ## Request fields (application/json): - `items` (array, required) - `items.id` (integer,null) - `items.obligation_id` (integer, required) - `items.usage_date` (string, required) - `items.quantity` (any, required) - `items.rate` (any) - `items.status` (string,null) Enum: "draft", "invoiced", "archived" ## Response 200 fields (application/json): - `id` (integer, required) - `contract_id` (integer, required) - `obligation_id` (integer, required) - `usage_date` (string, required) - `quantity` (string, required) - `rate` (string,null) - `amount` (string, required) - `effective_rate` (string, required) - `revenue_recognition_id` (integer,null) - `status` (string, required) Enum: "draft", "invoiced", "archived" - `invoice_status` (string,null) - `memo` (string) - `created_at` (string, required) - `updated_at` (string, required) ## Response 422 fields (application/json): - `success` (boolean) - `errors` (object, required)