Browse API endpoints, inspect request and response formats, and use the OpenAPI reference as the starting point for integrations and custom workflows.
Performing operations in the API playground will affect your live data.
Creates a new contact. First name and last name are required. All other fields are optional.
Creates many contacts in a single request. Each contact requires first name and last name. All other fields are optional.
Deletes a contact from the database.
Deletes many contacts by their id (UUID, email/phone, or provider:value handle) in a single request. This operation cannot be undone.
Retrieves a single contact by its unique identifier.
Retrieves configuration for contacts API, including available custom columns, filterable fields, and sortable fields.
Retrieves a list of contacts with optional filtering, sorting, and pagination.
Updates an existing contact. Only provided fields are updated. Set fields to null to clear them.
Updates many contacts in a single request. Each contact is addressed by id (the contact UUID, an email or phone, or 'provider:value' for a handle). All other fields are optional.
Sent when a contact is created.
Sent when a contact is deleted.
Sent when a contact is updated.
Stores audio, an image or a PDF of at most 10 MB, sent as base64. Audio needs a caption, which the CRM shows word for word next to the player. The file is only ever served to signed-in users of this workspace who can see the organization.
Appends the grouped time as lines to a draft document and marks the entries as invoiced in the same transaction, so the same hour can never reach two documents. A document that has left draft is refused.
Creates or starts a WAHA session for the calling user's own WhatsApp number and stores it as a connected account. The session is derived from the caller's account, one per user, and is never shared between users or workspaces. The number is not paired yet: the response carries a QR code that has to be scanned with the WhatsApp app, and the session only becomes usable once `getWhatsAppSessionStatus` reports `WORKING`. Requires organization-administrator rights. Credentials are encrypted at rest and are never returned.
Creates many organizations in a single request. Each organization requires a name. All other fields are optional.
Creates a new organization. Name is required. All other fields are optional.
Deletes many organizations by their IDs in a single request. This operation cannot be undone.
Deletes an organization from the database.
The billing profile holds the sender address, bank details, numbering and DATEV accounts.
Retrieves a single organization by its unique identifier.
Retrieves configuration for organizations API, including available custom columns, filterable fields, and sortable fields.
Retrieves a list of organizations with optional filtering, sorting, and pagination.
Returns the files stored on an organization, newest first, without their content.
Groups unbilled billable time per service and hourly rate and returns the lines without writing anything.
Removes the time lines this feature added to a draft document and returns the entries to the unbilled pool.
Update the organization's billing profile
Updates many organizations in a single request. Each organization requires an ID. All other fields are optional.
Updates an existing organization. Only provided fields are updated. Set fields to null to clear them.
Sent when an organization is created.
Sent when an organization is deleted.
Sent when an organization is updated.
Creates a new deal. Name is required. All other fields are optional.
Creates many deals in a single request. Each deal requires a name. All other fields are optional. Deals can include services with quantities using the services array.
Deletes a deal from the database.
Deletes many deals by their IDs in a single request. This operation cannot be undone.
Retrieves a single deal by its unique identifier.
Retrieves configuration for deals API, including available custom columns, filterable fields, and sortable fields.
Retrieves a list of deals with optional filtering, sorting, and pagination.
Updates an existing deal. Only provided fields are updated. Set fields to null to clear them.
Updates many deals in a single request. Each deal requires an ID. All other fields are optional. You can update services by providing a services array with serviceId and quantity.
Sent when a deal is created.
Sent when a deal is deleted.
Sent when a deal is updated.
Creates many services in a single request. Each service requires a name and an amount (must be greater than 0). All other fields are optional.
Creates a new service. Name and amount are required. All other fields are optional.
Deletes many services by their IDs in a single request. This operation cannot be undone.
Deletes a service from the database.
Retrieves a single service by its unique identifier.
Retrieves configuration for services API, including available custom columns, filterable fields, and sortable fields.
Retrieves a list of services with optional filtering, sorting, and pagination.
Updates many services in a single request. Each service requires an ID. All other fields are optional.
Updates an existing service. Only provided fields are updated. Set fields to null to clear them.
Sent when a service is created.
Sent when a service is deleted.
Sent when a service is updated.
Creates many tasks in a single request. Each task requires a name. All other fields are optional.
Creates a new task. Name is required. All other fields are optional.
Deletes many tasks by their IDs in a single request. This operation cannot be undone.
Deletes a task from the database.
Retrieves a single task by its unique identifier.
Retrieves configuration for tasks API, including available custom columns, filterable fields, and sortable fields.
Retrieves a list of tasks with optional filtering, sorting, and pagination.
Updates many tasks in a single request. Each task requires an ID. All other fields are optional.
Updates an existing task. Only provided fields are updated. Set fields to null to clear them.
Sent when a task is created.
Sent when a task is deleted.
Sent when a task is updated.
Retrieves the authenticated user's profile information.
Retrieves a list of users with optional filtering, sorting and pagination.
Requires organization-administrator rights. The supplied list replaces the previous one entirely.
Accepts a received relation request by invitationId on a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.
Stores audio, an image or a PDF of at most 10 MB, sent as base64. Audio needs a caption, which the CRM shows word for word next to the player. The file is only ever served to signed-in users of this workspace who can see the project.
Returns the leads (kind leads, default) or accounts (kind accounts) saved in a Sales Navigator list of a connected LinkedIn account, page by page (offset pagination).
Withdraws or refuses a relation request by invitationId on a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.
Verifies the credentials against the mail server before storing anything, then creates the connected account and starts its backfill. Credentials are encrypted at rest and are never returned. Setting `shared` makes the mailbox belong to the organization rather than the calling user, and requires organization-administrator rights. An organization mailbox is visible only inside its own workspace.
Copies the source document into the next stage of the chain and links the two. An invoice converts to a credit note, which carries negative amounts.
Requires organization-administrator rights. An alias alone grants nothing: a user may only send as it once granted, via the grants endpoint.
Stores a rich-text comment body (TipTap JSON), optionally containing @-mentions of company users.
Sends a real connection / relation request from a connected LinkedIn or Instagram account to identifier, with an optional short message. Requires a connected LinkedIn or Instagram account.
Subscribes an endpoint to the given events (url and events are required). Deliveries are signed with HMAC-SHA-256 in the X-Webhook-Signature header when a secret is set. The signing secret is never returned. Providing an existing id updates that subscription instead.
A document that already carries a number must be cancelled instead of deleted.
Requires organization-administrator rights. Its grants are removed with it.
Delete an attachment
Tasks that belong to the project are kept and become project-less.
Delete a project attachment
Delete a project comment
Invoices the series already issued are kept.
Delete one of the caller's own signatures
Deleting a team also removes its memberships and its ticket routing rules.
Time that already sits on an invoice cannot be deleted.
Removes a webhook subscription so it stops receiving deliveries.
Removes a draft message by id. Sent and received messages are never affected.
Returns an EXTF booking batch for the given period. The content is CP1252 when written to a file, so write it with that encoding rather than UTF-8.
Returns the timeline of activity entries for the workspace, or for a single record when entityType and entityId are supplied. Supports sorting and pagination.
Get a single billing document
Fetches one calendar of a connected account visible to the caller, or null when no calendar with this id is accessible. The id matches the entityId of the messaging.calendar.changed webhook event.
Fetches one calendar event visible to the caller, including organizer and attendees, or null when no event with this id is accessible. The id matches the entityId of the messaging.calendar.event.changed webhook event.
Retrieves calendar events visible to the caller, ordered by start time, with optional filtering (calendarId, connectedAccountId, startsAt date range), sorting, and pagination. Event ids match the entityId of the messaging.calendar.event.changed webhook event.
Retrieves the calendars of connected accounts visible to the caller (own accounts plus shared ones), with optional filtering (connectedAccountId), search, sorting, and pagination. Calendar ids match the entityId of the messaging.calendar.changed webhook event.
Returns the messaging accounts of the workspace that the authenticated user can see.
Returns XRechnung (UBL) or Factur-X (CII) depending on the document's configured format. Fails with a readable list of what is still missing if the invoice is not ready.
Returns a single message thread together with a page of its messages. Message HTML bodies and raw attachment urls are not included.
Returns the inbox message threads visible to the caller, with optional search, sorting and pagination.
Returns the raw file with its stored content type. A single byte range (Range: bytes=start-end) is honoured, so browsers can stream and seek audio.
Get a single project
Returns the raw file with its stored content type. A single byte range (Range: bytes=start-end) is honoured, so browsers can stream and seek audio.
Combines payments received, open invoices, confirmed orders, projected recurring invoices and open offers weighted by a win probability.
Get the caller's running timer
Reads engagement on a social post: kind=comments (default) lists the post's comments, kind=reactions lists who reacted to the post, or set commentId to list reactions on that specific comment (kind is ignored). Requires a connected LinkedIn or Instagram account.
Reads LinkedIn or Instagram posts from a connected account. Omit postId to list an author's posts (authorIdentifier defaults to the account holder); set postId to fetch one post. Requires a connected LinkedIn or Instagram account.
Reads a LinkedIn or Instagram profile by identifier from a connected account. On LinkedIn the identifier is the public identifier or a provider member id (use 'me' for the account owner); on Instagram it is the username. Requires a connected LinkedIn or Instagram account.
Get a single team
Get a single time entry
Returns one webhook subscription by ID. The signing secret itself is never returned.
Polls WAHA for the session state and returns a fresh QR code while the number is unpaired. QR codes rotate every few seconds, so poll this while showing the code. The first call that observes a paired session records the phone number on the connected account and queues its backfill.
Reads the email addresses of contacts already known at the same domain, works out the naming pattern they follow (`first.last`, `f.last`, and so on) and applies it to the given name. Nothing is written: this returns a proposal for a human to confirm. `confidence` is `strong` only when at least two known addresses agree on the pattern — a single matching address is a coincidence as often as it is a rule. For German names the folding matters (`Müller` becomes `mueller` at some companies and `muller` at others); confidence drops to `weak` when the name needs folding and no known colleague ever proved which one the domain uses. `alreadyOnAnotherContact` marks a proposal that would duplicate an address already in the workspace.
Returns billing documents of the caller's organization, newest issue date first. Filter by kind to get only offers or only invoices.
List the send-as addresses of a connected account
Returns the files stored on a project, newest first, without their content.
Returns the comments posted on a project, oldest first.
Returns the projects of the caller's organization, newest activity first. Archived projects are omitted unless requested.
List recurring invoice series
Lists the connection / relation requests received by the owner of a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.
Lists the Sales Navigator lead lists (kind leads, default) or account lists (kind accounts) of a connected LinkedIn account. Lists can only be created in the Sales Navigator UI; the API reads and fills existing lists.
Resolves the parameter ids used by the Sales Navigator people and company search filters. Pass a type (LOCATION, INDUSTRY, JOB_TITLE, COMPANY, LEAD_LIST, ACCOUNT_LIST and more) and optional keywords to look up matching ids with display names. LEAD_LIST and ACCOUNT_LIST also resolve existing list ids by name.
Returns the caller's own signatures plus any organization-wide ones.
Returns the workspace teams with their members and the number of ticket routing rules attached to each. Archived teams are omitted unless `includeArchived` is set.
Returns booked time, newest work day first, together with the minute totals for the filter and the net value of the time that has not been invoiced yet. All money is in integer cents.
Returns the groups the account's own paired WhatsApp number belongs to, with id, name and participant count.
Logs the number out of WAHA and marks the connected account as needing credentials. Messages already ingested are kept; the session can be paired again by scanning a new QR code. Requires organization-administrator rights.
Partial payments are allowed; the invoice becomes paid once the recorded payments cover its total.
Returns the PDF base64-encoded. A Factur-X invoice carries its e-invoice XML inside the PDF.
Stores the draft reply on a thread so the user can review and send it from the inbox. Nothing is delivered. A thread holds a single draft, so saving again replaces it. subject, cc and bcc apply to email threads.
Saves a person (kind leads, providerId is the LinkedIn user id) or a company (kind accounts, providerId is the LinkedIn company id) to an existing Sales Navigator list on a connected LinkedIn account. New lists must be created in the Sales Navigator UI first.
Runs a structured LinkedIn Sales Navigator company search through a connected LinkedIn account. Filters take parameter ids resolved via the search-parameters endpoint (location, industry, account lists) plus native ranges like headcount, annual revenue and spotlights. Returns company rows page by page (offset pagination, LinkedIn caps a single company search at 1000 results). Requires the connected account to have a Sales Navigator subscription.
Executes a LinkedIn Sales Navigator search from a pasted search URL through a connected LinkedIn account and returns the result rows page by page (offset pagination). Requires the connected account to have a Sales Navigator subscription.
Runs a structured LinkedIn Sales Navigator people search through a connected LinkedIn account. Filters take parameter ids resolved via the search-parameters endpoint (location, industry, company, job title, and more) plus native enums like seniority and company headcount. Returns lead rows page by page (offset pagination, LinkedIn caps a single search at 2500 results). Requires the connected account to have a Sales Navigator subscription.
Attaches the PDF and, for an invoice, the e-invoice. Supplying scheduledSendAt queues the document instead of sending it now.
Delivers a message into an existing chat thread on a connected account.
Delivers an email from a connected email account. Supply threadId to reply into an existing thread, or connectedAccountId to start a new one. cc and bcc take plain email strings while to takes objects with an identifier.
Sends a message through a paired WAHA session. Base64 `attachments` (25 MB in total) go out as photo, voice note or document by MIME type, with `text` as the caption of the first file. `to` is a phone number in E.164 form or a WhatsApp chat id. WAHA is an unofficial transport: use it for conversations the recipient already started, never for cold outreach — see docs/CAMPAIGN-COMPLIANCE.md.
Moving a document out of draft assigns its permanent number, which never changes afterwards.
Archiving hides a project from the default list without deleting its tasks.
Opens a new chat thread with one or more attendees from a connected account and delivers the first message.
One timer per user at a time. Stop the running one before starting another.
Omit the id to stop the caller's running timer. The elapsed time is rounded to whole minutes.
Edit a project comment
Same body as the create call; the id in the path wins over any id in the body.
Omit the id to create. Totals are computed from the lines, so subtotal, tax and total are never supplied by the caller. Only a draft or a scheduled document can be edited.
Omit the id to create a project. Supplying memberUserIds replaces the full member list. startDate and endDate are plain dates (YYYY-MM-DD); endDate must not be before startDate. progress is a whole percentage from 0 to 100. On an update, omitting startDate, endDate or progress keeps the stored value and null clears a date.
A series repeats an existing invoice on a schedule and can send each issue automatically.
Signature HTML is sanitized before storage: scripts, styles, frames, inline event handlers and javascript/data URLs are removed. Creating or changing an organization-wide signature requires organization-administrator rights, because it is applied to other users' mail.
Omit the id to create a team. `key` is the stable handle a ticket router addresses the team by and must be unique in the workspace. Supplying members REPLACES the full member list; a member with `isLead` set is preferred over the rest of the team when no routing rule matches.
Omit the id to book new time. A time entry needs a task or an organization, and time that already sits on an invoice can no longer be changed.
Sent when a calendar on a connected account is created, updated, or deleted.
Sent when a calendar event on a connected account is created, updated, or deleted.
Sent when a chat thread is removed on a connected account.
Sent when a chat thread changes on a connected account.
Sent when an email is removed on a connected mailbox.
Sent when an email is ingested on a connected mailbox.
Sent when a chat message is removed on a connected account.
Sent when a reaction on a chat message changes on a connected account.
Sent when a chat message or email is ingested on a connected account.
Sent when an already ingested chat message changes on a connected account.
Sent when the provider reports a new connection (e.g. an accepted LinkedIn invitation).