Search Follow Up Boss leads, review calls and deals, and add notes, tasks and deal updates.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a note to a contact's timeline. FUB: POST /v1/notes.
Note content.
The person id.
Render HTML tags in the body.
Note title.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Add a note to a contact's timeline. FUB: POST /v1/notes.
| Argument | Type | Description |
|---|---|---|
| body* | string | Note content. |
| isHtml | boolean | Render HTML tags in the body. |
| subject | string | Note title. |
| personId* | integer | The person id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"personId",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Note content."
},
"isHtml": {
"type": "boolean",
"description": "Render HTML tags in the body."
},
"subject": {
"type": "string",
"description": "Note title."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The person id.",
"exclusiveMinimum": 0
}
}
}Check if a contact with this email or phone already exists anywhere in the account (even ones this user cannot see) and who it is assigned to. Use before adding a lead. FUB: GET /v1/people/checkDuplicate.
| Argument | Type | Description |
|---|---|---|
| string | Email address to look for. | |
| phone | string | Phone number to look for. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"email": {
"type": "string",
"description": "Email address to look for."
},
"phone": {
"type": "string",
"description": "Phone number to look for."
}
}
}Create a deal in a pipeline stage (stage ids from fub_list_pipelines). Include userIds — a deal with no users is invisible to agents. FUB: POST /v1/deals.
| Argument | Type | Description |
|---|---|---|
| name* | string | Deal name. |
| price | integer | |
| stageId* | integer | Pipeline stage id. |
| userIds | array | User (agent) ids on the deal. |
| peopleIds | array | Contact ids on the deal. |
| description | string | |
| possessionDate | string | |
| teamCommission | integer | Team commission split. |
| agentCommission | integer | Agent commission split. |
| commissionValue | integer |
Create a task on a contact, assigned to a user (assignedUserId or assignedTo is required). FUB: POST /v1/tasks.
| Argument | Type | Description |
|---|---|---|
| name | string | Task name. |
| type | string | |
| dueDate | string | YYYY-MM-DD. |
| personId* | integer | The person id. |
| assignedTo | string | Full name of the user to assign (or give assignedUserId). |
| dueDateTime | string | With time, e.g. 2026-11-16T15:00:00-05:00. |
| isCompleted | boolean | |
| assignedUserId | integer | User id to assign (or give assignedTo). |
| remindSecondsBefore | integer | Reminder lead time; only for tasks with a due time. |
Who the credential belongs to: the account (id, domain, owner) and the authenticated user. A cheap way to confirm the API key works. FUB: GET /v1/identity.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Fetch one contact by id. Pass fields="allFields" to include custom fields and everything else. FUB: GET /v1/people/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The person id. |
| fields | string | Comma-separated fields to return, or "allFields" / "allCustom". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The person id.",
"exclusiveMinimum": 0
},
"fields": {
"type": "string",
"description": "Comma-separated fields to return, or \"allFields\" / \"allCustom\"."
}
}
}Count leads from lead sources (e.g. Zillow) per assigned agent, how many reached the closed stage(s) (conversion rate), and leads per lender user (e.g. Zillow Home Loans loan officers). Use it to count instead of paging through fub_search_people. The numbers approximate FUB's in-app Lead Source report, which has no API, and cover only the people the API key can see (use an owner, admin or broker key for the whole account). At most 100 FUB requests per call (one per count). FUB: GET /v1/people totals, GET /v1/users.
| Argument | Type | Description |
|---|---|---|
| sources* | array | Lead source names exactly as FUB stores them, e.g. ["Zillow", "Zillow Flex"]. The source field of fub_search_people results shows them. |
| userIds | array | Only these agents. Default: every user that is not a Lender and not Inactive. |
| closedStages | array | Stage names that count as converted, default ["Closed"] (see fub_list_stages). |
| createdAfter | string | Only leads created after this time, ISO-8601 UTC, e.g. 2026-07-01T00:00:00Z. |
| includeLenders | boolean | Also count leads per Lender user. Default true. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sources"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 5,
"minItems": 1,
"description": "Lead source names exactly as FUB stores them, e.g. [\"Zillow\", \"Zillow Flex\"]. The source field of fub_search_people results shows them."
},
"userIds": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 50,
"description": "Only these agents. Default: every user that is not a Lender and not Inactive."
},
"closedStages": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 5,
"description": "Stage names that count as converted, default [\"Closed\"] (see fub_list_stages)."
},
"createdAfter": {
"type": "string",
"description": "Only leads created after this time, ISO-8601 UTC, e.g. 2026-07-01T00:00:00Z."
},
"includeLenders": {
"type": "boolean",
"description": "Also count leads per Lender user. Default true."
}
}
}The account's action plans (drip campaigns): id, name and status. Gives the names for the actionPlanId values of fub_list_person_action_plans. FUB: GET /v1/actionPlans.
| Argument | Type | Description |
|---|---|---|
| ids | string | Comma-separated action plan ids, e.g. "287564,67484". |
| sort | string | Sort order. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| status | string | Plan status filter. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "string",
"description": "Comma-separated action plan ids, e.g. \"287564,67484\"."
},
"sort": {
"enum": [
"id",
"name"
],
"type": "string",
"description": "Sort order."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"status": {
"enum": [
"Active",
"Deleted",
"Active,Deleted"
],
"type": "string",
"description": "Plan status filter."
}
}
}Calendar appointments with invitees, type and outcome. Filter by person, user, or a start+end window (both required together). FUB: GET /v1/appointments.
| Argument | Type | Description |
|---|---|---|
| end | string | Window end (ISO-8601). Must be combined with start. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| start | string | Window start (ISO-8601). Must be combined with end. |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| userId | integer | Only appointments for this user. |
| personId | string | Person id, or a comma-separated list of ids. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "string",
"description": "Window end (ISO-8601). Must be combined with start."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"start": {
"type": "string",
"description": "Window start (ISO-8601). Must be combined with end."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"userId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only appointments for this user."
},
"personId": {
"type": "string",
"description": "Person id, or a comma-separated list of ids."
}
}
}Logged phone calls with outcome, direction and duration. Filter by person or number. FUB: GET /v1/calls.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size, 1-100 (FUB default 10). |
| phone | string | Calls to or from this person's number. |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| personId | integer | Only calls with this person. |
| toNumber | string | Calls to this number. |
| fromNumber | string | Calls from this number. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"phone": {
"type": "string",
"description": "Calls to or from this person's number."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only calls with this person."
},
"toNumber": {
"type": "string",
"description": "Calls to this number."
},
"fromNumber": {
"type": "string",
"description": "Calls from this number."
}
}
}The account's contact custom fields: label, API name (customXxx), type and dropdown choices. Use the name as a key in customFields. FUB: GET /v1/customFields.
| Argument | Type | Description |
|---|---|---|
| label | string | Find a custom field by label. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"label": {
"type": "string",
"description": "Find a custom field by label."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
}
}
}Deals (transactions) with stage, price, people, agents and commission. Filter by pipeline, user, person or status. The response metadata includes totalByStageId. FUB: GET /v1/deals.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| status | string | Only deals with this status. |
| userId | integer | Only deals for this user. |
| personId | integer | Only deals for this person. |
| pipelineId | integer | Only deals in this pipeline. |
| includeDeleted | boolean | Include Deleted deals. |
| includeArchived | boolean | Include Archived deals. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"status": {
"enum": [
"Active",
"Archived",
"Deleted"
],
"type": "string",
"description": "Only deals with this status."
},
"userId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only deals for this user."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only deals for this person."
},
"pipelineId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only deals in this pipeline."
},
"includeDeleted": {
"type": "boolean",
"description": "Include Deleted deals."
},
"includeArchived": {
"type": "boolean",
"description": "Include Archived deals."
}
}
}Lead activity: registrations, inquiries, viewed/saved properties, website visits, etc. Filter by person or type. Some events are only visible in the FUB app. FUB: GET /v1/events.
| Argument | Type | Description |
|---|---|---|
| next | string | Cursor from the previous page's _metadata.next. Recommended over offset. |
| type | string | Comma-separated event types, e.g. "Registration,Property Inquiry". One of: Registration, Inquiry, Seller Inquiry, Property Inquiry, General Inquiry, Viewed Property, Saved Property, Visited Website, Incoming Call, Unsubscribed, Property Search, Saved Property Search, Visited Open House, Viewed Page. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| personId | integer | Only events for this person. |
| hasProperty | boolean | Only events with (or without) a property attached. |
| propertyAddress | string | Partial match on the property address. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"next": {
"type": "string",
"description": "Cursor from the previous page's _metadata.next. Recommended over offset."
},
"type": {
"type": "string",
"description": "Comma-separated event types, e.g. \"Registration,Property Inquiry\". One of: Registration, Inquiry, Seller Inquiry, Property Inquiry, General Inquiry, Viewed Property, Saved Property, Visited Website, Incoming Call, Unsubscribed, Property Search, Saved Property Search, Visited Open House, Viewed Page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only events for this person."
},
"hasProperty": {
"type": "boolean",
"description": "Only events with (or without) a property attached."
},
"propertyAddress": {
"type": "string",
"description": "Partial match on the property address."
}
}
}Which people are on which action plan, with the status of each assignment (e.g. "Running", "Paused"). Give personId for one contact's plans, or actionPlanId for everyone on one plan. For many contacts, list each active plan's people (limit 100; page with offset until _metadata.total is covered) instead of one call per contact. Shows classic action plans only; Automations 2.0 are in fub_list_person_automations when that tool is listed. FUB: GET /v1/actionPlansPeople.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| personId | integer | The plans applied to this person. |
| actionPlanId | integer | The people on this action plan. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The plans applied to this person.",
"exclusiveMinimum": 0
},
"actionPlanId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The people on this action plan.",
"exclusiveMinimum": 0
}
}
}Deal pipelines with their stages (the stage ids that fub_create_deal / fub_update_deal take). FUB: GET /v1/pipelines.
| Argument | Type | Description |
|---|---|---|
| name | string | Exact pipeline name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Exact pipeline name."
}
}
}Contact lifecycle stages (Lead, Nurture, Past Client, Trash…) with people counts — the names fub_search_people and fub_update_person take as "stage". FUB: GET /v1/stages.
| Argument | Type | Description |
|---|---|---|
| sort | string | Sort order. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sort": {
"enum": [
"orderWeight",
"id",
"name"
],
"type": "string",
"description": "Sort order."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
}
}
}Tasks (follow-ups, calls, showings…). Filter by person, assignee, type, completion, or due window (due="today"|"overdue"|"upcoming"). FUB: GET /v1/tasks.
| Argument | Type | Description |
|---|---|---|
| due | string | Due window. |
| name | string | Partial match on task name. |
| type | string | Comma-separated types. One of: Follow Up, Call, Text, Email, Appointment, Showing, Closing, Open House, Thank You. |
| limit | integer | Page size, 1-100 (FUB default 10). |
| dueEnd | string | Due at or before this time. |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| dueStart | string | Due at or after this time. |
| personId | integer | Only tasks for this person. |
| assignedTo | string | Only tasks assigned to this user (full name). |
| isCompleted |
Text messages for a person or a phone number (message bodies may be hidden by FUB for privacy). FUB: GET /v1/textMessages.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| personId | integer | Only texts with this person. |
| toNumber | string | Texts sent to this number. |
| fromNumber | string | Texts sent from this number. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only texts with this person."
},
"toNumber": {
"type": "string",
"description": "Texts sent to this number."
},
"fromNumber": {
"type": "string",
"description": "Texts sent from this number."
}
}
}Users in the account (agents, brokers, lenders) — the ids to assign people, tasks and deals to. FUB: GET /v1/users.
| Argument | Type | Description |
|---|---|---|
| name | string | Exact full name. |
| role | string | e.g. "Broker", "Agent", "Lender". |
| sort | string | Sort order. |
| string | Email address. | |
| limit | integer | Page size, 1-100 (FUB default 10). |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Exact full name."
},
"role": {
"type": "string",
"description": "e.g. \"Broker\", \"Agent\", \"Lender\"."
},
"sort": {
"enum": [
"id",
"name",
"created"
],
"type": "string",
"description": "Sort order."
},
"email": {
"type": "string",
"description": "Email address."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
}
}
}Record a phone call made or received outside FUB, with its outcome. Does not place a call. FUB: POST /v1/calls.
| Argument | Type | Description |
|---|---|---|
| note | string | Call notes. |
| phone* | string | The number called or calling. |
| userId | integer | User who took the call (admins only). |
| outcome | string | |
| duration | integer | Seconds. |
| personId* | integer | The person id. |
| toNumber | string | |
| fromNumber | string | |
| isIncoming* | boolean | true for an incoming call, false for outgoing. |
| recordingUrl | string |
Search contacts and leads. Criteria combine with AND. Name filters are partial matches. Newest first by default. People in the Trash stage are excluded unless includeTrash is true. Not every field is returned by default — pass `fields` (e.g. "allFields" or a comma list) for more. FUB: GET /v1/people.
| Argument | Type | Description |
|---|---|---|
| name | string | Partial match on full name. |
| next | string | Cursor from the previous page's _metadata.next. Recommended over offset. |
| sort | string | Sort field, e.g. "created", "lastActivity", "name"; prefix "-" for descending. |
| tags | string | Comma-separated tags; matches ANY ("Foo,Bar"). |
| string | Exact email address. | |
| limit | integer | Page size, 1-100 (FUB default 10). |
| phone | string | Phone number. |
| stage | string | Stage name, e.g. "Lead", "Past Client" (see fub_list_stages). |
| fields | string |
Add a new lead or record activity on an existing one — FUB's documented way to create leads. FUB de-duplicates by email/phone (or use person.id to target a contact), routes the lead per Lead Flow, notifies the agent and runs action plans for Registration / Inquiry types. A 204 means the lead flow for this source is archived and the event was ignored. FUB: POST /v1/events.
| Argument | Type | Description |
|---|---|---|
| type* | string | Event type. "Inquiry" becomes Property or General Inquiry automatically. |
| person* | object | The lead. |
| source | string | Lead source name, e.g. "MyWebsite.com". Used for Lead Flow routing. |
| system | string | Name of the system sending the lead. |
| message | string | A message from the lead. |
| pageUrl | string | For Viewed Page events. |
| property | object | The property the event is about. |
| pageTitle | string | For Viewed Page events. |
Update a deal — move it to another stage, change price, dates, people or agents. peopleIds/userIds replace the full list. FUB: PUT /v1/deals/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The deal id. |
| name | string | |
| price | integer | |
| stageId | integer | Move to this pipeline stage. |
| userIds | array | |
| peopleIds | array | |
| description | string | |
| possessionDate | string | |
| commissionValue | integer | |
| dueDiligenceDate | string | |
| projectedCloseDate |
Update a contact's fields. CAUTION: `tags` REPLACES all tags unless mergeTags is true; `phones` and `emails` REPLACE the full list (send existing ones too). Setting contacted=true pauses action plans. source/sourceUrl cannot be changed after creation. FUB: PUT /v1/people/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The person id. |
| tags | array | |
| price | integer | |
| stage | string | Stage name (see fub_list_stages). |
| emails | array | |
| phones | array | |
| lastName | string | |
| addresses | array | |
| contacted | boolean | |
| firstName | string | |
Update a task — mark it complete, rename, retype or reassign it. FUB: PUT /v1/tasks/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The task id. |
| name | string | |
| type | string | |
| personId | integer | |
| assignedTo | string | |
| isCompleted | boolean | Mark complete (true) or reopen (false). |
| assignedUserId | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The task id.",
"exclusiveMinimum": 0
},
"name": {
"type": "string"
},
"type": {
"enum": [
"Follow Up",
"Call",
"Text",
"Email",
"Appointment",
"Showing",
"Closing",
"Open House",
"Thank You"
],
"type": "string"
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedTo": {
"type": "string"
},
"isCompleted": {
"type": "boolean",
"description": "Mark complete (true) or reopen (false)."
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}| dueDiligenceDate | string |
| projectedCloseDate | string | Projected close date. |
| earnestMoneyDueDate | string |
| finalWalkThroughDate | string |
| mutualAcceptanceDate | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"stageId"
],
"properties": {
"name": {
"type": "string",
"description": "Deal name."
},
"price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"stageId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Pipeline stage id."
},
"userIds": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"description": "User (agent) ids on the deal."
},
"peopleIds": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"description": "Contact ids on the deal."
},
"description": {
"type": "string"
},
"possessionDate": {
"type": "string"
},
"teamCommission": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Team commission split."
},
"agentCommission": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Agent commission split."
},
"commissionValue": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"dueDiligenceDate": {
"type": "string"
},
"projectedCloseDate": {
"type": "string",
"description": "Projected close date."
},
"earnestMoneyDueDate": {
"type": "string"
},
"finalWalkThroughDate": {
"type": "string"
},
"mutualAcceptanceDate": {
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"personId"
],
"properties": {
"name": {
"type": "string",
"description": "Task name."
},
"type": {
"enum": [
"Follow Up",
"Call",
"Text",
"Email",
"Appointment",
"Showing",
"Closing",
"Open House",
"Thank You"
],
"type": "string"
},
"dueDate": {
"type": "string",
"description": "YYYY-MM-DD."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The person id.",
"exclusiveMinimum": 0
},
"assignedTo": {
"type": "string",
"description": "Full name of the user to assign (or give assignedUserId)."
},
"dueDateTime": {
"type": "string",
"description": "With time, e.g. 2026-11-16T15:00:00-05:00."
},
"isCompleted": {
"type": "boolean"
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "User id to assign (or give assignedTo)."
},
"remindSecondsBefore": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Reminder lead time; only for tasks with a due time."
}
}
}| boolean |
| Completed or not. |
| assignedUserId | integer | Only tasks assigned to this user id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"due": {
"enum": [
"today",
"overdue",
"upcoming"
],
"type": "string",
"description": "Due window."
},
"name": {
"type": "string",
"description": "Partial match on task name."
},
"type": {
"type": "string",
"description": "Comma-separated types. One of: Follow Up, Call, Text, Email, Appointment, Showing, Closing, Open House, Thank You."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"dueEnd": {
"type": "string",
"description": "Due at or before this time."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"dueStart": {
"type": "string",
"description": "Due at or after this time."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only tasks for this person."
},
"assignedTo": {
"type": "string",
"description": "Only tasks assigned to this user (full name)."
},
"isCompleted": {
"type": "boolean",
"description": "Completed or not."
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only tasks assigned to this user id."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"personId",
"phone",
"isIncoming"
],
"properties": {
"note": {
"type": "string",
"description": "Call notes."
},
"phone": {
"type": "string",
"description": "The number called or calling."
},
"userId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "User who took the call (admins only)."
},
"outcome": {
"enum": [
"Interested",
"Not Interested",
"Left Message",
"No Answer",
"Busy",
"Bad Number"
],
"type": "string"
},
"duration": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds."
},
"personId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The person id.",
"exclusiveMinimum": 0
},
"toNumber": {
"type": "string"
},
"fromNumber": {
"type": "string"
},
"isIncoming": {
"type": "boolean",
"description": "true for an incoming call, false for outgoing."
},
"recordingUrl": {
"type": "string"
}
}
}| Comma-separated fields to return, or "allFields" / "allCustom". |
| offset | integer | Rows to skip. For deep paging prefer `next`. |
| source | string | Lead source, e.g. "Zillow". |
| lastName | string | Partial match on last name. |
| contacted | boolean | Whether they have been contacted. |
| firstName | string | Partial match on first name. |
| assignedTo | string | Full name of the assigned agent. |
| priceAbove | integer | Price above this value. |
| priceBelow | integer | Price below this value. |
| smartListId | integer | Only people matching this Smart List. |
| createdAfter | string | ISO-8601 UTC, e.g. 2026-07-01T00:00:00Z. |
| includeTrash | boolean | Include people in the Trash stage. |
| updatedAfter | string | ISO-8601 UTC. |
| assignedPondId | integer | Assigned pond id. |
| assignedUserId | integer | Assigned agent's user id. |
| lastActivityAfter | string | e.g. "2026-01-31 00:00:00". |
| lastActivityBefore | string | e.g. "2026-01-31 00:00:00". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Partial match on full name."
},
"next": {
"type": "string",
"description": "Cursor from the previous page's _metadata.next. Recommended over offset."
},
"sort": {
"type": "string",
"description": "Sort field, e.g. \"created\", \"lastActivity\", \"name\"; prefix \"-\" for descending."
},
"tags": {
"type": "string",
"description": "Comma-separated tags; matches ANY (\"Foo,Bar\")."
},
"email": {
"type": "string",
"description": "Exact email address."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size, 1-100 (FUB default 10)."
},
"phone": {
"type": "string",
"description": "Phone number."
},
"stage": {
"type": "string",
"description": "Stage name, e.g. \"Lead\", \"Past Client\" (see fub_list_stages)."
},
"fields": {
"type": "string",
"description": "Comma-separated fields to return, or \"allFields\" / \"allCustom\"."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows to skip. For deep paging prefer `next`."
},
"source": {
"type": "string",
"description": "Lead source, e.g. \"Zillow\"."
},
"lastName": {
"type": "string",
"description": "Partial match on last name."
},
"contacted": {
"type": "boolean",
"description": "Whether they have been contacted."
},
"firstName": {
"type": "string",
"description": "Partial match on first name."
},
"assignedTo": {
"type": "string",
"description": "Full name of the assigned agent."
},
"priceAbove": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Price above this value."
},
"priceBelow": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Price below this value."
},
"smartListId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only people matching this Smart List."
},
"createdAfter": {
"type": "string",
"description": "ISO-8601 UTC, e.g. 2026-07-01T00:00:00Z."
},
"includeTrash": {
"type": "boolean",
"description": "Include people in the Trash stage."
},
"updatedAfter": {
"type": "string",
"description": "ISO-8601 UTC."
},
"assignedPondId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Assigned pond id."
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Assigned agent's user id."
},
"lastActivityAfter": {
"type": "string",
"description": "e.g. \"2026-01-31 00:00:00\"."
},
"lastActivityBefore": {
"type": "string",
"description": "e.g. \"2026-01-31 00:00:00\"."
}
}
}| occurredAt |
| string |
| ISO-8601 time it happened. Events older than a day are historical and do not trigger workflows. |
| description | string | Any additional information. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"person"
],
"properties": {
"type": {
"enum": [
"Registration",
"Inquiry",
"Seller Inquiry",
"Property Inquiry",
"General Inquiry",
"Viewed Property",
"Saved Property",
"Visited Website",
"Incoming Call",
"Unsubscribed",
"Property Search",
"Saved Property Search",
"Visited Open House",
"Viewed Page"
],
"type": "string",
"description": "Event type. \"Inquiry\" becomes Property or General Inquiry automatically."
},
"person": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Existing person id to attach this event to."
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"stage": {
"type": "string"
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"type": {
"type": "string",
"description": "e.g. \"home\", \"work\"."
},
"value": {
"type": "string",
"description": "The email address."
}
}
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"type": {
"type": "string",
"description": "e.g. \"mobile\", \"home\", \"work\"."
},
"value": {
"type": "string",
"description": "The phone number, e.g. 888-555-1234."
}
}
}
},
"source": {
"type": "string"
},
"lastName": {
"type": "string"
},
"addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"code": {
"type": "string",
"description": "Postal/ZIP code, as a string."
},
"type": {
"type": "string",
"description": "e.g. \"home\", \"work\", \"mailing\"."
},
"state": {
"type": "string",
"description": "Abbreviated state code, e.g. \"CA\"."
},
"street": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
},
"contacted": {
"type": "boolean"
},
"firstName": {
"type": "string"
},
"sourceUrl": {
"type": "string"
},
"assignedTo": {
"type": "string",
"description": "Full name of the agent."
},
"customFields": {
"type": "object",
"description": "Account custom fields, keyed by their API name (e.g. {\"customBirthday\": \"1990-02-16\"}). See the `name` column of fub_list_custom_fields. null clears a value.",
"propertyNames": {
"type": "string",
"pattern": "^custom[A-Za-z0-9_]+$"
},
"additionalProperties": {
"type": [
"string",
"number",
"null"
]
}
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedLenderId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedLenderName": {
"type": "string"
}
},
"description": "The lead."
},
"source": {
"type": "string",
"description": "Lead source name, e.g. \"MyWebsite.com\". Used for Lead Flow routing."
},
"system": {
"type": "string",
"description": "Name of the system sending the lead."
},
"message": {
"type": "string",
"description": "A message from the lead."
},
"pageUrl": {
"type": "string",
"description": "For Viewed Page events."
},
"property": {
"type": "object",
"properties": {
"lot": {
"type": "string",
"description": "Acres."
},
"url": {
"type": "string"
},
"area": {
"type": "string",
"description": "Square feet."
},
"city": {
"type": "string"
},
"code": {
"type": "string"
},
"type": {
"type": "string"
},
"price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"state": {
"type": "string"
},
"street": {
"type": "string"
},
"forRent": {
"type": "boolean"
},
"bedrooms": {
"type": "string"
},
"bathrooms": {
"type": "string"
},
"mlsNumber": {
"type": "string"
}
},
"description": "The property the event is about."
},
"pageTitle": {
"type": "string",
"description": "For Viewed Page events."
},
"occurredAt": {
"type": "string",
"description": "ISO-8601 time it happened. Events older than a day are historical and do not trigger workflows."
},
"description": {
"type": "string",
"description": "Any additional information."
}
}
}| string |
| Projected close date. |
| earnestMoneyDueDate | string |
| finalWalkThroughDate | string |
| mutualAcceptanceDate | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The deal id.",
"exclusiveMinimum": 0
},
"name": {
"type": "string"
},
"price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"stageId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Move to this pipeline stage."
},
"userIds": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"peopleIds": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"description": {
"type": "string"
},
"possessionDate": {
"type": "string"
},
"commissionValue": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"dueDiligenceDate": {
"type": "string"
},
"projectedCloseDate": {
"type": "string",
"description": "Projected close date."
},
"earnestMoneyDueDate": {
"type": "string"
},
"finalWalkThroughDate": {
"type": "string"
},
"mutualAcceptanceDate": {
"type": "string"
}
}
}| mergeTags |
| boolean |
| Merge `tags` into the existing tags instead of replacing them. |
| assignedTo | string | Full name of the agent. |
| background | string | Background notes (multi-line). |
| timeframeId | integer |
| customFields | object | Account custom fields, keyed by their API name (e.g. {"customBirthday": "1990-02-16"}). See the `name` column of fub_list_custom_fields. null clears a value. |
| assignedPondId | integer |
| assignedUserId | integer |
| assignedLenderId | integer |
| assignedLenderName | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The person id.",
"exclusiveMinimum": 0
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"stage": {
"type": "string",
"description": "Stage name (see fub_list_stages)."
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"type": {
"type": "string",
"description": "e.g. \"home\", \"work\"."
},
"value": {
"type": "string",
"description": "The email address."
},
"isPrimary": {
"type": "boolean"
}
}
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"type": {
"type": "string",
"description": "e.g. \"mobile\", \"home\", \"work\"."
},
"value": {
"type": "string",
"description": "The phone number, e.g. 888-555-1234."
},
"isPrimary": {
"type": "boolean"
}
}
}
},
"lastName": {
"type": "string"
},
"addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"code": {
"type": "string",
"description": "Postal/ZIP code, as a string."
},
"type": {
"type": "string",
"description": "e.g. \"home\", \"work\", \"mailing\"."
},
"state": {
"type": "string",
"description": "Abbreviated state code, e.g. \"CA\"."
},
"street": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
},
"contacted": {
"type": "boolean"
},
"firstName": {
"type": "string"
},
"mergeTags": {
"type": "boolean",
"description": "Merge `tags` into the existing tags instead of replacing them."
},
"assignedTo": {
"type": "string",
"description": "Full name of the agent."
},
"background": {
"type": "string",
"description": "Background notes (multi-line)."
},
"timeframeId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"customFields": {
"type": "object",
"description": "Account custom fields, keyed by their API name (e.g. {\"customBirthday\": \"1990-02-16\"}). See the `name` column of fub_list_custom_fields. null clears a value.",
"propertyNames": {
"type": "string",
"pattern": "^custom[A-Za-z0-9_]+$"
},
"additionalProperties": {
"type": [
"string",
"number",
"null"
]
}
},
"assignedPondId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedUserId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedLenderId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"assignedLenderName": {
"type": "string"
}
}
}