---
title: "Create contract obligation"
method: POST
path: "/v3/contracts/{id}/obligations"
tags: ["Contracts"]
---

# Create contract obligation

`POST /v3/contracts/{id}/obligations`

## Path parameters

- `id` string, required

## Request body

- CreateObligationDto
  - `serviceStartDate` string, required — Revenue Start Date
  - `serviceEndDate` string, required — Revenue End Date
  - `categoryId` string — Category Id
  - `billingSchedule` CreateBillingScheduleDto, required
    - `description` string — Line Item Description
    - `startDate` string, required — Billing Start Date
    - `duration` number — Billing Duration
    - `isArrears` boolean — Is Arrears (DEPRECATED: Use invoiceDateStrategy instead). Either this field OR invoiceDateStrategy must be provided, but not both.
    - `invoiceDateStrategy` 'FIRST_OF_PERIOD' | 'LAST_OF_PERIOD' | 'ARREARS' | 'ADVANCED_DUE_START' — Strategy for determining when to send invoices. Either this field OR isArrears must be provided, but not both. FIRST_OF_PERIOD (invoice at start of billing period), LAST_OF_PERIOD (invoice at end of billing period), ARREARS (invoice after service delivery) or ADVANCED_DUE_START (invoice date at start of billing period minus netPaymentTerms days, due start of service).
    - `isRecurring` boolean, required — Is Recurring
    - `includeInArr` boolean — Whether this billing term contributes to ARR (Annual Recurring Revenue). Defaults based on billing type and interval when omitted (usage and one-time terms default to false).
    - `interval` 'NONE' | 'DAY' | 'MONTH' | 'HOUR' | 'YEAR' | 'QUARTER' | 'SEMI_MONTH' | 'WEEK', required — Type of recurring interval
    - `intervalFrequency` number, required — Frequency of recurring interval to invoice
    - `netPaymentTerms` number, required — Time between issue and due date
    - `quantity` number, required — Quantity; set to 0 for UNIT billingType
    - `billingType` 'UNIT' | 'FLAT', required — Billing Type
    - `pricingType` 'SIMPLE' | 'TIERED' | 'VOLUME', required — Single, multiple, or volume-based pricing tiers
    - `eventTypeId` string — Usage Event Type Id
    - `itemId` string — The item in the ERP that the line items will belong to
    - `productId` string, nullable — Product ID from /v3/products that links this billing term to an entry in the merchant's product catalog. To ensure revenue reporting accuracy, associate the billing term with a product whenever applicable.
    - `invoiceType` 'INVOICE' | 'BILL', required — INVOICE or BILL for remittance. Use INVOICE for all instances
    - `pricing` PricingTierDto[], required — Pricing tiers
      - `tier` number, required — Tier Number
      - `amount` number, required — Amount
      - `amountType` 'PER_ITEM' | 'TOTAL_INVOICE', required — Amount Type
      - `tierMinimum` number, required — Tier Minimum
    - `classId` string — Class Id
    - `departmentId` string — Department Id
    - `projectId` string — Project Id
    - `name` string — Line item name. Required unless productId is provided, in which case it is populated from the product's display name.
  - `discount` DiscountDto
    - `type` 'PERCENTAGE' | 'FIXED' — The type of discount
    - `amount` string — The discount amount (stored as mantissa in database with exponent 0)
    - `note` string — Optional note about the discount
  - `seatConfig` SeatBasedObligationConfigDto
    - `isMovingMinimum` boolean, required — Whether we need to update minimums on a moving basis
    - `minQuantity` number, required — Minimum quantity to bill for, regardless of current # of seats
    - `defaultProrationPolicy` 'NONE' | 'DAY' | 'MONTH' | 'YEAR', required — Default proration policy
    - `defaultTrueUpTiming` 'IMMEDIATE' | 'CO_TERM', required — Default true up timing

## Response `201`

The obligation

- ObligationDto
  - `id` string, required — Obligation Id
  - `contractId` string, required — Contract Id
  - `serviceStartDate` string, required — Revenue Start Date
  - `serviceEndDate` string, required — Revenue End Date
  - `categoryId` string — Category Id
  - `billingSchedule` BillingScheduleDto, required
    - `name` string, required — Line Item Name
    - `description` string — Line Item Description
    - `startDate` string, required — Billing Start Date
    - `endDate` string, required — Billing End Date
    - `duration` number — Billing Duration
    - `isArrears` boolean — Is Arrears (DEPRECATED: Use invoiceDateStrategy instead). Either this field OR invoiceDateStrategy must be provided, but not both.
    - `invoiceDateStrategy` 'FIRST_OF_PERIOD' | 'LAST_OF_PERIOD' | 'ARREARS' | 'ADVANCED_DUE_START' — Strategy for determining when to send invoices. Either this field OR isArrears must be provided, but not both. FIRST_OF_PERIOD (invoice at start of billing period), LAST_OF_PERIOD (invoice at end of billing period), ARREARS (invoice after service delivery) or ADVANCED_DUE_START (invoice date at start of billing period minus netPaymentTerms days, due start of service).
    - `isRecurring` boolean, required — Is Recurring
    - `includeInArr` boolean — Whether this billing term contributes to ARR (Annual Recurring Revenue). Defaults based on billing type and interval when omitted (usage and one-time terms default to false).
    - `interval` 'NONE' | 'DAY' | 'MONTH' | 'HOUR' | 'YEAR' | 'QUARTER' | 'SEMI_MONTH' | 'WEEK', required — Type of recurring interval
    - `intervalFrequency` number, required — Frequency of recurring interval to invoice
    - `netPaymentTerms` number, required — Time between issue and due date
    - `quantity` number, required — Quantity; set to 0 for UNIT billingType
    - `billingType` 'UNIT' | 'FLAT', required — Billing Type
    - `pricingType` 'SIMPLE' | 'TIERED' | 'VOLUME', required — Single, multiple, or volume-based pricing tiers
    - `eventTypeId` string — Usage Event Type Id
    - `itemId` string — The item in the ERP that the line items will belong to
    - `productId` string, nullable — Product ID from /v3/products that links this billing term to an entry in the merchant's product catalog. To ensure revenue reporting accuracy, associate the billing term with a product whenever applicable.
    - `invoiceType` 'INVOICE' | 'BILL', required — INVOICE or BILL for remittance. Use INVOICE for all instances
    - `pricing` PricingTierDto[], required — Pricing tiers
      - `tier` number, required — Tier Number
      - `amount` number, required — Amount
      - `amountType` 'PER_ITEM' | 'TOTAL_INVOICE', required — Amount Type
      - `tierMinimum` number, required — Tier Minimum
    - `classId` string — Class Id
    - `departmentId` string — Department Id
    - `projectId` string — Project Id
  - `revenueSchedule` RevenueScheduleDto, required
    - `categoryId` string — Category Id
    - `recognizedRevenue` RecognizedRevenueDto[], required — Recognized Revenue in each month
      - `timeframe` string, required — Timeframe
      - `total` number, required — Total
      - `booksClosed` boolean, required — Books closed
  - `discount` DiscountDto
    - `type` 'PERCENTAGE' | 'FIXED' — The type of discount
    - `amount` string — The discount amount (stored as mantissa in database with exponent 0)
    - `note` string — Optional note about the discount
  - `seatConfig` SeatBasedObligationConfigDto
    - `isMovingMinimum` boolean, required — Whether we need to update minimums on a moving basis
    - `minQuantity` number, required — Minimum quantity to bill for, regardless of current # of seats
    - `defaultProrationPolicy` 'NONE' | 'DAY' | 'MONTH' | 'YEAR', required — Default proration policy
    - `defaultTrueUpTiming` 'IMMEDIATE' | 'CO_TERM', required — Default true up timing

## Other responses

- `400` — Invalid request body

---

[API](https://skmtc.net/tabsplatform/apis/tabs-external-api.md) · [All operations](https://skmtc.net/tabsplatform/apis/tabs-external-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tabsplatform/tabs-external-api/revisions/7e8885517814/schema)
