Deals API
A Deal represents an application or contract that is being evaluated—typically one in which multiple parties need to converge on a decision. Credit applications, equipment financing, fleet leasing, and commercial agreements all become Deals when they require coordination between borrowers, co-signers, guarantors, and other participants.
Deals share characteristics with Borrowers—workflow steps, custom fields, tags, and risk ratings. The key difference: a Borrower is an entity (a business or person), whereas a Deal is the specific application or agreement being evaluated, often involving multiple borrowers working toward approval.
A Deal serves as the central record that brings together everything related to that contract:
- Deal Fields: Store the specifics of what's being evaluated—financial terms, asset details, calculated scores, approval conditions
- Deal Contacts: Link the people involved—borrowers, co-signers, guarantors, brokers—each with their role in the application
- Workflow Executions: Track the automated processes that run against the deal—credit checks, valuations, risk calculations, compliance reviews
- Activity History: Record every change, evaluation, and decision made throughout the deal's lifecycle

The Deal Object
The Deal object represents an application or contract that is being evaluated in our system. When a customer applies for financing, leases equipment, or enters into any agreement requiring review and approval, that application becomes a Deal.
The Deal object itself holds identifying information: label, description, tags, and riskRating. The currentStep attribute indicates where the deal is in the process—whether it's under review, approved, requires additional information, or has been declined.
As parties are added or roles change, deal contacts are created or updated. The deal tracks its progression from initial submission through final decision.
Attributes
| Attribute | Description | Type |
|---|---|---|
id | Unique identifier of the deal | String |
externalId | External reference identifier (optional) | String |
label | Name of the deal | String |
description | Description of the deal | String |
currentStep | Information about the deal's current workflow step | Object |
tags | List of tags associated with the deal | Array of String |
riskRating | Risk rating of the deal | String |
createdAt | Date and time of deal creation | String (ISO 8601) |
updatedAt | Date and time of the last deal update | String (ISO 8601) |
Nested Objects
Current Step
| Attribute | Description | Type |
|---|---|---|
stepId | Unique identifier of the step | String |
order | Order of the step in the workflow | Integer |
key | Key identifier of the step | String |
label | Display label of the step | String |
createdAt | Date and time when the step was set | String (ISO 8601) |
Deal Fields
Deal Fields store the actual data of the deal. When you need to know what a deal is about—the loan amount, asset details, applicant income, evaluation scores—you'll find that information in deal fields. When workflows execute against a deal, they write their results as deal fields.
Each field has a key, a label, a value, and a dataType. Fields are defined through Data Models with entityType="deal_field", where you specify the field's type, label, and path. The path determines how fields are grouped and allows you to subcategorize fields into segments.
Each field tracks its value history. When updated, the system records a referenceId identifying the source of the change.
Fields support five data types: string, number, date, boolean, and money.
For complete documentation on Deal Fields, including detailed API endpoints, data type examples, and the Money data type structure, see the Deal Fields API documentation.
Deal Contacts
Deals often involve multiple parties. A financing application might require a primary borrower, one or more guarantors, co-borrowers, or co-signers. Deal Contacts link borrowers to deals and define each party's role in the transaction.
Each contact has a dealId, a borrowerId, a roleKey, and an isPrimary flag. The roleKey references Data Models with entityType="deal_role", which define the available roles. The isPrimary flag indicates the main contact for the deal.
Special Case: Selective Data Source Queries
When executing deal evaluation workflows, we sometimes need to query different data sources for different parties. For example, we might already have recent credit bureau data for one guarantor but need fresh reports for everyone else.
The contact_flags pattern in workflow input schemas enables per-party data source selection. Learn more in the Input Schema Guide: contact_flags Special Case.
As a deal progresses through evaluation, new parties can be added—additional guarantors identified during underwriting, co-signers brought in to strengthen the application, or other participants required to close the transaction.
Attributes
| Attribute | Description | Type |
|---|---|---|
id | Unique identifier of the contact | String |
dealId | Associated deal's ID | String |
borrowerId | Associated borrower's ID | String |
roleKey | Role of the contact in the deal | String |
isPrimary | Whether this is the primary contact for the deal | Boolean |
createdAt | Date and time of contact creation | String (ISO 8601) |
updatedAt | Date and time of the last contact update | String (ISO 8601) |
Endpoints
Create a Deal
Input Parameters:
| Parameter | Description | Type | Required |
|---|---|---|---|
label | Name of the deal | String | Yes |
description | Description of the deal | String | No |
externalId | External reference ID | String | No |
riskRating | Initial risk rating | String | No |
tags | Initial tags | Array of String | No |
Example Request:
Successful Response:
Get a Deal
Returns the complete Deal object.
Update a Deal
Input Parameters:
| Parameter | Description | Type |
|---|---|---|
label | New name | String |
description | New description | String |
riskRating | New risk rating | String |
tags | New tags | Array of String |
Delete a Deal
Returns status code 204 (No Content) if successful.
List Deals
Query Parameters:
| Parameter | Description | Type |
|---|---|---|
search | Text to search in deals | String |
page | Page number (default: 1) | Integer |
per-page | Items per page (default: 10) | Integer |
sort-by | Field to sort by | String |
sort-direction | Sorting direction (asc or desc) | String |
Update External ID
Input Parameters:
| Parameter | Description | Type | Required |
|---|---|---|---|
externalId | External ID value | String | Yes |
Get Deal Steps
Returns all steps for the deal.
Get Current Step
Returns the deal's current step.
Set Current Step
Input Parameters:
| Parameter | Description | Type | Required |
|---|---|---|---|
key | Step key to set | String | Yes |
comment | Optional comment | String | No |
Create a Deal Contact
Input Parameters:
| Parameter | Description | Type | Required |
|---|---|---|---|
dealId | Deal's ID | String | Yes |
borrowerId | Borrower's ID | String | Yes |
roleKey | Role key | String | Yes |
isPrimary | Primary contact flag | Boolean | No |
Get a Deal Contact
Returns the complete DealContact object.
Update a Deal Contact
Input Parameters:
| Parameter | Description | Type |
|---|---|---|
roleKey | New role key | String |
isPrimary | New primary flag | Boolean |
Delete a Deal Contact
Returns status code 204 (No Content) if successful.
List Deal Contacts
Query Parameters:
| Parameter | Description | Type |
|---|---|---|
deal-id | Filter by deal ID | String |
borrower-id | Filter by borrower ID | String |
page | Page number (default: 1) | Integer |
per-page | Items per page | Integer |
Error Handling
The API may return the following error codes:
| Code | Description |
|---|---|
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 500 | Internal Server Error |
Errors will include a descriptive message in the response body.