# Merrows API Documentation > Public API reference and guides for the Merrows AI employee platform: voice, chat, SMS, and email agents for ordering, post-purchase support, and customer service. - [Merrows API Documentation](/index.md) ## ai-tools The site is built to be read by agents as well as people. - [Using these docs with AI tools](/ai-tools.md): The site is built to be read by agents as well as people. ## api ### auth - [Accept an invitation](/api/auth/accept-an-invitation.md): Authenticated. The session email must match the invited address (case-insensitive). Creates the membership with the invited role; a user already holding a role accepts without gaining a second one. - [Add user to business](/api/auth/add-user-to-business.md): Add a user to the business - [Apple OAuth](/api/auth/apple-o-auth.md): Initiate Apple OAuth authentication - [Apple OAuth Callback](/api/auth/apple-o-auth-callback.md): Handle Apple OAuth callback - [Check user permission](/api/auth/check-user-permission.md): Check if user has a specific permission in a business - [Confirm MFA enrolment (step two of two)](/api/auth/confirm-mfa-enrolment-step-two-of-two.md): Enables the pending method on the authenticated user's own account once the submitted code checks out: a TOTP from the secret returned by /auth/setup-mfa, or the code it sent by email or SMS. A wrong code answers 400 MFA_CONFIRM_FAILED and changes nothing. Rate limited to 5 attempts per 15 minutes per user and 30 per hour per IP. - [Create business role](/api/auth/create-business-role.md): Create a custom role for the business - [Decode JWT](/api/auth/decode-jwt.md): Decode and verify JWT token - [Disable MFA](/api/auth/disable-mfa.md): Disable multi-factor authentication for user - [Facebook OAuth](/api/auth/facebook-o-auth.md): Initiate Facebook OAuth authentication - [Facebook OAuth Callback](/api/auth/facebook-o-auth-callback.md): Handle Facebook OAuth callback - [Get all available permissions](/api/auth/get-all-available-permissions.md): Get all permissions available in the system - [Get business](/api/auth/get-business.md): Get business details by slug - [Get business roles](/api/auth/get-business-roles.md): List all roles in a business - [Get business users](/api/auth/get-business-users.md): List all users in a business - [Get my businesses](/api/auth/get-my-businesses.md): List all businesses for authenticated user - [Get user permissions for business](/api/auth/get-user-permissions-for-business.md): Get user's permissions for a specific business - [Google OAuth](/api/auth/google-o-auth.md): Initiate Google OAuth authentication - [Google OAuth Callback](/api/auth/google-o-auth-callback.md): Handle Google OAuth callback - [Invite a member by email](/api/auth/invite-a-member-by-email.md): Create a pending invitation and email an accept link. The invitee needs no account yet; accepting requires signing in with the invited address. Requires auth.users.manage (or global admin); owner roles require an owner actor. - [List member invitations](/api/auth/list-member-invitations.md): All invitations for the tenant, newest first; pending rows past expiry carry expired=true. - [List roles](/api/auth/list-roles.md): Get all available roles - [Logout user](/api/auth/logout-user.md): Invalidate user session and token - [Merrows Auth API](/api/auth/merrows-auth-api.md): Authentication and business management API with unified MFA support - [Microsoft OAuth](/api/auth/microsoft-o-auth.md): Initiate Microsoft OAuth authentication - [Microsoft OAuth Callback](/api/auth/microsoft-o-auth-callback.md): Handle Microsoft OAuth callback - [Register new user](/api/auth/register-new-user.md): Create a new user account with email or phone number - [Remove user from business](/api/auth/remove-user-from-business.md): Remove a user from the business - [Request password reset](/api/auth/request-password-reset.md): Send password reset code to user's email or phone - [Resend a pending invitation](/api/auth/resend-a-pending-invitation.md): Rotates the token, extends the expiry, and emails a fresh accept link. The previously emailed link stops working. - [Resend verification code](/api/auth/resend-verification-code.md): Resend verification code to email or phone - [Reset password](/api/auth/reset-password.md): Reset password using verification code - [Revoke a pending invitation](/api/auth/revoke-a-pending-invitation.md): Soft-revokes a pending invitation. Owner-role invitations require an owner actor. - [Set active business](/api/auth/set-active-business.md): Set user's active business context - [Start MFA enrolment (step one of two)](/api/auth/start-mfa-enrolment-step-one-of-two.md): Begins enrolling a second factor on the authenticated user's own account (#2500). Nothing is enabled by this call. For `authenticator` a TOTP secret is stored and returned with its otpauth URI; for `email` or `sms` a code is sent to the verified contact. Call POST /auth/confirm-mfa with a code from the method to enable it. The user is taken from the JWT; a body-supplied userId is ignored. - [TikTok OAuth](/api/auth/tik-tok-o-auth.md): Initiate TikTok OAuth authentication - [TikTok OAuth Callback](/api/auth/tik-tok-o-auth-callback.md): Handle TikTok OAuth callback - [Update user role](/api/auth/update-user-role.md): Update user's role in business - [User login](/api/auth/user-login.md): Authenticate user with email/phone and password - [Verify an invitation token](/api/auth/verify-an-invitation-token.md): Public. Returns tenant, role, inviter, and invited email for a pending, unexpired token; anything else is a uniform 404. - [Verify email or phone](/api/auth/verify-email-or-phone.md): Verify user's email or phone number with code - [Verify JWT token](/api/auth/verify-jwt-token.md): Check if JWT token is valid - [Verify MFA challenge](/api/auth/verify-mfa-challenge.md): Verify multi-factor authentication codes ### edge - [Lists all active action definitions. Optionally filter by domain.](/api/edge/actions-list-actions.md): Lists all active action definitions. Optionally filter by domain. - [#514 automation-rate KPI: per-task outcomes from the #512 scoring pipeline rolled into automation / bot-failure / abandonment rates (appropriate escalations excluded from the denominator per the #509 metric contract), totalled, by UTC day, and by channel. Observational — every cell traces back to scored tasks via the tasks endpoint below.](/api/edge/analytics-get-automation-rate.md): #514 automation-rate KPI: per-task outcomes from the #512 scoring - [Drill-down for the KPI: the scored tasks behind a rate cell, filterable by outcome/channel, newest first. Each row links to the conversation transcript via conversation_id (= the analytics CallId) and carries the task's turn span.](/api/edge/analytics-get-automation-tasks.md): Drill-down for the KPI: the scored tasks behind a rate cell, filterable - [What the scored tasks in the window did, for the owner's analytics page: tasks that completed each kind of action (an order placed, a return opened, an appointment booked), and escalated tasks by how the handoff ended. Counts are tasks, in the same window and filters as automation-rate, and each one drills through automation-rate/tasks with `action` or `handoff`. A handoff that stopped at the business's own setup is reported as such, never as completed work.](/api/edge/analytics-get-automation-work.md): What the scored tasks in the window did, for the owner's analytics - [Retrieves call analytics data for a specific tenant based on a set of query parameters. This endpoint allows filtering calls by date range, flow ID, outcome, language, and translation status.](/api/edge/analytics-get-calls.md): Retrieves call analytics data for a specific tenant based on a set of query parameters. - [Merchant-facing CSAT rollup. Customer votes and AI estimates are returned as separate, scale-labelled metrics and are never averaged together or across unlike scales.](/api/edge/analytics-get-csat.md): Merchant-facing CSAT rollup. Customer votes and AI estimates are - [Create a tenant-scoped API key](/api/edge/api-keys-create-tenant-key.md): Create a tenant-scoped API key - [List API keys for a tenant](/api/edge/api-keys-list-tenant-keys.md): List API keys for a tenant - [Revoke a tenant API key](/api/edge/api-keys-revoke-tenant-key.md): Revoke a tenant API key - [Add a channel add-on (voice, SMS or the phone line) to a live subscription (#2780).](/api/edge/billing-add-addon.md): Add a channel add-on (voice, SMS or the phone line) to a live subscription (#2780). - [Move a live subscription to another plan through Stripe's subscription update API (#2780). Upgrades are prorated now; downgrades take effect next period. Never opens a second Checkout.](/api/edge/billing-change-plan.md): Move a live subscription to another plan through Stripe's subscription - [Billing_CreatePortalSession](/api/edge/billing-create-portal-session.md): Billing_CreatePortalSession - [The plans and the channel add-ons (#2780).](/api/edge/billing-get-plans.md): The plans and the channel add-ons (#2780). - [Billing_GetReloadPacks](/api/edge/billing-get-reload-packs.md): Billing_GetReloadPacks - [Billing_GetSummary](/api/edge/billing-get-summary.md): Billing_GetSummary - [Remove a channel add-on (#2780). The channel stays on until the paid period ends; the number is held for 90 days after that.](/api/edge/billing-remove-addon.md): Remove a channel add-on (#2780). The channel stays on until the paid - [Billing_StartReloadCheckout](/api/edge/billing-start-reload-checkout.md): Billing_StartReloadCheckout - [Billing_StartSubscriptionCheckout](/api/edge/billing-start-subscription-checkout.md): Billing_StartSubscriptionCheckout - [Connect Blaze to a tenant. Validates the keys against GET /partner/store and stores both encrypted; registers order webhooks best-effort when the environment has a callback base URL configured.](/api/edge/blaze-connection-connect.md): Connect Blaze to a tenant. Validates the keys against GET /partner/store - [Disconnect Blaze from a tenant.](/api/edge/blaze-connection-disconnect.md): Disconnect Blaze from a tenant. - [Get the current Blaze connection for a tenant.](/api/edge/blaze-connection-get-connection.md): Get the current Blaze connection for a tenant. - [Test the Blaze connection by calling GET /partner/store with the stored keys.](/api/edge/blaze-connection-test-connection.md): Test the Blaze connection by calling GET /partner/store with the stored keys. - [Connect a booking provider. Encrypts + stores credentials and sets the active provider.](/api/edge/booking-connection-connect.md): Connect a booking provider. Encrypts + stores credentials and sets the active provider. - [Disconnect the tenant's booking provider and clear the active provider.](/api/edge/booking-connection-disconnect.md): Disconnect the tenant's booking provider and clear the active provider. - [Get the tenant's current booking connection (200 with null body if unconfigured).](/api/edge/booking-connection-get-connection.md): Get the tenant's current booking connection (200 with null body if unconfigured). - [Capabilities_Delete](/api/edge/capabilities-delete.md): Capabilities_Delete - [Capabilities_Get](/api/edge/capabilities-get.md): Capabilities_Get - [Capabilities_List](/api/edge/capabilities-list.md): Capabilities_List - [Capabilities_Update](/api/edge/capabilities-update.md): Capabilities_Update - [Retrieves the conversation settings for a specific tenant. This includes settings like dead-air thresholds, TTS chunk thresholds, and global DTMF overrides.](/api/edge/conversation-settings-get.md): Retrieves the conversation settings for a specific tenant. - [Retrieves the menu item clarification settings for a specific tenant. Controls how the bot handles variations, modifiers, and ambiguous item matches.](/api/edge/conversation-settings-get-clarification-settings.md): Retrieves the menu item clarification settings for a specific tenant. - [Creates or updates the conversation settings for a specific tenant. This allows for fine-tuning conversation behavior and DTMF handling.](/api/edge/conversation-settings-update.md): Creates or updates the conversation settings for a specific tenant. - [Updates the menu item clarification settings for a specific tenant. Only provided fields will be updated; others retain their current values.](/api/edge/conversation-settings-update-clarification-settings.md): Updates the menu item clarification settings for a specific tenant. - [Retrieves the session summary for a specific call. The session summary contains metadata about the conversation, such as the start and end times, duration, and outcome.](/api/edge/conversation-transcripts-get-session.md): Retrieves the session summary for a specific call. - [Retrieves the transcript for a specific call. The transcript can be filtered by speaker and turn number, and returned in either a compact or verbose format.](/api/edge/conversation-transcripts-get-transcript.md): Retrieves the transcript for a specific call. - [Removes conversation-level TTS settings, reverting to the tenant default.](/api/edge/conversation-tts-settings-delete.md): Removes conversation-level TTS settings, reverting to the tenant default. - [Gets the TTS settings for a conversation, optionally pinned to a version. Returns the version-specific row if it exists, otherwise the version-agnostic row.](/api/edge/conversation-tts-settings-get.md): Gets the TTS settings for a conversation, optionally pinned to a version. - [Creates or updates TTS settings for a conversation. Only provided (non-null) fields are written; omitted fields retain their current value on update.](/api/edge/conversation-tts-settings-upsert.md): Creates or updates TTS settings for a conversation. - [Create a new draft conversation.](/api/edge/conversations-create-draft.md): Create a new draft conversation. - [Delete a never-published draft conversation (#354). Published conversations return 409; create-and-abandon drafts are the only hard-deletable state.](/api/edge/conversations-delete-draft.md): Delete a never-published draft conversation (#354). Published conversations - [Compute a structural diff between two versions of a conversation.](/api/edge/conversations-diff-versions.md): Compute a structural diff between two versions of a conversation. - [Get a specific conversation by slug or ID (returns latest version).](/api/edge/conversations-get.md): Get a specific conversation by slug or ID (returns latest version). - [List all conversations for a tenant.](/api/edge/conversations-list.md): List all conversations for a tenant. - [List all versions for a conversation slug.](/api/edge/conversations-list-versions.md): List all versions for a conversation slug. - [Publish a draft conversation, creating a new immutable version.](/api/edge/conversations-publish.md): Publish a draft conversation, creating a new immutable version. - [Rollback a conversation to a specific version, creating a new version with the target's definition.](/api/edge/conversations-rollback.md): Rollback a conversation to a specific version, creating a new version with the target's definition. - [Update an existing draft conversation.](/api/edge/conversations-update-draft.md): Update an existing draft conversation. - [EmailConversations_Close](/api/edge/email-conversations-close.md): EmailConversations_Close - [Escalate an email conversation to the helpdesk provider. Builds transcript from the full message thread and creates a helpdesk ticket.](/api/edge/email-conversations-escalate.md): Escalate an email conversation to the helpdesk provider. - [EmailConversations_Get](/api/edge/email-conversations-get.md): EmailConversations_Get - [EmailConversations_List](/api/edge/email-conversations-list.md): EmailConversations_List - [EmailConversations_Reply](/api/edge/email-conversations-reply.md): EmailConversations_Reply - [Get a single delivery log entry.](/api/edge/email-delivery-get.md): Get a single delivery log entry. - [List email delivery logs with optional filters.](/api/edge/email-delivery-list.md): List email delivery logs with optional filters. - [Get aggregate delivery stats for a tenant.](/api/edge/email-delivery-stats.md): Get aggregate delivery stats for a tenant. - [Get current email settings for a tenant](/api/edge/email-settings-get.md): Get current email settings for a tenant - [Get provider-specific email forwarding setup guide](/api/edge/email-settings-get-setup-guide.md): Get provider-specific email forwarding setup guide - [Get forwarding verification status for a tenant](/api/edge/email-settings-get-verification-status.md): Get forwarding verification status for a tenant - [List recent inbound emails for a tenant](/api/edge/email-settings-list-inbound-emails.md): List recent inbound emails for a tenant - [Start email forwarding verification — sends a verification email to the external address. When that address is forwarded to the tenant's inbound address the webhook auto-detects the token and marks the verification complete.](/api/edge/email-settings-start-forwarding-verification.md): Start email forwarding verification — sends a verification email to the - [Update email settings for a tenant. The inbound routing address is NOT writable here (#1361): it is the identity the webhook matches inbound mail against, and the old single-column design let the editable reply-from field silently overwrite it. Custom inbound addresses are an operator concern; reply-from is the merchant-facing setting.](/api/edge/email-settings-update.md): Update email settings for a tenant. The inbound routing address is NOT - [EmailTemplates_Create](/api/edge/email-templates-create.md): EmailTemplates_Create - [EmailTemplates_Delete](/api/edge/email-templates-delete.md): EmailTemplates_Delete - [EmailTemplates_Get](/api/edge/email-templates-get.md): EmailTemplates_Get - [EmailTemplates_List](/api/edge/email-templates-list.md): EmailTemplates_List - [Render a template with sample variables and return the branded HTML preview.](/api/edge/email-templates-preview.md): Render a template with sample variables and return the branded HTML preview. - [Send a test email using this template.](/api/edge/email-templates-send-test.md): Send a test email using this template. - [EmailTemplates_Update](/api/edge/email-templates-update.md): EmailTemplates_Update - [EmbedConnection_CreateOrRotateKey](/api/edge/embed-connection-create-or-rotate-key.md): EmbedConnection_CreateOrRotateKey - [EmbedConnection_Get](/api/edge/embed-connection-get.md): EmbedConnection_Get - [Embed usage rollup (#830): sessions/messages/top-origins from the Mongo analytics documents stamped Source = 'website_embed'. Message counts cover persisted (ended) sessions only; live sessions appear in the session count with 0 messages until their transcript persists.](/api/edge/embed-connection-get-analytics.md): Embed usage rollup (#830): sessions/messages/top-origins from the - [EmbedConnection_Update](/api/edge/embed-connection-update.md): EmbedConnection_Update - [Add a variant to an experiment.](/api/edge/experiments-add-variant.md): Add a variant to an experiment. - [Conclude an experiment with an optional winning variant. If promoteWinner is true, updates the TenantConversationAssignment.](/api/edge/experiments-conclude.md): Conclude an experiment with an optional winning variant. - [Create a new experiment in draft status.](/api/edge/experiments-create.md): Create a new experiment in draft status. - [Delete a draft experiment.](/api/edge/experiments-delete.md): Delete a draft experiment. - [Remove a variant.](/api/edge/experiments-delete-variant.md): Remove a variant. - [Get experiment details including variants and assignment counts.](/api/edge/experiments-get.md): Get experiment details including variants and assignment counts. - [List all experiments for a tenant, including variant counts.](/api/edge/experiments-list.md): List all experiments for a tenant, including variant counts. - [Pause a running experiment.](/api/edge/experiments-pause.md): Pause a running experiment. - [Get assignment counts per variant for an experiment.](/api/edge/experiments-results.md): Get assignment counts per variant for an experiment. - [Resume a paused experiment.](/api/edge/experiments-resume.md): Resume a paused experiment. - [Start an experiment. Validates: weights sum to 100, >= 2 variants, no other running experiment for tenant.](/api/edge/experiments-start.md): Start an experiment. Validates: weights sum to 100, >= 2 variants, no other running experiment for tenant. - [Update a draft experiment. Returns 409 if not in draft status.](/api/edge/experiments-update.md): Update a draft experiment. Returns 409 if not in draft status. - [Update a variant.](/api/edge/experiments-update-variant.md): Update a variant. - [Connect Gladly to a tenant. Encrypts and stores credentials. Optionally registers webhook with Gladly.](/api/edge/gladly-connection-connect.md): Connect Gladly to a tenant. Encrypts and stores credentials. - [Disconnect Gladly from a tenant.](/api/edge/gladly-connection-disconnect.md): Disconnect Gladly from a tenant. - [Get the current Gladly connection for a tenant.](/api/edge/gladly-connection-get-connection.md): Get the current Gladly connection for a tenant. - [Test the Gladly connection by calling the agents endpoint.](/api/edge/gladly-connection-test-connection.md): Test the Gladly connection by calling the agents endpoint. - [Connect Gorgias to a tenant. Encrypts and stores credentials.](/api/edge/gorgias-connection-connect.md): Connect Gorgias to a tenant. Encrypts and stores credentials. - [Disconnect Gorgias from a tenant.](/api/edge/gorgias-connection-disconnect.md): Disconnect Gorgias from a tenant. - [Get the current Gorgias connection for a tenant.](/api/edge/gorgias-connection-get-connection.md): Get the current Gorgias connection for a tenant. - [Test the Gorgias connection by calling the account endpoint.](/api/edge/gorgias-connection-test-connection.md): Test the Gorgias connection by calling the account endpoint. - [Add a note to an existing helpdesk conversation.](/api/edge/helpdesk-add-note.md): Add a note to an existing helpdesk conversation. - [Create a report export job.](/api/edge/helpdesk-create-report.md): Create a report export job. - [Manually escalate to helpdesk from the portal.](/api/edge/helpdesk-escalate.md): Manually escalate to helpdesk from the portal. - [Get a single conversation link by ID.](/api/edge/helpdesk-get-conversation.md): Get a single conversation link by ID. - [Check status of a report job.](/api/edge/helpdesk-get-report-status.md): Check status of a report job. - [List agents from the helpdesk provider.](/api/edge/helpdesk-list-agents.md): List agents from the helpdesk provider. - [List conversation links (escalation history) for the tenant.](/api/edge/helpdesk-list-conversations.md): List conversation links (escalation history) for the tenant. - [List inboxes from the helpdesk provider.](/api/edge/helpdesk-list-inboxes.md): List inboxes from the helpdesk provider. - [IntegrationCapabilities_Get](/api/edge/integration-capabilities-get.md): IntegrationCapabilities_Get - [Removes a per-tenant override for a system intent, resetting it to system defaults.](/api/edge/intent-catalog-delete-override.md): Removes a per-tenant override for a system intent, resetting it to system defaults. - [Returns the full system intent catalog for this tenant's type, including override metadata (enabled/disabled, custom description/examples).](/api/edge/intent-catalog-get-catalog.md): Returns the full system intent catalog for this tenant's type, - [Creates or updates a per-tenant override for a system intent. Use this to enable/disable intents or customize their description/examples.](/api/edge/intent-catalog-upsert-override.md): Creates or updates a per-tenant override for a system intent. - [Connect Kustomer to a tenant. Encrypts and stores the API token.](/api/edge/kustomer-connection-connect.md): Connect Kustomer to a tenant. Encrypts and stores the API token. - [Disconnect Kustomer from a tenant.](/api/edge/kustomer-connection-disconnect.md): Disconnect Kustomer from a tenant. - [Get the current Kustomer connection for a tenant.](/api/edge/kustomer-connection-get-connection.md): Get the current Kustomer connection for a tenant. - [Test the Kustomer connection by calling the current user endpoint.](/api/edge/kustomer-connection-test-connection.md): Test the Kustomer connection by calling the current user endpoint. - [LlmPrompts_Delete](/api/edge/llm-prompts-delete.md): LlmPrompts_Delete - [LlmPrompts_Get](/api/edge/llm-prompts-get.md): LlmPrompts_Get - [LlmPrompts_List](/api/edge/llm-prompts-list.md): LlmPrompts_List - [LlmPrompts_Update](/api/edge/llm-prompts-update.md): LlmPrompts_Update - [Connect Meadow to a tenant. Validates the keys and stores them encrypted.](/api/edge/meadow-connection-connect.md): Connect Meadow to a tenant. Validates the keys and stores them encrypted. - [Disconnect Meadow from a tenant.](/api/edge/meadow-connection-disconnect.md): Disconnect Meadow from a tenant. - [Get the current Meadow connection for a tenant.](/api/edge/meadow-connection-get-connection.md): Get the current Meadow connection for a tenant. - [Test the Meadow connection by calling the organization endpoint.](/api/edge/meadow-connection-test-connection.md): Test the Meadow connection by calling the organization endpoint. - [Merrows Edge API](/api/edge/merrows-edge-api.md): Public API for building on the Merrows platform: conversations, analytics, transcripts, experiments, telephony, email/SMS templates, and integration management. - [Preview return financials before creating. Returns 409 if tenant uses Redo as returns provider.](/api/edge/oms-calculate-return.md): Preview return financials before creating. - [Cancel an order (irreversible)](/api/edge/oms-cancel-order.md): Cancel an order (irreversible) - [Cancel a subscription](/api/edge/oms-cancel-subscription.md): Cancel a subscription - [Create an exchange (return items + ship new items). Returns 409 if tenant uses Redo as returns provider.](/api/edge/oms-create-exchange.md): Create an exchange (return items + ship new items). - [Create a return request for an order. Returns 409 if tenant uses Redo as returns provider.](/api/edge/oms-create-return.md): Create a return request for an order. - [Get order details with fulfillments and tracking info](/api/edge/oms-get-order.md): Get order details with fulfillments and tracking info - [Get subscription details](/api/edge/oms-get-subscription.md): Get subscription details - [List subscriptions for a customer](/api/edge/oms-list-subscriptions.md): List subscriptions for a customer - [Pause a subscription](/api/edge/oms-pause-subscription.md): Pause a subscription - [Process/confirm a return (disposition + refund). Returns 409 if tenant uses Redo as returns provider.](/api/edge/oms-process-return.md): Process/confirm a return (disposition + refund). - [Resume a paused subscription](/api/edge/oms-resume-subscription.md): Resume a paused subscription - [Search orders by email, phone, name, or status](/api/edge/oms-search-orders.md): Search orders by email, phone, name, or status - [Skip the next shipment/charge on a subscription (#1507). Returns 501 when the resolved provider has no skip support (OMS bridge).](/api/edge/oms-skip-next-shipment.md): Skip the next shipment/charge on a subscription (#1507). - [Swap the product variant on a subscription (#1507). Returns 501 when the resolved provider has no swap support (OMS bridge).](/api/edge/oms-swap-subscription-variant.md): Swap the product variant on a subscription (#1507). - [Restore a previously skipped shipment/charge on a subscription (#1507). Returns 501 when the resolved provider has no skip support (OMS bridge).](/api/edge/oms-unskip-shipment.md): Restore a previously skipped shipment/charge on a subscription (#1507). - [OutboundCalls_GetStatus](/api/edge/outbound-calls-get-status.md): OutboundCalls_GetStatus - [OutboundCalls_Hangup](/api/edge/outbound-calls-hangup.md): OutboundCalls_Hangup - [OutboundCalls_InitiateCall](/api/edge/outbound-calls-initiate-call.md): OutboundCalls_InitiateCall - [Creates an order with a list of items and sends a payment link to the customer via SMS.](/api/edge/payment-create-order-with-payment-link.md): Creates an order with a list of items and sends a payment link to the customer via SMS. - [Creates a quick payment link for a simple amount and sends it to the customer via SMS.](/api/edge/payment-create-quick-payment-link.md): Creates a quick payment link for a simple amount and sends it to the customer via SMS. - [Retrieves the status of a specific payment link.](/api/edge/payment-get-payment-link-status.md): Retrieves the status of a specific payment link. - [An example endpoint demonstrating how a voice order can be processed and converted into a payment link.](/api/edge/payment-process-voice-order.md): An example endpoint demonstrating how a voice order can be processed and converted into a payment link. - [Creates a new order in the Point of Sale (POS) system for a specific tenant.](/api/edge/pos-create-order.md): Creates a new order in the Point of Sale (POS) system for a specific tenant. - [Retrieves the menu for a specific tenant and location from the configured Point of Sale (POS) system.](/api/edge/pos-get-menu.md): Retrieves the menu for a specific tenant and location from the configured Point of Sale (POS) system. - [Retrieves a specific order from the Point of Sale (POS) system.](/api/edge/pos-get-order.md): Retrieves a specific order from the Point of Sale (POS) system. - [Connect POSaBIT to a tenant. Validates the venue credentials and stores encrypted.](/api/edge/posabit-connection-connect.md): Connect POSaBIT to a tenant. Validates the venue credentials and stores encrypted. - [Disconnect POSaBIT from a tenant.](/api/edge/posabit-connection-disconnect.md): Disconnect POSaBIT from a tenant. - [Get the current POSaBIT connection for a tenant.](/api/edge/posabit-connection-get-connection.md): Get the current POSaBIT connection for a tenant. - [Test the POSaBIT connection by calling the venue info endpoint.](/api/edge/posabit-connection-test-connection.md): Test the POSaBIT connection by calling the venue info endpoint. - [Connect Recharge to a tenant. Verifies the token against the live API first, then encrypts and stores it.](/api/edge/recharge-connection-connect.md): Connect Recharge to a tenant. Verifies the token against the live API - [Disconnect Recharge from a tenant (soft: the row survives for revive).](/api/edge/recharge-connection-disconnect.md): Disconnect Recharge from a tenant (soft: the row survives for revive). - [Get the current Recharge connection for a tenant.](/api/edge/recharge-connection-get-connection.md): Get the current Recharge connection for a tenant. - [Test the stored Recharge connection with an authenticated store read.](/api/edge/recharge-connection-test-connection.md): Test the stored Recharge connection with an authenticated store read. - [Update the display-only settings on the active connection.](/api/edge/recharge-connection-update-settings.md): Update the display-only settings on the active connection. - [Connect Redo to a tenant. Encrypts and stores API token, store ID, and webhook secret. Optionally registers webhook with Redo API.](/api/edge/redo-connection-connect.md): Connect Redo to a tenant. Encrypts and stores API token, store ID, and webhook secret. - [Disconnect Redo from a tenant](/api/edge/redo-connection-disconnect.md): Disconnect Redo from a tenant - [Get the current Redo connection for a tenant](/api/edge/redo-connection-get-connection.md): Get the current Redo connection for a tenant - [Get the customer return portal URL for this tenant.](/api/edge/returns-get-portal-link.md): Get the customer return portal URL for this tenant. - [Get a single return case by its external return ID, with event history.](/api/edge/returns-get-return-case.md): Get a single return case by its external return ID, with event history. - [List return cases for a tenant, with optional filters.](/api/edge/returns-list-return-cases.md): List return cases for a tenant, with optional filters. - [Update the status of a return via the returns provider, then update local mirror. Valid target statuses: complete, open, flagged, rejected, deleted.](/api/edge/returns-update-return-status.md): Update the status of a return via the returns provider, then update local mirror. - [Attach an install the merchant approved on Shopify to this tenant. The install ran OAuth before the merchant signed in (App Store requirement 2.3.2), so the callback could not know the workspace and parked the grant under a claim token. The token is single use and expires after Edge.API.Shopify.ShopifyOAuthStart.ClaimTtl. A claim that is refused for a reason the merchant can fix (the workspace already holds another store, or another business holds this one) is put back for the rest of its lifetime, so the merchant can fix it and retry without installing again.](/api/edge/shopify-connection-claim.md): Attach an install the merchant approved on Shopify to this tenant. - [Connect a Shopify store to a tenant using OAuth 2.0 client credentials. Exchanges client ID + secret for an access token, validates via GraphQL shop query, stores encrypted credentials, and registers webhooks.](/api/edge/shopify-connection-connect.md): Connect a Shopify store to a tenant using OAuth 2.0 client credentials. - [Disconnect a Shopify store from a tenant](/api/edge/shopify-connection-disconnect.md): Disconnect a Shopify store from a tenant - [Get the current Shopify connection for a tenant](/api/edge/shopify-connection-get-connection.md): Get the current Shopify connection for a tenant - [The consent URL for the store this tenant already holds, for a reconnect after Shopify stopped accepting its token. Only the stored shop is ever used: the tenant cannot name another store here, and the caller must be allowed to manage this tenant's integrations. This replaces the anonymous /api/shopify/oauth/authorize, which took any tenant slug and any shop from anyone.](/api/edge/shopify-connection-reauthorize.md): The consent URL for the store this tenant already holds, for a - [Current inbound texting settings for a tenant.](/api/edge/sms-settings-get.md): Current inbound texting settings for a tenant. - [Update inbound texting settings for a tenant. A field you omit keeps its stored value; an empty conversation slug clears it.](/api/edge/sms-settings-update.md): Update inbound texting settings for a tenant. A field you omit keeps - [SmsTemplates_Create](/api/edge/sms-templates-create.md): SmsTemplates_Create - [SmsTemplates_Delete](/api/edge/sms-templates-delete.md): SmsTemplates_Delete - [SmsTemplates_Get](/api/edge/sms-templates-get.md): SmsTemplates_Get - [SmsTemplates_List](/api/edge/sms-templates-list.md): SmsTemplates_List - [Render a template with sample variables.](/api/edge/sms-templates-preview.md): Render a template with sample variables. - [SmsTemplates_Update](/api/edge/sms-templates-update.md): SmsTemplates_Update - [List connections visible to this tenant: its own linked connection plus unclaimed connections available for linking. Response item shape matches the admin listing so the portal component is URL-swap compatible.](/api/edge/square-connection-get-connections.md): List connections visible to this tenant: its own linked connection plus - [Get locations for a merchant connection this tenant may see.](/api/edge/square-connection-get-locations.md): Get locations for a merchant connection this tenant may see. - [Link an unclaimed Square connection to this tenant.](/api/edge/square-connection-link.md): Link an unclaimed Square connection to this tenant. - [Unlink this tenant's Square connection.](/api/edge/square-connection-unlink.md): Unlink this tenant's Square connection. - [TenantBlueprints_ApplyGenerationRun](/api/edge/tenant-blueprints-apply-generation-run.md): TenantBlueprints_ApplyGenerationRun - [Delete a never-published draft blueprint (#354). Published blueprints return 409.](/api/edge/tenant-blueprints-delete-draft.md): Delete a never-published draft blueprint (#354). Published blueprints return 409. - [TenantBlueprints_GenerateRecipe](/api/edge/tenant-blueprints-generate-recipe.md): TenantBlueprints_GenerateRecipe - [TenantBlueprints_Get](/api/edge/tenant-blueprints-get.md): TenantBlueprints_Get - [TenantBlueprints_GetGenerationRun](/api/edge/tenant-blueprints-get-generation-run.md): TenantBlueprints_GetGenerationRun - [TenantBlueprints_List](/api/edge/tenant-blueprints-list.md): TenantBlueprints_List - [TenantBlueprints_ListGenerationRuns](/api/edge/tenant-blueprints-list-generation-runs.md): TenantBlueprints_ListGenerationRuns - [TenantBlueprints_PreviewCompose](/api/edge/tenant-blueprints-preview-compose.md): TenantBlueprints_PreviewCompose - [TenantBlueprints_Publish](/api/edge/tenant-blueprints-publish.md): TenantBlueprints_Publish - [TenantBlueprints_Update](/api/edge/tenant-blueprints-update.md): TenantBlueprints_Update - [TenantBlueprints_Versions](/api/edge/tenant-blueprints-versions.md): TenantBlueprints_Versions - [P2-A: what changed between two of the tenant's versions of this skill, field by field with the old and new values. `to` is a version number or `draft`.](/api/edge/tenant-capability-flows-diff-versions.md): P2-A: what changed between two of the tenant's versions of this skill, - [#1046 Phase 2: constrained node-graph generation. Writes nothing to CapabilityFlows — a success returns the proposal for the editor to load as unsaved dirty state; a failed run returns 422 with the last attempt and its violations. Publish (with its hard gate) remains the only door to going live.](/api/edge/tenant-capability-flows-generate.md): #1046 Phase 2: constrained node-graph generation. Writes nothing to - [TenantCapabilityFlows_Get](/api/edge/tenant-capability-flows-get.md): TenantCapabilityFlows_Get - [TenantCapabilityFlows_List](/api/edge/tenant-capability-flows-list.md): TenantCapabilityFlows_List - [#1046 Phase 2: the composed node universe of the tenant blueprint referencing this capability. The server-side twin of the portal's composedNodeIds util, which reconstructs from summaries and misses non-entry nodes in sibling capabilities.](/api/edge/tenant-capability-flows-node-scope.md): #1046 Phase 2: the composed node universe of the tenant blueprint - [TenantCapabilityFlows_Publish](/api/edge/tenant-capability-flows-publish.md): TenantCapabilityFlows_Publish - [#2433: forget the tenant's own copy of this skill so customers hear the standard version again. Deletes every tenant-scoped row for the capability, published history included, then recomposes. P2-A: the rows are copied to CapabilityFlowSnapshots first, so History can restore them.](/api/edge/tenant-capability-flows-reset.md): #2433: forget the tenant's own copy of this skill so customers hear the - [P2-A: restore a set-aside copy as a draft. Never publishes.](/api/edge/tenant-capability-flows-restore-snapshot.md): P2-A: restore a set-aside copy as a draft. Never publishes. - [P2-A: copy a published version into the draft. Never publishes; the merchant publishes the restored draft like any other edit.](/api/edge/tenant-capability-flows-restore-version.md): P2-A: copy a published version into the draft. Never publishes; the - [P2-A: the copies Reset set aside, newest first.](/api/edge/tenant-capability-flows-snapshots.md): P2-A: the copies Reset set aside, newest first. - [TenantCapabilityFlows_Update](/api/edge/tenant-capability-flows-update.md): TenantCapabilityFlows_Update - [#2433: merge the template's changes since this fork's base version into the tenant draft. Conflicts keep the merchant's value and are named.](/api/edge/tenant-capability-flows-update-from-template.md): #2433: merge the template's changes since this fork's base version into - [TenantCapabilityFlows_Versions](/api/edge/tenant-capability-flows-versions.md): TenantCapabilityFlows_Versions - [Register a new custom email domain with Resend. Returns DNS records to configure.](/api/edge/tenant-domains-add.md): Register a new custom email domain with Resend. Returns DNS records to configure. - [Get a domain's details including DNS records the tenant needs to configure.](/api/edge/tenant-domains-get.md): Get a domain's details including DNS records the tenant needs to configure. - [List all custom email domains for this tenant.](/api/edge/tenant-domains-list.md): List all custom email domains for this tenant. - [Remove a custom domain.](/api/edge/tenant-domains-remove.md): Remove a custom domain. - [Trigger domain verification after DNS records have been configured.](/api/edge/tenant-domains-verify.md): Trigger domain verification after DNS records have been configured. - [TenantFaqCrawl_AddConsent](/api/edge/tenant-faq-crawl-add-consent.md): TenantFaqCrawl_AddConsent - [Approve, reject, reopen or delete a selection in one call. The review queue is a bulk-select table, so doing this row by row would fire one request, one cache eviction and one corpus refresh per row.](/api/edge/tenant-faq-crawl-bulk-update-entries.md): Approve, reject, reopen or delete a selection in one call. The review - [Queue a crawl and return immediately. This used to run the whole pipeline inline, which meant the merchant stared at a disabled button for minutes and lost every result if the six-minute HttpClient timeout fired. FaqCrawlWorkerService picks the run up; the portal polls GET runs/{id} for the progress bar.](/api/edge/tenant-faq-crawl-crawl-now.md): Queue a crawl and return immediately. This used to run the whole - [Add one FAQ by hand. It lands approved by default: the merchant wrote it, so there is nothing to review. No consent is attached, which is what migration 406 made possible.](/api/edge/tenant-faq-crawl-create-entry.md): Add one FAQ by hand. It lands approved by default: the merchant wrote - [TenantFaqCrawl_DeleteEntry](/api/edge/tenant-faq-crawl-delete-entry.md): TenantFaqCrawl_DeleteEntry - [TenantFaqCrawl_GetConsent](/api/edge/tenant-faq-crawl-get-consent.md): TenantFaqCrawl_GetConsent - [TenantFaqCrawl_GetRun](/api/edge/tenant-faq-crawl-get-run.md): TenantFaqCrawl_GetRun - [Import a CSV or JSON export. Partial success is the normal outcome and is reported row by row: a file with one bad line should not cost the merchant the other two hundred.](/api/edge/tenant-faq-crawl-import-entries.md): Import a CSV or JSON export. Partial success is the normal outcome and - [TenantFaqCrawl_ListConsents](/api/edge/tenant-faq-crawl-list-consents.md): TenantFaqCrawl_ListConsents - [The review queue. Paged and searchable because a crawl of a real help centre returns hundreds of rows, and scoped by consent because a tenant with two registered domains was previously shown the same tenant-wide list under both.](/api/edge/tenant-faq-crawl-list-entries.md): The review queue. Paged and searchable because a crawl of a real help - [TenantFaqCrawl_ListRuns](/api/edge/tenant-faq-crawl-list-runs.md): TenantFaqCrawl_ListRuns - [TenantFaqCrawl_RevokeConsent](/api/edge/tenant-faq-crawl-revoke-consent.md): TenantFaqCrawl_RevokeConsent - [TenantFaqCrawl_UpdateEntry](/api/edge/tenant-faq-crawl-update-entry.md): TenantFaqCrawl_UpdateEntry - [TenantLiveStatus_Get](/api/edge/tenant-live-status-get.md): TenantLiveStatus_Get - [Submit a phone number provisioning request for this tenant. Idempotent on the `Idempotency-Key` header: a replay of the same key in this environment returns the original row and does not notify again. Missing header is accepted; Edge mints a key the way the demo workspace request path does. Unique index `ux_PhoneNumberRequests_IdempotencyKey_Env` is the race backstop.](/api/edge/tenant-phone-create-request.md): Submit a phone number provisioning request for this tenant. - [Get the most recent pending or provisioning phone number request for this tenant.](/api/edge/tenant-phone-get-current-request.md): Get the most recent pending or provisioning phone number request for this tenant. - [Get paginated SMS message log for this tenant.](/api/edge/tenant-phone-get-messages.md): Get paginated SMS message log for this tenant. - [Get the current phone number status for this tenant. Returns the assigned Twilio number with provisioning indicators.](/api/edge/tenant-phone-get-phone-number-status.md): Get the current phone number status for this tenant. - [Get SMS statistics for the tenant's phone number over the last N days.](/api/edge/tenant-phone-get-sms-stats.md): Get SMS statistics for the tenant's phone number over the last N days. - [TenantPolicyRules_GetHandoff](/api/edge/tenant-policy-rules-get-handoff.md): TenantPolicyRules_GetHandoff - [TenantPolicyRules_GetTone](/api/edge/tenant-policy-rules-get-tone.md): TenantPolicyRules_GetTone - [TenantPolicyRules_GetVerification](/api/edge/tenant-policy-rules-get-verification.md): TenantPolicyRules_GetVerification - [TenantPolicyRules_PutHandoff](/api/edge/tenant-policy-rules-put-handoff.md): TenantPolicyRules_PutHandoff - [TenantPolicyRules_PutTone](/api/edge/tenant-policy-rules-put-tone.md): TenantPolicyRules_PutTone - [TenantPolicyRules_PutVerification](/api/edge/tenant-policy-rules-put-verification.md): TenantPolicyRules_PutVerification - [TenantShortLinkDomains_Add](/api/edge/tenant-short-link-domains-add.md): TenantShortLinkDomains_Add - [TenantShortLinkDomains_Get](/api/edge/tenant-short-link-domains-get.md): TenantShortLinkDomains_Get - [TenantShortLinkDomains_List](/api/edge/tenant-short-link-domains-list.md): TenantShortLinkDomains_List - [TenantShortLinkDomains_Remove](/api/edge/tenant-short-link-domains-remove.md): TenantShortLinkDomains_Remove - [TenantShortLinkDomains_Verify](/api/edge/tenant-short-link-domains-verify.md): TenantShortLinkDomains_Verify - [TenantSkillChecks_Create](/api/edge/tenant-skill-checks-create.md): TenantSkillChecks_Create - [TenantSkillChecks_Delete](/api/edge/tenant-skill-checks-delete.md): TenantSkillChecks_Delete - [TenantSkillChecks_GetRun](/api/edge/tenant-skill-checks-get-run.md): TenantSkillChecks_GetRun - [TenantSkillChecks_List](/api/edge/tenant-skill-checks-list.md): TenantSkillChecks_List - [TenantSkillChecks_SetActive](/api/edge/tenant-skill-checks-set-active.md): TenantSkillChecks_SetActive - [Queues a run of every active check against the saved draft. 202 with the run; an unfinished run is returned instead of a second one.](/api/edge/tenant-skill-checks-start-run.md): Queues a run of every active check against the saved draft. - [TenantSkillChecks_Update](/api/edge/tenant-skill-checks-update.md): TenantSkillChecks_Update - [TenantWelcomeAudio_Delete](/api/edge/tenant-welcome-audio-delete.md): TenantWelcomeAudio_Delete - [TenantWelcomeAudio_List](/api/edge/tenant-welcome-audio-list.md): TenantWelcomeAudio_List - [TenantWelcomeAudio_Upload](/api/edge/tenant-welcome-audio-upload.md): TenantWelcomeAudio_Upload - [Whether this tenant's hard cases can reach a person (#1823, #1932). Read by the go-live checklist so a merchant finds out from us rather than from a customer who asked for a human and was told to go and find one. The same service answers the blueprint publish gate and the live-status card, so the explanation, the enforcement and the standing dashboard answer cannot drift apart. The payload carries the sentence and the page that fixes it; the portal renders, it does not decide.](/api/edge/tenants-get-escalation-target.md): Whether this tenant's hard cases can reach a person (#1823, #1932). - [Retrieves a specific tenant by its business slug.](/api/edge/tenants-get-tenant.md): Retrieves a specific tenant by its business slug. - [Returns the current backfill status for every language the tenant has recently triggered a backfill for. Empty list when no backfill has run in the last 24 hours.](/api/edge/tenants-get-translation-backfill-status.md): Returns the current backfill status for every language the tenant has - [Updates only the tenant's language list, so the conversation editor can register a language the moment an author adds one to a node (#1030). Exactly one entry must be primary. Newly added non-primary languages trigger a translation backfill across the tenant's conversations; progress is available from the translation-backfill-status endpoint.](/api/edge/tenants-update-tenant-languages.md): Updates only the tenant's language list, so the conversation editor can - [Updates the business-profile fields of your own tenant: display name, contact email, assistant name, business hours, escalation policy, phone and forwarding numbers, callback behaviour, and the email idle timeout. Requires the tenants.settings.manage permission.](/api/edge/tenants-update-tenant-profile.md): PATCH semantics: a field you omit keeps its stored value. - [Tenants_UpdateTenantTtsSettings](/api/edge/tenants-update-tenant-tts-settings.md): Tenants_UpdateTenantTtsSettings - [Connect Toast to a tenant. Validates credentials and stores encrypted.](/api/edge/toast-connection-connect.md): Connect Toast to a tenant. Validates credentials and stores encrypted. - [Disconnect Toast from a tenant.](/api/edge/toast-connection-disconnect.md): Disconnect Toast from a tenant. - [Get the current Toast connection for a tenant.](/api/edge/toast-connection-get-connection.md): Get the current Toast connection for a tenant. - [Test the Toast connection by calling the Restaurants API.](/api/edge/toast-connection-test-connection.md): Test the Toast connection by calling the Restaurants API. - [Connect Treez to a tenant. Validates the signing material against jwt-validation and stores the private key encrypted.](/api/edge/treez-connection-connect.md): Connect Treez to a tenant. Validates the signing material against - [Disconnect Treez from a tenant.](/api/edge/treez-connection-disconnect.md): Disconnect Treez from a tenant. - [Get the current Treez connection for a tenant.](/api/edge/treez-connection-get-connection.md): Get the current Treez connection for a tenant. - [The callback URL the dispensary pastes into the Treez portal's webhook integration screen (Configurations > Config Page > Integration). Null when Pos:Treez:WebhookCallbackBaseUrl is unset or the tenant has no connection — the token itself never rides TreezConnectionInfo.](/api/edge/treez-connection-get-webhook-url.md): The callback URL the dispensary pastes into the Treez portal's webhook - [Test the Treez connection by signing a JWT and calling jwt-validation.](/api/edge/treez-connection-test-connection.md): Test the Treez connection by signing a JWT and calling jwt-validation. - [Returns the resolved default TTS voice configuration for a tenant. Used by the portal VoicePicker to show the inherited sector voice when no workspace voice is set.](/api/edge/tts-get-default-voice.md): Returns the resolved default TTS voice configuration for a tenant. - [Synthesizes speech for the given text using the tenant's configured TTS voice and settings. Language overrides are applied when available.](/api/edge/tts-synthesize.md): Synthesizes speech for the given text using the tenant's configured TTS voice and settings. - [TtsVoices_GetPreview](/api/edge/tts-voices-get-preview.md): TtsVoices_GetPreview - [TtsVoices_GetVoices](/api/edge/tts-voices-get-voices.md): TtsVoices_GetVoices - [ZammadConnection_Connect](/api/edge/zammad-connection-connect.md): ZammadConnection_Connect - [ZammadConnection_Disconnect](/api/edge/zammad-connection-disconnect.md): ZammadConnection_Disconnect - [ZammadConnection_GetConnection](/api/edge/zammad-connection-get-connection.md): ZammadConnection_GetConnection - [ZammadConnection_TestConnection](/api/edge/zammad-connection-test-connection.md): ZammadConnection_TestConnection - [Connect Zendesk to a tenant. Encrypts and stores credentials, then registers the event-subscription webhook.](/api/edge/zendesk-connection-connect.md): Connect Zendesk to a tenant. Encrypts and stores credentials, then - [Disconnect Zendesk from a tenant. Tears down the registered webhook first (best-effort, while credentials are still readable).](/api/edge/zendesk-connection-disconnect.md): Disconnect Zendesk from a tenant. Tears down the registered webhook - [Get the current Zendesk connection for a tenant.](/api/edge/zendesk-connection-get-connection.md): Get the current Zendesk connection for a tenant. - [List the tenant's Zendesk custom ticket fields (removable + active), so the portal can offer fact-key → field mappings without the merchant hand-copying field ids out of the Zendesk admin UI.](/api/edge/zendesk-connection-list-ticket-fields.md): List the tenant's Zendesk custom ticket fields (removable + active), - [Test the Zendesk connection by calling the authenticated-user endpoint.](/api/edge/zendesk-connection-test-connection.md): Test the Zendesk connection by calling the authenticated-user endpoint. - [Update the per-tenant Zendesk escalation settings (#1448): fact-key → custom-field mappings, default ticket priority, and default tags.](/api/edge/zendesk-connection-update-settings.md): Update the per-tenant Zendesk escalation settings (#1448): fact-key → - [ZohoDeskConnection_Disconnect](/api/edge/zoho-desk-connection-disconnect.md): ZohoDeskConnection_Disconnect - [The tenant's connection, or { configured: false }. 'available' says whether this environment can connect Zoho Desk at all.](/api/edge/zoho-desk-connection-get-connection.md): The tenant's connection, or { configured: false }. 'available' says - [ZohoDeskConnection_ListDepartments](/api/edge/zoho-desk-connection-list-departments.md): ZohoDeskConnection_ListDepartments - [ZohoDeskConnection_ListOrganizations](/api/edge/zoho-desk-connection-list-organizations.md): ZohoDeskConnection_ListOrganizations - [ZohoDeskConnection_SelectOrganization](/api/edge/zoho-desk-connection-select-organization.md): ZohoDeskConnection_SelectOrganization - [ZohoDeskConnection_TestConnection](/api/edge/zoho-desk-connection-test-connection.md): ZohoDeskConnection_TestConnection - [ZohoDeskConnection_UpdateSettings](/api/edge/zoho-desk-connection-update-settings.md): ZohoDeskConnection_UpdateSettings ## changelog 2026-10-07 - [Changelog](/changelog.md): 2026-10-07 ## getting-started ### authentication The Edge API accepts two kinds of credentials. Programmatic integrations use a tenant API key. Browser sessions and user-facing tools use a JWT issued by the Auth API. - [Authentication](/getting-started/authentication.md): The Edge API accepts two kinds of credentials. Programmatic integrations use a tenant API key. Browser sessions and user-facing tools use a JWT issued by the Auth API. ### channels A Merrows agent runs the same conversation definition across four channels. The engine adapts prompts and available actions per channel, and conversation authors can override behavior for a specific channel in the designer. - [Channels](/getting-started/channels.md): A Merrows agent runs the same conversation definition across four channels. The engine adapts prompts and available actions per channel, and conversation authors can override behavior for a specific channel in the designer. ### errors The APIs use conventional HTTP status codes. Error bodies are JSON; the shape varies by endpoint but always includes a human-readable message. - [Errors and rate limits](/getting-started/errors.md): The APIs use conventional HTTP status codes. Error bodies are JSON; the shape varies by endpoint but always includes a human-readable message. ### first-request This walkthrough lists your tenant's conversations. You need your tenant slug (visible in the portal URL) and an API key (how to create one). - [Your first request](/getting-started/first-request.md): This walkthrough lists your tenant's conversations. You need your tenant slug (visible in the portal URL) and an API key (how to create one).