API Reference
Introduction
The Uplevel API gives you programmatic access to your workspace: contacts, deals, tasks, activities, listings, and webhooks.
https://api.uplevelre.comAuthentication
Authenticate every request with an API key, sent as a bearer token:
Create and manage keys in the dashboard under Settings → API Keys (workspace admins only). A key's secret is shown once at creation — store it somewhere safe. Keys can be scoped per resource (for example read_contacts or write_deals); a write scope always includes the matching read scope, and full_access grants everything.
Keep keys out of client-side code. If a key leaks, revoke it in Settings and create a new one.
Authorization: Bearer ul_live_…What a key can see
A key acts for the whole workspace, not for one teammate. Within its scopes it reads and changes every record in the workspace, including contacts a teammate keeps private in the dashboard. Records from other workspaces are never visible, and ids that belong to another workspace return 404. Give keys only to integrations you trust with all of the workspace's data, and choose the narrowest scopes that work.
Errors
The API uses conventional HTTP status codes and returns a consistent error envelope:
| Status | error.type | Meaning |
|---|---|---|
| 400 | invalid_request_error | Malformed request or invalid field. |
| 401 | authentication_error | Missing, revoked, or expired API key. |
| 403 | permission_error | The key lacks a scope, or the plan excludes the feature. |
| 404 | invalid_request_error | The requested object does not exist. |
| 415 | invalid_request_error | The request has a body but no Content-Type: application/json header. |
| 429 | rate_limit_error | Rate limit exceeded — see Retry-After. |
| 5xx | api_error | Something failed on our side. Safe to retry with backoff. |
{
"error": {
"type": "invalid_request_error",
"message": "First and last name are required",
"param": "first_name"
}
}Pagination
List endpoints return at most 100 objects per call and share one envelope:
Pass next_cursor back as ?cursor= to fetch the following page. Results are ordered newest-first.
Send each query parameter once. A request that repeats a parameter (for example ?limit=10&limit=100) returns 400 rather than choosing one of the values.
{ "data": [ … ], "has_more": true, "next_cursor": "…", "total_count": 128 }Rate limits
Requests are limited per workspace (all keys combined), 120 requests per minute by default. Every response reports the window state in X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (Unix seconds); a rejected request returns 429 with Retry-After in seconds. Need a higher limit? Contact support.
Webhooks
Webhooks push JSON events to your servers as data changes in the workspace — no polling. Register endpoints in the dashboard under Settings → Webhooks, or with the webhook endpoints; each endpoint subscribes to the event types it cares about, or * for everything.
Every delivery is an HTTP POST with the same JSON envelope: the event's id (stable across retries and endpoints), its type, created_at, and the object itself in data — the same shape the corresponding GET endpoint returns (deletion events carry only the object's id).
Each request carries these headers:
| Header | Value |
|---|---|
X-Uplevel-Event | The event type, e.g. contact.created. |
X-Uplevel-Event-Id | The event id, shared by every endpoint the event fanned out to. |
X-Uplevel-Delivery-Id | Unique per endpoint and event; constant across retries — deduplicate on it. |
X-Uplevel-Signature | t=<unix seconds>,v1=<hex HMAC-SHA256> — see Verifying deliveries. |
Respond with any 2xx status within 10 seconds to acknowledge receipt. A failed attempt (any other status, or a timeout) is retried up to 5 times with exponential backoff, and an endpoint that fails 20 consecutive attempts is disabled automatically — re-enable it in Settings → Webhooks, where Send test also delivers an on-demand ping event through the full pipeline.
{
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "contact.created",
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Alvarez",
"email": "[email protected]",
"stage": { "id": "…", "name": "New Lead" }
}
}Verifying deliveries
Verify the X-Uplevel-Signature header to confirm a delivery came from Uplevel and was not modified in transit. Your signing key depends on how the endpoint was registered:
- Dashboard (Settings → Webhooks): you chose a code word. Uplevel stores only its SHA-256 hash, and that hash — the 64-character lowercase hex digest of your code word — is the signing key. Your code word itself is never stored or transmitted.
- API (
POST /v1/webhooks): thewhsec_…secret returned once at creation is the signing key, verbatim.
Split the header into t (Unix seconds) and v1 (hex HMAC). Recompute HMAC-SHA256 over the string "<t>.<raw request body>" with your signing key, compare it to v1 in constant time, and reject deliveries whose t is more than a few minutes old to block replays.
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
// Dashboard endpoint: key = hex SHA-256 of your code word.
// API endpoint: key = the whsec_… secret, verbatim.
const key = createHash("sha256").update("your code word").digest("hex");
function verify(signatureHeader, rawBody) {
const { t, v1 } = Object.fromEntries(
signatureHeader.split(",").map((part) => part.split("=")),
);
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // stale
const expected = createHmac("sha256", key).update(`${t}.${rawBody}`).digest();
return timingSafeEqual(expected, Buffer.from(v1, "hex"));
}Retrieve the calling key
GET/v1/me
Returns the workspace, scopes, and rate limit associated with the API key that made the request. Use it to verify a key is configured correctly.
Returns
200The calling key's identity.401Missing or invalid API key.Response attributes
workspaceobjectrequiredWorkspace the key belongs to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredslugstringrequiredapi_keyobjectrequiredThe key itself (never the secret).
Show child attributesHide child attributes
idstringrequiredkey_prefixstringrequiredIdentifying fragment of the secret, as shown in Settings.
scopesarray of stringsrequiredScopes granted to this key.
rate_limit_per_minuteintegerrequiredRequests per minute this workspace may make, across all keys.
curl "https://api.uplevelre.com/v1/me" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"workspace": {
"id": "b7a8cbb5-6a5e-4b52-9d0e-2a4dbb9b61a4",
"name": "Acme Realty",
"slug": "acme-realty"
},
"api_key": {
"id": "f3b1c2d4-8f0a-4f1b-a2c3-d4e5f6a7b8c9",
"key_prefix": "ul_live_1a2b3c4d",
"scopes": [
"READ_CONTACTS",
"WRITE_CONTACTS"
]
},
"rate_limit_per_minute": 120
}Contacts
People in your CRM: leads, clients, and past clients. Contacts carry addresses, stages, sources, tags, assigned teammates, and custom fields.
List contacts
GET/v1/contacts
Returns the workspace's contacts, newest first. All filters combine with AND.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
qstringFree-text search over name, email, phone, and company.
stage_idstringOnly contacts in this stage (see /v1/contact-stages).
lead_source_idstringOnly contacts from this lead source (see /v1/lead-sources).
owner_idstringOnly contacts assigned to this member (see /v1/members).
tag_idstringOnly contacts carrying this tag (see /v1/tags).
emailstringOnly contacts with this exact email.
created_aftertimestampOnly contacts created at or after this RFC 3339 timestamp.
created_beforetimestampOnly contacts created at or before this RFC 3339 timestamp.
updated_aftertimestampOnly contacts updated at or after this RFC 3339 timestamp — useful for incremental syncs.
Returns
200One page of contacts.401Missing or invalid API key.403The key lacks the read_contacts scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
has_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/contacts?limit=25&q=dana" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Create a contact
POST/v1/contacts
Adds a person to the CRM. Automations subscribed to contact created and webhooks subscribed to contact.created fire as if the contact had been added in the dashboard.
Body parameters
first_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsnullable array of objectsFull email list. When omitted, email becomes the sole primary row.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesnullable array of objectsFull phone list. When omitted, phone becomes the sole primary row.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringstage_idnullable stringStage id from /v1/contact-stages.
lead_source_idnullable stringLead source id from /v1/lead-sources.
owner_idnullable stringMember id from /v1/members to assign the contact to. Omit to leave the contact unassigned.
custom_fieldsobjectrequiredValues for custom fields, keyed by field id.
affiliate_attribution_tokennullable stringOpaque first-party referral attribution from Uplevel's public site. It is consumed server-side and is never returned with the contact.
Returns
201The created contact.400A field failed validation.401Missing or invalid API key.403The key lacks the write_contacts scope.Response attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
curl "https://api.uplevelre.com/v1/contacts" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"custom_fields": {}
}'{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}Retrieve a contact
GET/v1/contacts/{contact_id}
Path parameters
contact_idstringrequiredId of the contact.
Returns
200The contact.404No contact with that id.Response attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
curl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}Update a contact
PATCH/v1/contacts/{contact_id}
Partial update: only the fields present in the body change. Stage changes fire stage changed automations and contact.updated webhooks.
Path parameters
contact_idstringrequiredId of the contact.
Body parameters
first_namenullable stringlast_namenullable stringemailnullable stringphonenullable stringemailsnullable array of objectsReplaces the full email list when present.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesnullable array of objectsReplaces the full phone list when present.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringstage_idnullable stringStage id from /v1/contact-stages; empty string clears the stage.
lead_source_idnullable stringLead source id from /v1/lead-sources; empty string clears it.
owner_idnullable stringMember id from /v1/members; empty string unassigns the contact.
custom_fieldsobjectrequiredReplaces custom field values wholesale when provided.
Returns
200The updated contact.400A field failed validation.404No contact with that id.Response attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
curl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"first_name": "…",
"last_name": "…",
"custom_fields": {}
}'{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}Delete a contact
DELETE/v1/contacts/{contact_id}
Permanently removes the contact, its timeline, and its texts, emails, call transcripts, voicemails, lead emails and website history. Opt-outs are kept, so the person stays unsubscribed if they are added again. This cannot be undone.
Path parameters
contact_idstringrequiredId of the contact.
Returns
200Deletion confirmation.404No contact with that id.Response attributes
idstringrequiredId of the deleted object.
deletedbooleanrequiredcurl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"deleted": true
}Add a tag to a contact
PUT/v1/contacts/{contact_id}/tags/{tag_id}
Tags must already exist as workspace tags — see /v1/tags. Adding a tag the contact already has is a no-op.
Path parameters
contact_idstringrequiredId of the contact.
tag_idstringrequiredId of the workspace tag.
Returns
200The contact with the tag applied.404No such contact or tag.Response attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
curl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/tags/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PUT \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}Remove a tag from a contact
DELETE/v1/contacts/{contact_id}/tags/{tag_id}
Path parameters
contact_idstringrequiredId of the contact.
tag_idstringrequiredId of the workspace tag.
Returns
200The contact with the tag removed.404No such contact.Response attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
curl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/tags/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
}Activities
The timeline on a contact: notes, calls, emails, and system events. Notes can be created through the API; the rest of the timeline is read-only.
List a contact's activities
GET/v1/contacts/{contact_id}/activities
Returns the contact's timeline, newest first. Private notes are excluded. Email synced from a mailbox its owner keeps private reads as "Private email exchange", with no description, details or actor, unless the team member who created the API key owns that mailbox.
Path parameters
contact_idstringrequiredId of the contact.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
Returns
200One page of activities.404No contact with that id.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredtypestringrequiredKind of entry: note, call, email, contact_created, contact_updated, stage_changed, owner_changed, and similar system types.
titlestringrequireddescriptionnullable stringmetadatanullable objectrequiredEntry-specific details (for example the fields an update changed).
actor_namenullable stringTeam member who performed the action; null for automated entries and API writes.
created_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/activities?limit=25" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"type": "note",
"title": "Note added",
"description": null,
"metadata": null,
"actor_name": null,
"created_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Add a note to a contact
POST/v1/contacts/{contact_id}/notes
Appends a note to the contact's timeline and updates the contact's last-activity time.
Path parameters
contact_idstringrequiredId of the contact.
Body parameters
bodystringrequiredThe note text, up to 10,000 characters.
Returns
201The created note.400The note is empty or too long.404No contact with that id.Response attributes
idstringrequiredtypestringrequiredKind of entry: note, call, email, contact_created, contact_updated, stage_changed, owner_changed, and similar system types.
titlestringrequireddescriptionnullable stringmetadatanullable objectrequiredEntry-specific details (for example the fields an update changed).
actor_namenullable stringTeam member who performed the action; null for automated entries and API writes.
created_attimestamprequiredcurl "https://api.uplevelre.com/v1/contacts/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/notes" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Spoke on the phone — wants to tour 3BR homes in Ballard this weekend."
}'{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"type": "note",
"title": "Note added",
"description": null,
"metadata": null,
"actor_name": null,
"created_at": "2026-07-02T16:20:00Z"
}Transactions
Closing workflows, milestones, commission and actual revenue. Won deals count contracts; closed transactions count revenue.
list_transactions
GET/v1/transactions
Path parameters
statusnullable stringrequiredsidenullable stringrequiredsearchnullable stringrequiredcontact_idnullable stringrequireddeal_idnullable stringrequiredstage_idnullable stringrequiredclosing_fromnullable stringrequiredclosing_tonullable stringrequiredlimitnullable integerrequiredoffsetnullable integerrequiredReturns
200Matching transactions in data, with semantic status counts. Up to 200 records per page; advance offset by the number returned.403The key lacks the read_transactions scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredcountsobjectrequiredTransactions per semantic status across every match, ignoring paging. Counts are 64-bit integers encoded as strings.
Show child attributesHide child attributes
activestringrequiredpendingstringrequiredclosedstringrequiredfell_throughstringrequiredcurl "https://api.uplevelre.com/v1/transactions" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
}
],
"counts": {
"active": "4",
"pending": "2",
"closed": "17",
"fell_through": "1"
}
}create_transaction
POST/v1/transactions
Returns
200Created transaction. Input matches CreateTransactionRequest: name, side, stage_id or status, deal_id, contact_id, sale_price, commission_rate, projected_close_date, checklist_template_id and idempotency_key. Money is decimal strings; dates are YYYY-MM-DD.400A field failed validation.Response attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredcurl "https://api.uplevelre.com/v1/transactions" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'{
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
}get_transaction
GET/v1/transactions/{id}
Path parameters
idstringrequiredTransaction ID
Returns
200Transaction with stage, financials, key dates and linked records.404No transaction with that id.Response attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredcurl "https://api.uplevelre.com/v1/transactions/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
}update_transaction
PATCH/v1/transactions/{id}
Path parameters
idstringrequiredTransaction ID
Returns
200Updated transaction. Partial fields follow UpdateTransactionRequest. Fell-through on a won deal requires deal_disposition (reopen, lost, leave_won), with reopen_stage_id for a selected open stage. No automatic deal changes.400A field failed validation.Response attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredcurl "https://api.uplevelre.com/v1/transactions/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'{
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
}delete_transaction
DELETE/v1/transactions/{id}
Path parameters
idstringrequiredTransaction ID
Returns
200Deleted transaction404No transaction with that id.curl "https://api.uplevelre.com/v1/transactions/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{}get_workflow
GET/v1/transactions/{id}/workflow
Path parameters
idstringrequiredTransaction ID
Returns
200Closing checklist, parties, timeline, available reopen stages and default stage.curl "https://api.uplevelre.com/v1/transactions/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/workflow" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{}curl "https://api.uplevelre.com/v1/transaction-settings" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{}Deals
Deals moving through your pipelines. Each deal sits in one pipeline stage and can link a contact and a listing.
List deals
GET/v1/deals
Returns the workspace's deals, newest first.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
pipeline_idstringOnly deals in this pipeline (see /v1/pipelines).
stage_idstringOnly deals in this stage.
contact_idstringOnly deals linked to this contact.
statusstringOnly deals with this status: open, won, or lost.
Returns
200One page of deals.403The key lacks the read_deals scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/deals?limit=25&status=open" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Create a deal
POST/v1/deals
Body parameters
namestringrequiredstage_idstringrequiredStage to create the deal in (see /v1/pipelines); determines the pipeline and initial status.
valuenullable stringDeal value as a decimal string, up to 2 decimal places.
contact_idnullable stringContact to link (see /v1/contacts).
expected_close_datenullable stringRFC 3339 timestamp or YYYY-MM-DD date.
notesnullable stringReturns
201The created deal.400A field failed validation.403The key lacks the write_deals scope.Response attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/deals" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "1420 Terry Ave — Whitaker purchase",
"stage_id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "725000.00",
"expected_close_date": "2026-09-30"
}'{
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Retrieve a deal
GET/v1/deals/{deal_id}
Path parameters
deal_idstringrequiredId of the deal.
Returns
200The deal.404No deal with that id.Response attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/deals/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Update a deal
PATCH/v1/deals/{deal_id}
Partial update. Passing stage_id moves the deal — deal.stage_changed webhooks fire in addition to deal.updated.
Path parameters
deal_idstringrequiredId of the deal.
Body parameters
namenullable stringvaluenullable stringDecimal string; empty string clears the value.
stage_idnullable stringMove the deal to this stage (must be in the deal's pipeline). The stage's type updates status and closed_at.
contact_idnullable stringContact to link; empty string unlinks.
expected_close_datenullable stringRFC 3339 timestamp or YYYY-MM-DD; empty string clears it.
lost_reasonnullable stringRecorded when moving into a closed-lost stage.
notesnullable stringReturns
200The updated deal.400A field failed validation.404No deal with that id.Response attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/deals/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "…",
"value": "…",
"stage_id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
}'{
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Delete a deal
DELETE/v1/deals/{deal_id}
Path parameters
deal_idstringrequiredId of the deal.
Returns
200Deletion confirmation.404No deal with that id.Response attributes
idstringrequiredId of the deleted object.
deletedbooleanrequiredcurl "https://api.uplevelre.com/v1/deals/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"deleted": true
}Tasks
To-dos and reminders, optionally linked to a contact and assigned to a teammate.
List tasks
GET/v1/tasks
Returns the workspace's tasks, newest first.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
statusstringOnly tasks with this status: todo, in_progress, waiting, done.
completedbooleanOnly completed (true) or open (false) tasks.
assignee_idstringOnly tasks assigned to this member (see /v1/members).
contact_idstringOnly tasks linked to this contact.
deal_idstringOnly tasks linked to this deal.
due_beforetimestampOnly tasks due at or before this RFC 3339 timestamp.
due_aftertimestampOnly tasks due at or after this RFC 3339 timestamp.
Returns
200One page of tasks.403The key lacks the read_tasks scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/tasks?limit=25" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Create a task
POST/v1/tasks
Body parameters
titlestringrequireddescriptionnullable stringtypenullable stringKind of task, e.g. todo, call, email, showing. Defaults to todo.
prioritynullable stringlow, medium, or high. Defaults to medium.
statusnullable stringtodo, in_progress, waiting, or done. Defaults to todo.
due_datenullable timestampRFC 3339 timestamp the task is due.
all_daynullable booleanWhether due_date is a date without a time of day.
contact_idnullable stringContact to link (see /v1/contacts).
deal_idnullable stringDeal to link (see /v1/deals).
assignee_idnullable stringMember to assign (see /v1/members). Omit to leave unassigned.
remind_minutes_beforenullable integerReminder offset before due_date, in minutes.
Returns
201The created task.400A field failed validation.403The key lacks the write_tasks scope.Response attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/tasks" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Call Dana about the Terry Ave listing",
"description": "…",
"type": "…"
}'{
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Retrieve a task
GET/v1/tasks/{task_id}
Path parameters
task_idstringrequiredId of the task.
Returns
200The task.404No task with that id.Response attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/tasks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Update a task
PATCH/v1/tasks/{task_id}
Partial update. Completing a task (status done) fires task.completed webhooks in addition to task.updated.
Path parameters
task_idstringrequiredId of the task.
Body parameters
titlenullable stringdescriptionnullable stringEmpty string clears the description.
typenullable stringprioritynullable stringstatusnullable stringSetting done completes the task; any other status reopens it.
due_datenullable timestampRFC 3339 timestamp; null leaves it unchanged. Use clear_due_date to remove one.
clear_due_datenullable booleanSet true to remove the due date (and any reminder).
all_daynullable booleanassignee_idnullable stringMember to assign; empty string unassigns.
remind_minutes_beforenullable integerReminder offset in minutes; -1 is invalid — use null with clear_due_date to drop reminders along with the date.
Returns
200The updated task.400A field failed validation.404No task with that id.Response attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/tasks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "…",
"description": "…",
"type": "…"
}'{
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Delete a task
DELETE/v1/tasks/{task_id}
Path parameters
task_idstringrequiredId of the task.
Returns
200Deletion confirmation.404No task with that id.Response attributes
idstringrequiredId of the deleted object.
deletedbooleanrequiredcurl "https://api.uplevelre.com/v1/tasks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"deleted": true
}Listings
Your workspace's property listings. MLS-imported listings are read-only through the API; manual listings can be created and edited.
List listings
GET/v1/listings
Returns the workspace's listings, newest first.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
statusstringOnly listings with this status.
sourcestringOnly listings from this source: manual, mls_import, url_import.
qstringFree-text search over address, description, and property type.
Returns
200One page of listings.403The key lacks the read_listings scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/listings?limit=25&status=active" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Create a listing
POST/v1/listings
Adds a manual listing. Address fields are required; everything else is optional. New listings default to draft status so they stay off websites until you activate them.
Body parameters
street_addressstringrequiredcitynullable stringstate_or_provincenullable stringpostal_codenullable stringcountynullable stringstatusnullable stringdraft, active, pending, sold, or off_market. Defaults to draft.
listing_typenullable stringsale or rental. Defaults to sale. For rentals, list_price is the asking rent per month.
property_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerbedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerlot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesnullable array of stringsvirtual_tour_urlnullable stringReturns
201The created listing.400A field failed validation.403The key lacks the write_listings scope.Response attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/listings" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"property_type": "Condominium",
"list_price": 725000
}'{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Retrieve a listing
GET/v1/listings/{listing_id}
Path parameters
listing_idstringrequiredId of the listing.
Returns
200The listing.404No listing with that id.Response attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/listings/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Update a listing
PATCH/v1/listings/{listing_id}
Partial update of a manual listing. MLS- and URL-imported listings are read-only through the API.
Path parameters
listing_idstringrequiredId of the listing.
Body parameters
street_addressnullable stringcitynullable stringstate_or_provincenullable stringpostal_codenullable stringcountynullable stringstatusnullable stringlisting_typenullable stringsale or rental.
property_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerclose_pricenullable integerbedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerlot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesnullable array of stringsReplaces the feature list wholesale when provided.
virtual_tour_urlnullable stringReturns
200The updated listing.400A field failed validation, or the listing is not manual.404No listing with that id.Response attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredcurl "https://api.uplevelre.com/v1/listings/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"street_address": "…",
"city": "…",
"state_or_province": "…"
}'{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
}Delete a listing
DELETE/v1/listings/{listing_id}
Permanently removes a manual listing and its photos. MLS- and URL-imported listings are read-only through the API.
Path parameters
listing_idstringrequiredId of the listing.
Returns
200Deletion confirmation.400The listing is not manual.404No listing with that id.Response attributes
idstringrequiredId of the deleted object.
deletedbooleanrequiredcurl "https://api.uplevelre.com/v1/listings/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"deleted": true
}Webhooks
Subscriptions that POST signed JSON events to your endpoint as data changes in the workspace.
List webhooks
GET/v1/webhooks
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
Returns
200One page of webhook endpoints.403The key lacks the webhooks_manage scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredurlstringrequiredeventsarray of stringsrequiredSubscribed event types, or ["*"] for everything.
secret_kindstringrequiredHow the signing secret was established: generated (a whsec_… secret returned once at creation) or code_word (dashboard-created; the signing key is the SHA-256 hex digest of the code word).
is_activebooleanrequiredWhether the endpoint receives deliveries. Set to false to pause.
disabled_atnullable timestampSet when Uplevel disabled the endpoint after repeated failures. Re-enable by updating the endpoint with is_active: true.
disabled_reasonnullable stringfailure_countintegerrequiredConsecutive failed delivery attempts since the last success.
last_success_atnullable timestamplast_failure_atnullable timestampcreated_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/webhooks?limit=25" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "9c1d1c0a-2f6b-4c8e-9f37-52b6a1e0d9f4",
"name": "Production sync",
"url": "https://example.com/hooks/uplevel",
"events": [
"contact.created",
"deal.stage_changed"
],
"secret_kind": "generated",
"is_active": true,
"disabled_at": null,
"disabled_reason": null,
"failure_count": 0,
"last_success_at": null,
"last_failure_at": null,
"created_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Create a webhook
POST/v1/webhooks
Registers an endpoint and returns it with its signing secret — the only time the secret is shown. Verify deliveries by recomputing the signature: the X-Uplevel-Signature header carries t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" keyed with the secret>.
Body parameters
namestringrequiredurlstringrequiredPublicly reachable HTTPS endpoint to POST events to.
eventsarray of stringsrequiredEvent types to deliver, or ["*"] for all events.
Returns
201The created endpoint, including its signing secret.400A field failed validation.403The key lacks the webhooks_manage scope.Response attributes
idstringrequirednamestringrequiredurlstringrequiredeventsarray of stringsrequiredSubscribed event types, or ["*"] for everything.
secret_kindstringrequiredHow the signing secret was established: generated (a whsec_… secret returned once at creation) or code_word (dashboard-created; the signing key is the SHA-256 hex digest of the code word).
is_activebooleanrequiredWhether the endpoint receives deliveries. Set to false to pause.
disabled_atnullable timestampSet when Uplevel disabled the endpoint after repeated failures. Re-enable by updating the endpoint with is_active: true.
disabled_reasonnullable stringfailure_countintegerrequiredConsecutive failed delivery attempts since the last success.
last_success_atnullable timestamplast_failure_atnullable timestampcreated_attimestamprequiredsecretstringrequiredHMAC-SHA256 signing secret for verifying deliveries. Shown once.
curl "https://api.uplevelre.com/v1/webhooks" \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Production sync",
"url": "https://example.com/hooks/uplevel",
"events": [
"contact.created",
"contact.updated"
]
}'{
"id": "9c1d1c0a-2f6b-4c8e-9f37-52b6a1e0d9f4",
"name": "Production sync",
"url": "https://example.com/hooks/uplevel",
"events": [
"contact.created",
"deal.stage_changed"
],
"secret_kind": "generated",
"is_active": true,
"disabled_at": null,
"disabled_reason": null,
"failure_count": 0,
"last_success_at": null,
"last_failure_at": null,
"created_at": "2026-07-02T16:20:00Z",
"secret": "whsec_6f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e"
}Retrieve a webhook
GET/v1/webhooks/{webhook_id}
Path parameters
webhook_idstringrequiredId of the webhook.
Returns
200The webhook endpoint.404No webhook with that id.Response attributes
idstringrequirednamestringrequiredurlstringrequiredeventsarray of stringsrequiredSubscribed event types, or ["*"] for everything.
secret_kindstringrequiredHow the signing secret was established: generated (a whsec_… secret returned once at creation) or code_word (dashboard-created; the signing key is the SHA-256 hex digest of the code word).
is_activebooleanrequiredWhether the endpoint receives deliveries. Set to false to pause.
disabled_atnullable timestampSet when Uplevel disabled the endpoint after repeated failures. Re-enable by updating the endpoint with is_active: true.
disabled_reasonnullable stringfailure_countintegerrequiredConsecutive failed delivery attempts since the last success.
last_success_atnullable timestamplast_failure_atnullable timestampcreated_attimestamprequiredcurl "https://api.uplevelre.com/v1/webhooks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "9c1d1c0a-2f6b-4c8e-9f37-52b6a1e0d9f4",
"name": "Production sync",
"url": "https://example.com/hooks/uplevel",
"events": [
"contact.created",
"deal.stage_changed"
],
"secret_kind": "generated",
"is_active": true,
"disabled_at": null,
"disabled_reason": null,
"failure_count": 0,
"last_success_at": null,
"last_failure_at": null,
"created_at": "2026-07-02T16:20:00Z"
}Update a webhook
PATCH/v1/webhooks/{webhook_id}
Path parameters
webhook_idstringrequiredId of the webhook.
Body parameters
namenullable stringurlnullable stringeventsnullable array of stringsis_activenullable booleanSet true to (re-)enable deliveries — this also clears an automatic disable and resets the failure counter. Set false to pause.
Returns
200The updated endpoint.400A field failed validation.404No webhook with that id.Response attributes
idstringrequirednamestringrequiredurlstringrequiredeventsarray of stringsrequiredSubscribed event types, or ["*"] for everything.
secret_kindstringrequiredHow the signing secret was established: generated (a whsec_… secret returned once at creation) or code_word (dashboard-created; the signing key is the SHA-256 hex digest of the code word).
is_activebooleanrequiredWhether the endpoint receives deliveries. Set to false to pause.
disabled_atnullable timestampSet when Uplevel disabled the endpoint after repeated failures. Re-enable by updating the endpoint with is_active: true.
disabled_reasonnullable stringfailure_countintegerrequiredConsecutive failed delivery attempts since the last success.
last_success_atnullable timestamplast_failure_atnullable timestampcreated_attimestamprequiredcurl "https://api.uplevelre.com/v1/webhooks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X PATCH \
-H "Authorization: Bearer $UPLEVEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "…",
"url": "https://example.com",
"events": [
"…"
]
}'{
"id": "9c1d1c0a-2f6b-4c8e-9f37-52b6a1e0d9f4",
"name": "Production sync",
"url": "https://example.com/hooks/uplevel",
"events": [
"contact.created",
"deal.stage_changed"
],
"secret_kind": "generated",
"is_active": true,
"disabled_at": null,
"disabled_reason": null,
"failure_count": 0,
"last_success_at": null,
"last_failure_at": null,
"created_at": "2026-07-02T16:20:00Z"
}Delete a webhook
DELETE/v1/webhooks/{webhook_id}
Removes the endpoint and its delivery history. In-flight deliveries are abandoned.
Path parameters
webhook_idstringrequiredId of the webhook.
Returns
200Deletion confirmation.404No webhook with that id.Response attributes
idstringrequiredId of the deleted object.
deletedbooleanrequiredcurl "https://api.uplevelre.com/v1/webhooks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21" \
-X DELETE \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"deleted": true
}List a webhook's deliveries
GET/v1/webhooks/{webhook_id}/deliveries
Recent delivery attempts for the endpoint, newest first — the place to look when events are not arriving.
Path parameters
webhook_idstringrequiredId of the webhook.
Query parameters
limitintegerObjects per page, 1–100.
cursorstringOpaque cursor from a previous response's next_cursor; returns results strictly after it.
Returns
200One page of deliveries.404No webhook with that id.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredevent_typestringrequiredEvent that triggered the delivery, e.g. contact.created.
event_idstringrequiredId of the event across all endpoints it was fanned out to.
statusstringrequiredpending, delivered, or failed.
attemptsintegerrequiredAttempts made so far (retried with backoff up to 5 times).
http_statusnullable integerHTTP status your endpoint returned, when it responded.
error_messagenullable stringdelivered_atnullable timestampcreated_attimestamprequiredhas_morebooleanrequiredWhether another page exists after this one.
next_cursornullable stringPass as ?cursor= to fetch the next page. Null on the last page.
total_countintegerrequiredTotal objects matching the query across all pages.
curl "https://api.uplevelre.com/v1/webhooks/8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21/deliveries?limit=25" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"event_type": "…",
"event_id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"status": "delivered",
"attempts": 0,
"http_status": null,
"error_message": null,
"delivered_at": null,
"created_at": "2026-07-02T16:20:00Z"
}
],
"has_more": true,
"next_cursor": null,
"total_count": 42
}Webhook events
Every event a webhook endpoint can receive, with the exact payload each one delivers. All events share the envelope described in Webhooks, and every delivery is signed — see Verifying deliveries.
transaction.created
Transactions
A transaction was created.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe transaction, as GET /v1/transactions/{id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "transaction.created"
}transaction.updated
Transactions
A transaction changed.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe transaction, as GET /v1/transactions/{id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "transaction.updated"
}transaction.status_changed
Transactions
A transaction changed closing stage.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe transaction, as GET /v1/transactions/{id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "transaction.status_changed"
}transaction.closed
Transactions
A transaction closed; the sale is actual revenue.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe transaction, as GET /v1/transactions/{id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "transaction.closed"
}transaction.fell_through
Transactions
A transaction fell through.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe transaction, as GET /v1/transactions/{id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredsidestringrequiredbuyer, seller, or both.
statusstringrequiredactive, pending, closed, or fell_through, from the closing stage the transaction sits in.
fell_through_reasonstringrequiredWhy the transaction fell through; empty otherwise.
deal_idstringrequiredLinked deal; empty when there is none.
deal_namestringrequireddeal_statusstringrequiredThe linked deal's open, won, or lost status.
contact_idstringrequiredLinked contact; empty when there is none.
contact_first_namestringrequiredcontact_last_namestringrequiredcontact_emailstringrequiredlisting_keystringrequiredMLS listing key; empty unless the property is an MLS listing.
listing_labelstringrequiredThe property's address or label.
listing_photo_pathstringrequiredPath to the property's primary photo; empty when there is none.
sale_pricestringrequiredSale price, as a decimal string.
commission_ratestringrequiredCommission rate as a percent, e.g. 3.00.
gross_commissionstringrequiredGross commission income, as a decimal string. Derived from sale_price × commission_rate unless gci_override is set.
gci_overridebooleanrequiredWhether gross_commission was entered directly instead of derived.
referral_feestringrequiredReferral fee taken off the top, as a decimal string.
brokerage_split_ratestringrequiredBrokerage split as a percent of GCI after the referral fee.
team_split_ratestringrequiredTeam split as a percent of GCI after the referral fee.
transaction_feesstringrequiredFlat transaction fees, as a decimal string.
net_commissionstringrequiredWhat the agent keeps, as a decimal string: (GCI − referral fee) × (1 − brokerage split − team split) − transaction fees. Always derived.
contract_datestringrequiredContract date, YYYY-MM-DD; empty when not set.
earnest_money_due_datestringrequiredEarnest money deadline, YYYY-MM-DD; empty when not set.
inspection_datestringrequiredInspection deadline, YYYY-MM-DD; empty when not set.
appraisal_datestringrequiredAppraisal deadline, YYYY-MM-DD; empty when not set.
financing_datestringrequiredFinancing deadline, YYYY-MM-DD; empty when not set.
walkthrough_datestringrequiredFinal walkthrough, YYYY-MM-DD; empty when not set.
projected_close_datestringrequiredExpected closing date, YYYY-MM-DD; empty when not set.
actual_close_datestringrequiredClosing date, YYYY-MM-DD; set when the transaction closes.
possession_datestringrequiredPossession date, YYYY-MM-DD; empty when not set.
notesstringrequireddocument_countintegerrequiredNumber of documents stored on the transaction.
created_attimestamprequiredupdated_attimestamprequiredstage_idstringrequiredClosing stage the transaction sits in.
stage_namestringrequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"actual_close_date": "2026-09-15",
"appraisal_date": "2026-08-26",
"brokerage_split_rate": "20.00",
"commission_rate": "3.00",
"contact_email": "[email protected]",
"contact_first_name": "Dana",
"contact_id": "c0a8012e-5d6f-4a7b-8c9d-0e1f2a3b4c5d",
"contact_last_name": "Whitaker",
"contract_date": "2026-08-12",
"created_at": "2026-08-12T17:04:11Z",
"deal_id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"deal_name": "1420 Terry Ave — Whitaker purchase",
"deal_status": "won",
"document_count": 3,
"earnest_money_due_date": "2026-08-15",
"fell_through_reason": "",
"financing_date": "2026-09-02",
"gci_override": false,
"gross_commission": "21750.00",
"id": "3f2a9c1e-7b4d-4e8a-9f60-1c2d3e4f5a6b",
"inspection_date": "2026-08-19",
"listing_key": "",
"listing_label": "1420 Terry Ave, Seattle, WA 98101",
"listing_photo_path": "",
"name": "1420 Terry Ave — Whitaker purchase",
"net_commission": "17005.00",
"notes": "",
"possession_date": "2026-09-16",
"projected_close_date": "2026-09-15",
"referral_fee": "0.00",
"sale_price": "725000.00",
"side": "buyer",
"stage_id": "8d7c6b5a-4f3e-2d1c-0b9a-8f7e6d5c4b3a",
"stage_name": "Closed",
"status": "closed",
"team_split_rate": "0.00",
"transaction_fees": "395.00",
"updated_at": "2026-09-15T21:30:02Z",
"walkthrough_date": "2026-09-14"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "transaction.fell_through"
}contact.created
Contacts
A contact was added — from the dashboard, the API, a website form, or another lead-capture source. Bulk imports do not emit events.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe contact, as GET /v1/contacts/{contact_id} returns it.
Show child attributesHide child attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "contact.created"
}contact.updated
Contacts
A contact's details changed: fields, stage, assignment, or tags.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe contact, as GET /v1/contacts/{contact_id} returns it.
Show child attributesHide child attributes
idstringrequiredfirst_namestringrequiredlast_namestringrequiredemailnullable stringphonenullable stringemailsarray of objectsrequiredEvery ordered email address; email above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredHome | Work | Other
is_primarybooleanpositionintegerphonesarray of objectsrequiredEvery ordered phone number; phone above remains the primary shortcut.
Show child attributesHide child attributes
idstringvaluestringrequiredlabelstringrequiredMobile | Home | Work | Fax | Other
is_primarybooleanpositionintegeraddressnullable stringcitynullable stringstatenullable stringzip_codenullable stringcompanynullable stringjob_titlenullable stringnotesnullable stringFree-form notes shown on the contact record.
stagenullable objectPipeline stage of the contact, from /v1/contact-stages.
Show child attributesHide child attributes
idstringrequirednamestringrequiredlead_sourcenullable objectWhere the contact came from, from /v1/lead-sources.
Show child attributesHide child attributes
idstringrequirednamestringrequiredownernullable objectTeam member the contact is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtagsarray of objectsrequiredWorkspace tags on the contact.
Show child attributesHide child attributes
idstringrequirednamestringrequiredcolornullable stringcustom_fieldsobjectrequiredValues for the workspace's custom fields, keyed by field id.
created_attimestamprequiredupdated_attimestamprequiredlast_activity_atnullable timestampLast time an activity touched this contact.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"first_name": "Dana",
"last_name": "Whitaker",
"email": "[email protected]",
"phone": "+12065550123",
"emails": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"phones": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"value": "…",
"label": "…",
"is_primary": true,
"position": 0
}
],
"address": null,
"city": null,
"state": null,
"zip_code": null,
"company": null,
"job_title": null,
"notes": null,
"stage": null,
"lead_source": null,
"owner": null,
"tags": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Buyer",
"color": "#26c2e7"
}
],
"custom_fields": {},
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z",
"last_activity_at": null
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "contact.updated"
}contact.deleted
Contacts
A contact was deleted.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deleted object is gone; only its id remains.
Show child attributesHide child attributes
idstringrequiredId of the deleted object.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "contact.deleted"
}deal.created
Deals
A deal was created in a pipeline.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deal, as GET /v1/deals/{deal_id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "deal.created"
}deal.updated
Deals
A deal's details changed: name, value, status, or links.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deal, as GET /v1/deals/{deal_id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "deal.updated"
}deal.stage_changed
Deals
A deal moved to a different pipeline stage.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deal, as GET /v1/deals/{deal_id} returns it.
Show child attributesHide child attributes
idstringrequirednamestringrequiredvaluenullable stringDeal value in workspace currency, as a decimal string.
statusstringrequiredopen, won, or lost — derived from the stage's type.
pipelineobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredstageobjectrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
contact_idnullable stringContact the deal belongs to, if linked.
listing_labelnullable stringListing linked to the deal, if any (read-only through the API).
expected_close_datenullable timestampclosed_atnullable timestamplost_reasonnullable stringWhy the deal was lost, when it sits in a closed-lost stage.
notesnullable stringcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "6b9f1a2c-3d4e-5f60-7a8b-9c0d1e2f3a4b",
"name": "1420 Terry Ave — Whitaker purchase",
"value": "725000.00",
"status": "open",
"pipeline": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline"
},
"stage": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN"
},
"contact_id": null,
"listing_label": null,
"expected_close_date": null,
"closed_at": null,
"lost_reason": null,
"notes": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "deal.stage_changed"
}deal.deleted
Deals
A deal was deleted.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deleted object is gone; only its id remains.
Show child attributesHide child attributes
idstringrequiredId of the deleted object.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "deal.deleted"
}task.created
Tasks
A task was created.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe task, as GET /v1/tasks/{task_id} returns it.
Show child attributesHide child attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "task.created"
}task.updated
Tasks
A task's details changed: title, due date, assignee, or status.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe task, as GET /v1/tasks/{task_id} returns it.
Show child attributesHide child attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "task.updated"
}task.completed
Tasks
A task was marked complete.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe task, as GET /v1/tasks/{task_id} returns it.
Show child attributesHide child attributes
idstringrequiredtitlestringrequireddescriptionnullable stringtypestringrequiredKind of task, e.g. todo, call, email, showing.
prioritystringrequiredlow, medium, or high.
statusstringrequiredtodo, in_progress, waiting, or done.
completedbooleanrequireddue_datenullable timestampall_daybooleanrequiredWhether the due date is a date (no time of day).
contact_idnullable stringContact the task is linked to, if any.
deal_idnullable stringDeal the task is linked to, if any.
assigneenullable objectTeam member the task is assigned to.
Show child attributesHide child attributes
idstringrequirednamestringrequiredremind_minutes_beforenullable integerReminder offset before due_date, in minutes.
completed_atnullable timestampcreated_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "a1b2c3d4-e5f6-4708-9a0b-c1d2e3f4a5b6",
"title": "Call Dana about the Terry Ave listing",
"description": null,
"type": "call",
"priority": "medium",
"status": "todo",
"completed": true,
"due_date": null,
"all_day": true,
"contact_id": null,
"deal_id": null,
"assignee": null,
"remind_minutes_before": null,
"completed_at": null,
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "task.completed"
}task.deleted
Tasks
A task was deleted.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deleted object is gone; only its id remains.
Show child attributesHide child attributes
idstringrequiredId of the deleted object.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "task.deleted"
}listing.created
Listings
A listing was added to the workspace. MLS feed syncs do not emit events.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe listing, as GET /v1/listings/{listing_id} returns it.
Show child attributesHide child attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "listing.created"
}listing.updated
Listings
A listing's details changed.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe listing, as GET /v1/listings/{listing_id} returns it.
Show child attributesHide child attributes
idstringrequiredsourcestringrequiredHow the listing entered the system: manual, mls_import, or url_import. Only manual listings can be edited through the API.
statusstringrequireddraft, active, pending, sold, or off_market. Draft listings stay off websites and property alerts.
listing_typestringrequiredsale or rental. For rentals, list_price is the asking rent per month and close_price the agreed rent once leased.
street_addressstringrequiredcitystringrequiredstate_or_provincestringrequiredpostal_codestringrequiredcountynullable stringlatitudenullable numberlongitudenullable numberproperty_typenullable stringproperty_sub_typenullable stringlist_pricenullable integerWhole dollars.
close_pricenullable integerWhole dollars; set when the listing sold.
bedrooms_totalnullable integerbathrooms_fullnullable integerbathrooms_halfnullable integerliving_areanullable integerInterior square footage.
lot_size_acresnullable numberyear_builtnullable integerdescriptionnullable stringfeaturesarray of stringsrequiredFeature bullet points shown on websites.
virtual_tour_urlnullable stringphotosarray of stringsrequiredPhoto URLs, in display order. Read-only.
created_attimestamprequiredupdated_attimestamprequiredidstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"source": "manual",
"status": "active",
"listing_type": "sale",
"street_address": "1420 Terry Ave #1903",
"city": "Seattle",
"state_or_province": "WA",
"postal_code": "98101",
"county": null,
"latitude": null,
"longitude": null,
"property_type": "Condominium",
"property_sub_type": null,
"list_price": 725000,
"close_price": null,
"bedrooms_total": null,
"bathrooms_full": null,
"bathrooms_half": null,
"living_area": null,
"lot_size_acres": null,
"year_built": null,
"description": null,
"features": [
"Corner unit",
"City views",
"2 parking spaces"
],
"virtual_tour_url": null,
"photos": [
"…"
],
"created_at": "2026-07-02T16:20:00Z",
"updated_at": "2026-07-02T16:20:00Z"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "listing.updated"
}listing.deleted
Listings
A listing was removed from the workspace.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredThe deleted object is gone; only its id remains.
Show child attributesHide child attributes
idstringrequiredId of the deleted object.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "listing.deleted"
}ping
Test
An on-demand test delivery, sent from Settings → Webhooks → Send test. Not subscribable — any active endpoint can receive it.
Payload
created_attimestamprequiredWhen the event occurred.
dataobjectrequiredShow child attributesHide child attributes
messagestringrequiredwebhook_idstringrequiredId of the endpoint the test was sent to.
idstringrequiredUnique id for this event, shared by every endpoint it fans out to and stable across retries.
typestringrequiredThe event type.
{
"created_at": "2026-07-02T16:20:00Z",
"data": {
"message": "Test delivery from Uplevel. Your endpoint is receiving events.",
"webhook_id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21"
},
"id": "evt_1f8b4c9d2e0a4b7f9c3d5e6f7a8b9c0d",
"type": "ping"
}Reference
Workspace reference data: pipelines, stages, lead sources, tags, and members. Read-only; manage these in the dashboard.
List pipelines
GET/v1/pipelines
The workspace's deal pipelines with their stages — the vocabulary for creating and moving deals.
Returns
200All pipelines with stages.403The key lacks the read_deals scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredis_activebooleanrequiredstagesarray of objectsrequiredStages in board order.
Show child attributesHide child attributes
idstringrequirednamestringrequiredtypestringrequiredOPEN, CLOSED_WON, or CLOSED_LOST.
probabilityintegerrequiredWin probability percentage used for weighted forecasts.
positionintegerrequiredcurl "https://api.uplevelre.com/v1/pipelines" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Sales Pipeline",
"is_active": true,
"stages": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Negotiation",
"type": "OPEN",
"probability": 80,
"position": 0
}
]
}
]
}List contact stages
GET/v1/contact-stages
The stages contacts move through, in board order.
Returns
200All contact stages.403The key lacks the read_contacts scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredcolorstringrequiredis_defaultbooleanrequiredApplied to new contacts when no stage is given.
positionintegerrequiredcurl "https://api.uplevelre.com/v1/contact-stages" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Hot Lead",
"color": "#f97316",
"is_default": true,
"position": 0
}
]
}List lead sources
GET/v1/lead-sources
Returns
200All lead sources.403The key lacks the read_contacts scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequirednamestringrequiredis_activebooleanrequiredcurl "https://api.uplevelre.com/v1/lead-sources" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "8f14e45f-ceea-4f3a-9a5a-d3bc0e8a6b21",
"name": "Zillow",
"is_active": true
}
]
}List members
GET/v1/members
Returns
200All workspace members.403The key lacks the read_contacts scope.Response attributes
dataarray of objectsrequiredShow child attributesHide child attributes
idstringrequiredUse as owner_id on contacts or assignee_id on tasks.
namestringrequiredemailstringrequiredrolestringrequiredowner, admin, or member.
curl "https://api.uplevelre.com/v1/members" \
-H "Authorization: Bearer $UPLEVEL_API_KEY"{
"data": [
{
"id": "3b241101-e2bb-4255-8caf-4136c566a962",
"name": "Alex Rivera",
"email": "[email protected]",
"role": "member"
}
]
}