---
title: "Publish contract"
method: POST
path: "/v1/contracts/{contractId}/publish"
tags: ["v1 - Contracts"]
---

# Publish contract

`POST /v1/contracts/{contractId}/publish`

## Request

- Base URL: `https://light.inc` (the document declares no server; this is the origin it was published from)
- URL: `https://light.inc/v1/contracts/{contractId}/publish`
- Auth: one of:
  - API key in header `Authorization`
  - HTTP bearer

Publishes a contract, transitioning it to ACTIVE state

## Path parameters

- `contractId` string, uuid, required

## Headers

- `X-Idempotency-Key` string

## Response `default`

default response

- ExternalContractV1Model
  - `id` string, uuid: Unique identifier for the object
  - `companyId` string, uuid: ID of the company
  - `startDate` string, date, nullable: Contract start date
  - `endDate` string, date, nullable: Contract end date
  - `activatedAt` string, date-time, nullable: Timestamp when the contract was activated/published
  - `terminatedAt` string, date-time, nullable: Timestamp when the contract was terminated
  - `terminationReason` string, nullable: Reason for contract termination
  - `terminationReasonType` 'FINISHED' | 'OTHER' | 'RENEWED', nullable: Categorized reason for contract termination - `FINISHED` - Contract ran to its natural end - `OTHER` - Terminated for another reason, described in terminationReason - `RENEWED` - Contract ended because it was renewed into a new contract ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `renewalDate` string, date, nullable: Date when the contract should be renewed
  - `companyEntityId` string, uuid, nullable: ID of the entity
  - `invoiceTemplateId` string, uuid, nullable: ID of the invoice template to use for generating invoices
  - `currency` string
  - `estimatedAmount` integer, nullable: Estimated total amount for the contract in cents
  - `paymentType` 'AIRWALLEX' | 'BANK_TRANSFER' | 'DIRECT_DEBIT' | 'STRIPE', nullable: Payment type for invoices generated from this contract - `AIRWALLEX` - Payment via Airwallex. A payment link will be displayed on the invoice - `BANK_TRANSFER` - Payment via bank transfer. Bank information will be displayed on the invoice - `DIRECT_DEBIT` - Payment via direct debit. A notice that the amount will be collected automatically will be displayed on the invoice - `STRIPE` - Payment via Stripe. A payment link will be sent to the customer ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `payeeBankAccountId` string, uuid, nullable: ID of the bank account where payments should be sent
  - `billingStart` string, date, nullable: Date when billing should start for this contract
  - `netTerms` integer, nullable: Number of days from invoice date to when payment is due
  - `invoiceLeadDays` integer, nullable: Number of days before billing period start to date the invoice
  - `description` string, nullable: Description of the contract
  - `customerId` string, uuid, nullable: ID of the customer
  - `state` 'CREATED' | 'DRAFT' | 'ACTIVE' | 'PENDING_TERMINATION' | 'TERMINATED': Current state of the contract - `CREATED` - Contract has been created - `DRAFT` - Contract is in draft state and can be edited - `ACTIVE` - Contract is active and generating invoices - `PENDING_TERMINATION` - Contract has a scheduled termination - `TERMINATED` - Contract has been terminated ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `areLinesWithTax` boolean: Whether invoice line amounts include tax or tax is added on top
  - `lines` ExternalContractLineV1Model[], nullable: List of contract line items. Only returned when fetching a single contract by ID
    - `id` string, uuid: Unique identifier for the object
    - `companyId` string, uuid: ID of the company
    - `contractId` string, uuid: ID of the contract this line belongs to
    - `productId` string, uuid: ID of the product
    - `billingStart` string, date, nullable: Date when billing starts for this line
    - `billingEnd` string, date, nullable: Date when billing ends for this line
    - `billingRecurrence` 'ONE_TIME' | 'MONTHLY' | 'QUARTERLY' | 'HALF_YEARLY' | 'YEARLY': Billing frequency for this line - `ONE_TIME` - The product is billed once - `MONTHLY` - The product is billed every month - `QUARTERLY` - The product is billed every three months - `HALF_YEARLY` - The product is billed every six months - `YEARLY` - The product is billed every year ⚠️ This enum is not exhaustive; new values may be added in the future.
    - `accountId` string, uuid, nullable: ID of the account for bookkeeping
    - `taxCodeId` string, uuid, nullable: ID of the tax code
    - `avataxCode` string, nullable: Avalara tax code
    - `discount` ExternalContractLineDiscountV1Model, nullable: Discount to apply to this line (can be percentage or amount-based)
      - `startDate` string, date
      - `endDate` string, date
      - `type` 'PERCENTAGE' | 'AMOUNT': ⚠️ This enum is not exhaustive; new values may be added in the future.
    - `quantity` number, nullable: Quantity of the product
    - `priceOverwrite` integer, nullable: Custom price override in cents
    - `productNameOverwrite` string, nullable: Custom product name override
    - `amortizationTemplateId` string, uuid, nullable: ID of the amortization template
    - `amortizationStartDate` string, date, nullable: Start date for amortization
    - `amortizationEndDate` string, date, nullable: End date for amortization
    - `aiValueSuggestions` ExternalAiValueSuggestionV1Model[], nullable: AI-generated suggestions for this line
      - `field` string
      - `fieldValues` string[]
      - `reasoning` string
    - `customProperties` ExternalCustomPropertyV1Model[], nullable: List of custom properties associated with the line
      - `groupId` string, uuid: ID of the custom property group
      - `groupInternalName` string: Internal name of the custom property group
      - `values` ExternalCustomPropertyValueV1Model[]: List of values. Note that this will be a single value unless the group input type supports multiple values
        - `id` string, uuid: Unique identifier for the object
        - `groupId` string, uuid: ID of the custom property group
        - `groupInternalName` string: Internal name of the custom property group
        - `companyId` string, uuid: ID of the company
        - `internalName` string: Internal name of the custom property value
        - `label` string: Label of the custom property value
        - `context` string, nullable: Context/description of the custom property value
        - `createdAt` string, date-time: Timestamp when the custom property value was created
        - `updatedAt` string, date-time: Timestamp when the custom property value was last updated
    - `createdAt` string, date-time: Timestamp when the line was created
    - `updatedAt` string, date-time: Timestamp when the line was last updated
  - `taxEngineName` 'AVATAX' | 'LIGHT' | 'SPHERE': Name of the tax engine to be used - `AVATAX` - Avalara AvaTax will be used for tax calculations - `LIGHT` - Light built-in tax engine will be used for tax calculations - `SPHERE` - Sphere tax engine will be used for tax calculations ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `externalId` string, nullable: External identifier from an external system
  - `externalSource` 'HUBSPOT' | 'SALESFORCE', nullable: Source system if contract was synced from an external system - `HUBSPOT` - Contract synced from HubSpot - `SALESFORCE` - Contract synced from Salesforce ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `customProperties` ExternalCustomPropertyV1Model[], nullable: List of custom properties associated with the contract
    - `groupId` string, uuid: ID of the custom property group
    - `groupInternalName` string: Internal name of the custom property group
    - `values` ExternalCustomPropertyValueV1Model[]: List of values. Note that this will be a single value unless the group input type supports multiple values
      - `id` string, uuid: Unique identifier for the object
      - `groupId` string, uuid: ID of the custom property group
      - `groupInternalName` string: Internal name of the custom property group
      - `companyId` string, uuid: ID of the company
      - `internalName` string: Internal name of the custom property value
      - `label` string: Label of the custom property value
      - `context` string, nullable: Context/description of the custom property value
      - `createdAt` string, date-time: Timestamp when the custom property value was created
      - `updatedAt` string, date-time: Timestamp when the custom property value was last updated
  - `createdAt` string, date-time: Timestamp when the contract was created
  - `updatedAt` string, date-time: Timestamp when the contract was last updated

---

[API](https://skmtc.dev/light/apis/light-api.md) - [All operations](https://skmtc.dev/light/apis/light-api/llms.txt) - [OpenAPI document](https://skmtc.dev/light/apis/light-api/revisions/84f51306f648?raw)
