Follow Up Boss MCP by usefulapi
Search Follow Up Boss leads, review calls and deals, and add notes, tasks and deal updates.
Should I use this
Quality & Safety
Findings (2)
- HIGH
- INFOin fub_list_custom_fields
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"follow-up-boss": {
"url": "https://follow-up-boss.usefulapi.io/mcp"
}
}
}Remote endpoints
https://follow-up-boss.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (22)
π’fub_get_identity
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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_search_people(name, firstName, lastName, email, phone, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Partial match on full name.",
"type": "string"
},
"firstName": {
"description": "Partial match on first name.",
"type": "string"
},
"lastName": {
"description": "Partial match on last name.",
"type": "string"
},
"email": {
"description": "Exact email address.",
"type": "string"
},
"phone": {
"description": "Phone number.",
"type": "string"
},
"stage": {
"description": "Stage name, e.g. \"Lead\", \"Past Client\" (see fub_list_stages).",
"type": "string"
},
"source": {
"description": "Lead source, e.g. \"Zillow\".",
"type": "string"
},
"assignedTo": {
"description": "Full name of the assigned agent.",
"type": "string"
},
"assignedUserId": {
"description": "Assigned agent's user id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedPondId": {
"description": "Assigned pond id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"tags": {
"description": "Comma-separated tags; matches ANY (\"Foo,Bar\").",
"type": "string"
},
"smartListId": {
"description": "Only people matching this Smart List.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"contacted": {
"description": "Whether they have been contacted.",
"type": "boolean"
},
"priceAbove": {
"description": "Price above this value.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"priceBelow": {
"description": "Price below this value.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"lastActivityAfter": {
"description": "e.g. \"2026-01-31 00:00:00\".",
"type": "string"
},
"lastActivityBefore": {
"description": "e.g. \"2026-01-31 00:00:00\".",
"type": "string"
},
"createdAfter": {
"description": "ISO-8601 UTC, e.g. 2026-07-01T00:00:00Z.",
"type": "string"
},
"updatedAfter": {
"description": "ISO-8601 UTC.",
"type": "string"
},
"includeTrash": {
"description": "Include people in the Trash stage.",
"type": "boolean"
},
"sort": {
"description": "Sort field, e.g. \"created\", \"lastActivity\", \"name\"; prefix \"-\" for descending.",
"type": "string"
},
"fields": {
"description": "Comma-separated fields to return, or \"allFields\" / \"allCustom\".",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"next": {
"description": "Cursor from the previous page's _metadata.next. Recommended over offset.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_get_person(id, fields)
Fetch one contact by id. Pass fields="allFields" to include custom fields and everything else. FUB: GET /v1/people/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person id."
},
"fields": {
"description": "Comma-separated fields to return, or \"allFields\" / \"allCustom\".",
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_check_duplicate_person(email, phone)
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.
Input Schema
{
"type": "object",
"properties": {
"email": {
"description": "Email address to look for.",
"type": "string"
},
"phone": {
"description": "Phone number to look for.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_events(personId, type, hasProperty, propertyAddress, limit, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"description": "Only events for this person.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"type": {
"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.",
"type": "string"
},
"hasProperty": {
"description": "Only events with (or without) a property attached.",
"type": "boolean"
},
"propertyAddress": {
"description": "Partial match on the property address.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"next": {
"description": "Cursor from the previous page's _metadata.next. Recommended over offset.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_calls(personId, phone, toNumber, fromNumber, limit, ...)
Logged phone calls with outcome, direction and duration. Filter by person or number. FUB: GET /v1/calls.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"description": "Only calls with this person.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"phone": {
"description": "Calls to or from this person's number.",
"type": "string"
},
"toNumber": {
"description": "Calls to this number.",
"type": "string"
},
"fromNumber": {
"description": "Calls from this number.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_text_messages(personId, toNumber, fromNumber, limit, offset)
Text messages for a person or a phone number (message bodies may be hidden by FUB for privacy). FUB: GET /v1/textMessages.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"description": "Only texts with this person.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"toNumber": {
"description": "Texts sent to this number.",
"type": "string"
},
"fromNumber": {
"description": "Texts sent from this number.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_tasks(personId, assignedUserId, assignedTo, name, type, ...)
Tasks (follow-ups, calls, showingsβ¦). Filter by person, assignee, type, completion, or due window (due="today"|"overdue"|"upcoming"). FUB: GET /v1/tasks.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"description": "Only tasks for this person.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedUserId": {
"description": "Only tasks assigned to this user id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedTo": {
"description": "Only tasks assigned to this user (full name).",
"type": "string"
},
"name": {
"description": "Partial match on task name.",
"type": "string"
},
"type": {
"description": "Comma-separated types. One of: Follow Up, Call, Text, Email, Appointment, Showing, Closing, Open House, Thank You.",
"type": "string"
},
"isCompleted": {
"description": "Completed or not.",
"type": "boolean"
},
"due": {
"description": "Due window.",
"type": "string",
"enum": [
"today",
"overdue",
"upcoming"
]
},
"dueStart": {
"description": "Due at or after this time.",
"type": "string"
},
"dueEnd": {
"description": "Due at or before this time.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_appointments(personId, userId, start, end, limit, ...)
Calendar appointments with invitees, type and outcome. Filter by person, user, or a start+end window (both required together). FUB: GET /v1/appointments.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"description": "Person id, or a comma-separated list of ids.",
"type": "string"
},
"userId": {
"description": "Only appointments for this user.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"start": {
"description": "Window start (ISO-8601). Must be combined with end.",
"type": "string"
},
"end": {
"description": "Window end (ISO-8601). Must be combined with start.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_deals(pipelineId, userId, personId, status, includeArchived, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"pipelineId": {
"description": "Only deals in this pipeline.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"userId": {
"description": "Only deals for this user.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"personId": {
"description": "Only deals for this person.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"status": {
"description": "Only deals with this status.",
"type": "string",
"enum": [
"Active",
"Archived",
"Deleted"
]
},
"includeArchived": {
"description": "Include Archived deals.",
"type": "boolean"
},
"includeDeleted": {
"description": "Include Deleted deals.",
"type": "boolean"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_pipelines(name)
Deal pipelines with their stages (the stage ids that fub_create_deal / fub_update_deal take). FUB: GET /v1/pipelines.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Exact pipeline name.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_stages(sort, limit, offset)
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.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort order.",
"type": "string",
"enum": [
"orderWeight",
"id",
"name"
]
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_users(role, name, email, sort, limit, ...)
Users in the account (agents, brokers, lenders) β the ids to assign people, tasks and deals to. FUB: GET /v1/users.
Input Schema
{
"type": "object",
"properties": {
"role": {
"description": "e.g. \"Broker\", \"Agent\", \"Lender\".",
"type": "string"
},
"name": {
"description": "Exact full name.",
"type": "string"
},
"email": {
"description": "Email address.",
"type": "string"
},
"sort": {
"description": "Sort order.",
"type": "string",
"enum": [
"id",
"name",
"created"
]
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’fub_list_custom_fields(label, limit, offset)
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.
Input Schema
{
"type": "object",
"properties": {
"label": {
"description": "Find a custom field by label.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100 (FUB default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Rows to skip. For deep paging prefer `next`.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_send_lead_event(type, source, system, message, description, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"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"
],
"description": "Event type. \"Inquiry\" becomes Property or General Inquiry automatically."
},
"source": {
"description": "Lead source name, e.g. \"MyWebsite.com\". Used for Lead Flow routing.",
"type": "string"
},
"system": {
"description": "Name of the system sending the lead.",
"type": "string"
},
"message": {
"description": "A message from the lead.",
"type": "string"
},
"description": {
"description": "Any additional information.",
"type": "string"
},
"occurredAt": {
"description": "ISO-8601 time it happened. Events older than a day are historical and do not trigger workflows.",
"type": "string"
},
"person": {
"type": "object",
"properties": {
"id": {
"description": "Existing person id to attach this event to.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"stage": {
"type": "string"
},
"source": {
"type": "string"
},
"sourceUrl": {
"type": "string"
},
"contacted": {
"type": "boolean"
},
"price": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedTo": {
"description": "Full name of the agent.",
"type": "string"
},
"assignedUserId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedLenderName": {
"type": "string"
},
"assignedLenderId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"emails": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "The email address."
},
"type": {
"description": "e.g. \"home\", \"work\".",
"type": "string"
}
},
"required": [
"value"
]
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "The phone number, e.g. 888-555-1234."
},
"type": {
"description": "e.g. \"mobile\", \"home\", \"work\".",
"type": "string"
}
},
"required": [
"value"
]
}
},
"addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"description": "e.g. \"home\", \"work\", \"mailing\".",
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"description": "Abbreviated state code, e.g. \"CA\".",
"type": "string"
},
"code": {
"description": "Postal/ZIP code, as a string.",
"type": "string"
},
"country": {
"type": "string"
}
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"customFields": {
"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.",
"type": "object",
"propertyNames": {
"type": "string",
"pattern": "^custom[A-Za-z0-9_]+$"
},
"additionalProperties": {
"type": [
"string",
"number",
"null"
]
}
}
},
"description": "The lead."
},
"property": {
"description": "The property the event is about.",
"type": "object",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"code": {
"type": "string"
},
"mlsNumber": {
"type": "string"
},
"price": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"forRent": {
"type": "boolean"
},
"url": {
"type": "string"
},
"type": {
"type": "string"
},
"bedrooms": {
"type": "string"
},
"bathrooms": {
"type": "string"
},
"area": {
"description": "Square feet.",
"type": "string"
},
"lot": {
"description": "Acres.",
"type": "string"
}
}
},
"pageTitle": {
"description": "For Viewed Page events.",
"type": "string"
},
"pageUrl": {
"description": "For Viewed Page events.",
"type": "string"
}
},
"required": [
"type",
"person"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_update_person(id, mergeTags, firstName, lastName, stage, ...)
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}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person id."
},
"mergeTags": {
"description": "Merge `tags` into the existing tags instead of replacing them.",
"type": "boolean"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"stage": {
"description": "Stage name (see fub_list_stages).",
"type": "string"
},
"contacted": {
"type": "boolean"
},
"price": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedTo": {
"description": "Full name of the agent.",
"type": "string"
},
"assignedUserId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedPondId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedLenderName": {
"type": "string"
},
"assignedLenderId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"emails": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "The email address."
},
"type": {
"description": "e.g. \"home\", \"work\".",
"type": "string"
},
"isPrimary": {
"type": "boolean"
}
},
"required": [
"value"
]
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "The phone number, e.g. 888-555-1234."
},
"type": {
"description": "e.g. \"mobile\", \"home\", \"work\".",
"type": "string"
},
"isPrimary": {
"type": "boolean"
}
},
"required": [
"value"
]
}
},
"addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"description": "e.g. \"home\", \"work\", \"mailing\".",
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"description": "Abbreviated state code, e.g. \"CA\".",
"type": "string"
},
"code": {
"description": "Postal/ZIP code, as a string.",
"type": "string"
},
"country": {
"type": "string"
}
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"background": {
"description": "Background notes (multi-line).",
"type": "string"
},
"timeframeId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"customFields": {
"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.",
"type": "object",
"propertyNames": {
"type": "string",
"pattern": "^custom[A-Za-z0-9_]+$"
},
"additionalProperties": {
"type": [
"string",
"number",
"null"
]
}
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_add_note(personId, subject, body, isHtml)
Add a note to a contact's timeline. FUB: POST /v1/notes.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person id."
},
"subject": {
"description": "Note title.",
"type": "string"
},
"body": {
"type": "string",
"description": "Note content."
},
"isHtml": {
"description": "Render HTML tags in the body.",
"type": "boolean"
}
},
"required": [
"personId",
"body"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_log_call(personId, phone, isIncoming, note, outcome, ...)
Record a phone call made or received outside FUB, with its outcome. Does not place a call. FUB: POST /v1/calls.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person id."
},
"phone": {
"type": "string",
"description": "The number called or calling."
},
"isIncoming": {
"type": "boolean",
"description": "true for an incoming call, false for outgoing."
},
"note": {
"description": "Call notes.",
"type": "string"
},
"outcome": {
"type": "string",
"enum": [
"Interested",
"Not Interested",
"Left Message",
"No Answer",
"Busy",
"Bad Number"
]
},
"duration": {
"description": "Seconds.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"toNumber": {
"type": "string"
},
"fromNumber": {
"type": "string"
},
"userId": {
"description": "User who took the call (admins only).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"recordingUrl": {
"type": "string"
}
},
"required": [
"personId",
"phone",
"isIncoming"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_create_task(personId, assignedUserId, assignedTo, name, type, ...)
Create a task on a contact, assigned to a user (assignedUserId or assignedTo is required). FUB: POST /v1/tasks.
Input Schema
{
"type": "object",
"properties": {
"personId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person id."
},
"assignedUserId": {
"description": "User id to assign (or give assignedTo).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedTo": {
"description": "Full name of the user to assign (or give assignedUserId).",
"type": "string"
},
"name": {
"description": "Task name.",
"type": "string"
},
"type": {
"type": "string",
"enum": [
"Follow Up",
"Call",
"Text",
"Email",
"Appointment",
"Showing",
"Closing",
"Open House",
"Thank You"
]
},
"isCompleted": {
"type": "boolean"
},
"dueDate": {
"description": "YYYY-MM-DD.",
"type": "string"
},
"dueDateTime": {
"description": "With time, e.g. 2026-11-16T15:00:00-05:00.",
"type": "string"
},
"remindSecondsBefore": {
"description": "Reminder lead time; only for tasks with a due time.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"personId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_update_task(id, isCompleted, name, type, personId, ...)
Update a task β mark it complete, rename, retype or reassign it. FUB: PUT /v1/tasks/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The task id."
},
"isCompleted": {
"description": "Mark complete (true) or reopen (false).",
"type": "boolean"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"Follow Up",
"Call",
"Text",
"Email",
"Appointment",
"Showing",
"Closing",
"Open House",
"Thank You"
]
},
"personId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedUserId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assignedTo": {
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_create_deal(name, stageId, description, peopleIds, userIds, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Deal name."
},
"stageId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Pipeline stage id."
},
"description": {
"type": "string"
},
"peopleIds": {
"description": "Contact ids on the deal.",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"userIds": {
"description": "User (agent) ids on the deal.",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"price": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"commissionValue": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"agentCommission": {
"description": "Agent commission split.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"teamCommission": {
"description": "Team commission split.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"projectedCloseDate": {
"description": "Projected close date.",
"type": "string"
},
"earnestMoneyDueDate": {
"type": "string"
},
"mutualAcceptanceDate": {
"type": "string"
},
"dueDiligenceDate": {
"type": "string"
},
"finalWalkThroughDate": {
"type": "string"
},
"possessionDate": {
"type": "string"
}
},
"required": [
"name",
"stageId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π΄fub_update_deal(id, name, stageId, description, peopleIds, ...)
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}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The deal id."
},
"name": {
"type": "string"
},
"stageId": {
"description": "Move to this pipeline stage.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"description": {
"type": "string"
},
"peopleIds": {
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"userIds": {
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"price": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"commissionValue": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"projectedCloseDate": {
"description": "Projected close date.",
"type": "string"
},
"earnestMoneyDueDate": {
"type": "string"
},
"mutualAcceptanceDate": {
"type": "string"
},
"dueDiligenceDate": {
"type": "string"
},
"finalWalkThroughDate": {
"type": "string"
},
"possessionDate": {
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence