---
title: "Create Transaction"
method: POST
path: "/v1.0/leads/{leadId}/transaction"
tags: ["Lead Transaction"]
---

# Create Transaction

`POST /v1.0/leads/{leadId}/transaction`

Creates a new transaction under the given lead.

## Path parameters

- `leadId` integer, required

## Headers

- `Authorization` string, required
- `Content-Type` string, required

## Request body

- LeadTransaction
  - `created` integer — Transaction creation timestamp, in milliseconds since Unix epoch (UTC). Do not supply on create.
  - `updated` integer — Transaction last-modified timestamp, in milliseconds since Unix epoch (UTC). Do not supply on create or update.
  - `transactionId` integer — Transaction ID. Do not supply on create.
  - `transactionName` string, required — Property address or deal name. Required on create. Must not be blank and must not contain '<' or '>' characters.
  - `leadName` string — Name of the lead this transaction belongs to. Ignored if supplied in a request body.
  - `assignedAgent` integer — User ID of the agent this transaction is assigned to. Ignored if supplied in a request body.
  - `transactionType` 'Purchase' | 'Listing' | 'Lease' | 'Other' — Transaction type. Case-sensitive; must be one of the supported values. Values not matching the team's configured pipeline types fall back silently to the first pipeline (typically 'Purchase / Pre-contract'); always pass a valid type to avoid this silent behavior.
  - `homePrice` number — Home price of the transaction.
  - `transactionStatus` string — Transaction status name. Must match one of the statuses configured in the team's pipeline for the given transactionType; unmatched values silently fall back to the first status of that type.
  - `expectedCloseDate` integer — Expected close date, in milliseconds since Unix epoch (UTC).
  - `closeDate` integer — Actual close date, in milliseconds since Unix epoch (UTC).
  - `commissionRate` number — Commission rate, expressed as a percentage (e.g. 3 for 3%).
  - `gci` number — Gross Commission Income (GCI) of the transaction.
  - `teamRevenue` number — Portion of the GCI attributed to the team.
  - `agentRevenue` number — Portion of the GCI attributed to the agent.
  - `appointmentDate` integer — Appointment date, in milliseconds since Unix epoch (UTC).
  - `agreementSignedDate` integer — Agreement-signed date, in milliseconds since Unix epoch (UTC).
  - `offerDate` integer — Offer date, in milliseconds since Unix epoch (UTC).
  - `contractDate` integer — Contract date, in milliseconds since Unix epoch (UTC).
  - `appraisalDate` integer — Appraisal date, in milliseconds since Unix epoch (UTC).
  - `homeInspectionDate` integer — Home-inspection date, in milliseconds since Unix epoch (UTC).
  - `escrowDate` integer — Escrow date, in milliseconds since Unix epoch (UTC).
  - `expiration` integer — Expiration date (listing / contract), in milliseconds since Unix epoch (UTC).
  - `customFields` CustomFieldRequest[] — Custom field values; full-coverage update or insertion. See GET /v1.0/transaction/customfields for the team's custom field definitions.
    - `id` integer — Custom field id
    - `value` string — Custom field value For multi_select, the format is:["Item1","Item2", ...]
  - `commissions` Commissions — Commission structure (preSplit / split / postSplit). See POST /v1.0/leads/{leadId}/transaction description for validation rules.
    - `preSplit` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string
    - `split` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string
    - `postSplit` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string

## Response `200`

Transaction created. The response is the persisted transaction.

- LeadTransaction
  - `created` integer — Transaction creation timestamp, in milliseconds since Unix epoch (UTC). Do not supply on create.
  - `updated` integer — Transaction last-modified timestamp, in milliseconds since Unix epoch (UTC). Do not supply on create or update.
  - `transactionId` integer — Transaction ID. Do not supply on create.
  - `transactionName` string, required — Property address or deal name. Required on create. Must not be blank and must not contain '<' or '>' characters.
  - `leadName` string — Name of the lead this transaction belongs to. Ignored if supplied in a request body.
  - `assignedAgent` integer — User ID of the agent this transaction is assigned to. Ignored if supplied in a request body.
  - `transactionType` 'Purchase' | 'Listing' | 'Lease' | 'Other' — Transaction type. Case-sensitive; must be one of the supported values. Values not matching the team's configured pipeline types fall back silently to the first pipeline (typically 'Purchase / Pre-contract'); always pass a valid type to avoid this silent behavior.
  - `homePrice` number — Home price of the transaction.
  - `transactionStatus` string — Transaction status name. Must match one of the statuses configured in the team's pipeline for the given transactionType; unmatched values silently fall back to the first status of that type.
  - `expectedCloseDate` integer — Expected close date, in milliseconds since Unix epoch (UTC).
  - `closeDate` integer — Actual close date, in milliseconds since Unix epoch (UTC).
  - `commissionRate` number — Commission rate, expressed as a percentage (e.g. 3 for 3%).
  - `gci` number — Gross Commission Income (GCI) of the transaction.
  - `teamRevenue` number — Portion of the GCI attributed to the team.
  - `agentRevenue` number — Portion of the GCI attributed to the agent.
  - `appointmentDate` integer — Appointment date, in milliseconds since Unix epoch (UTC).
  - `agreementSignedDate` integer — Agreement-signed date, in milliseconds since Unix epoch (UTC).
  - `offerDate` integer — Offer date, in milliseconds since Unix epoch (UTC).
  - `contractDate` integer — Contract date, in milliseconds since Unix epoch (UTC).
  - `appraisalDate` integer — Appraisal date, in milliseconds since Unix epoch (UTC).
  - `homeInspectionDate` integer — Home-inspection date, in milliseconds since Unix epoch (UTC).
  - `escrowDate` integer — Escrow date, in milliseconds since Unix epoch (UTC).
  - `expiration` integer — Expiration date (listing / contract), in milliseconds since Unix epoch (UTC).
  - `customFields` CustomFieldRequest[] — Custom field values; full-coverage update or insertion. See GET /v1.0/transaction/customfields for the team's custom field definitions.
    - `id` integer — Custom field id
    - `value` string — Custom field value For multi_select, the format is:["Item1","Item2", ...]
  - `commissions` Commissions — Commission structure (preSplit / split / postSplit). See POST /v1.0/leads/{leadId}/transaction description for validation rules.
    - `preSplit` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string
    - `split` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string
    - `postSplit` Commission[]
      - `id` integer
      - `splitPayType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `splitPayTo` integer
      - `splitPayToName` string
      - `payType` 'TEAM' | 'AGENT' | 'VENDOR_PARTNER' | 'LEAD' | 'OTHER' | 'BROKERAGE' | 'UPLINE'
      - `payTo` integer
      - `payToName` string
      - `value` integer
      - `calculateType` 'PERCENT' | 'AMOUNT'
      - `desc` string

## Other responses

- `400` — Validation failure: transactionName blank or contains '<' / '>' (200062 TRANSACTION_NAME_BLANK, 200062 TRANSACTION_NAME_HTML), or commission rules violated (20012 INVALID_PARAMETER, with the raw validation message in the body).
- `401` — Missing or invalid authentication token.
- `404` — Lead not manageable (20006 LEAD_NOT_EXIST).
- `500` — Internal server error.

---

[API](https://skmtc.net/lofty/apis/lofty-service-open-apis.md) · [All operations](https://skmtc.net/lofty/apis/lofty-service-open-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lofty/lofty-service-open-apis/versions/23e640467118/schema)
