Skip to content

Workspace connections

Sales tools, automation & AI assistants

Manage native connections and scoped machine access in Integrations. Connecting a provider requires its registered OAuth application, credentials and account permissions.

Native provider setup

Supported OAuth adapters: HubSpot, Salesforce, Microsoft Dynamics, Pipedrive, Zoho CRM, Gong and Slack. Configure the server variables INTEGRATION_PROVIDER_CLIENT_ID and INTEGRATION_PROVIDER_CLIENT_SECRET, replacing PROVIDER with the uppercase provider identifier. The shared INTEGRATION_SECRET_KEY must be 64 hexadecimal characters; tokens are encrypted with AES-256-GCM.

Register the callback https://your-app-domain/api/integrations/oauth/PROVIDER/callback with the provider, using its lowercase identifier. Set NEXT_PUBLIC_SITE_URL to the canonical application origin. Dynamics also needs the organization’s Dataverse environment URL. Choose the matching Zoho account region before connecting. Providers may require application review before customers outside the developer account can authorize access.

Authorization uses a short-lived, single-use state bound to the administrator and workspace. Tokens are never returned to the browser. Refresh rotation is leased to avoid parallel use of refresh tokens. Removing the connection owner’s administrator access stops provider access and new automation attempts.

Import and write back

Browse deals, contacts and products in the connected CRM. Select an optional contact and up to five priced products, choose a fallback currency when the CRM omits it, then create a proposal draft from an opportunity, or link an existing proposal to its deal. Review imported text, currency and investment before publishing. The Gong connection lists calls and retrieves selected transcripts for use in a proposal brief.

For writeback, create dedicated text fields in your CRM and enter their API names in the connection’s mapping settings. The integration writes the proposal status and published link only to those mapped fields. It never automatically changes a sales stage. Pipedrive expects custom-field API keys. Salesforce and Dynamics field names must match their API schema.

Event automations

Create a rule for a proposal lifecycle, view, stalled-signing or mention event. Choose a connected CRM for field writeback or Slack for a channel message. Creating a Slack rule explicitly enables future messages in that channel. Add the bot to private channels before using their IDs.

Rules enqueue durable jobs in the same transaction as their event. Jobs use leases, bounded retries and event identifiers; the dashboard shows delivery results and allows failed jobs to be retried. Delivery is at least once, so an interrupted external request can cause a repeated notification. CRM updates assign the same field values on retry. A paused rule, revoked connection or removed administrator membership cancels unclaimed work.

Schedule authenticated requests to /api/cron/automation-delivery and /api/cron/integration-delivery frequently enough for your notification needs. Use Authorization: Bearer CRON_SECRET. No provider sends occur until a configured connection, enabled rule and matching event exist.

Expanded REST API

  • GET /api/v1/templates and GET /api/v1/blocks: require templates:read. Page with offset, limit and returned nextOffset.
  • POST /api/v1/proposals: requires proposals:create. Supports a built-in library_template_id, saved template_id with answers, or a document snapshot. Append compatible saved_block_ids. An idempotency key is required.
  • POST /api/v1/proposals/:id/publish: requires proposals:publish and an integer expected_revision. A changed revision returns 409. Publication creates a link but does not send it.
  • GET /api/v1/proposals/:id/analytics: requires analytics:read. Returns aggregate engagement from the latest 2,000 events and an explicit truncation flag.

Proposal permissions apply to the key owner. Workspace membership alone does not grant access to restricted proposals. Read the API authentication and webhook signing reference.

MCP client connection

Connect an MCP client that supports a custom Authorization header to /api/mcp. Supply a workspace API key with only the scopes the client needs. This endpoint implements stateless Streamable HTTP with JSON responses for protocol 2025-11-25; it does not provide OAuth discovery, server-initiated SSE or resumable sessions.

URL: https://your-app-domain/api/mcp
Authorization: Bearer ln_live_YOUR_SECRET
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2025-11-25

Tools discover templates and saved sections, list/read proposals, create drafts, retrieve analytics and publish a reviewed revision. Discovery only lists tools permitted by the key. Publishing requires a separate publish scope; review and approve the proposal in the client before invoking that tool. Creation retries must preserve the same request_key and inputs.

Bulk drafts

Upload a CSV in Integrations, review the preview, then create up to 200 proposals in groups of ten. Use name, client_name and either template_id or library_template_id. Guided answers use columns such as answer.project.goal. Optional row_key values must be unique.

Every row has a durable creation identity. Retry remaining rows within the same batch after an interrupted request; successful rows are not recreated. Batch identifiers, but not uploaded client data, are retained in the browser’s session storage. Nothing is published or emailed by a bulk import.

Custom domains

Configure a dedicated proposal hostname in Domain settings. The operator supplies CUSTOM_DOMAIN_VERCEL_TOKEN, CUSTOM_DOMAIN_VERCEL_PROJECT_ID, and optionally CUSTOM_DOMAIN_VERCEL_TEAM_ID. Add the displayed ownership TXT record, verify, then add the hosting records returned by Vercel.

Activation requires ownership, provider verification, correct routing and a real HTTPS response from this application. Set optional APP_PRIMARY_HOSTS to a comma-separated list of any other application hostnames, such as the www alias, that should also serve sign-in and dashboards. Custom hosts serve only their workspace’s proposal links; authentication and dashboards stay on the canonical domain. Schedule /api/cron/domain-verification regularly to refresh checks; ownership expires after seven days without successful reverification, and newly generated links fall back to the canonical domain. Keep the ownership TXT record in DNS.