The mortgage pipeline, with its notes and tags.
List deals
The mortgage pipeline. To find the deal behind a record in another system, pass its id there as external_reference, or the lender's file number as lender_file_ref. Both match exactly.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
updated_sinceISO 8601 date-time, for example 2026-10-01T00:00:00Z. Returns only rows changed at or after it, in updated_at order and then id order, oldest first. A value that is not ISO 8601 gets 400 VALIDATION_ERROR.
after_idUse with updated_since to read the next page of a sync. Send the updated_at and id of the last row you read: the list then starts after that row, and a row that changes while you sync cannot be skipped. Keep page at 1. Without updated_since it gets 400 VALIDATION_ERROR.
statusFilter by lifecycle status. Any other value gets 400 VALIDATION_ERROR.
board_idOnly the deals on this pipeline.
stage_idOnly the deals in this stage. A stage belongs to one pipeline, so you do not need board_id with it. With both, a stage that is not on board_id returns no deals.
external_referenceExact match on a deal's id in another system: a Velocity or Filogix loan code, a Finmo application id, or a Velocity Forms id. Add source to name the system.
sourceWith external_reference: the system the reference belongs to (velocity, velocity_forms, finmo).
lender_file_refExact match on the lender's own file number for the deal.
Filter by a deal custom field: custom_field[<key>]=<value>, for example custom_field[lead_source]=Google. The value takes the same text as a write. An empty value finds records with no answer. Send up to 10; a record must match all of them. Get the keys from GET /v1/custom-fields?entity=deal.
List deals › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Create a deal
Open a deal for the key's broker. The deal lands on the broker's default pipeline for its type, or on board_id if you name one, and takes that pipeline's team. Attach borrowers with contacts. The mortgage application is not created here. Supports Idempotency-Key.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Create a deal › Request Body
typeDeal type. Decides which pipeline the deal lands on when you do not name one.
board_idPipeline to land on. Must belong to the broker's team. Omit to use the broker's default pipeline for the type.
stage_idStage within board_id. Omit to land on the pipeline's first stage. Requires board_id.
Scheduled closing date. Accepts YYYY-MM-DD or an ISO 8601 timestamp. Returns YYYY-MM-DD.
Borrowers to attach on creation. Partners attach through their own endpoints.
Create a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Archive a deal
Removes the deal from its pipeline, reports and searches, and cancels its open tasks. The deal is not erased. Restore it with POST /v1/deals/{id}/restore, or a broker can restore it in BrokerPlus.
path Parameters
idResource id.
Archive a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Update a deal
Change the status, stage, owner, dates, name, lender file number, underwriter or lender. The API applies the same lifecycle rules as BrokerPlus. The underwriter and the lender save first, so a stage move in the same request is checked against them. The other fields commit together. It returns 409 if the deal changes during validation.
path Parameters
idResource id.
Update a deal › Request Body
statusLifecycle status. Funding requires anti-money laundering clearance for every borrower. Repeated funding keeps the original funded date. Setting a lead-backed deal to active archives its lead record.
typeDeal type, the same values as on create. The change is the same as in the dashboard. BrokerPlus calculates the total loan amount and the mortgage insurance premium again for the new type. A change into a renewal type, out of one, or between renewal_same_lender and renewal_diff_lender replaces the renewal disclosures and attestations that the old type resolved, so they must be done again. The deal stays on its pipeline and in its stage, and the stage requirements are not checked again.
stage_idStage in the current pipeline. Forward moves must meet the stage requirements. Null clears the stage and its entry date.
assigned_broker_idActive broker in the brokerage. Reassignment transfers eligible open work. Ineligible tasks keep their assignees. Null clears the owner but preserves required request and calendar owners.
Scheduled closing date. Accepts YYYY-MM-DD or an ISO 8601 timestamp. Returns YYYY-MM-DD.
Mortgage maturity date. Accepts YYYY-MM-DD or an ISO 8601 timestamp. Returns YYYY-MM-DD.
underwriter_idActive user in the brokerage who underwrites the deal. No work moves with it. Null clears it.
lender_idA lender from GET /lenders. Null clears it.
nameA name for the deal. Null or an empty string returns the deal to the brokerage's naming pattern.
lender_file_refThe lender's own file number for this deal. Null clears it.
The actual funding date of a funded deal, or of a deal that is already closed, such as an imported completed file. The status stays closed. An imported file that its source system marked funded takes the date as is. On any other closed deal the date counts the deal as funded, so it requires the same AML clearance as setting status to funded. Accepts YYYY-MM-DD or an ISO 8601 timestamp.
Update a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Restore an archived deal
Puts an archived deal back on its pipeline. When its pipeline was deleted, the deal goes to the first pipeline of the same team that takes its type. The tasks the archive cancelled stay cancelled.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Restore an archived deal › Responses
Success
successAlways true on a successful response.
The requested record.
Duplicate a deal
Makes a new deal with the same people and the primary application, at the first stage of the same pipeline, assigned to the broker your key acts as. Submissions, funding, compliance and documents are not copied. The copy is a new deal to automations too. Nothing is sent to anyone: to ask the borrowers on the copy for a credit consent, use BrokerPlus.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Duplicate a deal › Request Body optional
carry_participantsCopy every person on the deal. Send false to copy only the primary applicant; the co-applicants, guarantors and partners stay on the original.
archive_originalArchive the original once the copy exists, as DELETE /v1/deals/{id} does. You can restore it with POST /v1/deals/{id}/restore.
typeThe new file's deal type. Leave it out to keep the original's type.
Duplicate a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List who is on a deal
Every contact attached to the deal with their role: the borrowers and the partners (realtor, lawyer, lender contact, and so on). is_partner separates the two. Both agents on a purchase hold the same realtor role, so the seller's agent is told from the buyer's by role_label - the brokerage's own word for the seat.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List who is on a deal › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Put a contact on a deal
Attaches a contact in a role. A contact can hold one role per deal; attaching one already on the deal returns 409. Attaching a partner fires the deal.partner_added automation trigger.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Put a contact on a deal › Request Body
contact_idA contact in your brokerage.
roleDefaults to primary_applicant.
role_labelYour own word for the partner's seat, e.g. Listing Realtor. Only valid with role: other, and the way to tell the two agents on a purchase apart.
lender_approval_numberThe lender's approval number for this file. Only valid with role: lender_contact.
Put a contact on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Take a contact off a deal
Removes the contact from the deal. A borrower with application detail on file cannot be removed until that detail is cleared in BrokerPlus.
path Parameters
idResource id.
contactIdResource id.
Take a contact off a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Change a partner's role on a deal
Changes a partner's role, label, or approval number. A role moving off other clears the label; one moving off lender_contact clears the approval number. Borrowers are not editable here.
path Parameters
idResource id.
contactIdResource id.
Change a partner's role on a deal › Request Body
roleA partner role. A borrower's role cannot change here; it is set by the application.
role_labelYour own word for the partner's seat, e.g. Listing Realtor. Only valid with role: other. Send null to clear.
lender_approval_numberThe lender's approval number. Only valid on a lender_contact. Send null to clear.
Change a partner's role on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List the team's participant seats
The seats the key's active team keeps on its deals, in deal card order: a listing realtor, a lawyer, an underwriter. A seat names a participant before anybody fills it, so a stage requirement or an automation can name it. For the seats of one deal and whether that deal shows each one, use GET /v1/deals/{id}/participant-seats.
List the team's participant seats › Responses
Success
successAlways true on a successful response.
The team's seats, in deal card order.
Add a participant seat
Adds a seat to a team's deals. By default it is pinned: every deal the team opens from now on shows it, and open deals do not change. With deal_id, the seat goes on that deal's team and that deal shows it now. Adding a seat the team removed earlier brings it back. Only a member of the team can add one.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Add a participant seat › Request Body
roleA curated participant role, for example lawyer. Send role or role_label, not both.
role_labelThe brokerage's own word for the seat, for example Listing Realtor. A word the brokerage already uses in another case is matched, so listing realtor becomes the same seat. Send role or role_label, not both.
pinnedDefaults to true: every deal the team opens from now on shows the seat. Open deals do not change.
default_contact_idA contact on the seat's team who sits in the seat on each new deal.
deal_idThe deal you are looking at. The seat goes on that deal's team, and that deal shows it now. Without it, the seat goes on the key's active team.
Add a participant seat › Responses
Success
successAlways true on a successful response.
The requested record.
Remove a participant seat
Takes a seat off the team's deals. The people already in that seat on a deal stay on the deal. A stage that requires the seat blocks the removal: remove the requirement first.
path Parameters
idResource id.
Remove a participant seat › Responses
Success
successAlways true on a successful response.
The requested record.
Update a participant seat
Pins or unpins a seat, or changes its default person. Neither change touches open deals. A seat's role cannot change: add a new seat and remove this one. Only a member of the seat's team can change it.
path Parameters
idResource id.
Update a participant seat › Request Body
pinnedtrue pins the seat from now: deals opened from now on show it, and open deals do not change. false stops new deals showing it.
default_contact_idA contact on the seat's team who sits in the seat on each new deal. Send null to clear it.
Update a participant seat › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's participant seats
Every seat of the deal's team, with on_deal true for each seat this deal shows. The seats are the deal's team's, which can differ from the key's active team.
path Parameters
idResource id.
List a deal's participant seats › Responses
Success
successAlways true on a successful response.
The deal's team's seats, in deal card order.
Show a seat on a deal
This deal shows the seat, for example one the team pinned after the deal opened. Other deals do not change. Calling it again changes nothing.
path Parameters
idResource id.
seatIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Show a seat on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Hide a seat on a deal
This deal stops showing the seat, for example a listing realtor on a private sale. The person in the seat, if any, stays on the deal. Other deals do not change. Calling it again changes nothing.
path Parameters
idResource id.
seatIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Hide a seat on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List who works a deal
The users in your brokerage who hold a role on the deal, e.g. Sales Manager or Closing Officer. Each role holds one user. These are your own staff, not contacts: an outside person such as a lawyer is a participant.
path Parameters
idResource id.
List who works a deal › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Put a user in a role on a deal
Fills a role with a user. If the role is already held, the new user replaces the old one. The role name is matched without regard to case, so sales manager fills an existing Sales Manager role.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Put a user in a role on a deal › Request Body
roleThe role to fill, e.g. Sales Manager. A deal holds one user for each role. Filling a role that is already held replaces its user.
user_idAn active user in your brokerage.
Put a user in a role on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Empty a role on a deal
Removes the user from the role. Put the role name in the path, URL-encoded, e.g. Sales%20Manager. Emptying a role that nobody holds also succeeds.
path Parameters
idResource id.
roleResource id.
Empty a role on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Set who referred a deal
Credits a referral partner with the deal, as the referral picker on the deal page does. Send contact_id to name a contact, or name for a partner who is not a contact. A contact becomes a partner the first time you name them, and a name reuses the brokerage's partner with that name. A deal linked to other files moves with them. Returns the deal.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Set who referred a deal › Request Body
contact_idA contact in your brokerage. BrokerPlus files them as a partner if they are not one yet.
nameA partner who is not a contact, by name. BrokerPlus reuses a partner with the same name.
typeWhat the partner is, e.g. realtor, lawyer, financial_planner, or past_client.
Set who referred a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Check a stage before moving a deal
Tells you what the deal needs before it can move to a stage, without moving it. The check is the same one that PATCH /deals/{id} runs, so an empty missing list means the move will pass the stage requirements.
path Parameters
idResource id.
query Parameters
stage_idRequired. The stage to check, on the deal's own pipeline.
Check a stage before moving a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Read a deal's commission
The money the brokerage earns on the deal, with its line items and its splits. The API key's broker must be able to see compensation on the deal: the deal's own broker, a brokerage admin, or a team member with the view_commission grant.
path Parameters
idResource id.
Read a deal's commission › Responses
Success
successAlways true on a successful response.
The requested record.
Record a deal's commission
Creates the commission on a deal that has none. Every figure is what you send; the API derives nothing from a rate sheet. When line items are sent, gross_amount becomes their sum less the buydown. A change to the money is posted to the brokerage's connected accounting system.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Record a deal's commission › Request Body
statuspending until the lender confirms, paid when the money arrived, clawed_back when it was taken back.
lender_idA lender in your list.
lender_nameThe paying lender's name.
funded_amountDollars funded.
finder_fee_bpsFinder's fee in basis points.
finder_fee_amountFinder's fee in dollars.
bonus_bpsVolume bonus in basis points.
bonus_amountVolume bonus in dollars.
buydown_amountBuydown in dollars.
buydown_reasonWhy the rate was bought down.
gross_amountGross in dollars. Ignored when line items exist: the gross is then their sum less the buydown.
expected_payout_at^(?:(?:\d\d[2468][04…When the lender is expected to pay.
paid_at^(?:(?:\d\d[2468][04…When the lender paid.
clawback_amountDollars taken back.
clawback_at^(?:(?:\d\d[2468][04…When.
clawback_reasonWhy.
notesFree text.
Replaces every line item when sent.
Replaces every split when sent.
Record a deal's commission › Responses
Success
successAlways true on a successful response.
The requested record.
Change a deal's commission
Changes the fields you send. line_items and splits replace the whole list when sent, and are left alone when omitted.
path Parameters
idResource id.
Change a deal's commission › Request Body
statuspending until the lender confirms, paid when the money arrived, clawed_back when it was taken back.
lender_idA lender in your list.
lender_nameThe paying lender's name.
funded_amountDollars funded.
finder_fee_bpsFinder's fee in basis points.
finder_fee_amountFinder's fee in dollars.
bonus_bpsVolume bonus in basis points.
bonus_amountVolume bonus in dollars.
buydown_amountBuydown in dollars.
buydown_reasonWhy the rate was bought down.
gross_amountGross in dollars. Ignored when line items exist: the gross is then their sum less the buydown.
expected_payout_at^(?:(?:\d\d[2468][04…When the lender is expected to pay.
paid_at^(?:(?:\d\d[2468][04…When the lender paid.
clawback_amountDollars taken back.
clawback_at^(?:(?:\d\d[2468][04…When.
clawback_reasonWhy.
notesFree text.
Replaces every line item when sent.
Replaces every split when sent.
Change a deal's commission › Responses
Success
successAlways true on a successful response.
The requested record.
List the consents on a deal
Every consent recorded on the deal, newest first, including revoked and expired ones. is_active says which still stand.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List the consents on a deal › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Record a consent on a deal
Records that a party on the deal authorized a scope, and how. The consent is attributed to the broker your key acts as. Recording one does not run anything: a credit pull or submission still happens in BrokerPlus.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Record a consent on a deal › Request Body
contact_idA party on this deal.
scopeWhat is being authorized.
methodHow it was obtained.
expires_at^(?:(?:\d\d[2468][04…When it lapses. Omit for no expiry. A credit_pull consent always lapses 30 days after it is given; an earlier date is kept, a later one is cut to 30 days.
noteHow it was obtained, in your own words.
Record a consent on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Revoke a consent
Stamps the consent revoked. The row stays on the file.
path Parameters
idResource id.
consentIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Revoke a consent › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's stage history
Every stage move recorded on the deal, newest first. BrokerPlus records a move whenever the deal changes stage in the dashboard, through the API, or by automation. Imported deals carry history only from their import date onward.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List a deal's stage history › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
List notes on a deal
Pinned first, then newest.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List notes on a deal › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Add a note to a deal
The note is attributed to the broker your key acts as.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Add a note to a deal › Request Body
bodyThe note body. Plain text or HTML. Unsafe HTML is removed. The result must contain visible content.
pinnedDefaults to false.
parent_idReply to this note. Must belong to the same record, and cannot itself be a reply.
typeThe kind of note, as a slug from GET /v1/note-types for the same scope (deal or contact). Defaults to general. A reply always has the kind of its parent, so this is ignored on a reply.
Add a note to a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Delete a note from a deal
Deletes the note and its replies. You cannot undo this. Any teammate who can edit the deal can delete its notes, as in BrokerPlus.
path Parameters
idResource id.
noteIdResource id.
Delete a note from a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Update a note on a deal
Edit the words, pin or unpin the note, or change its kind. Only the fields you send change. A teammate newly named with a mention gets a notification, as in BrokerPlus.
path Parameters
idResource id.
noteIdResource id.
Update a note on a deal › Request Body
bodyThe new note body. Plain text or HTML. Unsafe HTML is removed. The result must contain visible content.
pinnedtrue pins the note to the top of the record. A pin does not change updated_at.
typeChange the kind of note, for example underwriting. The brokerage must have this kind. A reply always has the kind of its parent, so you cannot change it on a reply.
Update a note on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List who a deal note can mention
The teammates on the deal's team, by name. To mention one in a note, put <span data-mention="USER_ID">@Name</span> in the body. The teammate gets a notification, as in BrokerPlus. A mention of somebody who is not in this list is kept as text, and nobody gets a notification.
path Parameters
idResource id.
List who a deal note can mention › Responses
Success
successAlways true on a successful response.
The teammates a deal note can mention.
React to a deal note
Adds or takes off one emoji reaction of the broker your key acts as. Sending the same reaction again changes nothing. A reaction also marks a mention of that broker in the note as seen.
path Parameters
idResource id.
noteIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
React to a deal note › Request Body
emojiOne emoji, for example 👍.
activetrue adds the reaction of the broker your key acts as. false takes it off.
React to a deal note › Responses
Success
successAlways true on a successful response.
The requested record.
Attach a PDF to a deal note
Send the file as multipart/form-data in a file field, or as JSON with content_base64. The file must be a PDF of at most 25 MB. BrokerPlus checks the content, not the name. The response does not include a link: get one with the file's id.
path Parameters
idResource id.
noteIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Attach a PDF to a deal note › Request Body
fileThe PDF, at most 25 MB. Its file name is the name that BrokerPlus shows.
Attach a PDF to a deal note › Responses
Success
successAlways true on a successful response.
The requested record.
Get a link to a file on a deal note
A signed link to the PDF, valid for five minutes.
path Parameters
idResource id.
noteIdResource id.
attachmentIdResource id.
Get a link to a file on a deal note › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's flags
The flags up on the deal now, oldest first. A flag paints the deal's card red on the board. The broker raises at most one by hand, a Pulse automation can raise its own, and each one carries its reason in plain words.
path Parameters
idResource id.
List a deal's flags › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Flag a deal
Raises the broker's own flag on the deal, as the flag button on the card does. A deal holds one such flag: sending again changes its words and severity, and keeps the time it went up. Nobody outside BrokerPlus sees a flag.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Flag a deal › Request Body
messageWhat the broker sees on the card, 1 to 280 characters.
severitycritical (the default) or warn.
Flag a deal › Responses
Success
successAlways true on a successful response.
The requested record.
Clear the broker's flag
Takes down the flag the broker raised. A flag from an automation or from BrokerPlus is read-only here: the automation clears its own when the problem is over, and a broker can clear it in BrokerPlus.
path Parameters
idResource id.
flagIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Clear the broker's flag › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's checklist
The steps on the checklist of the deal's team, in order, each with its value on this deal. A step nobody has set has value null. A deal with no team has no checklist, so the list is empty.
path Parameters
idResource id.
List a deal's checklist › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Set a checklist step on a deal
Marks one step done, not done, or unset on this deal, as a click on the deal's checklist does. The step must be on the checklist of the deal's team.
path Parameters
idResource id.
checkpointIdResource id.
Set a checklist step on a deal › Request Body
valuetrue marks the step done, false marks it not done, and null clears it back to unset.
Set a checklist step on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's tags
Only the tags currently on this deal. For the full vocabulary see GET /deal-tags.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List a deal's tags › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Put a tag on a deal
Assigning a tag the deal already has is a no-op, not an error.
path Parameters
idResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Put a tag on a deal › Request Body
tag_idA tag id from GET /contact-tags or GET /deal-tags.
Put a tag on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's custom fields
Every custom field the brokerage keeps on a deal, with this deal's value. A field that nobody has answered returns a value of null, so the list is the same length on every deal.
path Parameters
idResource id.
List a deal's custom fields › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Set a custom field on a deal
Sets one field by its key. The write is idempotent: the same request twice leaves the same value. Send an empty string to clear the field, which makes it unanswered again.
path Parameters
idResource id.
keyResource id.
Set a custom field on a deal › Request Body
valueThe value to store, as text. A short_text field takes one line of 200 characters or fewer, and line breaks change to spaces. A number,money or percent field takes a number like 1200 or 4.5, a date field takes YYYY-MM-DD, a checkbox takes true or false, a url takes a full web address, a select field takes one of its options, and a multi_select field takes a JSON array of its options, like ["Appraisal","Insurance"]. Send an empty string to clear the field.
Set a custom field on a deal › Responses
Success
successAlways true on a successful response.
The requested record.
See who a deal's mail goes out as
The broker, the mailbox and the brand that client email on this deal uses. BrokerPlus resolves it the same way a send does, from the deal's assigned broker. To change it, assign another broker, or change the team's brand in BrokerPlus. You cannot set the sender through the API.
path Parameters
idResource id.
See who a deal's mail goes out as › Responses
Success
successAlways true on a successful response.
The requested record.
Create or update deals in a batch
Creates or updates up to 100 deals in one request. Each item is the body of POST /v1/deals for a new deal, or of PATCH /v1/deals/{id} for a deal that exists. Send external_id with namespace, and the next batch with that id updates the same deal. The items are not one transaction: an item that fails does not stop the others. Each item counts as one request against the rate limit. Refer to Migrate from another CRM.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Create or update deals in a batch › Request Body
From 1 to 100 records. BrokerPlus writes them in this order.
namespace^[A-Za-z0-9_.-]+$The name of the system that your external_id values come from, for example zoho. It is not case-sensitive. It is necessary when an item has an external_id. Two systems can then use the same id without a conflict.
Create or update deals in a batch › Responses
Success
successAlways true on a successful response.
The requested record.
Read a deal's compliance checklist
The compliance checklist of the deal, as the broker sees it on the deal: the checkpoints, the open items, the state of the identity, know-your-client, and screening checks on each party, the consents, the suitability answers, and the required documents. This is a read. The ID documents, ID numbers, dates of birth, and screening results are not published.
path Parameters
idResource id.
Read a deal's compliance checklist › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's credit reports
The credit reports on the deal, newest first: the score, the bureau, when BrokerPlus got the report, and the account totals that the deal shows. The report itself, its accounts, and the account numbers are not published. The API cannot pull credit: the broker does that in BrokerPlus.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
List a deal's credit reports › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
List a deal's know-your-client records
The know-your-client records on the deal, one for each party that has one, as the KYC editor on the deal's compliance tab shows them: the purpose of the relationship, the occupation, the source of funds, the third-party determination, and the identity and politically exposed person answers that came with an imported deal. The ID document number is masked, and the credit file number is not published. GET /deals/{id}/compliance tells you which parties still need a record.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
updated_sinceISO 8601 date-time, for example 2026-10-01T00:00:00Z. Returns only rows changed at or after it, in updated_at order and then id order, oldest first. A value that is not ISO 8601 gets 400 VALIDATION_ERROR.
after_idUse with updated_since to read the next page of a sync. Send the updated_at and id of the last row you read: the list then starts after that row, and a row that changes while you sync cannot be skipped. Keep page at 1. Without updated_since it gets 400 VALIDATION_ERROR.
List a deal's know-your-client records › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Retrieve a party's know-your-client record
The know-your-client record of one party on the deal. contactId is the party's contact.
path Parameters
idResource id.
contactIdResource id.
Retrieve a party's know-your-client record › Responses
Success
successAlways true on a successful response.
The requested record.
Save a party's know-your-client record
Saves the know-your-client record of one party on the deal, as the KYC editor does. It makes the record if the party has none. Only the fields you send change; third_parties replaces the whole list. The identity and politically exposed person fields from an imported deal are read only.
path Parameters
idResource id.
contactIdResource id.
Save a party's know-your-client record › Request Body
relationship_purposeThe purpose of the relationship.
intended_natureThe intended nature of the relationship.
is_repeat_clientTrue when the brokerage already works with the client.
occupationThe occupation of a person.
employer_or_business_nameThe employer, or the business name.
nature_of_businessThe nature of the business of an entity.
delivery_channelHow the client came to the broker.
source_of_funds_knownTrue when the source of the funds is known.
source_of_funds_descriptionWhere the funds come from.
third_party_determinationWhether the client acts for another person. A value other than not_determined sets determined_at.
third_party_measuresThe measures taken to determine it.
third_party_suspicion_reasonsWhy a third party is still suspected.
client_own_behalf_attestedTrue when the client attests they act for themselves.
The whole list of third parties, at most 20. It replaces the list on file. Leave it out to keep the list.
Save a party's know-your-client record › Responses
Success
successAlways true on a successful response.
The requested record.
List a deal's entity verifications
The entity verifications on the deal, one for each company party that has one: whether the broker confirmed that the entity exists, who owns and controls it, and who can sign for it.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
updated_sinceISO 8601 date-time, for example 2026-10-01T00:00:00Z. Returns only rows changed at or after it, in updated_at order and then id order, oldest first. A value that is not ISO 8601 gets 400 VALIDATION_ERROR.
after_idUse with updated_since to read the next page of a sync. Send the updated_at and id of the last row you read: the list then starts after that row, and a row that changes while you sync cannot be skipped. Keep page at 1. Without updated_since it gets 400 VALIDATION_ERROR.
List a deal's entity verifications › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
Retrieve a party's entity verification
The entity verification of one company party on the deal. contactId is the party's contact.
path Parameters
idResource id.
contactIdResource id.
Retrieve a party's entity verification › Responses
Success
successAlways true on a successful response.
The requested record.
Save a party's entity verification
Saves the entity verification of one company party on the deal, as the KYC editor does. It makes the verification if the party has none. Only the fields you send change; controllers replaces the whole list. The documents the broker attached in BrokerPlus are not changed.
path Parameters
idResource id.
contactIdResource id.
Save a party's entity verification › Request Body
statusThe broker's conclusion.
registry_sourceThe registry or source searched.
record_typeThe type of record.
registration_numberThe registration number.
jurisdictionWhere the entity is registered.
An ISO 8601 date, YYYY-MM-DD, or a date-time with an offset.
confirmation_measuresThe measures taken to confirm.
unable_to_confirm_reasonWhy it could not be confirmed.
senior_managing_officer_nameThe senior managing officer.
senior_managing_officer_titleThat officer's title.
treated_as_high_riskTrue to treat the entity as high risk.
no_owner_at_or_above_thresholdTrue when nobody owns 25 percent or more.
authority_to_bind_confirmedTrue when the authority to sign is confirmed.
authority_to_bind_basisHow it was confirmed.
The whole list of people, at most 50. It replaces the list on file. Leave it out to keep the list.
Save a party's entity verification › Responses
Success
successAlways true on a successful response.
The requested record.
Read a deal's risk assessment
The FINTRAC risk assessment of the deal, as the broker fills it in on the deal's compliance tab: the reportable transaction types, the fraud and money-laundering questions, the FINTRAC report, and the broker's risk level for the transaction. This rates the transaction. The risk rating of each client is on GET /deals/{id}/compliance.
path Parameters
idResource id.
Read a deal's risk assessment › Responses
Success
successAlways true on a successful response.
The requested record.
Save a deal's risk assessment
Saves the FINTRAC risk assessment of the deal, as the broker does on the deal's compliance tab. It makes the assessment if the deal has none. Only the fields you send change, and the answers you send are added to the answers on file. The politically exposed person answer is read only.
path Parameters
idResource id.
Save a deal's risk assessment › Request Body
Answers to set, by question. The answers you do not send stay as they are.
Answers to set, by question. The answers you do not send stay as they are. The keys: prior_relationship, criminal_history, face_to_face_id, represented_by_intermediary, concealed_identity, large_transfers_unknown_source, broad_geographic_same_day, unusual_payment_methods, unjustified_cash, profile_cashflow_mismatch, unusual_for_occupation, unusual_for_history, sparse_records, anything_else_unusual, canadian_resident, near_border_crossing, organized_crime_area, high_crime_area, intermediary_holding_accounts, client_is_entity, offshore_interests, high_risk_countries, suspected_pep, unregistered_charity.
high_risk_neighbourhoodTrue for a high-risk neighbourhood.
report_statusWhere the FINTRAC report is.
risk_levelThe broker's risk level.
method_notesHow the broker reached the risk level.
third_party_method_notesWhat the broker did to find out if a third party is involved.
identity_verifiedTrue when identity was verified.
identity_verification_methodHow identity was verified.
completedtrue marks the assessment complete now. false opens it again. Leave it out to keep it as it is.
Save a deal's risk assessment › Responses
Success
successAlways true on a successful response.
The requested record.
Upload evidence for a custom requirement
Uploads a file to the deal and attaches it to one custom requirement of the deal's compliance checklist, as the requirement's upload button does. obligationId is custom_obligation_id in document_requirements of GET /deals/{id}/compliance. Send the file as multipart/form-data in a file field, or as JSON with content_base64. The file is also a document on the deal. Nothing is sent.
path Parameters
idResource id.
obligationIdResource id.
Headers
Idempotency-KeyOptional for POST. An authorized retry with the same method, path, and exact body returns the stored response. Reservations last 24 hours. They belong to the original API key and broker. Reconcile uncertain results before you use a new key.
Upload evidence for a custom requirement › Request Body
fileThe file. 50 MB maximum. Allowed: PDF, JPEG, PNG, TIFF, WebP, Word (.docx), Excel (.xlsx), or CSV. A photo is stored as a one-page PDF.
Upload evidence for a custom requirement › Responses
Success
successAlways true on a successful response.
The requested record.
Take evidence off a custom requirement
Takes a document off a custom requirement of the deal's compliance checklist. The document stays on the deal: only the link to the requirement is removed.
path Parameters
idResource id.
obligationIdResource id.
documentIdResource id.
Take evidence off a custom requirement › Responses
Success
successAlways true on a successful response.
The requested record.
List the identity verifications of a deal's parties
The identity verifications of the people on the deal, newest first, with the evidence each one examined. A verification belongs to the person, so one started from another deal is listed too. The document number is masked, and the images, the reports, and the credit file reference are not published. Reviewing a verification happens in BrokerPlus.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
updated_sinceISO 8601 date-time, for example 2026-10-01T00:00:00Z. Returns only rows changed at or after it, in updated_at order and then id order, oldest first. A value that is not ISO 8601 gets 400 VALIDATION_ERROR.
after_idUse with updated_since to read the next page of a sync. Send the updated_at and id of the last row you read: the list then starts after that row, and a row that changes while you sync cannot be skipped. Keep page at 1. Without updated_since it gets 400 VALIDATION_ERROR.
List the identity verifications of a deal's parties › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.
List a deal's activity
The activity trail of the deal, newest first: the messages and calls, the broker notes, and the changes to the deal. It holds the newest 200 entries of each kind. Read the detail with record_type and record_id.
path Parameters
idResource id.
query Parameters
page1-indexed page number, up to 1000000.
page_sizeRows per page. Capped at 100.
updated_sinceISO 8601 date-time, for example 2026-10-01T00:00:00Z. Returns only entries that happened at or after it. A value that is not ISO 8601 gets 400 VALIDATION_ERROR.
List a deal's activity › Responses
Success
successAlways true on a successful response.
The page of results. The endpoint description and the Pagination guide give the order.
Offset pagination. Page forward until page reaches total_pages.