# BrokerPlus API

The BrokerPlus API gives your software the same book a broker works in BrokerPlus: leads,
contacts, deals and their mortgage applications, documents, tasks, meetings, messages, campaigns,
automations, and more, about 300 operations in all. It is JSON over HTTPS, with one API key.

```
https://api.mos.getbrokerplus.ca/v1
```

New here? Make your [first call](/quickstart) in two minutes, then pick the job below that matches
what you are building.

## Start from the job

<JobGrid>

<JobCard title="Capture leads" href="/capture-leads" endpoints="POST /v1/leads · GET /v1/leads?email= · GET /v1/lead-channels · lead.created">
  Send every website form and ad lead to BrokerPlus once, matched to the person if they are already in the book.
</JobCard>

<JobCard title="Sync your book" href="/sync-your-book" endpoints="GET /v1/changes · GET /v1/contacts?updated_since= · GET /v1/deals · POST /v1/webhooks">
  Keep a copy of your contacts, leads, and deals in your own database or warehouse, without missing a change.
</JobCard>

<JobCard title="Run a Claude or ChatGPT assistant" href="/mcp" endpoints="mcp.mos.getbrokerplus.ca/mcp · OAuth sign-in · brokerplus_search_operations · GET /v1/me">
  Connect an AI assistant to the book through our MCP server, so it can answer questions and draft work for the broker.
</JobCard>

<JobCard title="Migrate from another CRM" href="/migrate-from-a-crm" endpoints="POST /v1/custom-fields · POST /v1/contacts/batch · POST /v1/deals/batch · GET /v1/contacts/duplicates">
  Move contacts, deals, notes, and custom fields across in batches of 100, with no duplicates if you run it twice.
</JobCard>

<JobCard title="Automate client follow-up" href="/automations" endpoints="GET /v1/automations/catalog · POST /v1/templates · POST /v1/automations · POST /v1/automations/{id}/turn-on">
  Build the same automations as the Pulse builder: when a deal moves or a date comes up, email or text the right people.
</JobCard>

<JobCard title="React to events" href="/webhooks" endpoints="POST /v1/webhooks · deal.stage_changed · GET /v1/webhooks/{id}/deliveries · GET /v1/changes">
  Get a signed POST seconds after a lead arrives, a deal moves, or a document lands.
</JobCard>

<JobCard title="Test in a sandbox" href="/sandbox" endpoints="bp_test_ keys · sample data · GET /v1/sandbox/outbox">
  Build against a private brokerage full of sample data that records every email and text instead of sending it.
</JobCard>

</JobGrid>

## What you can do

Every area below is in the [API reference](/reference), and in the [MCP server](/mcp) for
assistants.

| Area                         | What you can do                                                                                                                         | Read                                         |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| **Leads and contacts**       | Create, find, update, merge, and archive people and companies, with addresses, extra emails and phones, consent, relationships, and tags. | [Capture leads](/capture-leads)              |
| **Deals and pipelines**      | Create, move, copy, archive, and restore deals. Set the team, participants, referral partner, commission, consents, flags, and checklist. | [How the objects fit together](/model)       |
| **Mortgage application**     | Read and write the loan terms, property, applicants, jobs, income, assets, debts, and other properties, one row at a time.              | [The application](/model#applicants-and-financials) |
| **Documents**                | List, upload, rename, verify, and delete files. Ask a client for documents, generate letters from templates, and send documents to sign. | [Documents](/files)                          |
| **Conditions and submissions** | Track what a lender still needs, satisfy or waive it, and read what went to each lender and what they decided.                        | [How the objects fit together](/model#conditions) |
| **Tasks and notes**          | Create, assign, complete, and reopen tasks, one at a time or in bulk. Write notes on contacts, deals, and tasks.                        | [How the objects fit together](/model#tasks) |
| **Scheduling**               | Read open times, book a client into a meeting type, and move or cancel the booking. Manage meeting types, hours, and blocked days.      | [How the objects fit together](/model#scheduling) |
| **Messages, mail, and calls** | Read the inbox and call log, act on a conversation, log calls from another phone system, and ask the broker to send a message.         | [Mail](/mail), [Log calls](/log-calls)       |
| **Campaigns and automations** | Build audiences, campaigns, templates, and automations, and follow each run.                                                           | [Automate client follow-up](/automations)    |
| **Intake**                   | Send a client the application to fill in, follow their progress, read the answers, and approve them or ask for changes.                 | [Run an intake](/intake)                     |
| **Equity reports and opportunities** | Track mortgages for renewal and refinance, and enroll past clients in recurring equity reports.                                 | [Equity reports](/equity-reports)            |
| **What the broker sees**     | Read and act on suggestions and notifications, and read a deal's compliance checklist, credit summary, and activity trail.              | [Broker view](/broker-view)                  |
| **Workspace setup**          | Change custom fields, tags, pipelines and stages, lead stages and channels, referral partners, task categories, and the email signature. | [Configure your workspace](/workspace)       |
| **People and reports**       | Read brokers, teams, lenders, referral partners, the open pipeline, and funded volume.                                                  | [API reference](/reference)                  |
| **Change feed and webhooks** | Follow every change in order, and get a signed POST for 23 kinds of event.                                                               | [Staying in sync](/sync), [Webhooks](/webhooks) |

A request that reaches a client, such as an email, a text, a booking, or documents to sign, goes
out at once, as the broker. A key with the `no_sending` limit cannot make these requests. See
[Reaching clients](/reaching-clients).

## What is never in the API

Some things stay in the BrokerPlus app, where a person with the right role does them. No key can
reach them.

- **Submitting a deal to a lender.** You can read submissions and lender decisions, but only the
  broker sends a deal.
- **Pulling credit.** You can read the summary of a credit report that is already on a deal, not
  order one.
- **Billing**, plans, and payments.
- **Users and roles**: inviting people, changing roles, or minting API keys.
- **Integration credentials**, phone numbers, deal locks, and compliance overrides.
- **Sensitive identifiers**: social insurance numbers, liability account numbers, and ID documents
  are never returned.

A liability that came from a credit report carries `from_credit_bureau: true`. Consumer report data
has its own redistribution rules, so check your obligations before you store or forward it.

## This API is in beta

**Any endpoint can change in a way that breaks your integration, without notice.** We publish an
endpoint when it is useful, not when it is frozen, which is why the surface is this wide. Build
defensively: ignore fields you don't recognize, and don't assume today's shape is next month's.

The [changelog](/changelog) records every change. It is the one page to watch. If you need a promise
that a shape will not move, talk to your account contact before you build on it.

## Docs for AI agents

Every page is also plain Markdown: add `.md` to its URL, for example
[`/introduction.md`](https://docs.brokerplus.ca/introduction.md).
[`/llms.txt`](https://docs.brokerplus.ca/llms.txt) indexes every page,
[`/llms-full.txt`](https://docs.brokerplus.ca/llms-full.txt) has them all in one file, and the
[OpenAPI description](https://docs.brokerplus.ca/openapi.json) has every endpoint and field. Give
an agent these URLs instead of the HTML pages.
