Workspace API

Endpoints for projects, team members and invitations, notifications, and stored resources.

Projects

GET/api/projects

All projects with their assignees.

Auth: SessionPermission: contacts:read

Returns. { projects }

POST/api/projects

Create a project.

Auth: Session

Body

name*stringDisplay name, up to 120 characters.
slug*stringLowercase letters, numbers and hyphens, for example summer-lp-2026. This is the value your website form sends.
assigneeUserIdsstring[]Members who receive leads from this project.
statusstringactive or archived. Defaults to active.

Returns. { project }

GET/api/projects/{projectId}

A single project.

Auth: Session
PATCH/api/projects/{projectId}

Update a project — rename it, change assignees, or archive it.

Auth: Session
DELETE/api/projects/{projectId}

Delete a project.

Auth: Session

Team

GET/api/team/members

Members of the organization with their roles.

Auth: SessionPermission: team:read
GET/api/team/organization

Details about the current organization.

Auth: SessionPermission: team:read
GET/api/team/assignments

Which leads are assigned to whom.

Auth: SessionPermission: team:read

Query parameters

filtersjsonA JSON array of filter rows to narrow the list.

Returns. { assignments }

POST/api/team/invite

Invite someone to the organization.

Auth: SessionPermission: team:write

Body

email*stringAddress to invite.
rolestringadmin or member.
  • Returns a seat limit error if the plan has no seats left.

Notifications

GET/api/notifications

Your notifications.

Auth: Session

Query parameters

unreadOnlybooleanPass true to return only unread notifications.
limitnumberHow many to return. Defaults to 50.

Returns. Notifications newest first, plus the unread count.

POST/api/notifications

Mark notifications as read in bulk.

Auth: Session
PATCH/api/notifications/{notificationId}

Mark one notification as read.

Auth: Session
DELETE/api/notifications/{notificationId}

Delete a notification.

Auth: Session

Resources

GET/api/resources

Files for contacts and deals, newest first.

Auth: SessionPermission: contacts:read

Query parameters

pagenumber1-based page number.
limitnumberRecords per page, up to 100.
searchQuerystringMatches the file name, description, email recipient or subject, or the linked contact or deal.
filtersjsonA JSON array of filter rows on month, type, source, link or addedBy.
contactIdstringOnly the files of this contact, including its deals' files.
dealIdstringOnly the files of this deal.

Returns. { resources, totalPages, currentPage, totalResources }. Each resource has its name, type, size, description, source (upload or email), linked contact and deal, who added it and when.

  • Everyone sees files that aren't linked to a contact; otherwise members see the files they added and the files of the leads they can see.
  • Deleting a contact or deal keeps its files and only removes the link.
POST/api/resources

Upload files.

Auth: SessionPermission: contacts:write

Body

files*file[]Up to 10 files, each up to 5 MB. Send the request as multipart/form-data.
descriptionstringApplied to every file, up to 2,000 characters.
contactIdstringContact the files belong to.
dealIdstringDeal the files belong to. Its contact is linked too.

Returns. { resources }

GET/api/resources/{resourceId}

A single resource and its details.

Auth: SessionPermission: contacts:read
PATCH/api/resources/{resourceId}

Rename a file, change its description, or link it to another contact or deal.

Auth: SessionPermission: contacts:write

Body

namestringNew name. The file keeps its extension.
descriptionstringNew description; an empty string removes it.
contactIdstring | nullContact to link; null removes the link.
dealIdstring | nullDeal to link; null removes it.
  • Admins can change any file; members only the files they added.
DELETE/api/resources/{resourceId}

Delete a file.

Auth: SessionPermission: contacts:write
  • Admins can delete any file; members only the files they added.
GET/api/resources/{resourceId}/content

The file itself.

Auth: SessionPermission: contacts:read

Query parameters

download1Download the file instead of showing it in the browser.
  • PDFs, images, audio and video open in the browser; other files download.
  • Supports byte ranges, so audio and video can be seeked.
GET/api/resources/link-targets

Contacts and deals a file can be linked to.

Auth: SessionPermission: contacts:read

Query parameters

qstringSearches contact names, companies and emails, and deal titles.
contactIdstringLists that contact's deals instead.

Returns. { contacts, deals }