• Virtual Marketer CRM Logo
    Virtual Marketer CRMDokumentation
  • Einführung
Erste Schritte
  • Quickstart
  • Kernkonzepte
KI verbinden
  • Custom Connector
  • CLI & Editoren
  • Ratenlimits
Integrationen
  • MCP
  • Webhooks
  • Leads von der Website
  • OpenAPI 3.1.0
  • N8N
  • WhatsApp-API
App-Leitfaden
  • Dashboard
  • Posteingang
  • Datensätze
  • Profil
  • Unternehmen
  • Lead-Versand
  • API-Keys
  • Filter-Syntax
Lizenzen & Sicherheit
  • Architektur & Sicherheit
  • Zurück
  1. Einführung
  2. OpenAPI 3.1.0

OpenAPI 3.1.0: API-Referenz

API-Endpunkte durchsuchen, Request- und Response-Formate prüfen und die OpenAPI-Referenz als Einstiegspunkt für Integrationen und eigene Workflows nutzen.

Das Ausführen von Operationen im API-Playground wirkt sich auf deine Live-Daten aus.

Die technische API-Endpunkt-Dokumentation ist nur auf Englisch verfügbar. Dies liegt daran, dass API-Dokumentation präzise technische Terminologie und Konsistenz mit Industriestandards erfordert.

Create a contact

POST

Creates a new contact. First name and last name are required. All other fields are optional.

Create many contacts

POST

Creates many contacts in a single request. Each contact requires first name and last name. All other fields are optional.

Delete a contact

DELETE

Deletes a contact from the database.

Delete many contacts

DELETE

Deletes many contacts by their id (UUID, email/phone, or provider:value handle) in a single request. This operation cannot be undone.

Get a contact by ID

GET

Retrieves a single contact by its unique identifier.

Get contacts configuration

GET

Retrieves configuration for contacts API, including available custom columns, filterable fields, and sortable fields.

Get contacts

POST

Retrieves a list of contacts with optional filtering, sorting, and pagination.

Update a contact

PUT

Updates an existing contact. Only provided fields are updated. Set fields to null to clear them.

Update many contacts

PUT

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.

Contact Created

WEBHOOK

Sent when a contact is created.

Contact Deleted

WEBHOOK

Sent when a contact is deleted.

Contact Updated

WEBHOOK

Sent when a contact is updated.

Attach a file to an organization

POST

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.

Add an organization's unbilled time to a draft document

POST

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.

Start a WhatsApp session on the organization's WAHA instance

POST

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.

Create many organizations

POST

Creates many organizations in a single request. Each organization requires a name. All other fields are optional.

Create an organization

POST

Creates a new organization. Name is required. All other fields are optional.

Delete many organizations

DELETE

Deletes many organizations by their IDs in a single request. This operation cannot be undone.

Delete an organization

DELETE

Deletes an organization from the database.

Get the organization's billing profile

GET

The billing profile holds the sender address, bank details, numbering and DATEV accounts.

Get an organization by ID

GET

Retrieves a single organization by its unique identifier.

Get organizations configuration

GET

Retrieves configuration for organizations API, including available custom columns, filterable fields, and sortable fields.

Get organizations

POST

Retrieves a list of organizations with optional filtering, sorting, and pagination.

List an organization's attachments

GET

Returns the files stored on an organization, newest first, without their content.

Preview the invoice lines an organization's unbilled time would produce

GET

Groups unbilled billable time per service and hourly rate and returns the lines without writing anything.

Take an organization's time back off a draft document

POST

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

PUT

Update the organization's billing profile

Update many organizations

PUT

Updates many organizations in a single request. Each organization requires an ID. All other fields are optional.

Update an organization

PUT

Updates an existing organization. Only provided fields are updated. Set fields to null to clear them.

Organization Created

WEBHOOK

Sent when an organization is created.

Organization Deleted

WEBHOOK

Sent when an organization is deleted.

Organization Updated

WEBHOOK

Sent when an organization is updated.

Create a deal

POST

Creates a new deal. Name is required. All other fields are optional.

Create many deals

POST

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.

Delete a deal

DELETE

Deletes a deal from the database.

Delete many deals

DELETE

Deletes many deals by their IDs in a single request. This operation cannot be undone.

Get a deal by ID

GET

Retrieves a single deal by its unique identifier.

Get deals configuration

GET

Retrieves configuration for deals API, including available custom columns, filterable fields, and sortable fields.

Get deals

POST

Retrieves a list of deals with optional filtering, sorting, and pagination.

Update a deal

PUT

Updates an existing deal. Only provided fields are updated. Set fields to null to clear them.

Update many deals

PUT

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.

Deal Created

WEBHOOK

Sent when a deal is created.

Deal Deleted

WEBHOOK

Sent when a deal is deleted.

Deal Updated

WEBHOOK

Sent when a deal is updated.

Create many services

POST

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.

Create a service

POST

Creates a new service. Name and amount are required. All other fields are optional.

Delete many services

DELETE

Deletes many services by their IDs in a single request. This operation cannot be undone.

Delete a service

DELETE

Deletes a service from the database.

Get a service by ID

GET

Retrieves a single service by its unique identifier.

Get services configuration

GET

Retrieves configuration for services API, including available custom columns, filterable fields, and sortable fields.

Get services

POST

Retrieves a list of services with optional filtering, sorting, and pagination.

Update many services

PUT

Updates many services in a single request. Each service requires an ID. All other fields are optional.

Update a service

PUT

Updates an existing service. Only provided fields are updated. Set fields to null to clear them.

Service Created

WEBHOOK

Sent when a service is created.

Service Deleted

WEBHOOK

Sent when a service is deleted.

Service Updated

WEBHOOK

Sent when a service is updated.

Create many tasks

POST

Creates many tasks in a single request. Each task requires a name. All other fields are optional.

Create a task

POST

Creates a new task. Name is required. All other fields are optional.

Delete many tasks

DELETE

Deletes many tasks by their IDs in a single request. This operation cannot be undone.

Delete a task

DELETE

Deletes a task from the database.

Get a task by ID

GET

Retrieves a single task by its unique identifier.

Get tasks configuration

GET

Retrieves configuration for tasks API, including available custom columns, filterable fields, and sortable fields.

Get tasks

POST

Retrieves a list of tasks with optional filtering, sorting, and pagination.

Update many tasks

PUT

Updates many tasks in a single request. Each task requires an ID. All other fields are optional.

Update a task

PUT

Updates an existing task. Only provided fields are updated. Set fields to null to clear them.

Task Created

WEBHOOK

Sent when a task is created.

Task Deleted

WEBHOOK

Sent when a task is deleted.

Task Updated

WEBHOOK

Sent when a task is updated.

Get own user profile

GET

Retrieves the authenticated user's profile information.

Get users

POST

Retrieves a list of users with optional filtering, sorting and pagination.

Replace the set of users allowed to send as an alias

PUT

Requires organization-administrator rights. The supplied list replaces the previous one entirely.

Accept a relation request

POST

Accepts a received relation request by invitationId on a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.

Attach a file to a project

POST

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.

Browse a Sales Navigator list

POST

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).

Cancel a relation request

POST

Withdraws or refuses a relation request by invitationId on a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.

Connect a mailbox over IMAP and SMTP

POST

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.

Convert an offer to an order or invoice

POST

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.

Add a send-as address to a connected account

POST

Requires organization-administrator rights. An alias alone grants nothing: a user may only send as it once granted, via the grants endpoint.

Post a comment on a project

POST

Stores a rich-text comment body (TipTap JSON), optionally containing @-mentions of company users.

Send a relation request

POST

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.

Create a webhook subscription

POST

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.

Delete a draft billing document

DELETE

A document that already carries a number must be cancelled instead of deleted.

Remove a send-as address

DELETE

Requires organization-administrator rights. Its grants are removed with it.

Delete an attachment

DELETE

Delete an attachment

Delete a project

DELETE

Tasks that belong to the project are kept and become project-less.

Delete a project attachment

DELETE

Delete a project attachment

Delete a project comment

DELETE

Delete a project comment

Delete a recurring invoice series

DELETE

Invoices the series already issued are kept.

Delete one of the caller's own signatures

DELETE

Delete one of the caller's own signatures

Delete a team

DELETE

Deleting a team also removes its memberships and its ticket routing rules.

Delete a time entry

DELETE

Time that already sits on an invoice cannot be deleted.

Delete a webhook subscription

DELETE

Removes a webhook subscription so it stops receiving deliveries.

Discard a message draft

DELETE

Removes a draft message by id. Sent and received messages are never affected.

Export bookings as a DATEV Buchungsstapel

GET

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.

Get activities

POST

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

GET

Get a single billing document

Get a calendar by ID

GET

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.

Get a calendar event by ID

GET

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.

Get calendar events

POST

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.

Get calendars

POST

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.

List own connected accounts

GET

Returns the messaging accounts of the workspace that the authenticated user can see.

Get the e-invoice XML of an invoice

GET

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.

Get a messaging thread by ID

GET

Returns a single message thread together with a page of its messages. Message HTML bodies and raw attachment urls are not included.

Get messaging threads

POST

Returns the inbox message threads visible to the caller, with optional search, sorting and pagination.

Stream an attachment

GET

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

GET

Get a single project

Stream a project attachment

GET

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 the monthly revenue forecast

GET

Combines payments received, open invoices, confirmed orders, projected recurring invoices and open offers weighted by a win probability.

Get the caller's running timer

GET

Get the caller's running timer

List post comments or reactions

POST

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.

List or fetch social posts

POST

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.

Get a social profile

POST

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

Get a single team

Get a single time entry

GET

Get a single time entry

Get a webhook subscription

GET

Returns one webhook subscription by ID. The signing secret itself is never returned.

Read the pairing state of a WhatsApp session

GET

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.

Infer a likely email address from the pattern a domain already uses

POST

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.

List offers, orders, invoices and credit notes

GET

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

GET

List the send-as addresses of a connected account

List a project's attachments

GET

Returns the files stored on a project, newest first, without their content.

List a project's comments

GET

Returns the comments posted on a project, oldest first.

List projects

GET

Returns the projects of the caller's organization, newest activity first. Archived projects are omitted unless requested.

List recurring invoice series

GET

List recurring invoice series

List received relation requests

POST

Lists the connection / relation requests received by the owner of a connected LinkedIn or Instagram account. Requires a connected LinkedIn or Instagram account.

List Sales Navigator lists

POST

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.

List Sales Navigator search parameters

POST

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.

List signatures available to the caller

GET

Returns the caller's own signatures plus any organization-wide ones.

List teams

GET

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.

List time entries

GET

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.

List the WhatsApp groups a paired number is in

GET

Returns the groups the account's own paired WhatsApp number belongs to, with id, name and participant count.

Unpair the WhatsApp number from a session

DELETE

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.

Record a payment against an invoice

POST

Partial payments are allowed; the invoice becomes paid once the recorded payments cover its total.

Render a billing document as PDF

GET

Returns the PDF base64-encoded. A Factur-X invoice carries its e-invoice XML inside the PDF.

Save a message draft

POST

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.

Save a lead or account to a Sales Navigator list

POST

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.

Search Sales Navigator companies (accounts)

POST

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.

Run a Sales Navigator search from a URL

POST

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.

Search Sales Navigator people (leads)

POST

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.

Send a billing document by email

POST

Attaches the PDF and, for an invoice, the e-invoice. Supplying scheduledSendAt queues the document instead of sending it now.

Send a chat message

POST

Delivers a message into an existing chat thread on a connected account.

Send an email

POST

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.

Send a WhatsApp message, optionally with attachments

POST

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.

Move a billing document to another state

POST

Moving a document out of draft assigns its permanent number, which never changes afterwards.

Archive or restore a project

POST

Archiving hides a project from the default list without deleting its tasks.

Start a chat

POST

Opens a new chat thread with one or more attendees from a connected account and delivers the first message.

Start a running timer

POST

One timer per user at a time. Stop the running one before starting another.

Stop a running timer

POST

Omit the id to stop the caller's running timer. The elapsed time is rounded to whole minutes.

Edit a project comment

PATCH

Edit a project comment

Update a team

PUT

Same body as the create call; the id in the path wins over any id in the body.

Create or update a billing document

PUT

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.

Create or update a project

PUT

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.

Create or update a recurring invoice series

POST

A series repeats an existing invoice on a schedule and can send each issue automatically.

Create or update a signature

POST

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.

Create or update a team

POST

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.

Create or update a time entry

PUT

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.

Calendar Changed

WEBHOOK

Sent when a calendar on a connected account is created, updated, or deleted.

Calendar Event Changed

WEBHOOK

Sent when a calendar event on a connected account is created, updated, or deleted.

Chat Deleted

WEBHOOK

Sent when a chat thread is removed on a connected account.

Chat Updated

WEBHOOK

Sent when a chat thread changes on a connected account.

Email Deleted

WEBHOOK

Sent when an email is removed on a connected mailbox.

Email Received

WEBHOOK

Sent when an email is ingested on a connected mailbox.

Message Deleted

WEBHOOK

Sent when a chat message is removed on a connected account.

Message Reaction

WEBHOOK

Sent when a reaction on a chat message changes on a connected account.

Message Received

WEBHOOK

Sent when a chat message or email is ingested on a connected account.

Message Updated

WEBHOOK

Sent when an already ingested chat message changes on a connected account.

Relation Created

WEBHOOK

Sent when the provider reports a new connection (e.g. an accepted LinkedIn invitation).