Obligations

Create an Obligation

Changed on

Create an obligation. This endpoint has two modes.

Standalone obligation — omit sourceObligationId. Creates an obligation on the contract given by parentId. Do not send status, dueDate, assigneeUserId, or description; those apply only to instances (see below).

Triggered instance — set sourceObligationId to an existing source obligation that is configured for triggered occurrences. This records a new occurrence of that obligation (for example, when its triggering condition is met). In this mode status, dueDate, and assigneeUserId are required; description is optional; parentId is optional and, if sent, must match the source obligation's contract; and obligationTypeKey may be omitted (it is inherited from the source obligation, and must match it if sent). Creating instances requires triggered obligations to be enabled for your account.

An obligation's recurrence cadence is configured in the Ironclad app and cannot be set through this API. Instances created here are always TRIGGERED occurrences; recurring occurrences are generated automatically by Ironclad. See the ObligationModel schema for the full source/occurrence model.

OAuth Scope required: public.obligations.createObligations

post/obligations

Request

  • Base URL
    https://ironcladapp.com/public/api/v1
  • URL
    https://ironcladapp.com/public/api/v1/obligations
  • Auth
    API key in header Authorization and OAuth 2
    Authorization code: https://ironcladapp.com/oauth/authorize
    Client credentials
    Token URL: https://ironcladapp.com/oauth/token scopes: public.obligations.createObligations

Headers

x-as-user-emailstring
Example:jane.doe@test.com

Denotes the actor of the request. When used, the API will take into account this user's permissions and access. This or x-as-user-id is required when the associated token was produced from the Client Credentials grant or with legacy bearer tokens on select endpoints. A token produced from the Authorization Code grant (which is already scoped to a user) may also use this header to act as a different user in the same company, provided the token carries the identity.users.impersonate scope and the token's own user has been granted the API User Impersonation permission. A request that sends this header without both never acts as the named user; depending on the company's configuration it either proceeds as the token's own user or is rejected with a 403. More information about permissions.

x-as-user-idstring
Example:5f0375c4cdc1927a3c5edcd3

Denotes the actor of the request. When used, the API will take into account this user's permissions and access. This or x-as-user-email is required when the associated token was produced from the Client Credentials grant or with legacy bearer tokens on select endpoints. A token produced from the Authorization Code grant (which is already scoped to a user) may also use this header to act as a different user in the same company, provided the token carries the identity.users.impersonate scope and the token's own user has been granted the API User Impersonation permission. A request that sends this header without both never acts as the named user; depending on the company's configuration it either proceeds as the token's own user or is rejected with a 403. More information about permissions.

Request body

namestring required

The name of the obligation

propertiesobject

A key:value map of values to set for the obligation's existing properties. This assigns values to properties already defined on the obligation's type; it cannot create new obligation properties (a schema-level change made in Ironclad, not through this API). More details on the properties can be found in the Obligation Properties article.

obligationTypeKeystring[] required

The key of the obligation type to be added to the obligation. Only one obligation type can be added or updated per obligation, currently. More info on obligation types can be found in the Obligation Types article.

parentIdstring required

The ID of the contract to create the new obligation as a child of. Accepts either the contract's readable ID (its ironcladId, e.g. "IC-6", as returned by the records and obligations read endpoints) or its internal record ID. When creating a triggered instance (sourceObligationId is present), parentId is optional and is only used to verify that it matches the source obligation's contract.

sourceObligationIdstring

The ID of an existing source obligation to record a new triggered occurrence (instance) of. When set, this request creates an occurrence rather than a standalone obligation, and status, dueDate, and assigneeUserId become required. This is distinct from parentId, which identifies the contract the obligation belongs to. Requires triggered obligations to be enabled for your account.

descriptionstring

Human-readable description of the obligation. Only valid when creating a triggered instance (sourceObligationId is present).

statusstring

The status of the obligation instance. Required when sourceObligationId is present; must be omitted otherwise. Valid values are the obligation's instance statuses (for example NOT_STARTED, IN_PROGRESS, OVERDUE, COMPLETED, WAIVED, CANCELLED); the set available depends on the obligation's type and cadence.

dueDatestring

The due date for the obligation instance (yyyy-MM-dd). Required when sourceObligationId is present; must be omitted otherwise.

assigneeUserIdstring

The ID of the user assigned to the obligation instance. Required when sourceObligationId is present; must be omitted otherwise.

Response

201

idstring required

The unique identifier of the obligation

ironcladIdstring required

Readable Ironclad ID of the obligation

namestring required

The name of the obligation

propertiesRecordProperties required

The record properties associated with the record

lastUpdatedstring

The last updated date of the obligation

namedTypeIdsstring[]

The unique identifiers of the types associated with the obligation. These IDs are tied with the Named Type of obligations, like 'Breach Notice', 'Compliance' and so on.

parentReadableIdstring

The parent readable id of the obligation

parentRecordNamestring

The parent record name of the obligation

isActiveboolean

Whether the user-facing obligation is active. Occurrences inherit their source obligation's active state. Read-only and present when the obligation lifecycle feature is enabled.

status'NOT_STARTED' | 'IN_PROGRESS' | 'COMPLETED' | 'WAIVED' | 'CANCELLED' | 'COMPLIANT' | 'NON_COMPLIANT'

The status of the obligation.

descriptionstring

Human-readable description of the obligation.

dueDatestring

The due date of the obligation (yyyy-MM-dd).

assigneeUserIdstring

The ID of the user assigned to the obligation.

completedAtstring date-time

The ISO 8601 timestamp at which the obligation entered the COMPLETED status. Present only while the obligation is COMPLETED.

sourceObligationIdstring uuid

The ID of the source obligation.

sourceRelationshipType'RECURRING' | 'TRIGGERED'

How the source obligation is related. RECURRING for obligations created by a recurring trigger, TRIGGERED for obligations created by a condition. Only present on obligations with a source (has a sourceObligationId).

triggerSource'API' | 'MANUAL'

The originating source of a triggered obligation. API when created through the public API, MANUAL when created in-product. Only present on obligations with a sourceRelationshipType of TRIGGERED.

obligationType'SOURCE' | 'OCCURRENCE'

Distinguishes a source obligation from an occurrence. SOURCE obligations carry a cadence; OCCURRENCE obligations carry a sourceObligationId and sourceRelationshipType. Read-only.

cadence'ONE_TIME' | 'RECURRING' | 'TRIGGERED' | 'PERPETUAL'

The recurrence cadence of a source obligation. Only present on SOURCE obligations. Read-only; not accepted on create or update.

Example response

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "ironcladId": "OB-1",
  "name": "Obligation XYZ",
  "lastUpdated": "2021-01-01T00:00:00Z",
  "namedTypeIds": [
    "eda20988-6b99-404b-99dc-866b84b63883"
  ],
  "parentReadableId": "IC-1",
  "parentRecordName": "Parent Record",
  "isActive": true,
  "status": "IN_PROGRESS",
  "description": "Deliver the signed SLA report to the counterparty.",
  "dueDate": "2026-08-01",
  "assigneeUserId": "5f9b1b3b1c9d440000a1b2c3",
  "completedAt": "2026-07-15T12:00:00.000Z",
  "sourceObligationId": "123e4567-e89b-12d3-a456-426614174000",
  "sourceRelationshipType": "TRIGGERED",
  "triggerSource": "API",
  "obligationType": "SOURCE",
  "cadence": "RECURRING"
}

Changes

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status