# inTandem Developers Hub Documentation > inTandem Developers Hub ## Guides - [Welcome to the inTandem Developer Hub](https://developers.intandem.tech/docs/welcome-to-the-intandem-developer-hub.md) - [Platform Overview](https://developers.intandem.tech/docs/platform-overview.md): Boost your business with vcita's All-In-One platform solution - [API Overview](https://developers.intandem.tech/docs/api-overview.md): Manage and control client information with ease. - [Get Access](https://developers.intandem.tech/docs/get-access.md) - [Directory Owners (Partners)](https://developers.intandem.tech/docs/directory-owners-partners.md) - [App Developers](https://developers.intandem.tech/docs/app-developers.md) - [Business owners](https://developers.intandem.tech/docs/business-owners.md) - [Quickstart - Platform API Management](https://developers.intandem.tech/docs/quickstart-platform-api-management.md): Create a business, add a subscription, add a staff - [Introduction](https://developers.intandem.tech/docs/introduction.md) - [Installation](https://developers.intandem.tech/docs/installation.md) - [InTandemMessageHandler](https://developers.intandem.tech/docs/intandemmessagehandler.md) - [addEventListener (callback)](https://developers.intandem.tech/docs/addeventlistener.md): Registers a listener to handle incoming messages. The listener receives two arguments: the message and an acknowledgment (`ack`) function. - [removeEventListener (type)](https://developers.intandem.tech/docs/addeventlistener-callback-copy.md): Registers a listener to handle incoming messages. The listener receives two arguments: the message and an acknowledgment (`ack`) function. - [init](https://developers.intandem.tech/docs/init.md): Initializing your app or widget - [getState](https://developers.intandem.tech/docs/getstate.md): Used to get the state of the hosting entity (a page where an app is embedded or the widget containing an iframe) - [setState](https://developers.intandem.tech/docs/setstate.md): Used to get the state of the hosting entity (a page where an app is embedded or the widget containing an iframe) - [navigate](https://developers.intandem.tech/docs/navigate.md): This function places a request to navigate the current hosting page to a path, relative or absolute - [openModal](https://developers.intandem.tech/docs/openmodal.md): This function places a request to open a modal over the current hosting page - [getJWKSToken](https://developers.intandem.tech/docs/getauth.md): Get an authorization token to use with JWKS - [getUser](https://developers.intandem.tech/docs/getuser.md): Get the basic details about the user (impersonation, locale, current domain...) - [destroy](https://developers.intandem.tech/docs/destroy.md): Releases any resources that are being used. - [JWKS (JSON Web Key Set) Overview](https://developers.intandem.tech/docs/jwks-json-web-key-set-overview.md) - [The Operator Portal](https://developers.intandem.tech/docs/operator-portal.md) - [Creating a New Account](https://developers.intandem.tech/docs/account-create-op.md): Creating a new account in the Operator Portal - [Managing Client Accounts](https://developers.intandem.tech/docs/account-manage-op.md): Managing your Operator Portal account - [Locking Accounts](https://developers.intandem.tech/docs/account-close-op.md): Locking an account in the Operator Portal - [Account Creation Flow](https://developers.intandem.tech/docs/account-creation-flow.md) - [Using Templates](https://developers.intandem.tech/docs/using-templates.md) - [Signup Page](https://developers.intandem.tech/docs/signup-page.md) - [Main Concepts](https://developers.intandem.tech/docs/main-concepts.md): inTandem access control main concepts - [Permissions List & Defaults](https://developers.intandem.tech/docs/permissions-list-defaults.md) - [App Permissions](https://developers.intandem.tech/docs/app-permissions.md): As part of inTandem's evolved access control architecture, appsβ€”especially pre-installed onesβ€”can now define, enforce, and manage permissions through a dedicated integration process. - [App Permissions Request Form](https://developers.intandem.tech/docs/app-permissions-request-form.md) - [Custom login options](https://developers.intandem.tech/docs/custom-login-options.md) - [SSO (Single Sign On)](https://developers.intandem.tech/docs/sso-single-sign-on.md): Log in users to their account using a Single Sign On method. - [Webhooks](https://developers.intandem.tech/docs/webhooks.md) - [Manage Billing & Subscriptions](https://developers.intandem.tech/docs/custom-billing-pages.md) - [Overview](https://developers.intandem.tech/docs/overview.md) - [License Management - Creation Quick Guide](https://developers.intandem.tech/docs/offerings-quick-start.md): This overview is constructed as a full overview of the inTandem Offering system capabilities. Some of the API's access is restricted by design. Supported token types are clearly mentioned in the API Reference for each end-point - [Purchase Flow](https://developers.intandem.tech/docs/purchase-flow.md) - [Cancel Flow](https://developers.intandem.tech/docs/cancel-flow.md) - [Dunning Flow](https://developers.intandem.tech/docs/dunning-flow.md) - [Partner's Pricing Page](https://developers.intandem.tech/docs/partners-pricing-page.md) - [Subscription Coupons](https://developers.intandem.tech/docs/coupons-for-plans-apps-and-add-ons.md): How to set up and use coupons to discount the price of Plans, Apps, and Add-ons - [Discounted Subscriptions](https://developers.intandem.tech/docs/discounted-subscriptions.md): This guide demonstrates how to create discounted and free subscriptions using coupons. - [Apps Overview](https://developers.intandem.tech/docs/apps-overview.md) - [Apps - Basic Terminology](https://developers.intandem.tech/docs/apps-basic-terminology.md) - [Create your first app](https://developers.intandem.tech/docs/create-your-first-app.md): A step-by-step process to setup your first app - [OAuth 2.0](https://developers.intandem.tech/docs/oauth-20-authorization-flow.md): Authenticate and generate an API access token for your apps - [OAuth Enhancements](https://developers.intandem.tech/docs/oauth-enhancements-in-the-intandem-platform.md): Developer Implementation Guide - [OAuth Code Examples](https://developers.intandem.tech/docs/application-oauth-sample.md) - [JWKS Authentication](https://developers.intandem.tech/docs/jwks-json-web-key-set-overview-1.md) - [Application Types (Integration Points)](https://developers.intandem.tech/docs/application-types-integration-points.md) - [OpenID](https://developers.intandem.tech/docs/openid.md): "app_type": ["openid"] - [Menu Items](https://developers.intandem.tech/docs/menu-items.md): "app_type": ["menu_items"] - [Communication](https://developers.intandem.tech/docs/communication.md): "app_type": ["communication"] - [Payments](https://developers.intandem.tech/docs/payments.md): "app_type": ["payments"] - [Connect / Disconnect](https://developers.intandem.tech/docs/connect-disconnect.md) - [Checkout](https://developers.intandem.tech/docs/checkout.md) - [Charge](https://developers.intandem.tech/docs/charge.md) - [Refund](https://developers.intandem.tech/docs/refund.md) - [Card on file](https://developers.intandem.tech/docs/card-on-file.md) - [Tips](https://developers.intandem.tech/docs/tips.md) - [Client Import](https://developers.intandem.tech/docs/client-import.md): "app type": ["import_clients"] - [Notification](https://developers.intandem.tech/docs/notification.md): "app type": ["notifications"] - [Paid Apps](https://developers.intandem.tech/docs/paid-apps.md): Implemnting paid apps - [In-App Purchase](https://developers.intandem.tech/docs/in-app-purchase.md) - [Dashboard Widgets](https://developers.intandem.tech/docs/widgets.md) - [Glossary](https://developers.intandem.tech/docs/glossery.md) - [Iframe Widget Life Cycle](https://developers.intandem.tech/docs/widget-life-cycle.md) - [Iframe Widgets](https://developers.intandem.tech/docs/iframe-widgets-1.md) - [Optimizing Widget Loading Speed: A Comprehensive Guide](https://developers.intandem.tech/docs/optimizing-widget-loading-speed-a-comprehensive-guide.md) - [SDK Overview](https://developers.intandem.tech/docs/skd-overview.md) - [Quickstart - Create your first widget](https://developers.intandem.tech/docs/quickstart-create-your-first-widget.md) - [Widget CSS Customization](https://developers.intandem.tech/docs/widget-css-customization.md): Adjust the Client Portal Widget UI look & feel to your website - [Widget Configuration](https://developers.intandem.tech/docs/widget-configuration.md): Methods to control the behavior of the LiveSite widget - [Widget Custom Actions](https://developers.intandem.tech/docs/widget-custom-actions.md): Change, add or remove built-in and custom actions on a per-page / per-website basis - [Website Embedded Actions](https://developers.intandem.tech/docs/website-embedded-actions.md): Add built-in actions with dynamic or static parameters to your natural website flow - [Actions Reference](https://developers.intandem.tech/docs/actions-reference.md): Complete options list per action - [Activity Message Types Reference](https://developers.intandem.tech/docs/activity-message-types-reference.md): This document lists all message types returned by the GET /v3/communication/activity_messages endpoint, organized by activity type (messageable type). - [The BizAI platform](https://developers.intandem.tech/docs/the-bizai-platform.md) - [Quickstart - Working with the BizAI Chat](https://developers.intandem.tech/docs/working-with-the-bizai-chat.md): Step by step Guide - [BizAI sample chat application](https://developers.intandem.tech/docs/bizai-sample-chat-application.md): a simple chat application using the basic BizAI API - [MCP](https://developers.intandem.tech/docs/mcp.md) ## API Reference - [Welcome to the inTandem API πŸš€](https://developers.intandem.tech/reference/welcome-to-intandem-api.md) - [The BizAI Platform](https://developers.intandem.tech/reference/the-bizai-platform.md) - [The AISmartReply Object](https://developers.intandem.tech/reference/aismartreply.md) - [Create a new AISmartReply](https://developers.intandem.tech/reference/post_v3-ai-ai-smart-replies.md): ## Overview Generate a new, on-demand, smart reply between a business and a client. For example, when a user wants to edit their own reply text, provide custom instructions, or modify a previously-generated AI reply. **Available for Staff tokens** - [List all AISmartReplies](https://developers.intandem.tech/reference/get_v3-ai-ai-smart-replies.md): ## Overview Retrieve a list of smart replies with optional filtering. Available for **Staff, Directory, and Client tokens** - [Create a ChatCompletion](https://developers.intandem.tech/reference/post_v3-ai-chat-completions.md): ## Overview Create chat completions using multiple LLM providers (OpenAI, Anthropic, Google). Supports text and multimodal input (images, audio, video, files), streaming responses via SSE, async mode for long-running thinking models, tool calling (function calling), and structured output (JSON schema). ### Supported Models | Provider | Models | |----------|--------| | OpenAI | `openai/gpt-5`, `openai/gpt-4o`, `openai/gpt-4o-mini`, `openai/o3-mini`, `openai/o1` | | Anthropic | `anthropic/claude-sonnet-4-5-20250929`, `anthropic/claude-haiku-4-5-20251001`, `anthropic/claude-3-5-sonnet-latest`, `anthropic/claude-3-5-haiku-latest` | | Google | `google/gemini-2.5-pro`, `google/gemini-2.0-flash`, `google/gemini-2.0-pro` | ### Streaming By default, responses are streamed as Server-Sent Events (SSE). Set `stream: false` for a single JSON response. ### Async Mode Set `async: true` to queue the request and receive a run UID. Poll `GET /v3/ai/chat_completion_runs/{uid}` for the result. Recommended for thinking models. **Available for Staff tokens** - [Create an AudioTranscription](https://developers.intandem.tech/reference/post_v3-ai-audio-transcriptions.md): ## Overview Transcribe audio files using multiple providers (OpenAI Whisper, OpenAI GPT-4o Transcribe, Google Chirp). Supports file upload via multipart form data. ### Supported Models | Provider | Models | |----------|--------| | OpenAI | `openai/whisper-1`, `openai/gpt-4o-transcribe` | | Google | `google/chirp-2` | ### Async Mode Set `async: true` to queue the transcription and receive a run UID. Poll `GET /v3/ai/transcription_runs/{uid}` for the result. Recommended for long audio files or diarization. **Available for Staff tokens** - [Retrieve a ChatCompletionRun](https://developers.intandem.tech/reference/get_v3-ai-chat-completion-runs-uid.md): ## Overview Get the status and result of an async chat completion job. Poll this endpoint until status is COMPLETED or FAILED. **Available for Staff tokens** - [List ChatCompletionRuns](https://developers.intandem.tech/reference/get_v3-ai-chat-completion-runs.md): ## Overview Retrieve a paginated list of chat completion runs for the authenticated client. Supports sorting by field and direction. **Available for Staff tokens** - [Retrieve a TranscriptionRun](https://developers.intandem.tech/reference/get_v3-ai-transcription-runs-uid.md): ## Overview Get the status and result of an async transcription job. Poll this endpoint until status is COMPLETED or FAILED. **Available for Staff tokens** - [List TranscriptionRuns](https://developers.intandem.tech/reference/get_v3-ai-transcription-runs.md): ## Overview Retrieve a paginated list of transcription runs for the authenticated client. Supports sorting by field and direction. **Available for Staff tokens** - [The AIGenerationFeedback Object](https://developers.intandem.tech/reference/aigenerationfeedback.md) - [Create new AI generation feedback](https://developers.intandem.tech/reference/createaigenerationfeedback.md): ## Overview Submit feedback for AI-generated content. **Available for Staff tokens** - [The AIRecommendation Object](https://developers.intandem.tech/reference/airecommendation.md) - [Get all AIRecommendations](https://developers.intandem.tech/reference/get_v3-ai-ai-recommendations.md): ## Overview Retrieve a list of AIRecommendations with optional filtering by status, target, and context. Available for **Staff, Directory, and Client tokens** - [Create an AIRecommendation](https://developers.intandem.tech/reference/post_v3-ai-ai-recommendations.md): ## Overview Create a new AIRecommendation. **Available for Staff tokens** - [Update an AIRecommendation](https://developers.intandem.tech/reference/put_v3-ai-ai-recommendations-uid.md): ## Overview Update an existing AIRecommendation by UID. **Available for Staff tokens** - [The AIRecommendedAction Object](https://developers.intandem.tech/reference/airecommendedaction.md) - [Get all BusinessRules](https://developers.intandem.tech/reference/businessrulescontroller_getbusinessrules.md): ## Overview Get a list of all business rules for the authenticated business. Optionally filter by category. Available for **Staff** tokens. - [Create a BusinessRule](https://developers.intandem.tech/reference/businessrulescontroller_createbusinessrule.md): ## Overview Create a new business rule for the authenticated business. Available for **Staff** tokens. - [Retrieve a BusinessRule](https://developers.intandem.tech/reference/businessrulescontroller_getbusinessrule.md): ## Overview Retrieve a specific business rule based on its unique identifier (UID). Available for **Staff** tokens. - [Update a BusinessRule](https://developers.intandem.tech/reference/businessrulescontroller_updatebusinessrule.md): ## Overview Update an existing business rule by UID. All fields are optional - only provided fields will be updated. Available for **Staff** tokens. - [Delete a BusinessRule](https://developers.intandem.tech/reference/businessrulescontroller_deletebusinessrule.md): ## Overview Delete a business rule by UID. Available for **Staff** tokens. - [Get all BusinessRule History Records](https://developers.intandem.tech/reference/businessrulescontroller_gethistory.md): ## Overview Get the change history for business rules. Supports optional filtering by rule UID and action type, with pagination. Available for **Staff** tokens. - [Retrieve a BusinessRule History Record](https://developers.intandem.tech/reference/businessrulescontroller_gethistoryrecord.md): ## Overview Retrieve a specific history record by its unique identifier (UID). Available for **Staff** tokens. - [Bulk import business rules](https://developers.intandem.tech/reference/businessrulescontroller_createbulkimportjob.md): ## Overview Create an async job to extract business rules from raw text using LLM. The system analyzes content, extracts rules, classifies by category, and deduplicates against existing rules. ## Webhook Notification When the job completes, a webhook notification will be sent to subscribers of the `business_rules_bulk_import/completed` event. The webhook payload includes the complete list of created business rules. **To receive notifications:** 1. Subscribe to the webhook event: `POST /platform/v1/webhook/subscribe` with `{"event": "business_rules_bulk_import/completed", "target_url": "https://your-domain.com/webhook"}` 2. Your webhook will receive the job results including all created business rules **Webhook Payload Structure:** ```json { "event": "business_rules_bulk_import/completed", "data": { "job_uid": "job-xxx", "business_uid": "biz-xxx", "status": "completed", "business_rules": [ { "uid": "br-xxx", "content": "Rule content", "category_code": "policies_and_info", "status": "pending_approval", "created_at": "2026-03-01T10:30:00.000Z" } ], "created_rules": 15, "skipped_duplicates": 8 } } ``` Available for **Staff** tokens. - [The BizAIChat Object](https://developers.intandem.tech/reference/the-aichat-object.md) - [Get all BizAIChats](https://developers.intandem.tech/reference/chatscontroller_getchats.md): ## Overview Get a list of all chat sessions. Available for **Staff, Directory, and Client tokens** - [Create a BizAIChat](https://developers.intandem.tech/reference/chatscontroller_createchat.md): ## Overview Create a new chat session between a user and an agent Available for **Staff Tokens**. - [Retrieve a BizAIChat](https://developers.intandem.tech/reference/chatscontroller_getchat.md): ## Overview Retrieve a specific BizAIChat session based on its unique identifier (UID). Available for **Staff, Directory, and Client tokens** - [The BizAIChatMessage Object](https://developers.intandem.tech/reference/the-aichatmessage-object.md) - [The BizAIChatStreamMessage Object](https://developers.intandem.tech/reference/the-aichatstreammessage-object.md) - [Get all BizAIChatMessages](https://developers.intandem.tech/reference/chatmessagescontroller_getmessages.md): ## Overview Get all BizAIChatMessages exchanged within a specific chat. Available for **Staff, Directory, and Client tokens** - [Create a BizAIChatMessage](https://developers.intandem.tech/reference/chatmessagescontroller_createmessage.md): ## Overview Create a new BizAIChatMessage in a BizAIChat thread and get an AI response Available for **Staff Tokens**. - [Retrieve a StaffAiSettings](https://developers.intandem.tech/reference/get_v3-ai-staff-ai-settings-staff-uid.md): ## Overview Retrieve a specific StaffAiSettings based on staff unique identifier. **Available for Staff tokens** - [Update a StaffAiSettings](https://developers.intandem.tech/reference/put_v3-ai-staff-ai-settings-staff-uid.md): ## Overview Update AI settings for a specific staff member based on their unique identifier. Users can only update their own settings. **Available for Staff tokens** - [The StaffAISettings Object](https://developers.intandem.tech/reference/the-staffaisettings-object.md) - [Navigation Item](https://developers.intandem.tech/reference/navigation-item.md): Represents a navigation menu item that defines how partners configure their platform navigation structure. Navigation items support hierarchical menus, localized titles, permission-based visibility, and mobile-specific settings. - [List Navigation Items](https://developers.intandem.tech/reference/listnavigationitems.md): Retrieve a paginated list of navigation items for the authenticated directory. Supports filtering by parent and mobile availability. Available for **Staff & Directory tokens**. - [Create a Navigation Item](https://developers.intandem.tech/reference/createnavigationitem.md): Create a new navigation item for the authenticated directory. The directory_uid is automatically set from the authenticated token context. Available for **Directory tokens**. - [Update a Navigation Item](https://developers.intandem.tech/reference/updatenavigationitem.md): Update an existing navigation item. Only provided fields will be updated. Available for **Directory tokens**. - [Delete a Navigation Item](https://developers.intandem.tech/reference/deletenavigationitem.md): Delete a navigation item. Items with children cannot be deleted until all children are removed first. Available for **Directory tokens**. - [The AppBusinessMapping Object](https://developers.intandem.tech/reference/the-appbusinessmapping-object.md) - [List App Business Mappings](https://developers.intandem.tech/reference/listappbusinessmappings.md): Returns a paginated list of app business mappings for the caller. For **Directory tokens**, returns mappings belonging to the authenticated directory, with optional filtering by business_uid and app_code_name. For **Staff tokens**, returns mappings scoped to the authenticated staff member's business; the business_uid query parameter is ignored. Available for **Staff & Directory tokens**. - [Create an App Business Mapping](https://developers.intandem.tech/reference/createappbusinessmapping.md): Create a new mapping between a vcita business and third-party app identifiers for a specific integrated app. Available for **Directory tokens**. - [Get an App Business Mapping](https://developers.intandem.tech/reference/getappbusinessmapping.md): Retrieve a single app business mapping by uid. For **Directory tokens**, returns any mapping owned by the authenticated directory. For **Staff tokens**, returns the mapping only if it belongs to the authenticated staff member's business; otherwise returns 403 Forbidden. Available for **Staff & Directory tokens**. - [Update an App Business Mapping](https://developers.intandem.tech/reference/updateappbusinessmapping.md): Update an existing app business mapping. Only provided fields will be updated. business_uid cannot be changed. directory_uid can only be modified when using an **Internal token**; if directory_uid is included in the request body when using a **Directory token**, the request will be rejected. Available for **Directory tokens**. - [Delete an App Business Mapping](https://developers.intandem.tech/reference/deleteappbusinessmapping.md): Delete an app business mapping by uid. Available for **Directory tokens**. - [The App Object](https://developers.intandem.tech/reference/the-app-object.md) - [Get an App](https://developers.intandem.tech/reference/apps_get.md): Retrieve a single app by uid. **Available for Staff, Directory, and Internal Tokens.** - [List all Apps](https://developers.intandem.tech/reference/apps_list.md): Returns apps available to the caller. Apps can be available because they are installed, offered by the directory, or assigned as internal. **Available for Staff, Directory, and Internal Tokens.** - [Creates an app](https://developers.intandem.tech/reference/post_platform-v1-apps.md): ## Overview Create a new app. **Available for Directory and internal Tokens.** - [List of apps](https://developers.intandem.tech/reference/get_platform-v1-apps.md): Retrieve a list of available apps. Response format varies by token type - Staff tokens receive detailed app data including full configuration, while Directory tokens receive simplified app data for apps associated with the directory. **Available for Staff and Directory Tokens.** - [Read an app](https://developers.intandem.tech/reference/get_platform-v1-apps-id.md): ## Overview Retrieve an app by code name. Available for **Staff and Directory Tokens**. - [Updates an app](https://developers.intandem.tech/reference/put_platform-v1-apps-id.md): ## Overview Update an app by code name. ## Authentication **Available for Internal Tokens and Directory Tokens.** ### Token Type Behavior - **Internal Tokens**: Can update any app, including the `trusted` field - **Directory Tokens**: Can only update apps created by/owned by that directory. Cannot modify the `trusted` field. ## Path Parameter The `{id}` in the path must be the **app_code_name** (string identifier), not the numeric app_id. Use `GET /platform/v1/apps` to find app_code_name values. ## Field Restrictions - `trusted`: This parameter can **only be set by Internal Tokens**. Directory tokens cannot modify this field. - [Unassign an app on directory or a business [Internal]](https://developers.intandem.tech/reference/post_platform-v1-apps-id-unassign.md): ## Overview Unassign an application from a business or directory. **⚠️ DEPRECATED**: Use `DELETE /v3/apps/app_assignments/{uid}` instead. ## Authentication **Available for Internal Tokens and Directory Tokens.** ### Directory Token Requirements - The app must be owned by/created by your directory - The app must have an existing assignment to the specified business or directory ## Path Parameter The `{id}` in the path must be the **app_code_name** (string identifier), not the numeric app_id. Using a numeric app_id will result in a 422 error: 'Not valid uid or app'. ## Request Body Provide either `directory_uid` OR `business_uid` (not both) to specify what to unassign from. - [Update app translations](https://developers.intandem.tech/reference/put_platform-v1-apps-translations-app-code-name.md): ## Overview Updates the translations for an app. The translations must be provided as a CSV file with a specific format. The CSV should have columns for: Key, Context, Character Limit, en, es, fr, it, pt, de, pl, nl, en-GB, he, sl. The rows should contain: Name, Short description, App features, Long description. All English fields are required. **Authorization**: This endpoint is for app developers/publishers only. The requesting directory must own the app specified by `app_code_name`. Attempting to update translations for an app owned by another directory will result in a 422 AuthorizationException error. **Available for Directory Tokens** - [[DEPRECATED] Assign an app](https://developers.intandem.tech/reference/post_platform-v1-apps-id-assign.md): ## Overview Assign an application to a business or directory so it appears in the App Market. **⚠️ DEPRECATED**: Use `POST /v3/apps/app_assignments` instead. ## Authentication **Available for Internal Tokens and Directory Tokens.** ### Directory Token Requirements Directory tokens can only assign apps they own/created: - **Assign to Directory**: Requires `is_internal: "true"`. The app must be owned by your directory. - **Assign to Business**: Requires `hide_from_market: "true"`. The app must be owned by your directory and the business must belong to your directory. ## Path Parameter The `{id}` in the path must be the **app_code_name** (string identifier), not the numeric app_id. ## Migration Guide ### Old Format (This Endpoint) ```json { "directory_uid": "def456", "is_internal": "true" } ``` ### New Format (`POST /v3/apps/app_assignments`) ```json { "assignee_type": "directory", "assignee_uid": "def456", "app_code_name": "myapp", "settings": { "assignment_mode": "internal" } } ``` ### Parameter Mapping | Old Parameter | New Parameter | |---------------|---------------| | `business_uid` | `assignee_uid` (with `assignee_type: "business"`) | | `directory_uid` | `assignee_uid` (with `assignee_type: "directory"`) | | `is_internal: "true"` | `settings.assignment_mode: "internal"` | | `pre_installed: "true"` | `settings.assignment_mode: "pre_installed"` | | `built_in: "true"` | Not supported in v3 | - [Install an app [DEPRECATED]](https://developers.intandem.tech/reference/post_platform-v1-apps-id-install-app.md): ## Overview Install an app for the authorized business - **⚠️ DEPRECATED**: Use `POST /v3/apps/business_app_installs` instead. **Available for Staff Tokens** - [Uninstall an app [Deprecated]](https://developers.intandem.tech/reference/post_platform-v1-apps-id-uninstall-app.md): ## Overview Uninstall an app for the authorized business. **⚠️ DEPRECATED**: Use `DELETE /v3/apps/business_app_installs/{uid}` instead. **Available for Staff Tokens** - [The BusinessAppInstall object](https://developers.intandem.tech/reference/the-businessappinstall-object.md) - [List Business App Installs](https://developers.intandem.tech/reference/businessappinstalls_list.md): Get a list of installed apps per business. Each item includes a uid; use it in the show and delete paths. Optional query filters: business_uid, app_code_name, page, per_page. **Available for Staff & Directory Tokens** - [Create a Business App Install](https://developers.intandem.tech/reference/businessappinstalls_create.md): Install an app for a business. **Available for Staff & Directory Tokens** - [Get a Business App Install](https://developers.intandem.tech/reference/businessappinstalls_show.md): Get a single business app install by uid. **Available for Staff & Directory Tokens** - [Delete a Business App Install](https://developers.intandem.tech/reference/businessappinstalls_destroy.md): Uninstall an app for a business. **Available for Staff & Directory Tokens** - [The AppAssignment Object](https://developers.intandem.tech/reference/appassignment-entity.md) - [Create an App Assignment](https://developers.intandem.tech/reference/appassignments_create.md): ## Overview Create a new app assignment to a business, package or directory. **Available for Directory Tokens and Internal Tokens only.** Staff and Business tokens are not supported and will return 401 Unauthorized. ## Prerequisites - The app specified by `app_code_name` must already exist and belong to the authenticated directory - The `directory_uid` parameter is **optional when using Directory Token** (auto-determined from token). If provided, must match the directory associated with your authentication token. - For **package** assignments with an **Internal Token**, `directory_uid` may be omitted to create a global (direct) assignment that applies across all directories. - [Delete an App Assignment](https://developers.intandem.tech/reference/appassignments_delete.md): ## Overview Delete an app assignment. **Available for Directory and internal Tokens** - [List App Assignments](https://developers.intandem.tech/reference/appassignments_list.md): Returns app assignments across multiple businesses within a directory, with optional filtering. Note: assignee_uid can only be used when assignee_type is also provided. **Available for Directory and Internal Tokens.** - [Generate an app access token](https://developers.intandem.tech/reference/post_oauth-service-token.md): ## Overview Generate an app access token using OAuth client credentials flow. **No bearer token required** - authentication is via service_id and service_secret in the request body. ## Prerequisites Requires an existing OAuth application. Create one using `POST /platform/v1/apps` to obtain `client_id` (service_id) and `client_secret` (service_secret). ## Parameters - `service_id`: The OAuth application `client_id` - a 64-character hexadecimal string (e.g., `20cecc9cc620b717187922baa7706ceaf27b254afdb435ff955a913b3393a8f9`) - `service_secret`: The OAuth application `client_secret` - a 64-character hexadecimal string ## How to Get Credentials 1. Create an app: `POST /platform/v1/apps` with directory token 2. Save the `client_id` and `client_secret` from the response 3. Use those values as `service_id` and `service_secret` in this endpoint ## Usage This token can be used to create widgets (for apps with `app_type=['widgets']`) or notifications for the app. Available for **Staff, Directory, and Client tokens** - [The Widget Object](https://developers.intandem.tech/reference/the-widget-object.md) - [Create a Widget](https://developers.intandem.tech/reference/widgets_create.md): ## Overview Create a new widget. ## Authentication **Available for App Tokens only.** The app must have `app_type='widgets'` to create widgets. Apps with other types will receive 403: 'This app's type does not support widgets'. ## How to Get an App Token 1. Use `GET /platform/v1/apps` (with directory token) to find apps with `app_type='widgets'` 2. If none exist, create one with `POST /platform/v1/apps` including `app_type: 'widgets'` 3. Use the app's `client_id` and `client_secret` to authenticate, or use `GET /platform/v1/tokens` to list app tokens - [Get all Widgets](https://developers.intandem.tech/reference/widgets_getall.md): ## Overview Get all widgets for the authenticated app. ## Authentication **Available for App Tokens only.** The app must have `app_type='widgets'` to access widgets. Apps with other types will receive 403: 'This app's type does not support widgets'. - [Update Widget](https://developers.intandem.tech/reference/widgets_update.md): ## Overview Update an existing widget. ## Authentication **Available for App Tokens only.** The app must have `app_type='widgets'`. Apps with other types will receive 403: 'This app's type does not support widgets'. - [The StaffWidgetsBoard Object](https://developers.intandem.tech/reference/the-staffwidgetsboard-object.md) - [Create a Staff Widgets Board](https://developers.intandem.tech/reference/staffwidgetsboard_create.md): ## Overview Creates a widgets board for staff member. **Uniqueness Constraint**: Each staff member can only have ONE board per `type` value. For example, a staff member cannot have two boards with `type: "home"`. Attempting to create a duplicate returns 403 error: 'Duplication Error: StaffWidgetsBoard Already Exist'. **Testing Tip**: To reliably test this endpoint, first create a fresh staff member using `POST /platform/v1/businesses/{business_id}/staffs`, then create the board for that new staff. **Available for Staff Tokens** - [Get all Widgets Boards Of The Staff](https://developers.intandem.tech/reference/staffwidgetsboard_getall.md): ## Overview Returns the widgets boards for staff member. **Available for Staff Tokens** - [Update a Staff Widgets Board](https://developers.intandem.tech/reference/staffwidgetsboard_update.md): ## Overview Update a staff widget board. **Available for Staff Tokens** - [The StaffWidgetsBoardsTemplate Object](https://developers.intandem.tech/reference/the-staffwidgetsboardstemplate-object.md) - [Create a Staff Widgets Boards Template](https://developers.intandem.tech/reference/staffwidgetsboardstemplate_create.md): ## Overview Create a staff widget board template. **Available for Directory Tokens only.** **Uniqueness Constraint**: Each staff member can only have ONE active widgets boards template. Creating a template when one already exists returns 400: 'Duplicate entry not allowed for active rows.' **To replace existing template**: First use `DELETE /v3/apps/staff_widgets_boards_templates/{uid}` to remove the existing template, then create a new one. - [Delete a Staff Widgets Boards Template](https://developers.intandem.tech/reference/staffwidgetsboardstemplate_delete.md): ## Overview Delete a staff widget board template. **Only. **available for Directory Tokens** - [Get all Staff Widgets Boards Templates](https://developers.intandem.tech/reference/staffwidgetsboardstemplate_getall.md): ## Overview Get all staff widget board templates. **Only. **available for Directory Tokens** - [Update a Staff Widgets Boards Template](https://developers.intandem.tech/reference/staffwidgetsboardstemplate_update.md): ## Overview Update an existing staff widget board template. **Available for Directory Tokens only.** ## Prerequisites - The `uid` path parameter must be a valid UID from an existing staff widgets boards template - Use `GET /v3/apps/staff_widgets_boards_templates` to find available template UIDs - [The Compact JWS token entity](https://developers.intandem.tech/reference/the-compact-jws-token-entity.md) - [Create a compact JWS token](https://developers.intandem.tech/reference/post_v3-apps-compact-jws-tokens.md): ## Overview Create a new compact JWS token that can be used to authenticate a staff member to an app in inTandem using a JWKS process. The token is signed by the app's private key and can be verified by inTandem's public key. Public JWKS token can be obtained at: https://api.vcita.biz/v3/apps/.well-known/jwks.json. Available for **Staff Tokens** and **AppStaffToken**. - [Bulk create compact JWS tokens](https://developers.intandem.tech/reference/post_v3-apps-compact-jws-tokens-bulk.md): ## Overview Create multiple compact JWS tokens for a list of app code names. The response will include the success, generated token (if successful), or error details for each app code name. **Available for Staff Tokens and AppStaffToken** - [Get Leave Details Form](https://developers.intandem.tech/reference/get_client-api-v1-portals-business-uid-contact-get-form-1.md): ## Overview Gets the leave details form of the business. ## Authentication **Available for Client Tokens only.** - [Submits Leave Details Form](https://developers.intandem.tech/reference/post_client-api-v1-portals-business-uid-contact-submit-1.md): ## Overview Submits Leave Details Form to the business. ## Authentication **Available for Client Tokens only.** ## Required Fields Before submitting, call `GET /client_api/v1/portals/{business_uid}/contact/get_form` to discover required fields for the business's form configuration. For the default `leave_details` form, `subject` and `message` are typically required fields. Any field marked with `required: true` in the form response must be provided with a non-empty value, or the API returns HTTP 422. ## Request Body Structure The `form_data.fields` object is a dynamic map where keys are field IDs and values are the field values. Field IDs can be obtained from the GET form response. - [Get Share Documents Form](https://developers.intandem.tech/reference/get_client-api-v1-portals-business-uid-share-documents-form-get-form-1.md): ## Overview Gets the share documents form of the business. ## Authentication **Available for Client Tokens only.** - [Submits Share Documents Form](https://developers.intandem.tech/reference/post_client-api-v1-portals-business-uid-share-documents-form-submit-1.md): ## Overview Submits Share Documents Form to the business. ## Authentication **Available for Client Tokens only.** ## Critical Requirement The `matter_uid` query parameter must reference a matter with an assigned staff member. Without this, the endpoint returns 500 due to a server-side bug. ## Request Format This endpoint requires `multipart/form-data` format with actual binary file uploads (not JSON). Documents must be uploaded as form fields with proper content types. ## Important: Field Naming Convention **Document fields MUST use explicit numeric indices** (e.g., `[0]`, `[1]`), NOT empty brackets `[]`. - Correct: `form_data[fields][documents][0]=@file.pdf` - Wrong: `form_data[fields][documents][]=@file.pdf` (causes 500 error) This is because the server expects a Hash structure, not an Array. ## Captcha When the business has the `captcha_intake_form` feature enabled, a valid `captcha_token` is required. ## Example cURL ```bash curl -X POST 'https://api.vcita.biz/client_api/v1/portals/{business_uid}/share_documents_form/submit?matter_uid={matter_uid}' \ -H 'Authorization: Bearer {token}' \ -F 'form_data[fields][title]=My Document' \ -F 'form_data[fields][message]=Please review' \ -F 'form_data[fields][documents][0]=@file.pdf;type=application/pdf' ``` - [Get Forms List](https://developers.intandem.tech/reference/get_platform-v1-forms.md): ## Overview Get forms list. ## Authentication **Available for Staff, App, and Directory tokens.** - [Updates a Form](https://developers.intandem.tech/reference/put_platform-v1-forms.md): ## Overview Update a Form. ## Authentication **Available for Staff, App, and Directory tokens.** - [Get Documents For A Client](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id-documents-1.md): ## Overview Gets a list of documents for a client. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Search docuforms activities](https://developers.intandem.tech/reference/get_v2-search-search-docuforms-1.md): ## Overview Searches for docuforms (documents and forms) activities within the business. Results are scoped based on the requesting staff member's permissions. ### Staff Scoping - **Admin staff** (with full client access): Can see all docuforms activities, unless `teams_view_filter=me` is specified. - **Non-admin staff**: Can only see their own docuforms activities, unless they have shared view access. Available for **Staff and Internal tokens**. - [Import clients app](https://developers.intandem.tech/reference/post_business-clients-v1-apps-app-code-name-import.md): ## Overview Import clients to an app. Creates client records based on the provided field mappings. ## Authentication **Available for Staff, App, and Directory tokens.** ## Prerequisites 1. The app specified by `app_code_name` must be assigned to the business 2. The app must have `app_type` set to `import_clients` 3. Use `POST /v3/apps/app_assignments` with `assignment_mode: 'internal'` to assign the app ## Request Body - `import_params`: Configuration for the import process - `fields_mapping`: Maps client fields to their values - [Gets Matters by filter](https://developers.intandem.tech/reference/get_business-clients-v1-matters.md): ## Overview Gets Matters by filter. Searchable fields are: Email, First name, Last name, Matter name and Phone. ## Required Parameters You must provide a `filter` parameter to search. Without it, the endpoint returns HTTP 422. ## Filter Formats - `filter[advanced][start_with]=term` - Search by name/email/phone prefix - `filter[uid_in]=uid1,uid2,uid3` - Get specific matters by UIDs **Available for Staff, App, and Directory Tokens** - [Gets the collaborators of a Matter](https://developers.intandem.tech/reference/get_business-clients-v1-matters-matter-uid-collaborators.md): ## Overview Gets the collaborators of a Matter. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Adds a collaborator to a Matter](https://developers.intandem.tech/reference/post_business-clients-v1-matters-matter-uid-collaborators.md): ## Overview Adds a collaborator to a Matter Available for **Staff, App, and Directory tokens**. - [Removes a collaborator from a Matter](https://developers.intandem.tech/reference/delete_business-clients-v1-matters-matter-uid-collaborators-staff-uid.md): ## Overview Removes a collaborator from a Matter Available for **Staff, App, and Directory tokens**. - [Nest a matter under another contact person](https://developers.intandem.tech/reference/put_business-clients-v1-matters-matter-uid-nest.md): ## Overview Moves a matter from its current contact to a different destination contact (nesting). The source contact is automatically deleted if it has no remaining matters after the nesting operation. ## Important The matter being nested must have a **different name** than any existing matter on the destination contact. If names collide, the API returns a 422 validation error. ## Authentication Available for **Staff, App, and Directory tokens**. - [Gets a list of notes](https://developers.intandem.tech/reference/get_business-clients-v1-matters-matter-uid-notes.md): ## Overview Gets a list of notes. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Adds a note](https://developers.intandem.tech/reference/post_business-clients-v1-matters-matter-uid-notes.md): ## Overview Adds a note Available for **Staff, App, and Directory tokens**. - [Remove a note](https://developers.intandem.tech/reference/delete_business-clients-v1-matters-matter-uid-notes-note-uid.md): ## Overview Remove a note Available for **Staff, App, and Directory tokens**. - [Get a note](https://developers.intandem.tech/reference/get_business-clients-v1-matters-matter-uid-notes-note-uid.md): ## Overview Get a note. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Update a note](https://developers.intandem.tech/reference/put_business-clients-v1-matters-matter-uid-notes-note-uid.md): ## Overview Update a note Available for **Staff, App, and Directory tokens**. - [Reassign staff to Matter](https://developers.intandem.tech/reference/put_business-clients-v1-matters-matter-uid-reassign.md): ## Overview Reassign staff to Matter Available for **Staff, App, and Directory tokens**. - [Remove a tag from a Matter](https://developers.intandem.tech/reference/delete_business-clients-v1-matters-matter-uid-tags.md): ## Overview Remove a tag from a single Matter (one matter_uid in path, one tag in body). For bulk remove use DELETE /v1/tags. Available for **Staff, App, and Directory tokens**. - [Gets a list of tags of a Matter](https://developers.intandem.tech/reference/get_business-clients-v1-matters-matter-uid-tags.md): ## Overview Gets a list of tags of a Matter. ## Authentication **Available for Staff, App, and Directory Tokens.** - [[Deprecated] Adds a tag to a Matter](https://developers.intandem.tech/reference/post_business-clients-v1-matters-matter-uid-tags.md): ## Overview **Deprecated.** Use **PUT /v1/tags** instead (bulk add with body `new_api`, `matters.uids`, `tags`). This endpoint adds a single tag to one matter. Available for **Staff, App, and Directory tokens**. - [Gets a Matter](https://developers.intandem.tech/reference/get_business-clients-v1-matters-uid.md): ## Overview Gets a Matter. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Updates a Matter](https://developers.intandem.tech/reference/put_business-clients-v1-matters-uid.md): ## Overview Updates a Matter. ## Authentication **Available for Staff, App, and Directory tokens.** ## Validation - `uid` (path parameter): Must be a valid matter UID that exists and is accessible to the authenticated user - `fields[].uid`: Each field UID must be a valid field that exists for this specific matter. Use `GET /business/clients/v1/matters/{uid}` to see available field UIDs. - [Show business client settings](https://developers.intandem.tech/reference/get_business-clients-v1-settings.md): ## Overview Get settings. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Update business client settings](https://developers.intandem.tech/reference/put_business-clients-v1-settings.md): ## Overview Update settings Available for **Staff, App, and Directory tokens**. - [Gets Matters of a contact](https://developers.intandem.tech/reference/get_business-clients-v1-contacts-client-uid-matters.md): ## Overview Gets Matters of a client. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Create a new Matter](https://developers.intandem.tech/reference/post_business-clients-v1-contacts-client-uid-matters.md): ## Overview Create a new Matter for a contact. ## Important Context Creating a client via POST /platform/v1/clients automatically creates a first matter. This endpoint is used to create **additional matters** for an existing client. ## Name Field Requirement Additional matters require a name field to differentiate them: 1. Call `GET /platform/v1/fields` to get field definitions 2. Find the field where `type == "name"` AND `object_type == "matter"` 3. Use the field's `id` as the `uid` with a unique name value **Available for Staff tokens** - [Bulk add tags to matters](https://developers.intandem.tech/reference/put_business-clients-v1-tags.md): ## Overview Bulk add tags to one or more matters. This is the endpoint used by the product (e.g. with Staff token). Send `new_api: true`, `matters.uids` (array of matter UIDs), and `tags` (array of tag strings). Available for **Staff, App, and Directory tokens**. Requires packagable feature **tags_feature** (returns 401 when disabled). - [Bulk remove tags from matters](https://developers.intandem.tech/reference/delete_business-clients-v1-tags.md): ## Overview Bulk remove tags from one or more matters. Same contract as PUT: send `matters.uids` (array of matter UIDs) and `tags` (array of tag strings to remove). Optional query param `new_api: true`. Available for **Staff, App, and Directory tokens**. Requires **tags_feature** (returns 401 when disabled). - [List of clients that can be used as primary for merge.](https://developers.intandem.tech/reference/get_platform-v1-clients-merges-possible-merge-master.md): ## Overview Returns a list of client UIDs that can be used as a primary client for the merge. ## Authentication **Available for Staff, App, and Directory Tokens.** ## Required Parameters - `client_ids` (required): Comma-separated client UIDs to check for merge eligibility. ## Business Rules - **Clients with multiple matters cannot be merged** - If any selected client has more than one matter/project, the merge is not allowed - Returns 422 if multiple clients are related to the same contact (e.g., pets belonging to the same owner) - Clients must be independent contacts to be eligible for merge - The error message format is: '{Term} cannot be merged since you selected more than 1 {term} related to the same contact' - [Merge duplicate clients into a primary client.](https://developers.intandem.tech/reference/put_platform-v1-clients-merges-merge-clients.md): ## Overview Merge two or more duplicate clients into one primary client. ## Authentication **Available for Staff, App, and Directory tokens.** ## Query Parameters - `to_client_uid` (required): UID of the destination primary client - `from_client_uids` (required): Comma-separated UIDs of clients to merge into the primary client ## Business Rules - Clients must represent different contact persons to be merged - Clients related to the same contact cannot be merged (returns 422 error) - Use `GET /platform/v1/clients/merges/possible_merge_master` to check merge eligibility first ## Request Body The request body can be empty but must be sent (e.g., `{}`). - [Validate Credit Availability [Alpha]](https://developers.intandem.tech/reference/get_platform-v1-clients-payment-client-packages-validate.md): ## Overview Check whether the authenticated client has an active package with available credits for the service associated with a given payment status. Use this to determine if the "pay with package" option should be shown to the client before calling the `update_usage` endpoint. ## Authentication **Available for Client Tokens only.** ## Required Parameters - `payment_status_id` (query, string) β€” The ID of the payment status to check. Must reference a pending/unpaid payment status. ## Response - Returns `has_package: true` if a suitable active package with available credits exists for the service. - Returns `has_package: false` if no suitable package is available. ## Notes - Returns 422 if the payment status is already paid. - This endpoint is in Alpha and may change. - [Use Client Package Credit [Alpha]](https://developers.intandem.tech/reference/post_platform-v1-clients-payment-client-packages-update-usage.md): ## Overview Redeem a credit from the authenticated client's active package to pay for an appointment or service session. This marks the associated payment status as paid (price set to $0) and decrements one credit from the client's package. If multiple packages qualify, the **soonest-expiring package** is used first. ## Authentication **Available for Client Tokens only.** ## Required Parameters - `payment_status_id` (string) β€” The ID of the payment status record to pay using a package credit. Must reference a pending/unpaid payment status linked to an appointment. ## Notes - Returns 422 "There is no package to use" if no active client packages with available credits exist for the relevant service. - Returns 422 if the payment status is already paid. - There is also a Staff-facing version at `POST /platform/v1/payment/client_packages/update_usage` that accepts **Staff tokens** (and **Directory/App tokens** with the `X-On-Behalf-Of` header). - This endpoint is in Alpha and may change. - [Bulk Update Clients](https://developers.intandem.tech/reference/bulkupdateclients.md): ## Overview Bulk update client marketing opt-in status for multiple clients in a single operation. ## Currently Supported Field This endpoint currently supports updating **only** the `opt_in` field. Any request containing other fields will be rejected with a validation error. ## Field Format - `opt_in` - Marketing opt-in status. Accepts: - String values: `"1"` (opted-in) or `"0"` (opted-out) - Boolean values: `true` or `false` (automatically converted to `"1"` or `"0"`) ## Limits - Maximum 5000 clients per request - All clients must belong to the authenticated business - Duplicate client IDs are not allowed - Additional rate limits apply per business ## Authentication **Available for Staff, App, and Directory tokens.** ## Behavior - Atomic operation - either all clients update successfully or the request fails - If any client is not found or validation fails, no clients are updated - If the business doesn't have an opt-in field configured, returns success with `updated: false` - [Deletes a Client by Id](https://developers.intandem.tech/reference/delete_platform-v1-clients-client-id.md): ## Overview Deletes a Client Available for **Staff, App, and Directory tokens**. - [Get Clients](https://developers.intandem.tech/reference/get_platform-v1-clients.md): ## Overview Retrieves a paginated list of clients for the business. Supports searching by various attributes and filtering by update timestamp. ## Authentication **Available for Staff, App, and Directory Tokens.** Directory tokens require the `X-On-Behalf-Of` header with the target business UID. The endpoint is business-scoped, and a directory token carries no business context on its own β€” without this header no business can be resolved and the request cannot return clients. The target business must belong to the directory, otherwise the request is rejected as unauthorized. - [Retrieves a Client by Id](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id.md): ## Overview Retrieves a Client. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Create a Client](https://developers.intandem.tech/reference/post_platform-v1-clients.md): ## Overview Creates a new client record for the business. If a client with the same email already exists, returns a 409 Conflict error. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Updates a Client](https://developers.intandem.tech/reference/put_platform-v1-clients-client-id.md): ## Overview Update a Client Available for **Staff, App, and Directory tokens**. - [Get Estimates Of Client](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id-estimates.md): ## Overview Gets a list of estimates for a client. ## Authentication **Available for Directory tokens only.** Requires `X-On-Behalf-Of` header with the business UID. **Note**: Staff OAuth tokens fail with 422 'Unauthorized' even with `payments.manage` permission due to authorization type mismatch in the backend. Use Directory tokens with `X-On-Behalf-Of` header instead. **Note on Authorization Header**: Both `Authorization: Bearer ` and legacy `Authorization: Token ` formats are supported. ## Error Responses Authorization failures return HTTP 422 with `{status:'Error', error:'Unauthorized'}` rather than 401/403. - [Get Invoices Of Client](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id-invoices.md): ## Overview Gets a list of invoices for a client. ## Authentication **Available for Staff, App, and Directory Tokens.** ## Prerequisites **Requires business feature `invoicing_features`** (payments module) to be enabled. Returns 403 Forbidden or 422 Unauthorized if the feature is not enabled. ## Error Responses - **403 Forbidden**: Business does not have invoicing_features enabled - **422 Unauthorized**: `{status:'Error', error:'Unauthorized'}` - Legacy error format for feature gate failures - [Get Payments of Client](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id-payments.md): ## Overview Gets a list of payments for a client. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Delete a view](https://developers.intandem.tech/reference/delete_business-search-v1-views-uid.md): ## Overview Delete a custom view - Delete a custom view - Available for **Staff, App, and Directory Tokens**. - [Get a specific view](https://developers.intandem.tech/reference/get_business-search-v1-views-uid.md): ## Overview Retrieve a specific view by UID. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Get all views](https://developers.intandem.tech/reference/get_business-search-v1-views.md): ## Overview Retrieve all views for the authenticated business. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Bulk update views](https://developers.intandem.tech/reference/post_business-search-v1-views-bulk.md): ## Overview Update multiple views in bulk - Update multiple views in bulk - Available for **Staff, App, and Directory Tokens**. - [Create a new view](https://developers.intandem.tech/reference/post_business-search-v1-views.md): ## Overview Create a new custom view - Create a new custom view - Available for **Staff, App, and Directory Tokens**. - [Update a view](https://developers.intandem.tech/reference/put_business-search-v1-views-uid.md): ## Overview Update an existing view - Available for **Staff, App, and Directory Tokens**. ## Request Body Requirements The `view` object must contain **at least one updatable field** (e.g., `name`, `level`, `columns`, `filter`, `description`, `order`, `pinned`). Sending an empty view object will result in no changes being made. ## Updatable Fields - `name`: View name - `description`: View description - `level`: View visibility level ('account' or 'staff') - `columns`: Array of column definitions - `filter`: Filter configuration (JSON string) - `sorting_column`: Column to sort by - `sorting_direction`: Sort direction ('asc' or 'desc') - `order`: Display order - `pinned`: Whether the view is displayed/pinned - [Get available columns](https://developers.intandem.tech/reference/get_business-search-v1-views-columns.md): ## Overview Retrieve all available columns for creating views. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Get available filters](https://developers.intandem.tech/reference/get_business-search-v1-view-filters.md): ## Overview Retrieve all available filters for creating views. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Search business data](https://developers.intandem.tech/reference/get_v2-search.md): ## Overview Searches across business data entities including clients, conversations, bookings, appointments, estimates, payments, and documents. The search is powered by an Elasticsearch-based Seeker service. The behavior varies depending on the `entity` parameter: - **No entity or general entities**: Returns a combined result with `top_hits` grouped by entity type and `counts` per entity type. - **`entity=appointment`**: Returns a decorated list of appointments with pagination support for recurring appointment series. - **`entity=event_instance`**: Returns a decorated list of event instances with standard pagination. ### Rate Limiting This endpoint is rate-limited to **60 requests per 60 seconds** per staff member. Exceeding the limit returns a `429 Too Many Requests` response. ### Staff Permissions Search results are filtered based on the requesting staff member's permissions: - Clients are scoped to the staff member's accessible clients unless they have full access. - Payment and document results are hidden if the staff member lacks view permissions for those entities. - Client email, phone, and last name visibility depends on the staff's model view permissions. Available for **Staff and Internal tokens**. - [Show Deposit](https://developers.intandem.tech/reference/get_client-payments-v1-deposits-deposit-uid.md): ## Overview Show specific deposit details. ## Authentication **Available for Client Tokens only.** ## Parameters - `deposit_uid`: The unique identifier of the deposit - `matter_uid`: (Optional) When provided, validated and used to filter by engagement; an incorrect value may result in not_found or missing deposit_uid rather than 422. ## Error Responses - 404/not_found: When deposit does not exist or matter_uid (if provided) does not match. - [Client Portal](https://developers.intandem.tech/reference/client-portal.md): Dedicated end point for clients - [Get External Connected Payment Application](https://developers.intandem.tech/reference/get_client-payments-v1-apps-primary-provider-connected-application.md): ## Overview Get External Connected Payment Application. ## Authentication **Available for Client Tokens only.** ## Prerequisites Requires a payment application (app_type=payments) to be installed and **fully connected** for the business. Returns 422 if no connected payment app exists. ### What "Fully Connected" Means A payment app is considered fully connected when: 1. The app is assigned to the business via `POST /v3/apps/app_assignments` 2. The business has `external_[app_name]_connected=true` flag set 3. The app is not in pending/setup mode 4. For vcitaPayments: Terms and conditions must be accepted - [Create New Card On File](https://developers.intandem.tech/reference/post_client-payments-v1-cards.md): ## Overview Create New Card On File. ## Authentication **Available for Client Tokens only.** ## Prerequisites Requires an active payment processor connection (Stripe, vcitaPayments, etc.) to be configured for the business account before cards can be stored. - [Get most recent pending card added to client [Alpha]](https://developers.intandem.tech/reference/get_client-payments-v1-cards-get-new-card.md): ## Overview Get most recent pending card added to client [Alpha]. ## Authentication **Available for Client Tokens only.** - [Create New Save Card Session](https://developers.intandem.tech/reference/post_client-payments-v1-cards-save-card-session.md): ## Overview Create New Save Card Session. Creates a Stripe Checkout session for securely saving a card. ## Authentication **Available for Client Tokens only.** ## Prerequisites 1. Business must have the `cp_add_new_cof` feature flag enabled 2. Business must use Stripe as payment gateway (`payments_gateway_type: 'stripe'`) ## Supported Payment Gateways - **Stripe**: Fully supported - **Other gateways**: Not supported (returns 422) - [Create Cart](https://developers.intandem.tech/reference/post_client-payments-v1-carts.md): ## Overview Creates a Cart. ## Authentication **Available for Client Tokens only.** ## Request Format The request body must be wrapped in a 'cart' object with required fields: matter_uid, currency, and items array. - [Show Cart](https://developers.intandem.tech/reference/get_client-payments-v1-carts-cart-uid.md): ## Overview Show specific cart data. ## Authentication **Available for Client Tokens only.** - [List Client Packages](https://developers.intandem.tech/reference/get_client-payments-v1-client-packages.md): ## Overview Retrieve a paginated list of client packages (package subscriptions) for the authenticated client, scoped to a specific matter/conversation. Returns each package's validity dates, credit balances, and active status. ## Authentication **Available for Client Tokens only.** ## Required Parameters - `matter_uid` (query, string) β€” The UID of the matter/conversation to fetch packages for. Client packages are scoped to matters. ## Optional Parameters - `page` (query, string) β€” Page number for pagination (default: 1). - `per_page` (query, string) β€” Number of results per page (default: 25). - `sort` (query, string) β€” Sort by one or more fields. Format: `field:direction`. Available fields: `created_at`, `updated_at`, `valid_from`, `valid_until`. Directions: `asc`, `desc`. Example: `sort=valid_until:asc` to show soonest-expiring first. - `filter` (query, string) β€” Filter results by state. Format: `filter[state][eq]=ACTIVE` or `filter[state][eq]=INACTIVE`. ACTIVE packages have remaining credits and valid dates; INACTIVE packages are expired or fully consumed. ## Notes - "About to expire" packages can be found by sorting by `valid_until:asc` and checking which packages have `valid_until` dates in the near future. - An ACTIVE package has `valid_from <= now <= valid_until` and at least one booking credit with `total_bookings > bookings_usage`. - [The ClientSettings Object](https://developers.intandem.tech/reference/the-clientsettings-object.md) - [Bulk Update Client Settings](https://developers.intandem.tech/reference/put_v3-clients-client-settings-bulk.md): ## Overview Bulk update client settings for multiple clients in a single operation. Supports partial success - individual clients can fail while others succeed. ## Currently Supported Field This endpoint currently supports updating **only** the `opt_out_transactional_sms` field. Any request containing other fields will be rejected with a validation error. ## Field Requirements - `opt_out_transactional_sms` must be an explicit boolean value (`true` or `false`) - `null` values are **not allowed** - Missing the field will cause validation failure ## Limits - Maximum 5000 clients per request - Duplicate client UIDs are not allowed - Additional rate limits apply per business ## Authentication **Available for Staff Tokens only.** Client tokens should use the single update endpoint `/v3/clients/client_settings/{client_uid}` instead. ## Response Behavior - Returns HTTP 200 with an array of results (one per client) - Each result includes a `success` boolean and either `data` (on success) or `errors` (on failure) - Individual client failures (e.g., not found) do not prevent other clients from being updated - [Retrieve Client Settings](https://developers.intandem.tech/reference/get_v3-clients-client-settings-client-uid.md): ## Overview Get the client settings for a specific client. ## Authentication **Available for Staff and Client Tokens.** - [Update Client Settings](https://developers.intandem.tech/reference/put_v3-clients-client-settings-client-uid.md): ## Overview Update the client settings for a specific client - Update the client settings for a specific client - Available for **Staff and Client Tokens**. - [Show Deposits List](https://developers.intandem.tech/reference/get_client-payments-v1-deposits.md): ## Overview Show list of deposits. ## Authentication **Available for Client Tokens only.** ## Required Parameters - `matter_uid` (query, **required**): The matter UID to fetch deposits for. Returns 500 error if not provided. - [Show Invoices List](https://developers.intandem.tech/reference/get_client-payments-v1-invoices.md): ## Overview Show list of invoices. ## Authentication **Available for Client Tokens only.** - [List Catalog Packages (Public) [Alpha]](https://developers.intandem.tech/reference/get_client-payments-v1-packages.md): ## Overview Retrieve the list of available package catalog templates for a business, as seen from the client perspective. Returns packages that clients can browse and potentially purchase through the client portal. ## Authentication **No authentication required.** This is a public endpoint. ## Required Parameters - `business_id` (query, string) β€” The UID of the business whose package catalog to retrieve (e.g., "88pzdbz1hmkdoel4"). Must be in UID format, not numeric ID. ## Optional Parameters - `page` (query, string) β€” Page number for pagination. - `per_page` (query, string) β€” Number of results per page. - `active_only` (query, string) β€” Pass `"true"` to return only active packages. When omitted, all packages are returned. ## Notes - This is the client-facing view of the same catalog available to staff via `GET /platform/v1/payment/packages`. - Only packages with `online_payment_enabled: true` are typically shown to clients for self-purchase. - This endpoint is in Alpha and may change. - [Show Catalog Package (Public) [Alpha]](https://developers.intandem.tech/reference/get_client-payments-v1-packages-package-id.md): ## Overview Retrieve detailed information for a single package catalog template, as seen from the client perspective. Returns the package's pricing, included services, expiration settings, and discount information. ## Authentication **No authentication required.** This is a public endpoint. ## Path Parameters - `package_id` (required, string) β€” The unique identifier (UID) of the catalog package to retrieve. ## Notes - This is the client-facing view of the same data available to staff via `GET /platform/v1/payment/packages/{package_id}`. - This endpoint is in Alpha and may change. - [Get Payment Requests List](https://developers.intandem.tech/reference/get_client-payments-v1-payment-requests.md): ## Overview Show list of payment requests. ## Authentication **Available for Client Tokens only.** ## Required Parameters - `matter_uid` (required): The matter UID to fetch payment requests for. - [Get Checkout Session](https://developers.intandem.tech/reference/get_client-payments-v1-payment-requests-payment-request-uid-checkout.md): ## Overview Get the checkout session of a given payment request. Available for **Client tokens**. ## Authentication This endpoint is designed for client checkout flows and may also work without authentication for public checkout scenarios. ## Coupon Functionality The optional `coupon_code` parameter applies a discount to the payment request. **Note:** Business must have `rollout.payments.coupons_checkout_v2` feature enabled and active coupons available. Returns 422 error if business is not eligible for coupon functionality. - [Show Payments List](https://developers.intandem.tech/reference/get_client-payments-v1-payments.md): ## Overview Show list of payments. ## Authentication **Available for Client Tokens only.** - [Show Product Orders List](https://developers.intandem.tech/reference/get_client-payments-v1-product-orders.md): ## Overview Show list of product orders. ## Authentication **Available for Client Tokens only.** - [Get all ClientNotes](https://developers.intandem.tech/reference/get_v3-clients-client-notes.md): Get a list of ClientNotes for a specific matter Available for **Staff tokens** - [Create a ClientNote](https://developers.intandem.tech/reference/post_v3-clients-client-notes.md): Create a new note for a client matter Available for **Staff tokens** - [Retrieve a ClientNote](https://developers.intandem.tech/reference/get_v3-clients-client-notes-uid.md): Retrieve a specific ClientNote based on it's unique identifier (UID) Available for **Staff tokens** - [Update a ClientNote](https://developers.intandem.tech/reference/put_v3-clients-client-notes-uid.md): Update an existing note for a client matter. At least one of title or content must be provided in the request. Additionally, the resulting note must have at least one of title or content non-empty after the update (e.g., you can set content to empty only if title remains non-empty). Available for **Staff tokens** - [Delete a ClientNote](https://developers.intandem.tech/reference/delete_v3-clients-client-notes-uid.md): Delete a specific ClientNote based on it's unique identifier (UID) Available for **Staff tokens** - [Send a Client Message](https://developers.intandem.tech/reference/post_client-messaging-v1-messages.md): ## Overview Sends a message from the authenticated client to the business. The message direction is always `client_to_business` β€” it is set automatically by the server based on the client token. The staff member who receives the message is auto-assigned based on the business's assignment rules and the client's existing relationships. ## Authentication Available for **Client tokens** only. The client UID and business UID are extracted from the token β€” no need to pass them in the request body. ## Parameters - `message.message` (required) β€” The text content of the message. - `message.subject` (optional) β€” An optional subject line for the message. - `message.entity` (optional) β€” Entity attachment that controls message type. When omitted, defaults to a plain text message. Set `type` to `"document"` and provide `uid` to attach an existing document. - `matter_uid` (optional) β€” The UID of the conversation (matter/engagement) to add the message to. If omitted, the system uses the client's default conversation. - [Create a Business Communication Channel](https://developers.intandem.tech/reference/channelscontroller_create.md): ## Overview Create a new business' communication channel. Available for **Staff, App, and Directory tokens**. **Note:** Channels start with a `pending` status upon creation. They are activated asynchronously via a webhook callback from the communication-gw to the calling application. The channel will transition to `active` status only after the webhook activation event is received and processed. - [Delete a Business Communication Channel](https://developers.intandem.tech/reference/channelscontroller_deletechannel.md): ## Overview Deletes an existing channel. Available for **Staff, App, and Directory tokens**. **Note:** Channels follow an async webhook-based lifecycle. Channels start as `pending` and are activated asynchronously via webhook callback from the communication-gw. - [Update a Business Communication Channel](https://developers.intandem.tech/reference/channelscontroller_updatechannel.md): ## Overview Update an existing communication channel. Available for **Staff, App, and Directory tokens**. **Note:** Channels follow an async webhook-based lifecycle. Channels start as `pending` and are activated asynchronously via webhook callback from the communication-gw. - [Create a Business Communication Session](https://developers.intandem.tech/reference/sessionscontroller_createsession.md): ## Overview Create a new inactive session over a channel between the app's contact and vCita's contact. Available for **Staff, App, and Directory tokens**. **Note:** Sessions require an active channel (activated via webhook callback from the communication-gw). Sessions themselves start as `pending` and are also activated asynchronously via webhook callback. - [Retrieve a Business Communication Session](https://developers.intandem.tech/reference/sessionscontroller_getsession.md): ## Overview Retrieve sessions. Deep object style. Example: filter[channel_uid]=channeluuid. Available for **Staff, App, and Directory tokens**. **Note:** Sessions require an active channel (activated via webhook callback from the communication-gw). Sessions themselves are also activated asynchronously via webhook. - [Delete a Business Communication Session](https://developers.intandem.tech/reference/sessionscontroller_logicdelete.md): ## Overview Deletes an existing session. Available for **Staff, App, and Directory tokens**. **Note:** Sessions follow an async webhook-based lifecycle. Sessions require an active channel (activated via webhook) and are themselves activated asynchronously via webhook callback. - [Update a Business Communication Session](https://developers.intandem.tech/reference/sessionscontroller_updatestatus.md): ## Overview Activating/deactivating an existing session. Available for **Staff, App, and Directory tokens**. **Note:** Sessions follow an async webhook-based lifecycle. Sessions require an active channel (activated via webhook) and are themselves activated asynchronously via webhook callback from the communication-gw. - [Create a Business Communication Session Typing indicator](https://developers.intandem.tech/reference/sessionstypingcontroller_typingstatus.md): ## Overview Populate typing indicator status. Available for **Staff, App, and Directory tokens**. **Note:** Requires an active session, which in turn requires an active channel. Both channels and sessions are activated asynchronously via webhook callbacks from the communication-gw. - [The ActivityMessage Object](https://developers.intandem.tech/reference/the-activitymessage-object.md) - [List Activity Messages](https://developers.intandem.tech/reference/listactivitymessages.md): ## Overview Retrieves a paginated list of activity messages for a business. Activity messages represent communications tied to business activities such as meetings, invoices, payments, and more. Use the available query parameters to filter results by activity type, client, staff, direction, read status, and date range. Available for **Staff tokens**. ### Message Types Reference | Activity Type | Message Type | Direction | Meaning | |---|---|---|---| | Meeting | `schedule_invitation` | `pivot_to_client` | Staff scheduled a new appointment with the client. | | Meeting | `schedule` | `client_to_pivot` | Client online scheduled a new appointment, and it was auto-approved. | | Meeting | `request` | `client_to_pivot` | Client scheduled a meeting online and it is pending business approval. | | Meeting | `request_notification` | `pivot_to_client` | Business sent an automatic reply acknowledging the client's meeting request is being handled. | | Meeting | `schedule_update` | `pivot_to_client` | Staff updated the meeting details. | | Meeting | `updated` | `pivot_to_client` | Staff updated the meeting details. | | Meeting | `updated` | `to_pivot` | Business is notified that meeting details were updated. | | Meeting | `cancelled` | `pivot_to_client` | Staff cancelled a meeting with the client. | | Meeting | `cancelled` | `client_to_pivot` | Client cancelled a meeting online. | | Meeting | `accepted` | `pivot_to_client` | Staff approved a pending meeting request from the client. | | Meeting | `accepted` | `client_to_pivot` | Client accepted a tentative meeting scheduled by the staff. | | Meeting | `rejected` | `pivot_to_client` | Staff declined a meeting request the client made online. | | Meeting | `rejected` | `client_to_pivot` | Client declined a meeting. | | Meeting | `completed` | `to_pivot` | The appointment was marked as completed. | | Meeting | `reschedule` | `client_to_pivot` | Client rescheduled an appointment online. | | Meeting | `reschedule` | `to_pivot` | Business is notified that a meeting was rescheduled. | | Meeting | `schedule_client_update` | `client_to_pivot` | Client changed the meeting time online. | | Meeting | `schedule_client_update_notification` | `pivot_to_client` | Staff is notified of a change the client made to the appointment online. | | Meeting | `propose_time` | `pivot_to_client` | Staff is proposing a new time for the appointment to the client. | | Meeting | `please_reschedule` | `pivot_to_client` | Business is asking the client to reschedule the appointment online. | | Meeting | `invite` | `pivot_to_client` | Business is inviting the client to schedule online. | | Meeting | `rsvp_confirmation` | `client_to_pivot` | Client confirmed attendance to a future meeting. | | Meeting | `thank_you_note` | `pivot_to_client` | Staff sent a follow-up thank you message after the meeting. | | Meeting | `missed_note` | `pivot_to_client` | Client did not attend the meeting, so staff sends a follow-up message. | | Meeting | `expired` | `client_to_pivot` | Client's meeting request expired before the business responded β€” staff is notified. | | Meeting | `expired` | `pivot_to_client` | Client's meeting request expired before the business responded β€” client is notified. | | Meeting | `request_cancelled` | `client_to_pivot` | Client cancelled a meeting request they made online. | | Meeting | `request_cancelled` | `pivot_to_client` | Business cancelled a meeting invitation that was not yet approved by the client. | | Meeting | `tentative` | `to_client` | Client is notified of a tentatively scheduled meeting pending their confirmation. | | Meeting | `meeting_reminder` | `to_pivot` | System sends an upcoming appointment reminder to the business. | | Meeting | `meeting_reminder` | `to_client` | System sends an upcoming appointment reminder to the client. | | Meeting | `meeting_request_reminder` | `to_client` | Client receives a reminder about their pending meeting request. | | Meeting | `meeting_request_reminder` | `to_pivot` | Business receives a reminder about a pending meeting request awaiting approval. | | Meeting | `schedule_notification` | `to_client` | Client receives a confirmation notification that a meeting was scheduled. | | Meeting | `schedule_update_notification` | `to_pivot` | Business receives a notification that meeting details were updated. | | Meeting | `cancelled_notification` | `to_pivot` | Business receives a notification that a meeting was cancelled. | | Meeting | `cancelled_notification` | `to_client` | Client receives a notification that a meeting was cancelled. | | Meeting | `accepted_notification` | `to_pivot` | Business receives a notification that a meeting request was accepted. | | Meeting | `accepted_notification` | `to_client` | Client receives a notification that their meeting was accepted. | | Meeting | `add_additional_staff` | `to_pivot` | An additional staff member was assigned to the meeting. | | Meeting | `remove_additional_staff` | `to_pivot` | An additional staff member was removed from the meeting. | | Meeting | `booking_reassigned` | `to_pivot` | The meeting was reassigned to a different staff member. | | Meeting | `dispatch_schedule` | `to_pivot` | A meeting was dispatched and assigned to a staff member. | | Meeting | `dispatch_cancel` | `to_pivot` | A dispatched meeting assignment was cancelled. | | AppointmentSeries | `scheduled` | `pivot_to_client` | Business scheduled a recurring appointment series with the client. | | AppointmentSeries | `scheduled_notification` | `to_pivot` | Business is notified that a recurring appointment series was scheduled. | | AppointmentSeries | `schedule_update` | `pivot_to_client` | A recurring appointment series time was updated. | | AppointmentSeries | `schedule_update_notification` | `to_pivot` | Business is notified that a recurring appointment series was updated. | | AppointmentSeries | `updated` | `pivot_to_client` | Business updated the details of a recurring appointment series. | | AppointmentSeries | `updated` | `to_pivot` | Business is notified that a recurring appointment series was updated. | | AppointmentSeries | `cancelled` | `pivot_to_client` | Business cancelled a series of appointments. | | AppointmentSeries | `cancelled_notification` | `to_pivot` | Business is notified that a recurring appointment series was cancelled. | | AppointmentSeries | `add_additional_staff` | `to_pivot` | An additional staff member was assigned to the appointment series. | | AppointmentSeries | `remove_additional_staff` | `to_pivot` | An additional staff member was removed from the appointment series. | | AppointmentSeries | `booking_reassigned` | `to_pivot` | The appointment series was reassigned to a different staff member. | | AppointmentSeries | `dispatch_schedule` | `to_pivot` | An appointment series was dispatched and assigned to a staff member. | | AppointmentSeries | `dispatch_cancel` | `to_pivot` | A dispatched appointment series assignment was cancelled. | | LinkedBooking | `schedule_invitation` | `pivot_to_client` | Business scheduled several appointments with the client. | | LinkedBooking | `cancelled` | `pivot_to_client` | Business cancelled multiple linked meetings with the client. | | Invoice | `message_request` | `pivot_to_client` | Staff sent an invoice to the client. | | Invoice | `reminder` | `to_pivot` | Business receives a reminder to follow up on an open invoice. | | Invoice | `client_reminder` | `to_client` | System sends the client a reminder about an unpaid invoice. | | Invoice | `client_reminder` | `pivot_to_client` | Business sends a reminder to the client to pay for an invoice. | | Estimate | `request` | `pivot_to_client` | Business sent a new price estimate to the client. | | Estimate | `approved` | `client_to_pivot` | Client approved the price estimate. | | Estimate | `approved` | `pivot_to_client` | Business sends a confirmed estimate to the client. | | Estimate | `rejected` | `client_to_pivot` | Client rejected the price estimate. | | Estimate | `rejected` | `pivot_to_client` | Business cancelled a price estimate. | | Estimate | `expiring` | `pivot_to_client` | A price estimate is about to expire. | | Estimate | `expired` | `to_pivot` | Business is notified that a price estimate has expired. | | Payment | `payment_received` | `client_to_pivot` | Client paid online. | | Payment | `payment_received` | `to_pivot` | Business is notified that a payment was received. | | Payment | `payment_received_notification` | `pivot_to_client` | Client received confirmation of their payment. | | Payment | `payment_received_notification` | `to_client` | Client receives a system notification confirming their payment. | | Payment | `receipt_sent` | `to_client` | System notification that a receipt was sent to the client. | | Payment | `receipt_sent` | `pivot_to_client` | A receipt was sent to the client. | | Payment | `receipt_sent` | `to_pivot` | Business is notified that a receipt was sent. | | Payment | `bank_payment` | `to_client` | Client receives confirmation of a bank transfer payment. | | Payment | `payment_refunded_notification` | `to_client` | System notification that a payment refund was processed. | | Payment | `payment_refunded_notification` | `pivot_to_client` | Business refunded a payment to the client. | | Payment | `cancelled` | `to_pivot` | Business is notified that a payment was cancelled. | | Payment | `payment_pending` | `to_pivot` | Business is notified of a pending payment. | | Payment | `payment_failed` | `to_pivot` | Business is notified that a payment attempt failed. | | Payment | `payment_offline_refunded_notification` | `to_pivot` | Business is notified of an offline payment refund. | | Payment | `archived` | `to_pivot` | Business is notified that a payment was archived. | | Payment | `undo_archived` | `to_pivot` | Business is notified that a payment was unarchived. | | Payment | `pending_payment_failed` | `to_pivot` | Business is notified that a pending payment failed. | | Payment | `scheduled_payment_failed` | `to_pivot` | Business is notified that a scheduled payment failed. | | PaymentStatus | `send_link` | `pivot_to_client` | Business sent a payment request link to the client. | | PaymentCard | `payment_method_added` | `to_pivot` | Business is notified that a client added a payment method on file. | | CardRequest | `card_requested` | `to_client` | Client receives a request to provide their payment card details. | | ScheduledPaymentsRule | `scheduled_payments_rule_created` | `pivot_to_client` | Business created a subscription or scheduled payment plan for the client. | | EventAttendance | `event_attendance_invite` | `pivot_to_client` | Staff invited the client to register for an event or class. | | EventAttendance | `event_attendance_register_notification` | `pivot_to_client` | Staff registered a client for an event or class. | | EventAttendance | `event_attendance_client_register` | `client_to_pivot` | Client registered for an event or class online. | | EventAttendance | `event_attendance_business_cancel` | `pivot_to_client` | Staff cancelled a client's registration to an event or class. | | EventAttendance | `event_attendance_client_cancel` | `client_to_pivot` | Client cancelled their registration to an event or class online. | | EventAttendance | `event_attendance_client_cancel_notification` | `pivot_to_client` | Staff is notified that a client cancelled their event or class registration. | | EventAttendance | `event_attendance_rescheduled` | `pivot_to_client` | Business changed the time of an event or class. | | EventAttendance | `event_attendance_event_cancelled` | `pivot_to_client` | Business cancelled an event or class. | | EventAttendance | `rsvp_confirmation` | `client_to_pivot` | Client confirmed arrival to an event or class. | | EventAttendance | `event_attendance_reminder` | `to_client` | Client receives a reminder about an upcoming event or class. | | EventAttendance | `booking_reassigned` | `to_pivot` | An event registration was reassigned to a different staff member. | | EventSeriesAttendance | `event_series_attendance_invite` | `pivot_to_client` | Business invited the client to join a series of events or classes. | | EventSeriesAttendance | `event_series_attendance_updated` | `pivot_to_client` | Business updated the details of a series of events or classes. | | EventSeriesAttendance | `event_series_attendance_cancelled` | `pivot_to_client` | Business cancelled a client's attendance to a series of events or classes. | | EventSeriesAttendance | `booking_reassigned` | `to_pivot` | An event series registration was reassigned to a different staff member. | | Waitlist | `register_to_event_waitlist` | `client_to_pivot` | Client requested to join a waitlist for an upcoming event or class. | | Waitlist | `register_to_event_waitlist` | `to_client` | Client receives confirmation of their waitlist registration. | | Waitlist | `register_to_event_waitlist` | `pivot_to_client` | Business registered a client to a waitlist for an event or class. | | Waitlist | `register_to_event_waitlist` | `to_pivot` | Business is notified that a client registered to a waitlist. | | Waitlist | `text` | `pivot_to_client` | Business offers a waitlisted client a spot in the event or class. | | Waitlist | `cancel_waitlist_registration` | `to_pivot` | Business is notified that a client cancelled their waitlist registration. | | ClientBookingPackage | `package_added` | `pivot_to_client` | Business added a package of services to the client's profile. | | ClientBookingPackage | `package_purchased` | `client_to_pivot` | Client purchased a package of services online. | | ClientBookingPackage | `resend_link` | `pivot_to_client` | Business sent a link to purchase a package to the client. | | ProductOrder | `product_added` | `pivot_to_client` | Business added a new product to the client's CRM card. | | Announcement | `custom` | `pivot_to_client` | Business sent an invitation to take online actions through the client portal. | | Announcement | `close_open_payments` | `pivot_to_client` | Business sent a link to the client portal for payment. | | Announcement | `livesite` | `pivot_to_client` | Business is inviting the client to take online actions on their website. | | Announcement | `recover_document` | `pivot_to_client` | Business invites the client to re-share a document online. | | Document | `document` | `client_to_pivot` | Client shared a document with the business. | | Review | `submit_review` | `client_to_pivot` | Client submitted an online review for the business. | | VoiceCall | `call` | `client_to_pivot` | Client called the business over the phone (regardless of the call outcome). | | General | `text` | `client_to_pivot` | Client replied to the staff. | | General | `text` | `pivot_to_client` | Staff replied to the client. | | General | `text` | `to_pivot` | A text message was received via an external messaging channel (e.g., Facebook, WhatsApp). | | General | `api` | `client_to_pivot` | Client contacted the business (via API-initiated communication). | | General | `general_question` | `client_to_pivot` | Client submitted a contact form. | | General | `business_text` | `client_to_pivot` | Client replied via SMS to the business. | | General | `document` | `client_to_pivot` | Client shared a file with the business. | | General | `document` | `pivot_to_client` | Business shared a file with the client. | | General | `close_open_payments` | `pivot_to_client` | Business sent a request to the client to pay all open payments. | | General | `document_client_pending_approval` | `pivot_to_client` | Business sent a document for client approval. | | General | `system` | `client_to_pivot` | Internal CRM activity update. | | General | `activity` | `client_to_pivot` | Internal CRM activity recorded for the client. | | General | `matter_assigned` | `to_pivot` | A client conversation was assigned to a staff member. | | General | `sent_notification` | `to_client` | System notification confirming that a message was sent. | | General | `document_client_notification` | `to_client` | Client receives a notification that a document was shared with them. | | General | `engagement_reminder` | `to_pivot` | Business receives a reminder to follow up on a client conversation. | - [Create an ActivityMessage](https://developers.intandem.tech/reference/sendactivitymessage.md): ## Overview Create an ActivityMessage Available for **Staff, App, and Directory tokens**. - [Get Conversation Messages](https://developers.intandem.tech/reference/get_v2-conversations-conversation-id-messages.md): ## Overview Retrieves a paginated list of messages within a specific conversation. Messages are returned in chronological order and include staff details, document attachments, and delivery status. Available for **Staff and Directory tokens**. Directory tokens require the `X-On-Behalf-Of` header with the target business UID. - [Create a Business Communication Message](https://developers.intandem.tech/reference/messagescontroller_createmessage.md): ## Overview Send a message to a business. Available for **Staff, App, and Directory tokens**. **Note:** Sending messages requires a channel with `active` status. Channels are activated asynchronously via webhook callback from the communication-gw, not immediately upon creation. Ensure the channel has been activated before attempting to send messages. - [Update Business Communication Message](https://developers.intandem.tech/reference/messagescontroller_updatestatus.md): ## Overview Update message status. Available for **Staff, App, and Directory tokens**. **Note:** Messages are part of the async webhook-based communication lifecycle. Sending messages requires a channel with `active` status, which is set asynchronously via webhook callback from the communication-gw. - [Create a Message](https://developers.intandem.tech/reference/post_platform-v1-messages.md): ## Overview Creates a Message. Available for **Staff and Directory tokens**. Directory tokens require the `X-On-Behalf-Of` header with the target business UID. - [Get Conversations For A Client](https://developers.intandem.tech/reference/get_platform-v1-clients-client-id-conversations-1.md): ## Overview Gets a list of conversations for a client. ## Authentication **Available for Staff, App, and Directory Tokens.** - [Update a conversation (archive, spam, business_unread, follow-up, soft delete)](https://developers.intandem.tech/reference/put_v2-conversations-id.md): ## Overview Updates a single conversation. This endpoint is used for several distinct operations against the same conversation resource: - Archive / unarchive - Mark as spam / not spam - Mark as read / unread for the business side (`business_unread`) - Soft delete (`deleted`) - **Create, update, complete, or remove a follow-up reminder for the requesting staff member** All fields are optional in the request body β€” send only the fields you want to change. Only fields that are present in the request body are evaluated. Available for **Staff tokens**. ## Follow-up flow Follow-ups in vcita are scoped to a single staff member on a single conversation, and are stored on the underlying `Collaborator` record (per staff/conversation), not on the conversation itself. Sending follow-up fields on this endpoint always operates on the follow-up record of the **staff identified by the bearer token**. The endpoint branches based on the combination of `follow_up` and `archived` in the request body: | Sent fields | Behavior | |---|---| | `follow_up: true`, no `archived` (or `archived: false`) | **Create or update** a follow-up for the requesting staff. Creates a Collaborator if one does not already exist. Sets `follow_up=true`, `follow_up_message`, and optionally `follow_up_date`. If the conversation was archived, it is automatically unarchived. If a `follow_up_message` is provided without a `follow_up_date`, an internal text message is added to the conversation. | | `follow_up: true`, `archived: true` | **Remove** the follow-up (used to dismiss/snooze). If `complete_follow_up: true` is also sent, the follow-up is marked as completed. | | `follow_up: false` | **Remove** the follow-up. If `complete_follow_up: true` is also sent, the follow-up is marked as completed. | Note: The follow-up branch only fires when the request body actually contains a `follow_up` key, and the add/remove logic only fires when the new `follow_up` value differs from the current one (with the exception of the `follow_up: true, archived: true` case, which always removes). ## Permitted update fields Fields outside of the follow-up flow are permitted via `Conversation::READ_WRITE_PARAMS`: `archived`, `business_unread`, `spam`, `deleted`, `campaign`, `source_type`, `mobile`. The follow-up fields (`follow_up`, `follow_up_date`, `follow_up_message`, `complete_follow_up`) are read separately from the request body and are not part of the permitted attributes list. - [Get Conversations](https://developers.intandem.tech/reference/get_platform-v1-conversations.md): ## Overview Gets a list of conversations. Available for **Staff and Directory tokens**. Directory tokens require the `X-On-Behalf-Of` header with the target business UID. - [Create a mesaging channel](https://developers.intandem.tech/reference/post_business-messaging-v1-channels.md): ## Overview Connecting a business to a primitive messaging channel through known providers. **Prerequisites:** - Business must have a valid `callsandtexting` subscription to use this endpoint. - For businesses without the `claim_dedicated_number` feature enabled, the `voice_text_app_installed` parameter must be set to `true`. Available for **Staff, App, and Directory tokens**. - [The NotificationTemplate Object](https://developers.intandem.tech/reference/the-notificationtemplate-object.md) - [Delete a NotificationTemplate](https://developers.intandem.tech/reference/delete_v3-communication-notification-templates-uid.md): ## Overview Delete a specific NotificationTemplate based on its unique identifier (UID). .**. **Available for Directory and App tokens** - [Get all NotificationTemplates](https://developers.intandem.tech/reference/get_v3-communication-notification-templates.md): ## Overview Get a list of NotificationTemplates. Available for **Staff tokens**. - [Retrieve a NotificationTemplate](https://developers.intandem.tech/reference/get_v3-communication-notification-templates-uid.md): ## Overview Retrieve a specific NotificationTemplate based on its unique identifier (UID). Available for **App, Directory, Admin, Staff, and Operator tokens** - [Create a NotificationTemplate](https://developers.intandem.tech/reference/post_v3-communication-notification-templates.md): ## Overview Create a new notification template. .**. **Available for Directory and App tokens** - [Update a NotificationTemplate](https://developers.intandem.tech/reference/put_v3-communication-notification-templates-uid.md): ## Overview Update an existing notification template. .**. **Available for Directory and App tokens** - [The StaffNotification Object](https://developers.intandem.tech/reference/the-staffnotification-object.md) - [Retrieve a StaffNotification](https://developers.intandem.tech/reference/get_v3-communication-staff-notifications-uid.md): ## Overview Retrieve a StaffNotification by its unique identifier. Available for **Directory tokens**. - [Create a StaffNotification](https://developers.intandem.tech/reference/post_v3-communication-staff-notifications.md): ## Overview Create a new StaffNotification for a staff member. .**. **Available for Directory or App Token** - [The AvailablePhoneNumber Object](https://developers.intandem.tech/reference/availablephonenumber.md) - [Retrieve All AvailablePhoneNumbers](https://developers.intandem.tech/reference/availablephonenumberscontroller_findall.md): ## Overview Retrieves a list of phone numbers. Available for **Staff, Directory, and Client tokens** - [The BusinessPhoneNumber Object](https://developers.intandem.tech/reference/businessphonenumber.md) - [Update a BusinessPhoneNumber](https://developers.intandem.tech/reference/businessphonenumberscontroller_update.md): ## Overview Update the verification request data for a business phone number. Available for **Business and Staff tokens** only. Requires business context. - [Create a BusinessPhoneNumber](https://developers.intandem.tech/reference/businessphonenumberscontroller_create.md): ## Overview Purchase a phone number from a telecom provider and assign it to a business account. For US and Canadian phone numbers with text messaging, verification_request_data is required to register your business with mobile carriers and ensure reliable message delivery. Available for **Staff and Directory tokens**. - [Retrieve all BusinessPhoneNumbers](https://developers.intandem.tech/reference/businessphonenumberscontroller_findall.md): ## Overview Retrieves a list of all business phone numbers associated with a business account. Available for **Staff, Directory, and Client tokens** - [Retrieve a BusinessPhoneNumber](https://developers.intandem.tech/reference/businessphonenumberscontroller_findone.md): ## Overview Fetches detailed information about a single business phone number using its unique identifier. Available for **Business and Directory tokens** only. Staff tokens without business context will be rejected. - [Remove Twilio Number](https://developers.intandem.tech/reference/delete_platform-v1-numbers-twilio-sub-account-id.md): ## Overview Remove Twilio Number Available for **Staff, App, and Directory tokens**. - [Assign Dedicated Number](https://developers.intandem.tech/reference/post_platform-v1-numbers-dedicated-numbers-assign.md): ## Overview Assign Dedicated Number For Account, This API requires the 'enable_dedicated_nexmo_number' feature flag to be enabled on your account/directory. For additional information please reach out to our support. Available for **Staff, Directory, and Client tokens** - [Add Twilio Number](https://developers.intandem.tech/reference/post_platform-v1-numbers-twilio.md): ## Overview Add a Twilio Number Available for **Staff, App, and Directory tokens**. - [Set Two Way Texting Status](https://developers.intandem.tech/reference/put_platform-v1-numbers-dedicated-numbers-set-two-way-texting-status.md): ## Overview Set Two Way Texting Status. **Prerequisites:** - Business must have a dedicated number assigned via `POST /platform/v1/numbers/dedicated_numbers/assign` before using this endpoint. Available for **Staff, App, and Directory tokens**. - [Notify Typing Indicator](https://developers.intandem.tech/reference/post_business-messaging-v1-channels-typing.md): ## Overview Notify contacts about account typing indicator. The `source` field determines the processing flow - when set to `business`, it uses the external typing status flow. Available for **Staff, App, and Directory tokens**. - [The VoiceCall Object](https://developers.intandem.tech/reference/the-voicecall-object.md) - [Create a VoiceCall](https://developers.intandem.tech/reference/voicecallscontroller_create.md): ## Overview Create a VoiceCall Available for **Staff, App, and Directory tokens**. - [Retrieve a VoiceCall](https://developers.intandem.tech/reference/voicecallscontroller_get.md): ## Overview Retrieve a VoiceCall. Available for **Staff, Directory, and Client tokens** - [Get all VoiceCalls](https://developers.intandem.tech/reference/voicecallscontroller_getall.md): ## Overview Get all VoiceCalls. Available for **Staff, Directory, and Client tokens** - [Update a VoiceCall](https://developers.intandem.tech/reference/voicecallscontroller_update.md): ## Overview Update a VoiceCall Available for **Staff, App, and Directory tokens**. - [The VoiceCallSetting Object](https://developers.intandem.tech/reference/the-voicecallsetting-object.md) - [Delete VoiceCallSetting](https://developers.intandem.tech/reference/settingscontroller_delete.md): ## Overview Delete a VoiceCallSetting. Available for **Admin tokens** - [Create a VoiceCallSetting](https://developers.intandem.tech/reference/settingscontroller_create.md): ## Overview Create a VoiceCallSetting Available for **Staff, App, and Directory tokens**. - [Get all VoiceCallSettings](https://developers.intandem.tech/reference/settingscontroller_get.md): ## Overview Get all VoiceCallSettings. Available for **Staff Tokens**. - [Update VoiceCallSetting](https://developers.intandem.tech/reference/settingscontroller_update.md): ## Overview Update VoiceCallSetting Available for **Staff, App, and Directory tokens**. - [The VoiceCallRecording Object](https://developers.intandem.tech/reference/the-voicecallrecording-object.md) - [Update a VoiceCallRecording](https://developers.intandem.tech/reference/recordingscontroller_updatevoicecallrecording.md): ## Overview Update a VoiceCallRecording Available for **Staff, App, and Directory tokens**. - [Delete a VoiceCallRecording](https://developers.intandem.tech/reference/recordingscontroller_deletevoicecallrecording.md): ## Overview Deletes a voice call recording and returns a voiceCall entity Available for **Staff, App, and Directory tokens**. - [The VoiceCallQuota Object](https://developers.intandem.tech/reference/the-voicecallquota-object.md) - [Retrieve a VoiceCallQuota](https://developers.intandem.tech/reference/quotascontroller_getquota.md): ## Overview Retrieve a VoiceCallQuota. Available for **Admin tokens** - [Get voice call stats](https://developers.intandem.tech/reference/reportscontroller_getvoicecallstats.md): ## Overview Returns aggregated voice call status counts for the requested period and status filter. Available for **Staff, Directory, and Client tokens** - [Get transcript for a voice call](https://developers.intandem.tech/reference/transcriptcontroller_gettranscript.md): ## Overview Retrieves the transcript for a specific voice call. Returns the processing status and, when status is DONE, the full transcript entries. Available for **Staff, Directory, and Client tokens** - [Import Job](https://developers.intandem.tech/reference/import-job.md) - [Import Job Item](https://developers.intandem.tech/reference/importjobitem.md) - [Create a new ImportJob](https://developers.intandem.tech/reference/importjobscontroller_create.md): ## Overview Import products into a business account Available for **Staff Tokens**. - [Retrieve an ImportJob](https://developers.intandem.tech/reference/importjobscontroller_findone.md): ## Overview Retrieve an import job by its UID. Available for **Staff, Directory, and Client tokens** - [Get all ImportJobItems](https://developers.intandem.tech/reference/importjobitemscontroller_findall.md): ## Overview Get all import job items for a specific import job. Available for **Staff, Directory, and Client tokens** - [Retrieve an ImportJobItem](https://developers.intandem.tech/reference/importjobitemscontroller_findone.md): ## Overview Retrieve an import job item by its UID. Available for **Staff, Directory, and Client tokens** - [ The IDPActorMapping Object](https://developers.intandem.tech/reference/the-idp-actor-mapping-object.md) - [List all IDP Actor Mappings](https://developers.intandem.tech/reference/get_v3-integrations-idp-actor-mappings.md): ## Overview List all IDP Actor Mappings in the directory scope. - [Create an IDP Actor Mapping](https://developers.intandem.tech/reference/post_v3-integrations-idp-actor-mappings.md): ## Overview Create a new IDP Actor Mapping for SSO integration Available for **Directory Tokens only**. - [Delete an IDP Actor Mapping](https://developers.intandem.tech/reference/delete_v3-integrations-idp-actor-mappings-uid.md): ## Overview Delete an IDP Actor Mapping by UID. Available for **Directory Tokens only**. - [Get all WidgetConfigurations](https://developers.intandem.tech/reference/listwidgetconfigurations.md): Lists widget configurations. Available for **Staff tokens** - [Create a WidgetConfigurations](https://developers.intandem.tech/reference/createwidgetconfiguration.md): Creates a widget configuration for a business. Available for **Staff token**; - [Retrieve a WidgetConfigurations](https://developers.intandem.tech/reference/getwidgetconfigurationbyuid.md): Returns one widget configuration. Available for **Staff token** - [Update WidgetConfigurations](https://developers.intandem.tech/reference/updatewidgetconfiguration.md): Updates an existing widget configuration. Available fo **Staff token** - [Delete a WidgetConfigurations](https://developers.intandem.tech/reference/deletewidgetconfiguration.md): Deletes a widget configuration. Available for **Staff token** - [Get all AIReceptionistConversations](https://developers.intandem.tech/reference/listaireceptionistconversations.md): Returns paginated conversations for the authenticated business. Available for **Staff tokens** - [Create an AIReceptionistConversation](https://developers.intandem.tech/reference/createaireceptionistconversation.md): Creates an AIReceptionistConversations. Available for **Staff tokens** - [Retrieve an AIReceptionistConversations](https://developers.intandem.tech/reference/getaireceptionistconversation.md): Returns a single AI Receptionist Conversations. Available for **Staff tokens**. - [Update an AIReceptionistConversations](https://developers.intandem.tech/reference/updateaireceptionistconversation.md): Updates an AIReceptionistConversation. Available for **Staff tokens** - [Delete an AIReceptionistConversations](https://developers.intandem.tech/reference/deleteaireceptionistconversation.md): Soft-deletes an AI Receptionist Conversation. Available fo **Staff tokens** - [Retrieve an AIChatConfiguration](https://developers.intandem.tech/reference/getaichatconfiguration.md): Returns the AI chat configuration for the authenticated business. Available for **Staff tokens**. - [Update an AIChatConfiguration](https://developers.intandem.tech/reference/upsertaichatconfiguration.md): Creates or updates the AI chat configuration for the authenticated business. Provided fields are merged with existing values; omitted fields are unchanged. Available for **Staff tokens**. - [The Offering Object](https://developers.intandem.tech/reference/the-offering-entity.md) - [List all Offerings](https://developers.intandem.tech/reference/get_v3-license-offerings.md): ## Overview List all Offerings in scope. Available for **Staff and Directory and Internal tokens**. - [Create an Offering](https://developers.intandem.tech/reference/post_v3-license-offerings.md): ## Overview Create a new Offering. Available for **Internal tokens only**. ## Prerequisites Before creating an offering, obtain a valid SKU by calling `GET /v3/license/skus`. Use the `code_name` field from the response as the `SKU` value. The SKU type must match the offering type (e.g., use `GET /v3/license/skus?type=package` for package offerings). **Note on External Payment Type:** When creating an offering with `payment_type: external`, the `prices` array must be empty (`[]`). The system will automatically populate default prices with `-1.00` for all supported currencies, indicating that pricing is managed externally by the partner. **Note on Free Payment Type:** When creating an offering with `payment_type: free`, the `price` value in the `prices` array must be `0` or `-1`. - [Retrieve an Offering](https://developers.intandem.tech/reference/get_v3-license-offerings-uid.md): ## Overview Retrieve an Offering by its unique identifier. Available for **Staff, Directory, and Internal tokens**. - [Update an Offering](https://developers.intandem.tech/reference/put_v3-license-offerings-uid.md): ## Overview Update an Offering. Available for **Admin tokens only**. ### Replace-all `prices` semantics The `prices` array represents the **complete desired set of currencies** for the offering. Any currency not present in the request will be **removed** from the offering, along with its pay-per-unit prices and bundles. To edit a single currency, send the full list of currencies you want to keep, including the unchanged ones. Omit `prices` entirely to leave the existing prices untouched. Sending an empty array is rejected with `400`. - [Delete an Offering (Not implemented yet](https://developers.intandem.tech/reference/delete_v3-license-offerings-uid.md): ## Overview Delete an Offering Available for **internal Token only**. - [The BundledOffering Object](https://developers.intandem.tech/reference/the-bundledoffering-entity.md) - [List all BundledOfferings](https://developers.intandem.tech/reference/get_v3-license-bundled-offerings.md): ## Overview List all BundledOfferings in scope. Available for **Staff, Directory, and Internal tokens**. - [Create a BundledOffering](https://developers.intandem.tech/reference/post_v3-license-bundled-offerings.md): ## Overview Create a new BundledOffering that links a parent offering with a child offering. When a customer purchases the parent offering, the bundled (child) offering is automatically included. Available for **Internal tokens only**. ## Validation Rules The following validation rules are enforced: 1. **Self-bundling not allowed**: The `offering_uid` and `bundled_offering_uid` must be different. An offering cannot be bundled to itself. 2. **Parent offering type restriction**: The parent offering (`offering_uid`) must be of type `package` or `app`. Other offering types cannot have bundled items. 3. **Child offering type restriction**: The bundled offering (`bundled_offering_uid`) cannot be of type `package`. Only `app` and `addon` offerings can be bundled. 4. **No duplicate bundles**: Each parent-child combination must be unique. Attempting to create a duplicate returns HTTP 409. 5. **Single staff slot per parent**: Only one `staff_slot` addon can be bundled to each parent offering. 6. **Directory consistency**: If the parent offering exists in a directory, the bundled offering must also exist in the same directory. ## Prerequisites Before creating a bundled offering, obtain valid offering UIDs by calling `GET /v3/license/offerings`. - [Bulk create BundledOfferings](https://developers.intandem.tech/reference/post_v3-license-bundled-offerings-bulk.md): ## Overview Create multiple BundledOfferings for an Offering Available for **internal Tokens**. - [Delete a BundledOffering](https://developers.intandem.tech/reference/delete_v3-license-bundled-offerings-uid.md): ## Overview Delete a BundledOffering Available for **Client, Operator, and Admin tokens**. - [The BusinessCart Object](https://developers.intandem.tech/reference/the-businesscart-object.md) - [Create a BusinessCart](https://developers.intandem.tech/reference/post_v3-license-business-carts.md): ## Overview Create a new BusinessCart for the business. ## Prerequisites Before creating a cart, obtain a valid `offering_uid` by calling `GET /v3/license/offerings`. Available for **Staff Tokens**. - [Retrieve a BusinessCart](https://developers.intandem.tech/reference/get_v3-license-business-carts-uid.md): ## Overview Retrieve a BusinessCart. Available for **Staff Tokens**. - [The DirectoryOffering Object](https://developers.intandem.tech/reference/the-directoryoffering-entity.md) - [List all DirectoryOfferings](https://developers.intandem.tech/reference/get_v3-license-directory-offerings.md): ## Overview List all DirectoryOfferings in scope. Available for **Internal Tokens only**. - [Create a DirectoryOffering](https://developers.intandem.tech/reference/post_v3-license-directory-offerings.md): ## Overview Create a new DirectoryOffering for a specific partner and Offering. Available for **Internal Tokens only**. **Important**: Each directory can only have one DirectoryOffering per `offering_uid`. The combination of `directory_uid` and `offering_uid` must be unique. Attempting to create a duplicate will return a 400 error. - [Retrieve a DirectoryOffering](https://developers.intandem.tech/reference/get_v3-license-directory-offerings-uid.md): ## Overview Retrieve a DirectoryOffering. Available for **Internal Tokens only**. - [Delete a DirectoryOffering](https://developers.intandem.tech/reference/delete_v3-license-directory-offerings-uid.md): ## Overview Delete a DirectoryOffering. Available for **Internal Tokens only**. - [Get all Features Packages](https://developers.intandem.tech/reference/get_v3-license-features-packages.md): ## Overview Retrieve a list of Features Packages. **Available for Staff tokens** - [The Subscription Object](https://developers.intandem.tech/reference/the-subscription-object.md) - [List all Subscriptions](https://developers.intandem.tech/reference/get_v3-license-subscriptions.md): ## Overview List all Subscriptions in scope. Available for **Staff and App tokens**. **Note:** App tokens can only view subscriptions for their own app. - [Create a Subscription](https://developers.intandem.tech/reference/post_v3-license-subscriptions.md): ## Overview Create a new Subscription for a business. Supports discounted and free plans using coupons. Available for **Staff tokens**. ### Token Permissions | Token Type | Allowed | Restrictions | |------------|---------|-------------| | **Staff** | Yes | Cannot set custom pricing. For `external` payment type offerings, must use a Staff token created by a Directory token. | | **Directory** | No | Must create a Staff token first via `POST /platform/v1/tokens` | | **Internal** | No | Must create a Staff token first | | **Billing App** | Yes | Cannot set custom pricing | | **Regular App** | No | Not allowed | ### Important: External Payment Type Offerings Offerings with `payment_type = external` require a **Staff token created by a Directory token**: 1. Use `POST /platform/v1/tokens` with a Directory token to create a Staff token for the target business. 2. Use that Staff token to call this endpoint. The `buyer_uid` in the subscription is automatically derived from the authenticated Staff token's identity. - [Bulk Create Subscriptions](https://developers.intandem.tech/reference/post_v3-license-subscriptions-bulk.md): ## Overview Create multiple identical Subscriptions for a business in a single request. Supported for **add-on** offerings only (`type = addon`); each created subscription is a separate line (e.g., an offering of 5 staff seats with `quantity = 3` results in 3 subscription lines, 15 staff seats in total). Subscriptions are created sequentially; if one creation fails, previously created lines are kept and the error is returned. Available for **Staff tokens**. Token permissions and external payment type behavior are identical to `POST /license/subscriptions`. - [Retrieve a Subscription](https://developers.intandem.tech/reference/get_v3-license-subscriptions-uid.md): ## Overview Retrieve a Subscription by its unique identifier. Available for **Staff and App tokens**. **Note:** App tokens can only view subscriptions for their own app. - [Update a Subscription](https://developers.intandem.tech/reference/put_v3-license-subscriptions-uid.md): ## Overview Update a Subscription (cancel/expire) Available for **Directory, Staff, and internal Tokens**. - [The SKU entity](https://developers.intandem.tech/reference/the-sku-entity.md) - [List all SKUs](https://developers.intandem.tech/reference/get_v3-license-skus.md): ## Overview List all SKUs in scope. Available for **Internal Tokens only**. - [Show Business Settings](https://developers.intandem.tech/reference/get_v2-settings-businesses-business-uid.md): ## Overview Returns the full settings object for the business, including profile fields, client-facing visibility flags, branding, and the server-geocoded `structured_address`. Available for **Staff & Directory tokens** β€” a Staff token of a staff member belonging to the business, or a Directory token of the owning directory. Directory tokens MUST send the business in the `X-On-Behalf-Of` header (a Directory token without it is rejected with 403). - [Update Business Settings](https://developers.intandem.tech/reference/put_v2-settings-businesses-business-uid.md): ## Overview Updates the business's own profile settings. Only the fields provided in the body are changed. The **`address`** is a plain free-text string; it is geocoded server-side into `structured_address`, so a real, resolvable address must be sent (a made-up string may fail to geocode). `structured_address` is **read-only** and cannot be supplied as input β€” it is returned on the response once geocoding completes. Available for **Staff & Directory tokens** β€” a Staff token of a staff member belonging to the business (with settings access), or a Directory token of the owning directory. Directory tokens MUST send the business in the `X-On-Behalf-Of` header (without it, a Directory token is rejected with 403). A client token or an unrelated staff is rejected with 401/403. - [Account Creation](https://developers.intandem.tech/reference/account-creation-1.md): ## Overview Create a new account under your directory. Most account details are cloned from an existing template to allow quick setup. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. - [Add/Remove staff](https://developers.intandem.tech/reference/addremove-staff.md): ## Deprecated > **This endpoint is deprecated.** Addon management is now handled by the **Subscription API**. Please migrate all integrations to use the Subscription API endpoints for adding or removing staff and other addon changes. ## Overview Add or remove the staff members quota from accounts under your directory. Available for **Directory tokens only**. This endpoint is only available for manually billed directory accounts. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. > **Note**: The `business_uid` parameter should contain the business UID (alphanumeric like '88pzdbz1hmkdoel4'), not the numeric database ID. - [Account Manipulation](https://developers.intandem.tech/reference/account-manipulation.md): ## Deprecated > **This endpoint is deprecated.** Package and billing management is now handled by the **Subscription API**. Please migrate all integrations to use the Subscription API endpoints for package changes, billing updates, and subscription management. ## Overview Update billing info and/or package to an existing account under your directory. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. > **Note**: The `business_uid` parameter must correspond to a business that is a member of the directory associated with the directory token. ## Package Options Use one of the following available packages: `platinum20`, `business20`. Package names are managed in the database and may vary by directory. To obtain the complete list of available package names for your directory, please contact the support team. - [Close an Account](https://developers.intandem.tech/reference/close-an-account.md): ## Overview Close an existing account under your directory. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. > **Note**: The `business_uid` must be the business UID (alphanumeric like '88pzdbz1hmkdoel4'), not a numeric database ID. - [Reopen an Account](https://developers.intandem.tech/reference/reopen-an-account.md): ## Overview Reopen a closed account under your directory. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. > **Note**: The `business_uid` must be the business UID (alphanumeric like '88pzdbz1hmkdoel4'), not a numeric database ID. - [Search Businesses](https://developers.intandem.tech/reference/get_businesses.md): ## Overview Search for a business by external_reference_id or email. Available for **Directory Tokens only**. > **Note**: At least one filter parameter (email, external_id, or external_reference_id) is required for the API to return a result. - [Create a Business](https://developers.intandem.tech/reference/post_businesses.md): ## Overview Creates a Business. By default, business creation is synchronous. To create a business asynchronously, set the 'synchronized' parameter to false in the 'meta' object. When set to false, the request returns immediately after input parameters validation and an async job is created to handle the business account creation. ## Uniqueness Constraint The `admin_account.email` field must be unique across the entire platform. Attempting to create a business with an email that already exists will return a 400 error: 'admin_account.email already in use'. **Testing Tip**: Use a dynamically generated email (e.g., with timestamp or UUID suffix) to avoid conflicts with existing accounts. Available for **Directory and Internal tokens**. - [Validate Login](https://developers.intandem.tech/reference/get_businesses-validate-login.md): ## Overview Validates username/password credentials for login. The API will be blocked for the username after 5 failed attempts. Available for **Directory tokens**. - [Verify Audience Claim](https://developers.intandem.tech/reference/post_businesses-verify-audience-claim.md): ## Overview This API performs entitlement verification for businesses seeking to register with a specific partner. It checks if a business exists in the partner's pre-loaded audience list and is eligible to be claimed. ## How It Works Partners pre-load their eligible businesses into the `audiences` table (via CSV upload or Audiences API). Each audience record contains a `unique_validation_identifier` field that uniquely identifies the business (e.g., email address, tax ID, membership number). This endpoint looks up the audience record by matching: - `directory_uid` (from the Directory token) - `unique_validation_identifier` (from the request body) - `status` is not 'deleted' ## Use Case Before creating a new business account under a partner directory, call this endpoint to verify the business is in the partner's approved audience list. Available for **Directory tokens only**. - [Remove business identities](https://developers.intandem.tech/reference/delete_business-accounts-v1-identities.md): ## Overview Remove business identities to modify the business's occupational verticals. Available for **Directory OAuth tokens** with on-behalf-of authorization. > **Important**: This endpoint uses on-behalf-of authorization. Directory users can manage business identities by providing the business UID in the X-On-Behalf-Of header. - [Get business identities](https://developers.intandem.tech/reference/get_business-accounts-v1-identities.md): ## Overview Retrieve business identities. Available for **Directory OAuth tokens** with on-behalf-of authorization. > **Important**: This endpoint uses on-behalf-of authorization. Directory users can retrieve business identities by providing the business UID in the X-On-Behalf-Of header. - [Update business identities](https://developers.intandem.tech/reference/put_business-accounts-v1-identities.md): ## Overview Add business identities to optimize the business terminology, settings, and content. Available for **Directory OAuth tokens** with on-behalf-of authorization. > **Important**: This endpoint uses on-behalf-of authorization. Directory users can manage business identities by providing the business UID in the X-On-Behalf-Of header. > **Note**: The `identities` array must contain valid identity UIDs (16-character strings). Use `GET /business/accounts/v1/identities` to retrieve current identities or directory admin endpoints to list available identities. - [Get Business](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid.md): ## Overview Retrieves detailed information about a specific business by its ID, including admin account details and business information. Available for **Staff and Directory tokens**. - [Update Business](https://developers.intandem.tech/reference/post_platform-v1-businesses-business-uid.md): ## Overview Updates an existing business. This endpoint allows updating business information, admin account details, integrations, and subscription plan. Only provided fields will be updated. Available for **Directory & Internal Tokens**. > **Note:** Directory Tokens require the directory to be configured with manual billing. Staff Tokens may work for businesses not associated with a directory and with non-Recurly subscriptions. - [Get Business Features](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-features.md): ## Overview Retrieves a list of features enabled for a specific business. Features represent capabilities and modules available to the business. Available for **Staff, Application, and Directory tokens**. - [Update Purchased Items](https://developers.intandem.tech/reference/put_platform-v1-businesses-business-uid-purchased-items.md): ## Overview Updates purchased items for a business. Available for **Staff, Application, and Directory tokens**. - [Get Recurly parameters](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-recurly-data.md): ## Overview Retrieves Recurly subscription data for a business, including account codes and subscription parameters used for billing integration. Available for **Staff, Directory, and Client tokens**. This is an internal endpoint used by the billing system to retrieve Recurly subscription parameters. - [Get a list of Businesses](https://developers.intandem.tech/reference/get_v3-business-administration-businesses.md): Returns a filtered, paginated list of businesses belonging to the authenticated directory. Available for **Directory**,**Staff** and **Internal tokens**. - [Gets business attributes](https://developers.intandem.tech/reference/get_business-accounts-v1-attributes.md): ## Overview Retrieve business attributes including business name, locale, time format, directory settings, and feature flags. This endpoint is primarily used by the frontend to configure the business dashboard. Available for **Staff Tokens**. - [Gets the branding of the business](https://developers.intandem.tech/reference/get_business-accounts-v1-branding.md): ## Overview Retrieve business branding, or directory branding when business branding is unavailable. Returns colors (primary, secondary, text), logo URL, and powered_by logos for whitelabel/co-branded configurations. Available for **Staff Tokens**. - [Business account usage in the last 3 months](https://developers.intandem.tech/reference/get_business-accounts-v1-usage-last-3-months-activity.md): ## Overview Get an account's activity report for the last 3 months, including the following information:
  1. Number of payments received
  2. Number of conversations started
  3. Number of bookings, including appointments booked and event attendance
  4. Number of campaigns created
  5. Number of documents shared by the business
  6. Total Number of clients
Note: Currently, the API has a rate limit of 1 request per 5 seconds. Results are cached for 24 hours. **Available for Staff Tokens** - [Business Info](https://developers.intandem.tech/reference/business-info.md): ## Overview Query a business's basic information. If the email address already exists in our server you'll receive "status:existing". Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. - [Engagements Report](https://developers.intandem.tech/reference/engagements-report.md): ## Overview Query for a list of all the conversations (a.k.a engagements) for a given date range. Conversations will be sorted by date of creation. The GET request will be answered by a JSON containing an array of engagement objects. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. - [Widget Impressions Report](https://developers.intandem.tech/reference/widget-impressions-report.md): ## Overview Query for the number of impressions per day for a given date range. The GET request will be answered by a JSON of an array of impressions_daily objects. Each impressions_daily object provides information about the number of impressions we had for a specified business account. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. - [Gets Directory's branding](https://developers.intandem.tech/reference/get_platform-v1-directory-branding.md): ## Overview Get Directory's branding including logo url and colors, available for **Staff & Directory Tokens**. - [Get a list of Directories](https://developers.intandem.tech/reference/get_v3-business-administration-directories.md): Returns a filtered, paginated list of directories. Available for **Internal tokens**, **Directory Tokens** and **Staff Tokens** - [Retrieve a Directory](https://developers.intandem.tech/reference/get_v3-business-administration-directories-uid.md): Returns a specific directory based on its unique identifier. Available for **Internal tokens**, **Directory Tokens** and **Staff Tokens** - [Create a Directory](https://developers.intandem.tech/reference/post_v3-business-administration-directories.md): Creates a new directory with the provided configuration. Available for **Internal tokens** - [Update a Directory](https://developers.intandem.tech/reference/put_v3-business-administration-directories-uid.md): Updates an existing directory. Only provided fields will be modified; omitted fields remain unchanged. Available for **Internal tokens** - [Retrieve a StaffMember](https://developers.intandem.tech/reference/get_v3-business-administration-staff-members-uid.md): ## Overview Retrieve a StaffMember. Available for **Staff, Directory, and Client tokens** - [Update a StaffMember](https://developers.intandem.tech/reference/put_v3-business-administration-staff-members-uid.md): ## Overview Update a StaffMember. **Available for Staff Token** - [Get Staff List [Alpha]](https://developers.intandem.tech/reference/get_platform-v1-scheduling-staff.md): ## Overview Get Staff List [Alpha]. Available for **Staff Tokens**. - [Updates a staff's properties](https://developers.intandem.tech/reference/put_business-staffs-v1-staffs-uid.md): ## Overview Updates a staff's properties. Available for **Directory tokens only**. > **Note**: The `X-On-Behalf-Of` header is required to specify which business's staff member to update. > **For Staff Self-Update**: Staff members who want to update their own details should use `PUT /v3/business_administration/staff_members/{uid}` with a Staff token instead. - [Get Staff Members](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-staffs.md): ## Overview Get Staff List and Details (ordered by position field). Available for **Staff, Application, and Directory tokens**. - [Create Staff Member](https://developers.intandem.tech/reference/post_platform-v1-businesses-business-uid-staffs.md): ## Overview Creates a Staff Member. Available for **Staff, Application, and Directory tokens**. **Content-Type**: Requires `application/json` content type header. - [Delete Staff Member](https://developers.intandem.tech/reference/delete_platform-v1-businesses-business-uid-staffs-staff-uid.md): ## Overview Delete Staff Member Available for **Staff, Application, and Directory tokens**. - [Get Staff Member Details](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-staffs-staff-uid.md): ## Overview Get Staff Details. Available for **Staff, Application, and Directory tokens**. - [End Staff Member active sessions](https://developers.intandem.tech/reference/delete_platform-v1-businesses-business-uid-staffs-staff-uid-sessions.md): ## Overview End Staff Member active sessions and log out from browser Available for **Staff, Application, and Directory tokens**. - [Get Staff By ID [Alpha]](https://developers.intandem.tech/reference/get_platform-v1-scheduling-staff-staff-uid.md): ## Overview Get Staff By ID [Alpha]. Available for **Staff Tokens**. - [Daily Staff Sign-ins](https://developers.intandem.tech/reference/get_business-staffs-v1-daily-staff-sign-ins.md): ## Overview Get daily sign-in records for the business's staff members within a specified date range. Available for **Staff and Directory Tokens**. - [Get relevant quick action lists per staff](https://developers.intandem.tech/reference/get_v3-business-administration-staff-quick-action-lists.md): ## Overview A quick action entity represents a configurable shortcut displayed in the staff's dashboard, allowing personalized access to key system functions. Available for **Staff Tokens**. - [Update quick action lists for a specific staff member](https://developers.intandem.tech/reference/put_v3-business-administration-staff-quick-action-lists-staff-uid.md): ## Overview Update the order and visibility of quick actions for a specific staff member. Available for **Staff Tokens**. - [Gets a list of wizards](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-wizards.md): ## Overview Gets a list of available wizards. Available for **Staff, Application, and Directory tokens**. - [Gets a wizard by name](https://developers.intandem.tech/reference/get_platform-v1-businesses-business-uid-wizards-wizard-name.md): ## Overview Gets a wizard by given name. Available for **Directory Tokens only**. - [Update a wizard](https://developers.intandem.tech/reference/put_platform-v1-businesses-business-uid-wizards-wizard-name.md): ## Overview Update a wizard with given name Available for **Staff, Application, and Directory tokens**. - [Creates a token](https://developers.intandem.tech/reference/post_platform-v1-tokens.md): ## Overview Creates a token for authentication. Tokens can be created for applications (app_id), businesses (business_id), or directories (directory_id). At least one identifier must be provided. Available for **Staff, Application, and Directory tokens**. - [Exchange Authorization Code for Access Token](https://developers.intandem.tech/reference/post_oauth-token.md): ## Overview Exchanges an OAuth Authorization Code for an Access Token. This endpoint is the final step in the OAuth 2.0 Authorization Code flow. **This endpoint does not require authentication headers** - authentication is performed via the `client_id` and `client_secret` in the request body. ## Prerequisites Before using this endpoint, you must: ### 1. Create an OAuth Application Create an app using `POST /platform/v1/apps` with a **Directory token**. This returns: - `client_id`: Your OAuth Client ID - `client_secret`: Your OAuth Client Secret (shown only once - store securely!) Example app creation request: ```json { "name": "My OAuth App", "app_code_name": "myoauthapp", "redirect_uri": "https://myapp.example.com/oauth/callback", "scopes": ["openid"] } ``` ### 2. Obtain an Authorization Code Redirect users to the authorization endpoint to obtain consent: ``` GET /oauth/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scopes}&state={state} ``` After user authorization, they are redirected to your `redirect_uri` with: - `code`: The authorization code (use this in the token request) - `state`: The state parameter you provided (verify this matches) ### 3. Exchange Code for Token Call this endpoint (`POST /oauth/token`) with the authorization code to receive an access token. ## Complete OAuth Flow Diagram ``` 1. App Creation (one-time setup): POST /platform/v1/apps β†’ Returns client_id, client_secret 2. User Authorization (browser redirect): User β†’ /oauth/authorize β†’ User grants permission β†’ Redirect to app with code 3. Token Exchange (server-to-server): POST /oauth/token (with code) β†’ Returns access_token 4. API Access: Use access_token in Authorization header for subsequent API calls ``` ## Important Notes - **Authorization codes are single-use** - once exchanged, they cannot be reused - **Authorization codes expire quickly** - exchange them immediately after receiving - **This endpoint cannot be tested in isolation** - it requires an authorization code from the user authorization flow - **Store client_secret securely** - it is only displayed once during app creation Available for **Staff, Directory, and Client tokens** - [Get Tokens List](https://developers.intandem.tech/reference/get_platform-v1-tokens.md): ## Overview Get tokens list. Tokens can be filtered by app_id, user_id, or directory_id. Available for **Staff, Application, and Directory tokens**. - [Revoke Token](https://developers.intandem.tech/reference/post_platform-v1-tokens-revoke.md): ## Overview Revoke a specific access token by providing the token value. The token must be accessible by the authenticated caller (e.g., a Directory token can only revoke tokens it issued). Available for **Staff, Application, and Directory tokens**. ## Authorization Rules - **Staff tokens**: Can revoke tokens associated with the authenticated user. - **Directory tokens**: Can revoke tokens they issued to users or apps within their directory. - **Application tokens**: Can revoke tokens they issued to users within their directory. ## Error Handling - Returns 422 with `"error": "Unauthorized"` if the caller does not have permission to revoke the specified token. - Returns 422 with `"error": "invalid token"` if the provided token value does not exist. - [Create SSO Token](https://developers.intandem.tech/reference/sso-api.md): ## Overview Create a one-time token for Single Sign On (SSO) login. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. ## SSO Process **Step 1**: Call this endpoint to create a one-time SSO token. **Step 2**: Build the SSO login URL using the token: `https://api.vcita.com/v1/partners/sso/login?staff_uid={STAFF_UID}&sso_token={SSO_TOKEN}` ## Deep Links To redirect users to a specific page after login, append the `redirect_to` query param: `https://api.vcita.com/v1/partners/sso/login?staff_uid=xxxzzz111&sso_token={SSO_TOKEN}&redirect_to=/app/invoices/ru7q9qlt7cp4hfni` ## Impersonation To create an impersonation session, include the `operator_uid` parameter. This adds the operator as the `actor_uid` with `actor_type` as `operator`. > **Note**: The returned token is valid for 30 minutes. The `expires_at` value is in microseconds. - [Get authenticated user info](https://developers.intandem.tech/reference/get_oauth-userinfo.md): ## Overview Get authenticated user info. Available for **Staff tokens**. - [Webhooks](https://developers.intandem.tech/reference/webhooks.md): Webhooks are a useful tool for apps that want to stay in sync with our system or execute code after a specific event occurs on the system, for example, when a message is recieved or when a new payment was recorded. To create a webhook, you register both an HTTP endpoint on your app as a webhook receiver and an event that triggers a request to that endpoint. We send you a JSON payload when your selected event occurs, with a copy of the relevant object. - [Subscribe to Webhook](https://developers.intandem.tech/reference/post_platform-v1-webhook-subscribe.md): ## Overview Subscribe to webhook notifications. Webhooks allow you to receive real-time notifications when specific events occur in the system. You must specify the event (a combined string of entity and event_type in the format 'entity/event_type') and the target_url where notifications will be sent. Available for **Staff and Directory Tokens**. ## Event Format The `event` parameter uses the format `entity/event_type` where: - **entity**: The object type to monitor (e.g., 'client', 'appointment', 'payment', 'invoice') - **event_type**: The action that triggers the notification (e.g., 'created', 'updated', 'scheduled') See the enum for the full list of supported `entity/event_type` values. ## Entity Aliases Some entities are accepted as aliases of a canonical entity (either spelling works): - `lead` β†’ `client` - `account` β†’ `business` - `appointment` β†’ `meeting` - `engagement` β†’ `matter` ## Common Events - `client/created` - New client created - `appointment/scheduled` - New appointment scheduled - `appointment/cancelled` - Appointment cancelled - `payment/paid` - Payment received - `invoice/issued` - Invoice issued - `estimate/approved` - Estimate approved ## Error Responses Returns HTTP 500 with `{"response": "Not Subscribed"}` when subscription fails (e.g., invalid event format, service unavailable). - [Unsubscribe from Webhook](https://developers.intandem.tech/reference/post_platform-v1-webhook-unsubscribe.md): ## Overview Unsubscribe from webhook. Note: This endpoint uses legacy parameter names ('event' and 'target_url'). The 'target_url' must match exactly the URL used when subscribing. The 'event' parameter is optional and can be used to unsubscribe from a specific event type. Available for **Staff and Directory Tokens**. - [Get Webhooks List](https://developers.intandem.tech/reference/get_platform-v1-webhooks.md): ## Overview Get webhooks list. Available for **Staff and Directory tokens**. - [The OPRole Object](https://developers.intandem.tech/reference/operators-role-1.md) - [The OperatorCapability Object](https://developers.intandem.tech/reference/operator-capability-1.md) - [The OperatorBusinessToken Object](https://developers.intandem.tech/reference/operator-token.md) - [The OperatorOPRole Object](https://developers.intandem.tech/reference/operator-op-role.md) - [Set Setup Completed](https://developers.intandem.tech/reference/set-setup-completed.md): ## Overview Mark an account's setup/onboarding as completed. This suspends the account's "to do" list (onboarding wizard). Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication (not Bearer). Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. ## How It Works 1. The endpoint looks up the business in the directory's members using `pivots.uid` 2. Calls `member.setup_completed!` to mark setup as done 3. Updates the member's `setup` attribute to `setup_completed` > **Important**: The `business_uid` must be the business UID (alphanumeric like '88pzdbz1hmkdoel4'), NOT a numeric database ID. The business must be a member of the directory associated with the token. - [Get Automation Flows](https://developers.intandem.tech/reference/get_platform-v1-business-jobber-flows.md): ## Overview Retrieves automation flows for a business. This endpoint redirects to the correct automation flows API. Available for **Staff and Directory tokens**. - [Get Next Execution Time](https://developers.intandem.tech/reference/get_platform-v1-business-jobber-executions.md): ## Overview Retrieves the next scheduled execution time for a specific automation flow rule. This endpoint is useful for displaying when an automation will next run, allowing users to see upcoming execution times. ## Use Cases - Display the next execution time for an automation flow - Show users when their scheduled automation will next run - Calculate and display countdown timers for upcoming executions - Validate that a flow has future executions scheduled ## Response Returns the next execution time slot in the flow's configured timezone. The time is returned in a format that can be parsed and displayed to users. Available for **Staff and Directory tokens**. - [Get Online Profile](https://developers.intandem.tech/reference/getonlineprofilepublic.md): ## Overview Retrieve the online profile for a specific business. This is a **public endpoint** that does not require authentication. Note: Returns 200 with null data even if business doesn't exist. Available for **Staff tokens**. - [Get My Online Profile](https://developers.intandem.tech/reference/getmyonlineprofile.md): ## Overview Retrieve the online profile for the business associated with the authenticated token. Available for **Staff Tokens**. - [Create Online Profile](https://developers.intandem.tech/reference/createonlineprofile.md): ## Overview Create a new online profile for the business. Requires `can_access_admin_account?` permission. Available for **Staff tokens**. **Important**: Online profiles are singleton resources - each business can only have one online profile. If a profile already exists, this endpoint returns a 422 error with code `already_exists`. Use the PUT endpoint to update an existing profile. **Note**: Online profiles cannot be deleted, only updated. - [Update Online Profile](https://developers.intandem.tech/reference/updateonlineprofile.md): ## Overview with `can_access_admin_account?` permission Update an existing online profile. Available for **Staff tokens**. - [The BusinessRole Object](https://developers.intandem.tech/reference/business-role-1.md) - [Get all BusinessRoles](https://developers.intandem.tech/reference/get_v3-access-control-business-roles.md): Get a list of BusinessRoles Available for **Staff Tokens** - [Create a BusinessRole](https://developers.intandem.tech/reference/post_v3-access-control-business-roles.md): Create a new role for a business. **Permission Hierarchy Validation:** Permissions follow a hierarchy structure where category permissions (e.g., `payments.manage`) must be enabled before their extended permissions (e.g., `payments.invoices.export`) can be used. Extended permissions have three parts in their key (e.g., `category.subcategory.action`), while category permissions have two parts (e.g., `category.manage`). If you attempt to enable an extended permission without its corresponding category permission, the API will return a 400 error. Available for **Staff Tokens** - [Retrieve a BusinessRole](https://developers.intandem.tech/reference/get_v3-access-control-business-roles-uid.md): Retrieve a specific BusinessRole based on it’s unique identifier (UID) Available for **Staff Tokens** - [Update a BusinessRole](https://developers.intandem.tech/reference/put_v3-access-control-business-roles-uid.md): Create a new role for a business Available for **Staff Tokens** - [Delete a BusinessRole](https://developers.intandem.tech/reference/delete_v3-access-control-business-roles-uid.md): Delete a specific BusinessRole based on it’s unique identifier (UID) Available for **Staff Tokens** - [The StaffPermission Object](https://developers.intandem.tech/reference/the-staffpermission-object.md) - [Get All StaffPermissions](https://developers.intandem.tech/reference/get_v3-access-control-staff-permissions.md): Get a list of staff Permissions. You must filter the list using a list of permissions keys Used to validate if a user can or can not access features Available for **Staff Tokens** - [The StaffPermissionOverrideList Object](https://developers.intandem.tech/reference/staff-permission-override-list-1.md) - [Retrieve a Staff Permissions Overrides List](https://developers.intandem.tech/reference/get_v3-access-control-staff-permission-overrides-lists-staff-uid.md): Retrieve a StaffPermissionOverrideList based on a staff member's unique identifier (staff_uid) Available for **Staff Tokens** - [Update a Staff Permissions Overrides List](https://developers.intandem.tech/reference/put_v3-access-control-staff-permission-overrides-lists-staff-uid.md): Update a Staff Permission Overrides List based on staff UID and a list of permissions. The list supplied will append new permissions and override exsiting permissions assigned to this staff. Available for **Staff Tokens** - [Remove all permission overrides](https://developers.intandem.tech/reference/delete_v3-access-control-staff-permission-overrides-lists-staff-uid.md): Removes all assigned overrides based on a staff member's unique identifier (staff_uid). This will return user to its original Business Role defaults Available for **Staff Tokens** - [Get all Staff Permission Overrides Lists](https://developers.intandem.tech/reference/get_v3-access-control-staff-permission-overrides-lists.md): Get a list of all StaffPermissionOverrideList in the business (if used by a user that has permissions to view and manage permissions to staff in the business) Available for **Staff Tokens** - [The Staff Business Role Object](https://developers.intandem.tech/reference/staffbusinessrole.md) - [Get all StaffBusinessRoles](https://developers.intandem.tech/reference/get_v3-access-control-staff-business-roles.md): Get a list of StaffBusinessRoles Available for **Staff Tokens** - [Create a StaffBusinessRole](https://developers.intandem.tech/reference/post_v3-access-control-staff-business-roles.md): Create a new StaffBusinessRole for a staff Available for **Staff Tokens** - [Retrieve a StaffBusinessRole](https://developers.intandem.tech/reference/get_v3-access-control-staff-business-roles-staff-uid.md): Retrieve a StaffBusinessRole based on the unique identifier of staff_uid (staff_uid) Available for **Staff Tokens** - [Update a StaffBusinessRole](https://developers.intandem.tech/reference/put_v3-access-control-staff-business-roles-staff-uid.md): Update the business role for a staff member. **All overrides will be removed** and user will need to reapply them if the old role is reassigned. You can not change the role of the business owner. Available for **Staff Tokens** - [The Permission Object](https://developers.intandem.tech/reference/permission-1.md) - [Get all Permissions](https://developers.intandem.tech/reference/get_v3-access-control-permissions.md): Get a list of Permissions. **Note:** This endpoint returns an empty list if the `roles_and_permissions` feature is not enabled for the business. The presence of permissions in the response indicates that the business can use the Business Roles and Staff Permissions endpoints. **Permission Types:** - **Category permissions** (2 parts): e.g., `payments.manage` - Parent permissions that control access to a feature category - **Extended permissions** (3 parts): e.g., `payments.invoices.export` - Child permissions that require their category permission to be enabled Available for **Staff Tokens** - [Webhook Responses](https://developers.intandem.tech/reference/webhooks-responses.md) - [App Installed](https://developers.intandem.tech/reference/app-installed.md): Notifying when a business installs an app (either for the first time or after uninstalling it) - [App Uninstalled](https://developers.intandem.tech/reference/app-uninstalled.md): Notifying when a business uninstalls an app (paid or free) - [Appointment Scheduled](https://developers.intandem.tech/reference/message-business_sent_message-client_sent_message.md) - [Appointment Requested](https://developers.intandem.tech/reference/appointment-requested-scheduled-rescheduled-cancelled-completed-reminder_sent-copy.md) - [Appointment Rescheduled](https://developers.intandem.tech/reference/appointment-requested-scheduled-rescheduled-cancelled-completed-reminder_sent-copy-1.md) - [Appointment Cancelled](https://developers.intandem.tech/reference/appointment-requested-scheduled-rescheduled-cancelled-completed-reminder_sent-copy-2.md) - [Appointment Completed](https://developers.intandem.tech/reference/appointment-requested-scheduled-rescheduled-cancelled-completed-reminder_sent-copy-3.md) - [Appointment Reminder sent](https://developers.intandem.tech/reference/appointment-requested-scheduled-rescheduled-cancelled-completed-reminder_sent-copy-4.md) - [Bulk Client Import](https://developers.intandem.tech/reference/client_import.md) - [Account Created](https://developers.intandem.tech/reference/account-created.md): Notifying when a new business account is created - [Account Updated](https://developers.intandem.tech/reference/account-updated.md): Notifying when a business account is updated - [Account Closed](https://developers.intandem.tech/reference/account-closed-1.md): Notifying when a business account is locked out from the system - [Account Rejected](https://developers.intandem.tech/reference/account-rejected.md): Notifying when business creation fails - [Business Rules bulk import](https://developers.intandem.tech/reference/business-rules-bulk-import.md) - [Conversation Read](https://developers.intandem.tech/reference/conversation-entry-page.md): Event triggered each time a staff member navigates into the conversation page - [Conversation item Created](https://developers.intandem.tech/reference/conversation_itemcreated.md) - [Notification Updated](https://developers.intandem.tech/reference/notification-updated.md) - [Deposit Created](https://developers.intandem.tech/reference/deposit-created.md) - [Subscription Created](https://developers.intandem.tech/reference/subscription-created.md): Notifying when a new subscription (app, main…) is created - [Subscription Updated](https://developers.intandem.tech/reference/subscription-updated.md): Notifying when a subscription (app, main…) is updated. - [Document Sent](https://developers.intandem.tech/reference/document-sent.md) - [Estimate Requested](https://developers.intandem.tech/reference/estimate-requested-rejected-approved.md) - [Estimate Rejected](https://developers.intandem.tech/reference/estimate-requested-rejected-approved-copy.md) - [Estimate Approved](https://developers.intandem.tech/reference/estimate-requested-rejected-approved-copy-1.md) - [Event registration Created](https://developers.intandem.tech/reference/event-registration-created-updated.md) - [Event registration Updated](https://developers.intandem.tech/reference/event-registration-created-updated-copy.md) - [Payment Recorded](https://developers.intandem.tech/reference/payments-recorded-refunded.md) - [Payment Refunded](https://developers.intandem.tech/reference/payment-recorded-refunded-updated-matched-copy.md) - [Payment Updated](https://developers.intandem.tech/reference/payment-recorded-refunded-updated-matched-copy-1.md) - [Payment matched](https://developers.intandem.tech/reference/payment-recorded-refunded-updated-matched-copy-2.md) - [Message Business sent message](https://developers.intandem.tech/reference/message-business_sent_message-client_sent_message-1.md) - [Message Client sent message](https://developers.intandem.tech/reference/message-business_sent_message-client_sent_message-copy.md) - [Messaging Channel Status](https://developers.intandem.tech/reference/messaging-channel-status.md): Triggered when messaging channel status is changed. Only applicable for SMS channels (Nexmo / Zipwhip). - [Matter Delete](https://developers.intandem.tech/reference/matter-delete.md) - [Matter Recover](https://developers.intandem.tech/reference/matter-delete-recover-copy.md) - [Client updated](https://developers.intandem.tech/reference/client-created-updated.md): Notifying when a client is updated - [Client Created](https://developers.intandem.tech/reference/lead-created.md): Notifying when a new client is created - [Lead Injection](https://developers.intandem.tech/reference/lead-injection-1.md): ## Overview Inject a lead into a business account under your directory. Available for **Directory tokens only**. ## Authentication Uses HTTP Token authentication. Format: `Authorization: Token token="{DIRECTORY_TOKEN}"` The token must be a Doorkeeper OAuth token with `directory` scope. ## Conditional Requirements - When `identifier_type` is `"email"`, the `email` field is required. - When `identifier_type` is `"unique_id"`, the `unique_id` field is required. - **At least one of `request_data` or `system_message` must be provided.** Omitting both will result in a 422 error. - [Payment Gateway Settings Connected](https://developers.intandem.tech/reference/payment-gateway-settings-connected-disconnected-changed_primary_payment_gateway.md) - [Payment Gateway Settings Disconnected](https://developers.intandem.tech/reference/payment-gateway-settings-connected-disconnected-changed_primary_payment_gateway-copy.md) - [Review Submitted](https://developers.intandem.tech/reference/review-submitted.md) - [Service Updated](https://developers.intandem.tech/reference/service-updated.md) - [Staff](https://developers.intandem.tech/reference/staff-2.md): Staff related webhooks - [Staff Created](https://developers.intandem.tech/reference/staff-created.md): Notifying when a new staff member is created - [Staff Updated](https://developers.intandem.tech/reference/staff-updated.md): Notifying when a staff member details are updated - [Staff Deleted](https://developers.intandem.tech/reference/staff-deleted.md): Notifying when a staff member is deleted - [Staff Deactivated](https://developers.intandem.tech/reference/staff-deleted-copy.md): Notifying when a staff member is deactivated - [Staff Reactivated](https://developers.intandem.tech/reference/staff-deactivated-copy.md): Notifying when a staff member is reactivated - [Tag Add](https://developers.intandem.tech/reference/tag-add-delete.md) - [Tag Delete](https://developers.intandem.tech/reference/tag-add-delete-copy.md) - [Invoice issued](https://developers.intandem.tech/reference/invoice-issued.md) - [Invoice Updated](https://developers.intandem.tech/reference/invoice-issued-updated-copy.md) - [Get Appointments List](https://developers.intandem.tech/reference/get_platform-v1-scheduling-appointments.md): ## Overview Retrieves a paginated list of appointments for the business. Supports filtering by client, appointment state, and sorting. Available for **Staff and Application tokens**. - [Get Appointment](https://developers.intandem.tech/reference/get_platform-v1-scheduling-appointments-appointment-id.md): ## Overview Get appointment details by ID. Available for **Staff and Application tokens**. - [Get all AvailabilitySlots](https://developers.intandem.tech/reference/get_v3-scheduling-availability-slots.md): ## Overview This endpoint returns available time slots for booking appointments. It considers staff schedules, resource availability, existing bookings, and business hours to compute open slots. Available for **Staff, Directory, and Client tokens** - [Get Bookings [Alpha] ](https://developers.intandem.tech/reference/get_platform-v1-scheduling-bookings.md): ## Overview Get bookings of the authenticated client. Returns a paginated list of the client's appointments and event registrations. Available for **Client tokens** only. - [Create New Booking [Alpha]](https://developers.intandem.tech/reference/post_platform-v1-scheduling-bookings.md): ## Overview Creates a booking for either an appointment with a staff member or registration for a group event. Available for **Client and Staff tokens**. - [Cancel a Booking [Alpha]](https://developers.intandem.tech/reference/post_platform-v1-scheduling-bookings-cancel.md): ## Overview Cancel booking Available for **Staff, App, Directory, and Client tokens**. - [Update RSVP state](https://developers.intandem.tech/reference/put_platform-v1-scheduling-bookings-booking-uid-update-rsvp-state.md): ## Overview Update RSVP state for a booking. Available for **Client tokens** only. ## Required Parameters - `booking_uid` (path): The booking UID - `new_rsvp_state` (query): Valid values: 'confirmed', 'cancelled', 'pending' - `appointment_type` (body): 'appointment', 'event_instance', or 'event_attendance' - `business_id` (body): The business UID - [Create event Waitlist](https://developers.intandem.tech/reference/post_platform-v1-scheduling-waitlist.md): ## Overview Join an event waitlist. Available for **Staff, App, Directory, and Client tokens**. ## Client Identification Client tokens: The client is identified from the token. Staff/App/Directory tokens: Must provide `client_id` to identify which client to add to the waitlist. ## Note Validation errors may return dynamic form field IDs. To get the form field definitions, call `GET /platform/v1/forms?business_id={business_id}&form_type=scheduling&service_uid={event_service_id}`. - [Cancel a Waitlist registration](https://developers.intandem.tech/reference/put_platform-v1-scheduling-waitlist-cancel.md): ## Overview Cancel a waitlist registration. Available for **Client tokens**. The underlying controller inherits from `Api::ClientApi::V1::BaseController`, which only accepts client authentication. ## Required Fields - **Always required**: `business_uid`, `event_instance_uid`, `client_uid`, and `matter_uid` - `client_uid` must be explicitly provided in the request body for the authorization check to pass. The controller extracts it from the request parameters, not from the token. - `matter_uid` is used to look up the specific waitlist entry to cancel. ## Note Staff can cancel waitlist entries using the business API endpoint `PUT /business/scheduling/v1/waitlist/cancel` which supports staff tokens and the `waitlist_uid` parameter. - [Create New Booking [Business]](https://developers.intandem.tech/reference/post_business-scheduling-v1-bookings.md): ## Overview Create a new booking (appointment or event attendance). Available for **Staff, Directory, and Application tokens**. **Important**: Always provide `client_id` parameter. Without it, the endpoint attempts to create a client from form_data and returns 'First name can't be blank' errors. ## Token Authorization - **Staff tokens**: Client must belong to the same business as the staff member - **Directory tokens**: Business must be a member of the directory (requires directory_member record) ## Booking Types This endpoint supports two types of bookings with different required parameters: ### Appointment Booking (default) When `event_instance_id` is NOT provided: - **Required**: `business_id`, `service_id`, `staff_id` - **Required one of**: `start_time` OR `optional_times` ### Event Registration When `event_instance_id` IS provided: - **Required**: `business_id`, `event_instance_id` ## Client Identification - Use `client_id` to book for an existing client (required for Staff/App tokens) - Without `client_id`, the endpoint expects form_data for client creation (used by client-facing booking flows) - [Accept a Booking [Business]](https://developers.intandem.tech/reference/post_business-scheduling-v1-bookings-accept.md): ## Overview Accept a pending booking. Available for **Staff and App tokens**. ## Batch Operations Supports batch operations by providing an array of booking IDs (max 50). ## Response Returns the accepted booking details for single booking, or batch response for array of bookings. - [Cancel a Booking [Business]](https://developers.intandem.tech/reference/put_business-scheduling-v1-bookings-cancel.md): ## Overview Cancel an existing booking. Available for **Staff and App tokens**. ## Batch Operations Supports batch operations by providing an array of booking IDs (max 50). ## Parameters - `cancel_payment`: Set to true to cancel any associated payment - `issue_refund`: Set to true to issue a refund for the cancelled booking - [Mark booking as no show](https://developers.intandem.tech/reference/post_business-scheduling-v1-bookings-complete.md): ## Overview Mark a booking as completed or no-show. Available for **Staff and App tokens**. ## Batch Operations Supports batch operations by providing an array of booking IDs (max 50). ## Parameters - `booking_id` (required): Single booking UID or array of UIDs for batch operations - `business_id` (required): Business UID - `mark_as_no_show`: Set to `true` to mark as no-show instead of completed - `message`: Optional message to include with the completion notification - `follow_up_params`: Optional parameters for sending a follow-up email - [Update Booking Details [Business]](https://developers.intandem.tech/reference/put_business-scheduling-v1-bookings-booking-id.md): ## Overview Update booking details including start time, staff, and notes. Available for **Staff and App tokens**. **Note**: The path parameter is `booking_id` (not `booking_uid`). - [Get Event Attendance](https://developers.intandem.tech/reference/get_platform-v1-scheduling-event-attendances-event-attendance-uid.md): ## Overview Get Event attendance details for a specific event attendance record. Available for **Staff and App tokens**. ## Notes - The event attendance UID can be obtained from the event attendance creation response (POST to `/v2/event_instances/{event_instance_id}/event_attendances`) or from the event instance details. - Previously documented under `/api/v2/event_instances/{event_instance_id}/event_attendances/{id}`, but that v2 nested route does not have a working `show` action. The correct route is `/platform/v1/scheduling/event_attendances/{event_attendance_uid}`. - [Get Event Instance](https://developers.intandem.tech/reference/get_platform-v1-scheduling-event-instance-event-instance-id.md): ## Overview Get Event Instance Details. Available for **Staff, Directory, and Client tokens** - [External app bulk create external items](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-bulk-create.md): ## Overview Bulk create or update external calendar items. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. ## Required Fields - Provide exactly one of: `external_item` (single item) or `external_items` (array) - Each item must include: `external_id`, `start_date`, `end_date`, `last_modification` - [External app bulk deactivate external items](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-bulk-deactivate.md): ## Overview Bulk deactivate external calendar items. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. ## Required Fields - `external_items_to_deactivate` must be an array - Each item must include `external_id` - [External app connect](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-connect.md): ## Overview Connect a staff member's calendar to an external calendar provider. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. ## Response Returns the calendar sync configuration including the `uid` which can be used as `external_calendar_uid` for other operations. - [External app deactivate external calendar](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-deactivate-external-calendar.md): ## Overview Deactivate a specific external calendar. Available for **Staff and App tokens**. ## Prerequisites The `external_calendar_uid` is returned in the response when calling the `/v1/external_calendar_items/connect` endpoint. **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. - [External app disable](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-disable.md): ## Overview Disable calendar sync for a staff member. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). Then connect via `/connect` endpoint. **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. - [External app disconnect](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-disconnect.md): ## Overview Disconnect a staff member's calendar from an external calendar provider. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). Then connect via `/connect` endpoint. **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. - [External app report_sync_status](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-report-sync-status.md): ## Overview Report the sync status after completing a calendar sync operation. Available for **Staff and App tokens**. ## Prerequisite **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. ## Required Fields - `params.is_sync_successful` is required - If `unsynced_items` is provided, each item must have `entity_uid` - If `unsynced_calendars` is provided, each item must have `imported_calendar_name` - [External app start_export](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-start-export.md): ## Overview Start exporting vcita calendar events to an external calendar. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). Then connect via `/connect` endpoint. **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. - [External app stop import](https://developers.intandem.tech/reference/put_business-scheduling-v1-external-calendar-items-stop-import.md): ## Overview Stop importing events from an external calendar. Available for **Staff and App tokens**. ## Prerequisite **Staff member must have a CalendarSync record** (typically created via the vcita web UI or OAuth flow with an external calendar provider like Google or Outlook). Then connect via `/connect` endpoint. **Note:** This endpoint requires a synchronized calendar to be connected to the staff member's account. Calendar sync can be configured under **Calendar Settings** in the vcita dashboard. - [Get all ResourceTypes](https://developers.intandem.tech/reference/get_v3-scheduling-resource-types.md): ## Overview Get a list of resource types for a business, with pagination. Available for **Staff, Directory, and Client tokens** - [Create a ResourceType](https://developers.intandem.tech/reference/post_v3-scheduling-resource-types.md): ## Overview Create a new resource type Available for **Staff Tokens**. - [Retrieve a ResourceType](https://developers.intandem.tech/reference/get_v3-scheduling-resource-types-uid.md): ## Overview Get a specific resource type by UID. Available for **Staff, Directory, and Client tokens** - [Update a ResourceType](https://developers.intandem.tech/reference/put_v3-scheduling-resource-types-uid.md): ## Overview Update a resource type's properties Available for **Staff Tokens**. - [Delete a ResourceType](https://developers.intandem.tech/reference/delete_v3-scheduling-resource-types-uid.md): ## Overview Delete a resource type. Deletes all associated resources Available for **Staff Tokens**. - [Get all Resources](https://developers.intandem.tech/reference/get_v3-scheduling-resources.md): ## Overview Get all resources, with pagination and filtering by resource type or service. Available for **Staff Tokens**. - [Create a Resource](https://developers.intandem.tech/reference/post_v3-scheduling-resources.md): ## Overview Create a new resource Available for **Staff Tokens**. - [Retrieve a Resource](https://developers.intandem.tech/reference/get_v3-scheduling-resources-uid.md): ## Overview Get a specific resource by UID. Available for **Staff, Directory, and Client tokens** - [Update a Resource](https://developers.intandem.tech/reference/put_v3-scheduling-resources-uid.md): ## Overview Update a resource's properties Available for **Staff Tokens**. - [Delete a Resource](https://developers.intandem.tech/reference/delete_v3-scheduling-resources-uid.md): ## Overview Soft-delete a resource Available for **Staff Tokens**. - [General availability - Create new time slot](https://developers.intandem.tech/reference/post_business-scheduling-v1-time-slots.md): ## Overview General availability - Create new time slot. Available for **Staff and App tokens**. ## Prerequisites You need a `weekly_availability_uid` which can be obtained from the staff or service availability settings. **Important**: The `business_id` parameter is required in the request body for staff token authorization. Without it, the endpoint returns 401 Unauthorized because the backend cannot resolve the business context from the token alone. - [General availability - Remove time slot](https://developers.intandem.tech/reference/delete_business-scheduling-v1-time-slots-time-slot-uid.md): ## Overview General availability - Remove time slot Available for **Staff and App tokens**. - [General availability - Update time slot](https://developers.intandem.tech/reference/put_business-scheduling-v1-time-slots-time-slot-uid.md): ## Overview General availability - Update time slot. Available for **Staff and App tokens**. ## Prerequisites You need a valid `time_slot_uid` from an existing time slot, and the `start_time` and `end_time` for the updated schedule. **Important**: The `business_id` parameter is required in the request body for staff token authorization. Without it, the endpoint returns 401 Unauthorized because the backend cannot resolve the business context from the token alone. - [Cancel Credit Redemption [Alpha]](https://developers.intandem.tech/reference/put_platform-v1-payment-client-packages-cancel-redemption.md): ## Overview Reverse a previous package credit redemption, restoring the consumed credit back to the client's package. This is the undo operation for `POST /platform/v1/payment/client_packages/update_usage`. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. Also available for **Internal tokens**. ## How It Works 1. The system finds the `PaymentStatus` by the provided ID and locates the associated `BookingCreditRedemption`. 2. The `bookings_usage` counter on the relevant `BookingCredit` is decremented by one, making the credit available again. 3. The `BookingCreditRedemption` record is marked as inactive. 4. The `PaymentStatus` is reset to pending with the original price restored (no longer marked as paid-by-package). ## Required Parameters - `payment_status_id` (string) β€” The ID of the payment status whose package credit redemption should be reversed. Must reference a payment status that was previously paid via package credit. ## Notes - Returns 422 if the payment status was not paid via a package credit. - This endpoint is in Alpha and may change. - Use this when an appointment is cancelled or rescheduled and the client's package credit should be returned. - [Use Client Package Credit [Alpha]](https://developers.intandem.tech/reference/post_platform-v1-payment-client-packages-update-usage.md): ## Overview Redeem a credit from a client's active package to pay for an appointment or service session. This marks the associated payment status as paid (price set to $0) and decrements one credit from the client's package. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. ## How It Works 1. The system finds the `PaymentStatus` referenced by `payment_status_uid`, which links to a specific appointment/event and its service. 2. It searches for active client packages belonging to that client that have available credits for the service in question. A package is eligible when: `valid_from <= now <= valid_until`, `active = true`, and `total_bookings > bookings_usage` for a credit matching the service. 3. If multiple packages qualify, the **soonest-expiring package** is used first (ordered by `valid_until ASC`). 4. One credit is consumed: `bookings_usage` is incremented, a `BookingCreditRedemption` record is created, and the `PaymentStatus` is set to paid with a zero price. ## Required Parameters - `payment_status_uid` (string) β€” The UID of the payment status record to pay using a package credit. Must reference a pending/unpaid payment status linked to an appointment. Already-paid statuses return a 422 error. ## Optional Parameters - `matter_uid` (string) β€” The matter/conversation UID that scopes which client packages to search. If omitted, the system attempts to find the default matter for the client associated with the payment status. ## Notes - Returns 422 "There is no package to use" if no active client packages with available credits exist for the relevant service. - Returns 422 if the payment status is already paid. - This endpoint is in Alpha and may change. - To reverse a credit redemption, use `PUT /platform/v1/payment/client_packages/cancel_redemption`. - [Show Client Package [Alpha]](https://developers.intandem.tech/reference/get_business-payments-v1-client-packages-uid.md): ## Overview Retrieve detailed information for a specific client package (a package subscription assigned to a client). Returns the package's validity dates, pricing, active status, and booking credit balances showing how many credits have been used vs. remaining. ## Authentication Available for **Staff, Directory, and App tokens**. ## Path Parameters - `uid` (required, string) β€” The unique identifier of the client package to retrieve (e.g., "m73jkvg4bf2z71b2"). ## Key Response Fields - `active` β€” Whether the package is currently active (within validity dates and has remaining credits). - `valid_from` / `valid_until` β€” The date range during which this client package is valid. A package is "about to expire" when `valid_until` is in the near future. - `booking_credits` β€” Array of credit pools, each with `total_bookings` (total credits) and `bookings_usage` (credits consumed). Remaining credits = `total_bookings - bookings_usage`. - `package_id` β€” Reference to the catalog package template this was created from. - `client_id` β€” The client who owns this package subscription. ## Notes - This returns a client-specific subscription, not the catalog template. For the catalog template, use `GET /platform/v1/payment/packages/{package_id}`. - This endpoint is in Alpha and may change. - [Update Client Package [Alpha]](https://developers.intandem.tech/reference/put_business-payments-v1-client-packages-uid.md): ## Overview Update an existing client package subscription. Allows extending the validity period and adjusting credit allocations for the package's booking credits. ## Authentication Available for **Staff, Directory, and App tokens**. ## Path Parameters - `uid` (required, string) β€” The unique identifier of the client package to update (e.g., "m73jkvg4bf2z71b2"). ## Updatable Fields - `valid_until` (string, ISO 8601 date) β€” Extend or change the expiration date. Must be in the future and must be on or after `valid_from`. - `booking_credits` (array) β€” Adjust credit allocations. Each entry requires: - `id` (string) β€” The booking credit ID to update. - `total_bookings` (integer) β€” New total credit count. Must be greater than or equal to the current `bookings_usage` (you cannot reduce credits below what has already been consumed). ## Notes - You cannot change the client, package template, or pricing through this endpoint. - To fully consume or exhaust a package, set `total_bookings` equal to `bookings_usage` on all credits. - This endpoint is in Alpha and may change. - [Create Client Package](https://developers.intandem.tech/reference/post_platform-v1-payment-client-packages.md): ## Overview Create a Client Package β€” assigns a payment package to a specific client, creating a subscription-like record with optional validity dates and custom pricing. ## Authentication **Available for Staff, App, and Directory tokens.** ## Required Parameters - `client_id` β€” the UID of the client who will receive the package. - `package_id` β€” the UID of the package catalog entry to assign. ## Optional Parameters - `valid_from` β€” start date in YYYY-MM-DD format (defaults to today). - `valid_until` β€” end date in YYYY-MM-DD format (defaults based on the package's configured expiration). - `price` β€” custom price override; when omitted the package's catalog price is used. - `conversation_id` β€” matter/conversation UID to associate with this client package. - `tax_uids` β€” array of tax UIDs to apply. ## Notes - The `package_id` must reference a valid, active package in the business's catalog (created via `POST /platform/v1/payment/packages`). - Returns 422 when the request is invalid or the referenced package does not exist. - [Get Services List](https://developers.intandem.tech/reference/get_platform-v1-services.md): ## Overview Get services list. Available for **Staff Tokens**. ## Parameters Note: The `business_id` parameter should contain the business UID (unique identifier like '88pzdbz1hmkdoel4'), not the numeric database ID. - [Get Services Availability](https://developers.intandem.tech/reference/get_platform-v1-services-availability.md): ## Overview Get services availability. ## Required Parameters Either `service_ids` OR `id` must be provided. These parameters are mutually exclusive - use one or the other. Available for **Staff, Directory, and Client tokens** - [Get Service Details](https://developers.intandem.tech/reference/get_platform-v1-services-service-uid.md): ## Overview Get specific service details. Available for **Staff, Directory, and Client tokens** - [Get Service Specific Availability](https://developers.intandem.tech/reference/get_platform-v1-services-service-uid-availability.md): ## Overview Get specific service availability. Available for **Staff, Directory, and Client tokens** - [Create Service](https://developers.intandem.tech/reference/post_v2-settings-services.md): ## Overview Creates a new service for the business. This is the write endpoint for services β€” the read-only list is at `GET /platform/v1/services`. Available for **Staff tokens**. ## Important `POST /platform/v1/services` does NOT exist (returns 404). Always use this endpoint (`POST /v2/settings/services`) to create services. - [Get Products List](https://developers.intandem.tech/reference/get_business-payments-v1-products.md): ## Overview Get Products List. Available for **Staff Tokens**. - [Create Product](https://developers.intandem.tech/reference/post_business-payments-v1-products.md): ## Overview Each business has a limit of 8,500 products. Available for **Staff and Internal tokens**. - [Remove Product [Alpha]](https://developers.intandem.tech/reference/delete_business-payments-v1-products-product-uid.md): ## Overview Remove Product [Alpha]. Available for **Staff and Internal tokens**. - [Get Product [Alpha]](https://developers.intandem.tech/reference/get_business-payments-v1-products-product-uid.md): ## Overview Get Product [Alpha]. Available for **Staff Tokens**. - [Update Product](https://developers.intandem.tech/reference/put_business-payments-v1-products-product-uid.md): ## Overview Update Product. Available for **Staff and Internal tokens**. - [Create Product Order](https://developers.intandem.tech/reference/post_business-payments-v1-product-orders.md): ## Overview Creates a Product Order. Available for **Staff and Internal tokens**. - [Get Product Order](https://developers.intandem.tech/reference/get_business-payments-v1-product-orders-product-order-uid.md): ## Overview Gets a Product Order. Available for **Staff Tokens**. - [Update Product Order](https://developers.intandem.tech/reference/put_business-payments-v1-product-orders-product-order-uid.md): ## Overview Updates a Product Order. Available for **Staff and Internal tokens**. - [Retrieve Payments Forecast Data](https://developers.intandem.tech/reference/get_v3-sales-reports-forecast-payments.md): ## Overview Fetch detailed data for the Payments forecast widget, providing predictions of future payments on a month-by-month basis. This endpoint is accessible with **Staff Tokens** only. Available for **Staff, Directory, and Client tokens** - [Retrieve Payments Widget Data](https://developers.intandem.tech/reference/get_v3-sales-reports-payments-widget.md): ## Overview Fetch summarized data for the Payments widget, including total payments, overdue payments, and pending estimates. This endpoint is accessible with **Staff Tokens** only. Available for **Staff, Directory, and Client tokens** - [Create Estimate](https://developers.intandem.tech/reference/post_business-payments-v1-estimates.md): ## Overview Creates an Estimate Available for **Staff, App, and Directory tokens**. - [Get Estimate](https://developers.intandem.tech/reference/get_business-payments-v1-estimates-estimate-uid.md): ## Overview Fetch a specific estimate. Available for **Staff Tokens**. - [update](https://developers.intandem.tech/reference/put_business-payments-v1-estimates-estimate-uid.md): ## Overview update an existing estimate Available for **Staff, App, and Directory tokens**. - [Get Estimates List](https://developers.intandem.tech/reference/get_platform-v1-estimates.md): ## Overview Returns a list of estimates for the business. ## Authentication Available for **Staff tokens** only. Requires `payments.manage` permission. > ⚠️ **Fallback API Required** - This endpoint must be accessed via the fallback API URL. ## Filtering Use the `filter` parameter to filter results: - `filter[created_at][gt]=2019-01-01` - Estimates created after date - `filter[updated_at][lt]=2019-12-31` - Estimates updated before date - `filter[state][in]=issued,rejected` - Estimates with specific states Available filter operators for dates: `gt`, `gte`, `lt`, `lte`, `eq` Available filter operators for state: `in` ## Sorting Use the `sort` parameter to sort results: - `sort=created_at:asc` - Sort by created_at ascending - `sort=updated_at:desc` - Sort by updated_at descending - `sort=created_at:asc,updated_at:desc` - Multiple sort fields - [Create Invoice](https://developers.intandem.tech/reference/post_business-payments-v1-invoices.md): ## Overview Creates an Invoice Available for **Staff, App, and Directory tokens**. - [Get Invoice](https://developers.intandem.tech/reference/get_business-payments-v1-invoices-invoice-uid.md): ## Overview Fetch a specific invoice. Available for **Staff Tokens**. - [update](https://developers.intandem.tech/reference/put_business-payments-v1-invoices-invoice-uid.md): ## Overview Update an existing invoice. Available for **Staff, App, and Directory tokens**. ## Important - When updating invoice items, `item_index` is required to properly order the items. - **Sections Rule**: For invoices that already have sections in their metadata, both `items` and `sections` keys must be provided in update requests. Omitting one will result in validation errors. - [Cancel Invoice](https://developers.intandem.tech/reference/put_business-payments-v1-invoices-invoice-uid-cancel.md): ## Overview Cancels an Invoice Available for **Staff, App, and Directory tokens**. - [Get Invoices List](https://developers.intandem.tech/reference/get_platform-v1-invoices.md): ## Overview Get Invoices List. Available for **Application Tokens**. - [Create New Invoice](https://developers.intandem.tech/reference/post_platform-v1-invoices.md): ## Overview Create New Invoice. Available for **Application Tokens**. - [Get Invoice By ID](https://developers.intandem.tech/reference/get_platform-v1-invoices-invoice-id.md): ## Overview Get Invoice By ID. Available for **Staff, Directory, and Client tokens** - [Create Sale](https://developers.intandem.tech/reference/post_business-payments-v1-carts.md): ## Overview Creates a Sale Available for **Staff, App, and Directory tokens**. - [Get Sale](https://developers.intandem.tech/reference/get_business-payments-v1-carts-uid.md): ## Overview Show specific sale data. Available for **Staff, Directory, and Client tokens** - [Cancel an open sale](https://developers.intandem.tech/reference/put_business-payments-v1-carts-uid-cancel.md): ## Overview Cancel a sale Available for **Staff, App, and Directory tokens**. ## Prerequisites This endpoint is only available for businesses with the `point_of_sale` feature enabled. The cart must be created with `is_sale=true` to be cancellable. - [Complete an open sale](https://developers.intandem.tech/reference/put_business-payments-v1-carts-uid-cart-completed.md): ## Overview Completes and finalizes the sale Available for **Staff, App, and Directory tokens**. ## Prerequisites Requires business to have `point_of_sale` feature enabled. Use POST /business/payments/v1/carts with `is_sale: true` to create a sale before completion. - [Creates a lead](https://developers.intandem.tech/reference/post_platform-v1-leadgen.md): ## Overview Creates a lead Available for **Staff, App, and Directory tokens**. - [The Client Payment Card Object](https://developers.intandem.tech/reference/the-client-payment-card-object.md) - [List stored Payment Cards](https://developers.intandem.tech/reference/get_v3-payments-client-payment-cards.md): Returns stored payment cards for a client. Available for **Client and Staff tokens**. - For **Client tokens**, the client is inferred from the authenticated token. The `client_uid` parameter is ignored if provided. - For **Staff tokens**, `client_uid` is required to specify which client's cards to retrieve. - [Get list of Scheduled Payment Rules](https://developers.intandem.tech/reference/get_business-payments-v1-scheduled-payments-rules.md): ## Overview Get a list of Scheduled Payment Rules. Available for **Staff Tokens**. ## Prerequisites Scheduled payments require: 1. Payment gateway configured that supports recurring payments (Stripe, vcitaPayments, Square) 2. The `scheduled_payments` feature enabled for the business - [Create Scheduled Payment Rule](https://developers.intandem.tech/reference/post_business-payments-v1-scheduled-payments-rules.md): ## Overview Creates a Scheduled Payment Rule Available for **Staff, App, and Directory tokens**. ## Prerequisites 1. Business must have the `scheduled_payments` feature enabled. 2. Business must have a payment gateway configured that supports recurring payments. Supported gateways: Stripe, vcitaPayments, Square. PayPal is not supported. 3. The card specified in `payment_method.uid` must be active, belong to the matter client, and use the same payment provider as the business payment gateway. - [Get Scheduled Payment Rule](https://developers.intandem.tech/reference/get_business-payments-v1-scheduled-payments-rules-uid.md): ## Overview Gets a Scheduled Payment Rule. Available for **Staff Tokens**. ## Prerequisites Scheduled payments require complex pre-configuration: 1. **Payment Gateway**: Business must have a payment gateway configured that supports recurring payments (Stripe, vcitaPayments, Square). PayPal is not supported. 2. **Payment Cards on File**: Clients must have active payment cards saved on file. 3. **Feature Enabled**: The `scheduled_payments` feature must be enabled for the business. - [Update Scheduled Payment Rule](https://developers.intandem.tech/reference/put_business-payments-v1-scheduled-payments-rules-uid.md): ## Overview Updates a Scheduled Payment Rule Available for **Staff, App, and Directory tokens**. ## Prerequisites 1. **Payment Gateway**: Business must have a payment gateway configured that supports recurring payments (Stripe, vcitaPayments, Square). PayPal is NOT supported for scheduled payments. 2. **Valid Payment Card**: A valid payment card must exist and be associated with the client. Use `GET /platform/v1/clients/{client_id}/payment/cards` to retrieve available card UIDs. 3. **Existing Rule**: The scheduled payment rule must already exist (created via POST endpoint). ## Date Format The `start_date` field must be in ISO date format (YYYY-MM-DD) and must be in the future relative to UTC timezone. - [Cancel Recurring Payments Rule](https://developers.intandem.tech/reference/put_business-payments-v1-scheduled-payments-rules-uid-cancel.md): ## Overview Cancels a Recurring Payments Rule Available for **Staff, App, and Directory tokens**. ## Prerequisites Requires business to have a payment gateway that supports recurring payments. The scheduled payment rule must exist and be in a cancellable state. - [Delete Multiple Taxes](https://developers.intandem.tech/reference/delete_business-payments-v1-tax-bulk.md): ## Overview Deletes some taxes. Available for **Staff and Internal tokens**. - [Create Multiple Taxes](https://developers.intandem.tech/reference/post_business-payments-v1-tax-bulk.md): ## Overview Creates some taxes. Available for **Staff and Internal tokens**. - [Update Multiple Taxes](https://developers.intandem.tech/reference/put_business-payments-v1-tax-bulk.md): ## Overview Updates some taxes. Available for **Staff and Internal tokens**. - [Apply Default Taxes](https://developers.intandem.tech/reference/put_business-payments-v1-tax-bulk-apply-defaults.md): ## Overview Apply default taxes on items (Services/Products/Booking Packages) that don't have any taxes configured. Available for **Staff and Internal tokens**. - [Create Card Request](https://developers.intandem.tech/reference/post_business-payments-v1-card-requests.md): ## Overview Creates a Card Request Available for **Staff, App, and Directory tokens**. ## Prerequisites The business must have a payment gateway configured that supports the `client_save_card_standalone` feature (e.g., vcitaPayments, Stripe) before creating card requests. This can be verified by checking the `processing_features.client_save_card_standalone` field in the payment gateway configuration. - [Get Card Request](https://developers.intandem.tech/reference/get_business-payments-v1-card-requests-client-uid.md): ## Overview Gets a Card Request. Available for **Staff Tokens**. - [Get Client Payment Cards](https://developers.intandem.tech/reference/get_platform-v1-clients-payment-cards.md): ## Overview Retrieve all payment cards for a client. Available for **Client Tokens only**. ## Authentication This endpoint requires client token authentication rather than staff token. - [Get Client Payment Cards (Staff Access)](https://developers.intandem.tech/reference/getclientpaymentcards.md): ## Overview Retrieve all payment cards for a specific client. Available for **Staff Tokens**. - [List Payments](https://developers.intandem.tech/reference/get_business-payments-v1-payments.md): ## Overview List Payments. Available for **Staff Tokens**. - [Get Payment](https://developers.intandem.tech/reference/get_business-payments-v1-payments-payment-uid.md): ## Overview Get Payment. Available for **Staff Tokens**. - [Update Payment](https://developers.intandem.tech/reference/put_business-payments-v1-payments-payment-uid.md): ## Overview Update Payment Available for **Staff, App, and Directory tokens**. - [Get Payments List](https://developers.intandem.tech/reference/get_platform-v1-payments.md): ## Overview Get Payments List. Available for **Staff Tokens**. ## Prerequisites The business must have the `payments_module` feature enabled. - [Create New Payment](https://developers.intandem.tech/reference/post_platform-v1-payments.md): ## Overview Create New Payment. Available for **Staff, App, and Directory tokens**. Directory tokens require the `X-On-Behalf-Of` header. ## Prerequisites The business must have the `payments_module` feature enabled to use this endpoint. - [Match Payment](https://developers.intandem.tech/reference/post_platform-v1-payments-payment-uid-match.md): ## Overview Match Payment Available for **Staff, App, and Directory tokens**. - [Get Payment by ID](https://developers.intandem.tech/reference/get_platform-v1-payments-payment-uid.md): ## Overview Get Payment by ID. Available for **Staff Tokens**. ## Prerequisites The business must have the `payments_module` feature enabled. - [Send checkout update by webhook ](https://developers.intandem.tech/reference/put_platform-v1-payment-checkout.md): ## Overview Update a checkout process from webhook Available for **Staff, Directory, and Client tokens**. ## Important This is a webhook endpoint designed to be called by external payment providers (Stripe, etc.) after checkout completion. The `url_key` must be from an active checkout session (PaymentProcessRequest), not a payment request UID. - [Get Open Checkout For Specific url_key](https://developers.intandem.tech/reference/get_platform-v1-payment-checkout-url-key.md): ## Overview Get Open Checkout For Specific url_key. Available for **Staff, Directory, and Client tokens** - [Delete a PaymentGateway](https://developers.intandem.tech/reference/delete_v3-payment-processing-payment-gateways-uid.md): Delete an existing payment gateway - Available for **Application Tokens** - [Retrieve a PaymentGateway](https://developers.intandem.tech/reference/get_v3-payment-processing-payment-gateways-uid.md): Get details of a specific payment gateway - Available for **Directory, Business, and Application Tokens**. Note: Application tokens can only access their own gateway. - [Get all PaymentGateways](https://developers.intandem.tech/reference/get_v3-payment-processing-payment-gateways.md): Retrieve all available payment gateways - Available for **Directory, Business, and Client Tokens** **Note:** When using a **Client token**, all fields are returned in the response, but sensitive fields will contain `null` for security and privacy reasons. See response examples below for the differences between token types. - [Create a PaymentGatewayAssignment](https://developers.intandem.tech/reference/post_v3-payment-processing-payment-gateway-assignments.md): Assign a payment gateway to a directory - Available for **Directory Tokens** - [Create a PaymentGateway](https://developers.intandem.tech/reference/post_v3-payment-processing-payment-gateways.md): Create a new payment gateway - Available for **Application Tokens** - [Update a PaymentGateway](https://developers.intandem.tech/reference/put_v3-payment-processing-payment-gateways-uid.md): Update an existing payment gateway - Available for **Application Tokens** - [GET Payment Requests List](https://developers.intandem.tech/reference/get_business-payments-v1-payment-requests.md): ## Overview GET Payment Requests List. Available for **Staff, App, and Directory tokens**. - [GET Payment Request](https://developers.intandem.tech/reference/get_business-payments-v1-payment-requests-payment-request-uid.md): ## Overview GET Payment Request. Available for **Staff Tokens**. - [update](https://developers.intandem.tech/reference/put_business-payments-v1-payment-requests-payment-request-uid.md): ## Overview update an existing payment request Available for **Staff, App, and Directory tokens**. - [Send payment request link](https://developers.intandem.tech/reference/post_business-payments-v1-payment-requests-payment-request-uid-send-link.md): ## Overview Send payment request link Available for **Staff tokens**. - [Get Current Payment Settings](https://developers.intandem.tech/reference/get_platform-v1-payment-settings.md): ## Overview Get Current Payment Settings. Available for **Staff Tokens**. - [Update Payment Settings](https://developers.intandem.tech/reference/post_platform-v1-payment-settings.md): ## Overview Update Payment Settings Available for **Staff, App, and Directory tokens**. - [Update Default Currency](https://developers.intandem.tech/reference/put_platform-v1-payment-settings-update-default-currency.md): ## Overview Update Default Currency Available for **Staff, App, and Directory tokens**. - [Reorder Catalog Packages [Alpha]](https://developers.intandem.tech/reference/put_business-payments-v1-packages-reorder.md): ## Overview Set the display order of package catalog templates. Controls the sequence in which packages appear in the business's package catalog and client-facing portal. ## Authentication Available for **Staff, Directory, and App tokens**. ## Request Body - `packages` (array, required) β€” Array of objects specifying the new order. Each object contains: - `id` (string) β€” The UID of the catalog package. - `order` (integer) β€” The desired position in the list (lower numbers appear first). ## Notes - All packages should be included in the array to define a complete ordering. Packages not included retain their current position. - This endpoint is in Alpha and may change. - [List Catalog Packages](https://developers.intandem.tech/reference/get_platform-v1-payment-packages.md): ## Overview Retrieve a list of package catalog templates for the business. A package is a reusable template that defines a bundle of services and/or products a client can purchase, including pricing, included credits, and a default validity period. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. ## Query Parameters - `include_items` (optional, string) β€” Pass `"true"` to include the package items (service/product groups and their credit allocations) in the response. When omitted, items are not returned. - `active_only` (optional, string) β€” Pass `"true"` to return only active packages (not soft-deleted or deactivated). When omitted, all packages are returned regardless of active state. ## Notes - Packages returned here are catalog templates, not client-assigned subscriptions. To see packages assigned to a specific client, use `GET /business/payments/v1/client_packages/{uid}` or `GET /client/payments/v1/client_packages`. - Each package may contain one or more item groups, each defining a set of services and a `total_bookings` credit count. - [Create Catalog Package](https://developers.intandem.tech/reference/post_platform-v1-payment-packages.md): ## Overview Create a new package catalog template for the business. A package defines a bundle of services and/or products that can be sold to clients, including pricing, credit allocations per service group, and a default validity period that determines how long client subscriptions last. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. ## Required Parameters - `name` β€” Display name of the package (e.g., "10 Music Lessons"). - `price` β€” Base price of the package (e.g., 100 for $100). - `currency` β€” Three-letter ISO 4217 currency code (e.g., "USD", "ILS"). - `expiration` β€” Integer that, combined with `expiration_unit`, defines the default validity period for client subscriptions (e.g., 3). - `expiration_unit` β€” Unit for the expiration period: "D" (days), "W" (weeks), "M" (months), or "Y" (years). Combined with `expiration`, determines how long a client package remains active (e.g., expiration=3, expiration_unit="M" means 3 months). - `items` β€” Array of service/product groups included in the package. Each item must contain `services` (array of service UIDs) and `total_bookings` (number of credits for this group). ## Optional Parameters - `description` β€” Free-text description of the package shown to clients. - `discount_amount` β€” Numeric discount value applied to the package price. - `discount_unit` β€” Discount type: "F" (fixed amount off) or "P" (percentage off). - `image_path` β€” URL path to the package's display image. - `online_payment_enabled` β€” Whether clients can self-purchase this package from the client portal (boolean). - `products` β€” Array of product objects included in the package (redeemed immediately at purchase, unlike service credits which are consumed per-appointment). ## Notes - The business must have the packages feature enabled. - After creating a catalog package, assign it to a client using `POST /platform/v1/payment/client_packages` with the returned package `id` as `package_id`. - Items define the credit structure: when a client package is created from this template, each item becomes a credit pool with its own `total_bookings` count. - [Show Catalog Package Details](https://developers.intandem.tech/reference/get_platform-v1-payment-packages-package-id.md): ## Overview Retrieve detailed information for a single package catalog template, including its items (service/product groups), pricing, expiration settings, and active status. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. Also available for **Internal tokens**. ## Path Parameters - `package_id` (required, string) β€” The unique identifier (UID) of the catalog package to retrieve (e.g., "v2fvy50p8gjuvnvb"). ## Notes - This returns the catalog template definition, not a client-specific subscription. To view a client's assigned package, use `GET /business/payments/v1/client_packages/{uid}`. - Soft-deleted packages (where `active` is false and `deleted_at` is set) are still retrievable by ID but will not appear in the list endpoint with `active_only` filter. - [Update Catalog Package [Alpha]](https://developers.intandem.tech/reference/put_platform-v1-payment-packages-package-id.md): ## Overview Update an existing package catalog template. You can modify pricing, name, description, expiration settings, items, and active status. Changes to the catalog template do NOT retroactively affect already-created client packages β€” those retain the values they were assigned at creation. ## Authentication Available for **Staff tokens**. **Directory and App tokens** are supported with the `X-On-Behalf-Of` header set to the target business UID. ## Path Parameters - `package_id` (required, string) β€” The unique identifier (UID) of the catalog package to update (e.g., "v2fvy50p8gjuvnvb"). ## Request Body The request body must wrap all fields inside a `package` object. All fields are optional β€” only include fields you want to change. ## Updatable Fields - `name`, `price`, `currency`, `description` β€” Basic package information. - `expiration`, `expiration_unit` β€” Default validity period for future client subscriptions. - `discount_amount`, `discount_unit` β€” Pricing discount. - `items` β€” Service/product groups. Each item includes `services` (array of service UIDs) and `total_bookings` (credit count). When updating items, pass the complete desired items array. - `online_payment_enabled` β€” Client self-purchase toggle. - `active` β€” Set to `false` to deactivate the package (hides from catalog listings). ## Notes - This endpoint is in Alpha and may change. - Deactivating a package (`active: false`) prevents it from being assigned to new clients but does not affect existing client packages. - [Apply Coupon](https://developers.intandem.tech/reference/put_platform-v1-payment-statuses-id-apply-coupon.md): ## Overview Applies a coupon code to a payment status, reducing the amount due. The payment status must reference a coupon-eligible entity type: `Meeting`, `EventAttendance`, `PendingBooking`, or `Cart`. Payment statuses for other entity types (e.g., `Invoice`, `ClientBookingPackage`, `ProductOrder`) will return 422 "Invalid Coupon" even if the coupon code itself is valid. Available for **Staff, App, and Directory tokens**. - [Validate Coupon](https://developers.intandem.tech/reference/get_platform-v1-payment-statuses-id-validate-coupon.md): ## Overview Validates whether a coupon code can be applied to a payment status without actually applying it. Available for **Staff, App, and Directory tokens**. ## Required Parameters - `coupon_code` (query parameter): The coupon code to validate. ## Validation Rules The coupon must meet all of the following criteria to be valid: - Active status (not disabled) - Not expired (within valid date range) - Not already redeemed by this payment status - The payment status must reference a coupon-eligible entity type: `Meeting`, `EventAttendance`, `PendingBooking`, or `Cart`. Payment statuses for other entity types (e.g., `Invoice`, `ClientBookingPackage`, `ProductOrder`) will return 422 "Invalid Coupon" regardless of whether the coupon code itself is valid. - [Update Card](https://developers.intandem.tech/reference/put_business-payments-v1-cards-uid.md): ## Overview Updates a Card Available for **Staff, App, and Directory tokens**. - [Create sync card](https://developers.intandem.tech/reference/post_platform-v1-payment-cards-sync-card.md): ## Overview Create sync card Available for **Staff, App, and Directory tokens**. ## Required Fields - `customer_id`: The customer ID from the payment gateway (e.g., Stripe customer ID). This is mandatory - the API returns 422 'Mandatory parameter customer_id is missing' when it's not provided. - `client_id`: The client UID to associate the card with. - `external_card_id`: The card ID from the payment gateway. - [Delete saved card](https://developers.intandem.tech/reference/delete_platform-v1-payment-cards-card-id.md): ## Overview Delete saved card Available for **Staff, App, and Directory tokens**. - [Create Payout](https://developers.intandem.tech/reference/post_business-payments-v1-payouts.md): ## Overview Creates a Payout Available for **Staff, App, and Directory tokens**. - [Get Payout](https://developers.intandem.tech/reference/get_business-payments-v1-payouts-provider-payout-id.md): ## Overview Gets a Payout. Available for **Staff, Directory, and Client tokens** - [Update Payout](https://developers.intandem.tech/reference/put_business-payments-v1-payouts-provider-payout-id.md): ## Overview Updates a Payout Available for **Staff, App, and Directory tokens**. - [Create Refund](https://developers.intandem.tech/reference/post_business-payments-v1-refunds.md): ## Overview Creates a Refund Available for **Staff, App, and Directory tokens**. - [Get Taxes List [Alpha]](https://developers.intandem.tech/reference/get_business-payments-v1-taxes.md): ## Overview Get Taxes List [Alpha]. Available for **Staff Tokens**. - [Create Tax [Alpha]](https://developers.intandem.tech/reference/post_business-payments-v1-taxes.md): ## Overview Create Tax [Alpha]. Available for **Staff and Internal tokens**. - [Remove Tax [Alpha]](https://developers.intandem.tech/reference/delete_business-payments-v1-taxes-tax-uid.md): ## Overview Remove Tax [Alpha]. Available for **Staff and Internal tokens**. - [Get Tax [Alpha]](https://developers.intandem.tech/reference/get_business-payments-v1-taxes-tax-uid.md): ## Overview Get Tax [Alpha]. Available for **Staff Tokens**. - [Update Tax [Alpha]](https://developers.intandem.tech/reference/put_business-payments-v1-taxes-tax-uid.md): ## Overview Update Tax [Alpha]. Available for **Staff and Internal tokens**. - [Show Deposits List](https://developers.intandem.tech/reference/get_business-payments-v1-deposits.md): ## Overview Show list of deposits. Available for **Staff, App, and Directory tokens**. ## Filter Validation Rules - When filtering by `entity_uid`, the `entity_type` filter must also be provided - Valid `entity_type` values: `Invoice`, `Estimate` - Example query: `filter[entity_uid][eq]=uid123&filter[entity_type][in]=Invoice` - [Create Deposit](https://developers.intandem.tech/reference/post_business-payments-v1-deposits.md): ## Overview Creates a Deposit Available for **Staff, App, and Directory tokens**. - [Delete Deposit](https://developers.intandem.tech/reference/delete_business-payments-v1-deposits-uid.md): ## Overview Delete a specific deposit Available for **Staff, App, and Directory tokens**. - [Show Deposit](https://developers.intandem.tech/reference/get_business-payments-v1-deposits-uid.md): ## Overview Show specific deposit data. Available for **Staff Tokens**. - [Update Deposit](https://developers.intandem.tech/reference/put_business-payments-v1-deposits-uid.md): ## Overview Update specific deposit Available for **Staff, App, and Directory tokens**. - [Create Transaction](https://developers.intandem.tech/reference/post_business-payments-v1-transactions.md): ## Overview Creates a Transaction Available for **Staff, App, and Directory tokens**. - [Get Transaction](https://developers.intandem.tech/reference/get_business-payments-v1-transactions-provider-transaction-id.md): ## Overview Gets a Transaction. Available for **Staff, Directory, and Client tokens** - [Update Transaction](https://developers.intandem.tech/reference/put_business-payments-v1-transactions-provider-transaction-id.md): ## Overview Updates a Transaction Available for **Staff, App, and Directory tokens**. - [Create an Invoice](https://developers.intandem.tech/reference/post_v3-payments-invoices.md): ## Overview Create a new invoice Available for **Staff Tokens**. - [Update an Invoice](https://developers.intandem.tech/reference/put_v3-payments-invoices-uid.md): ## Overview Update an existing invoice Available for **Staff Tokens**. - [Get all Credit Notes](https://developers.intandem.tech/reference/get_v3-payments-credit-notes.md): ## Overview Get a list of credit notes with pagination. - [Create a Credit Note](https://developers.intandem.tech/reference/post_v3-payments-credit-notes.md): ## Overview Creates and issues a new credit note against an existing invoice. The credit note is immediately issued (no draft status). The service validates that the credit amount doesn't exceed the invoice's remaining creditable balance, generates EN 16931-compliant XML, stores it in S3, and publishes a `billing.credit_note.created` event. Available for **Staff, Directory, and Client tokens** - [Retrieve a Credit Note](https://developers.intandem.tech/reference/get_v3-payments-credit-notes-uid.md): ## Overview Retrieves the details of a specific credit note by its UID. Available for **Staff, Directory, and Client tokens** - [The Coupon Object](https://developers.intandem.tech/reference/coupon.md) - [List Coupons](https://developers.intandem.tech/reference/get_v2-coupons.md): ## Overview **DEPRECATED** - Use the v3 alternative `GET /v3/sales/coupons` instead. Retrieves a list of coupons for the business. Available for **Staff tokens**. ## Filtering You can filter coupons by their status using the `by_status` query parameter. Multiple statuses can be provided as a comma-separated string. - [Create Coupon](https://developers.intandem.tech/reference/post_v2-coupons.md): ## Overview Creates a new coupon for the business. Available for **Staff tokens**. ## Coupon Code If the `code` field is left blank, a random alphanumeric code will be auto-generated. Coupon codes must be between 5 and 15 characters long and may only contain letters, numbers, and underscores. ## Validation Rules - `name` is required and must be unique among active coupons. - `coupon_type` is required and must be either `fixed` or `percent`. - `amount` is required and must be a non-negative number. - `starts_at` is required. The date and time when the coupon becomes active. - `expires_at` is required. Must be a future date and must be at least 6 hours later than `starts_at`. - `code` must be unique among active coupons (if provided). - For `percent` type coupons, `amount` represents the percentage discount (e.g., 50 means 50% off). - For `fixed` type coupons, `amount` represents the fixed monetary discount in the business currency. - [Get Valid Coupons for Entity](https://developers.intandem.tech/reference/get_v2-coupons-valid-coupons.md): ## Overview **DEPRECATED** - Use the v3 alternative `GET /v3/sales/coupons` instead. Retrieves a list of valid (redeemable) coupons for a specific entity. Available for **Staff tokens**. This endpoint returns only coupons that are currently active, not expired, and eligible for the specified entity based on service and staff restrictions. - [Remove Coupon from Entity](https://developers.intandem.tech/reference/post_v2-coupons-remove.md): ## Overview Removes a previously applied coupon from an entity (payment, appointment, or event attendance). Available for **Staff tokens**. This reverses the discount that was applied via the Apply Coupon endpoint. - [Get Coupon](https://developers.intandem.tech/reference/get_v2-coupons-uid.md): ## Overview **DEPRECATED** - Use the v3 alternative `GET /v3/sales/coupons` instead. Retrieves a single coupon by its UID. Available for **Staff tokens**. - [Update Coupon](https://developers.intandem.tech/reference/put_v2-coupons-uid.md): ## Overview Updates an existing coupon. Available for **Staff tokens**. ## Validation Rules The same validation rules as coupon creation apply. Additionally: - You cannot change the `code` to a code that is already in use by another active coupon. - You cannot change the `name` to a name that is already in use by another active coupon. - [Delete Coupon](https://developers.intandem.tech/reference/delete_v2-coupons-uid.md): ## Overview Deletes a coupon. Available for **Staff tokens**. This permanently removes the coupon. Existing redemptions are not affected. - [Expire Coupon](https://developers.intandem.tech/reference/post_v2-coupons-uid-expire.md): ## Overview Manually expires an active coupon, making it no longer redeemable. Available for **Staff tokens**. This sets the coupon's `expires_at` to the current time, effectively deactivating it immediately. - [Enable Coupon](https://developers.intandem.tech/reference/post_v2-coupons-uid-enable.md): ## Overview Enables a previously disabled coupon, making it redeemable again. Available for **Staff tokens**. This removes the `disabled` flag from the coupon's configuration. The coupon must still be within its `starts_at` and `expires_at` date range to be actively redeemable. - [Disable Coupon](https://developers.intandem.tech/reference/post_v2-coupons-uid-disable.md): ## Overview Disables an active coupon, temporarily preventing it from being redeemed. Available for **Staff tokens**. Unlike expiring a coupon, disabling is reversible - the coupon can be re-enabled using the Enable endpoint. - [Apply Coupon to Entity](https://developers.intandem.tech/reference/post_v2-coupons-uid-apply.md): ## Overview Applies a coupon to a specific entity (payment, appointment, or event attendance), granting the associated discount. Available for **Staff tokens**. ## Validation - The coupon must be active (not expired or disabled). - The coupon must not have exceeded its `max_redemptions` or `max_redemptions_per_client` limits. - If the coupon has `valid_services` or `valid_staff` restrictions, the entity must match those restrictions. - [Get all Coupons](https://developers.intandem.tech/reference/get_v3-sales-coupons.md): ## Overview Get a list of Coupons. Available for **Staff Tokens**. - [List Categories](https://developers.intandem.tech/reference/get_v2-settings-categories.md): Returns all service categories for the business, each with its nested services. Use this to retrieve category UIDs needed when creating services via POST /v2/settings/services. - [Create Category](https://developers.intandem.tech/reference/post_v2-settings-categories.md): Creates a new service category for the business. - [The BusinessReviewsSettings Object](https://developers.intandem.tech/reference/the-business-reviews-settings-entity.md) - [Retrieve Business Reviews Settings](https://developers.intandem.tech/reference/get_v3-reviews-business-reviews-settings-business-uid.md): ## Overview Get the reviews settings for a specific business. ## Authentication **Available for Staff Tokens.** - [Create Business Reviews Settings](https://developers.intandem.tech/reference/post_v3-reviews-business-reviews-settings.md): ## Overview Create new business reviews settings. ## Authentication **Available for Staff Tokens.** ## Uniqueness Constraint Each business can only have one Business Reviews Settings record. If settings already exist for the business, the API returns HTTP 409 Conflict. Use `PUT /v3/reviews/business_reviews_settings/{business_uid}` to update existing settings. - [Update Business Reviews Settings](https://developers.intandem.tech/reference/put_v3-reviews-business-reviews-settings-business-uid.md): ## Overview Update the reviews settings for a specific business - Update the reviews settings for a specific business - Available for **Staff Tokens**. ## Changelog - [Subscription webhooks moved to v3](https://developers.intandem.tech/changelog/subscription-webhooks-moved-to-v3.md) - [New Permissions Framework + Staff API Updates](https://developers.intandem.tech/changelog/new-permissions-framework-staff-api-updates.md)