Skip to content

Create transaction

Transactions API · transactions.create

URL · Fields · Example · Response · Try it

URL and authentication

POST https://YOUR-BACKEND/api/automation/v1/execute

Send Authorization: Bearer <connection key>, Accept: application/json and Content-Type: application/json. Create a connection.

This operation requires write access and CRM permission add_transaction. The gateway invokes POST /api/v1/app/transactions internally. Use the POST URL above with your automation key, including for read and delete operations.

Request parameters

KeyTypeRequirement
operationstringRequired; exactly transactions.create
dataobjectRequired; see fields below
idempotency_keystringRequired; 8–100 characters. Unique per action; keep unchanged for identical retries.

Fields

Internal transactions require internal_listing_id and cannot include external_client. For external_listing, internal_listing_id and external_client must be empty, and external_listing must include company, listing_type and agent.name/phone/email. external_client fields are optional for external_client transactions. A transaction cannot be created as cancelled. Rental transactions with payment_method cheque require at least one cheque, unique cheque numbers and a total matching transaction_amount within 0.01. Cheques cannot be supplied for a sale.

Fields below belong inside data. Dot paths describe nested objects; * means each array item. nullable permits null and sometimes validates a supplied field. in: lists allowed values; min: and max: limit the value, length or item count. exists: and exists_in_company: require a valid record ID. Conditional rules such as required_if and required_with refer to other fields in the same payload. Use YYYY-MM-DD for date-only values and timestamps with timezone offsets for follow-ups.

FieldTypeRequirementFormat / validation
transaction_sourcestringRequiredrequired; in:internal,external_listing,external_client
company_rolestringRequiredrequired; in:listing_agent,buyers_agent,tenants_agent,dual_agent,referral_only,broker
transaction_typestringRequiredrequired; in:sale,rental
payment_methodstringOptionalsometimes; in:cash,cheque
statusstringOptionalsometimes; in:draft,pending,in_progress,completed,closed,cancelled
currencystringOptionalsometimes; nullable; string; size:3
transaction_amountnumberRequiredrequired; numeric; min:0
commission_ratenumberRequiredrequired; numeric; min:0; max:100
commission_amountnumberRequiredrequired; numeric; min:0
transaction_datestringRequiredrequired; date
external_listingobjectOptionalsometimes; nullable; array
external_listing.addressstringOptionalsometimes; nullable; string; max:500
external_listing.citystringOptionalsometimes; nullable; string; max:100
external_listing.bedroomsintegerOptionalsometimes; nullable; integer; min:0
external_listing.bathroomsintegerOptionalsometimes; nullable; integer; min:0
external_listing.sizenumberOptionalsometimes; nullable; numeric; min:0
external_listing.listing_typeintegerOptionalsometimes; nullable; integer; exists:listing_types,id
external_listing.companystringOptionalsometimes; nullable; string; max:255
external_listing.agentobjectOptionalsometimes; nullable; array
external_listing.agent.namestringOptionalsometimes; nullable; string; max:255
external_listing.agent.phonestringOptionalsometimes; nullable; string; max:20
external_listing.agent.emailstringOptionalsometimes; nullable; email; max:255
external_listing.agent.mlsstringOptionalsometimes; nullable; string; max:100
external_clientobjectOptionalsometimes; nullable; array
external_client.namestringOptionalsometimes; nullable; string; max:255
external_client.companystringOptionalsometimes; nullable; string; max:255
external_client.emailstringOptionalsometimes; nullable; email; max:255
external_client.phonestringOptionalsometimes; nullable; string; max:20
external_client.client_typestringOptionalsometimes; nullable; string; max:100
external_client.agentobjectOptionalsometimes; nullable; array
external_client.agent.namestringOptionalsometimes; nullable; string; max:255
external_client.agent.phonestringOptionalsometimes; nullable; string; max:20
external_client.agent.emailstringOptionalsometimes; nullable; email; max:255
rental_informationobjectOptionalsometimes; nullable; array
rental_information.rental_start_datestringOptionalsometimes; nullable; date
rental_information.rental_end_datestringOptionalsometimes; nullable; date; after_or_equal:rental_information.rental_start_date
rental_information.lease_term_monthsintegerOptionalsometimes; nullable; integer; min:1; max:120
rental_information.monthly_rentnumberOptionalsometimes; nullable; numeric; min:0
rental_information.security_depositnumberOptionalsometimes; nullable; numeric; min:0
internal_listing_idintegerOptionalsometimes; nullable; exists:listings,id
lead_contact_idintegerOptionalsometimes; nullable; exists:leads,id
deal_idintegerOptionalsometimes; nullable; exists:deals,id
chequesarrayOptionalsometimes; nullable; array; min:1
cheques.*.cheque_numberstringConditionalrequired_with:cheques; string; max:255
cheques.*.amountnumberConditionalrequired_with:cheques; numeric; min:0.01
cheques.*.due_datestringConditionalrequired_with:cheques; date
cheques.*.statusstringOptionalsometimes; in:scheduled,deposited,paid,cleared,bounced,replaced,cancelled
cheques.*.tenant_emailstringOptionalsometimes; nullable; email; max:255
cheques.*.notesstringOptionalsometimes; nullable; string
cheques.*.replaced_by_idintegerOptionalsometimes; nullable; integer; exists:transaction_cheques,id
commission_splitsarrayRequiredrequired; array; min:1
commission_splits.*.idintegerOptionalsometimes; nullable; integer
commission_splits.*.recipient_rolestringRequired for each itemrequired; in:listing_agent,buyers_agent,tenants_agent,transaction_coordinator,referral_agent,broker_fee,administrative_fee,external_cooperation,custom
commission_splits.*.internal_agent_idintegerOptionalsometimes; nullable; exists:users,id
commission_splits.*.recipient_namestringOptionalsometimes; nullable; string; max:255
commission_splits.*.recipient_companystringOptionalsometimes; nullable; string; max:255
commission_splits.*.split_percentagenumberRequired for each itemrequired; numeric; min:0; max:100
commission_splits.*.split_amountnumberRequired for each itemrequired; numeric; min:0
commission_splits.*.is_external_paymentbooleanOptionalsometimes; boolean

Example request

Replace the example IDs and values with records in your installation. Supply any additional custom fields required by your company.

{
  "operation": "transactions.create",
  "data": {
    "transaction_source": "internal",
    "internal_listing_id": 1,
    "company_role": "listing_agent",
    "transaction_type": "sale",
    "transaction_amount": 1000000,
    "commission_rate": 2,
    "commission_amount": 20000,
    "transaction_date": "2026-11-01",
    "commission_splits": [
      {
        "recipient_role": "listing_agent",
        "internal_agent_id": 1,
        "split_percentage": 100,
        "split_amount": 20000
      }
    ]
  },
  "idempotency_key": "example-event-12345"
}

Response

Returns the created transaction in data. Use data.id for subsequent requests. Related fields depend on the resource and your permissions.

The gateway preserves the underlying HTTP status and JSON body. Successful requests return HTTP 200. A response may also include localized message fields.

Illustrative response excerpt (additional fields may be returned):

{
  "status": "success",
  "data": {
    "id": 456
  }
}

Errors

HTTP statusMeaning
400A CRM business rule rejected the action.
401Missing, invalid, expired or revoked connection key.
403Connection access or CRM permissions do not allow this action.
404Operation or record unavailable.
409This idempotency key was already used with a different request.
413Request or result exceeds its size limit; reduce payload or page size.
422Missing or invalid fields, or a CRM business rule rejected the operation.
429Rate limit exceeded; wait before retrying.
500The server could not complete the operation.

Validation failures may return message / errors, or an error string with an optional fields array. The tester shows the actual HTTP status and full body. Read about limits and retries.

Try it

Brixit API v1

Try this request

transactions.create

Requests run from your browser to your installation. Enter the backend URL shown in Brixit. Your connection key stays in this component’s memory and is cleared when you leave this page.

CRM permission: add_transaction. Underlying route: POST /api/v1/app/transactions. Send this operation to POST /execute.

Example IDs are placeholders. Use your own record and lookup IDs. Required custom fields depend on your installation.

POST /api/automation/v1/execute

Accept: application/json
Authorization: Bearer <connection key>
Content-Type: application/json

An idempotency key of 8–100 characters is required for writes. Reuse it only for an identical retry.

Code uses a connection-key variable; your entered key is never included in copied examples.