Administrator Guide

REST API

Call YouEx.ai CRM, research, engagement, and email from your own application.

REST API

Last updated: 3 November 2026

Use this API from your own application. It performs the same CRM operations as MCP, except the three assistant widgets. Those widgets are not REST resources.

The current contract for this API, Zapier, Salesforce API v2, and MCP is the API reference (PDF).

YouEx.ai does not publish a general-purpose API key. A caller authenticates as one product. In-app session APIs are internal and are not part of this contract.

The REST API is included on Professional and Enterprise (restApi).

Base URL

https://engage.youex.ai/api/v1

Paths below are relative to that base.

Which API to use

NeedAPIPlan
CRM create, read, update, delete, and webhooks from ZapierZapier APIProfessional or Enterprise (zapierIntegration)
CRM, email, research, and engagement from your own applicationREST APIProfessional or Enterprise (restApi)
CRM, research, enrich, and agents from the Salesforce packageSalesforce API v2Professional or Enterprise (salesforcePackage)
Lead sync from SalesforceSalesforce API v2 bulk upsertProfessional or Enterprise (salesforcePackage)
An assistant such as Claude or ChatGPT operating the CRMMCPEvery plan (mcpIntegration)

A token never grants access to every workspace the user belongs to.

Authentication

Send:

Authorization: Bearer <access_token>
Content-Type: application/json
X-YouEx-Workspace-Id: <workspace-id>

The token is an Auth0 access token from Authorization Code with PKCE. The audience is https://engage.youex.ai/api/v1.

These tokens are rejected:

  • a website, MCP, Zapier, or Salesforce token
  • a client-credentials token
  • a cookie session

Owners and Admins of a workspace with API access see the client ID, authorize URL, and token URL under Workspace Settings → Integrations. The authorize request uses scope=openid email profile crm:read crm:write, plus a PKCE code_challenge. YouEx registers the application's redirect URL.

crm:write does not include crm:read. Request both when the application does both.

ScopeAllows
crm:readList, get, find, summary, engagement, history, and research read
crm:writeCreate, update, delete, send, schedule, research refresh, and bulk delete

Workspace

Send X-YouEx-Workspace-Id for a workspace the user belongs to.

  • If the header is omitted and the user has exactly one workspace with API access, that workspace is used.
  • If the user has more than one, the API returns workspace_selection_required and the eligible workspace ids and names.

Profile → Integration Workspace is not used. That setting is for MCP and Zapier.

{
  "error": "workspace_selection_required",
  "error_description": "Send the X-YouEx-Workspace-Id header. This user belongs to more than one workspace with API access.",
  "workspaces": [{ "id": "ws_123", "name": "Acme" }]
}

Limits and errors

300 authenticated requests per user per 15 minutes. Over the limit, the API returns 429.

{ "error": "unauthorized", "error_description": "Missing or invalid Authorization header" }
{ "error": "invalid_token", "error_description": "Token validation failed" }
{ "error": "insufficient_scope", "error_description": "Missing required scopes: crm:read" }
StatusMeaning
200Read, update, or delete succeeded
201Create succeeded when the operation reports that
400Invalid payload, or the operation rejected the request
401Missing or invalid token
402Subscription is inactive
403Missing scope, the user is not a member, or the REST API is not enabled
404Record was not found in this workspace
409More than one eligible workspace and the header was omitted
429Rate limit exceeded
503This environment is not configured for the API

Conventions

  • Ids travel in the path. Filters travel in the query. Creates and updates are JSON bodies.
  • A path id overrides the same field in the body.
  • List filters match the MCP operation for that path, including cursor, limit, searchTerm, status, tag, and timeframe where that operation publishes them.
  • When a list has more rows, send the returned cursor back as cursor.
  • A successful call returns that operation's JSON object.
  • GET of one lead, contact, company, or opportunity returns { "lead": {} } (or contact, company, opportunity).
  • Created leads are stored with source MCP Tool, because these routes use the same operations as MCP.
  • Engagement reads omit IP address, precise location, and raw user agent.
  • Research text is omitted from list and search results.
  • Opportunities have no research report.

Shared CRM values

These values are the same on every surface that writes CRM records.

FieldValues
Lead status on createNew, VIP, Hot, Warm, Cold, Opportunity. Reads can also return Converted and Lost.
Contact statusActive, Inactive, Do Not Contact
Company typeCustomer, Competitor, Vendor, Partner, Other
Company statusActive, Inactive, Prospect, Former
Opportunity stageProspecting, Qualification, Needs Analysis, Proposal, Negotiation, Closed Won, Closed Lost

companyId, contactId, opportunityId, and sourceLeadId must already belong to the same workspace. A reference to another workspace is rejected.

Summary

MethodPathScope
GET/summarycrm:read

Leads

MethodPathScopePurpose
GET/leadscrm:readList leads
POST/leadscrm:writeCreate a lead
GET/leads/findcrm:readFind leads
POST/leads/bulk-deletecrm:writeDelete leads by exact email
GET/leads/:idcrm:readRead one lead
PATCH/leads/:idcrm:writeUpdate a lead
DELETE/leads/:idcrm:writeDelete a lead
GET/leads/:id/engagementcrm:readPage views, clicks, and chats
GET/leads/:id/page-viewscrm:readPage-view events
GET/leads/:id/conversationscrm:readChat transcripts
GET/leads/:id/historycrm:readLifecycle history
GET/leads/:id/researchcrm:readStored research report
POST/leads/:id/researchcrm:writeStart a research run

Lead create fields: name, email, secondaryEmail, phone, company, companyWebsite, linkedinUrl, title, pronouns, status, notes.

POST /leads/bulk-delete body:

{ "emails": ["avery@example.com"] }

POST /leads/:id/research starts a new research run.

Contacts

MethodPathScopePurpose
GET/contactscrm:readList contacts
POST/contactscrm:writeCreate a contact
GET/contacts/findcrm:readFind contacts
GET/contacts/:idcrm:readRead one contact
PATCH/contacts/:idcrm:writeUpdate a contact
DELETE/contacts/:idcrm:writeDelete a contact
GET/contacts/:id/researchcrm:readStored research report
POST/contacts/:id/researchcrm:writeStart a research run

Companies

MethodPathScopePurpose
GET/companiescrm:readList companies
POST/companiescrm:writeCreate a company
GET/companies/findcrm:readFind companies
GET/companies/:idcrm:readRead one company
PATCH/companies/:idcrm:writeUpdate a company
DELETE/companies/:idcrm:writeDelete a company
GET/companies/:id/researchcrm:readStored research report
POST/companies/:id/researchcrm:writeStart a research run

Opportunities

MethodPathScopePurpose
GET/opportunitiescrm:readList opportunities
POST/opportunitiescrm:writeCreate an opportunity
GET/opportunities/findcrm:readFind opportunities
GET/opportunities/:idcrm:readRead one opportunity
PATCH/opportunities/:idcrm:writeUpdate an opportunity
DELETE/opportunities/:idcrm:writeDelete an opportunity

Opportunities have no research report.

Actions and reminders

Action types are meeting, text, email, call, and other. An action is either logged or scheduled.

GET /crm-actions takes objectType and objectId.

MethodPathScopePurpose
GET/crm-actionscrm:readList actions for a record
POST/crm-actionscrm:writeLog or schedule an action
PATCH/crm-actions/:idcrm:writeUpdate an action
DELETE/crm-actions/:idcrm:writeDelete an action
GET/crm-reminderscrm:readList CRM reminders
GET/reminderscrm:readList reminders
POST/reminderscrm:writeCreate a reminder
GET/reminders/:idcrm:readRead one reminder
PATCH/reminders/:idcrm:writeUpdate a reminder
DELETE/reminders/:idcrm:writeDelete a reminder

Email drafts

MethodPathScopePurpose
GET/leads/:leadId/email-draftscrm:readList lead drafts
POST/leads/:leadId/email-draftscrm:writeCreate a lead draft
GET/leads/:leadId/email-drafts/:draftIdcrm:readRead a lead draft
PATCH/leads/:leadId/email-drafts/:draftIdcrm:writeUpdate a lead draft
DELETE/leads/:leadId/email-drafts/:draftIdcrm:writeDelete a lead draft
POST/leads/:leadId/email-drafts/:draftId/sendcrm:writeSend a lead draft
GET/contacts/:contactId/email-draftscrm:readList contact drafts
POST/contacts/:contactId/email-draftscrm:writeCreate a contact draft
GET/contacts/:contactId/email-drafts/:draftIdcrm:readRead a contact draft
PATCH/contacts/:contactId/email-drafts/:draftIdcrm:writeUpdate a contact draft
DELETE/contacts/:contactId/email-drafts/:draftIdcrm:writeDelete a contact draft
POST/contacts/:contactId/email-drafts/:draftId/sendcrm:writeSend a contact draft
POST/email-drafts/:draftId/schedulecrm:writeSchedule a draft

POST /email-drafts/:draftId/schedule body:

{
  "recordType": "lead",
  "recordId": "lead_01",
  "scheduledAt": "2026-11-02T15:00:00.000Z",
  "overwrite": false
}

recordType is lead or contact.

Email topics, lists, and campaigns

MethodPathScopePurpose
GET/email-topicscrm:readList topics
POST/email-topicscrm:writeCreate a topic
GET/email-topics/:idcrm:readRead a topic
PATCH/email-topics/:idcrm:writeUpdate a topic
DELETE/email-topics/:idcrm:writeDelete a topic
GET/email-listscrm:readList email lists
POST/email-listscrm:writeCreate an email list
GET/email-lists/:idcrm:readRead an email list
PATCH/email-lists/:idcrm:writeUpdate an email list
DELETE/email-lists/:idcrm:writeDelete an email list
GET/email-lists/:emailListId/memberscrm:readList members
POST/email-lists/:emailListId/memberscrm:writeAdd members
POST/email-lists/:emailListId/members/from-tagscrm:writeAdd members from tags
POST/email-lists/:emailListId/members/from-date-rangecrm:writeAdd members from a date range
GET/email-lists/:emailListId/members/:leadIdcrm:readRead a list member
DELETE/email-lists/:emailListId/members/:leadIdcrm:writeRemove a list member
GET/email-lists/:emailListId/campaignscrm:readCampaigns on a list
GET/email-list-campaigns/:campaignIdcrm:readRead a campaign
PATCH/email-list-campaigns/:campaignIdcrm:writeUpdate a campaign
DELETE/email-list-campaigns/:campaignIdcrm:writeDelete a campaign
GET/email-list-campaigns/:campaignId/memberscrm:readCampaign members
PATCH/email-list-campaigns/:campaignId/drafts/:draftIdcrm:writeUpdate a campaign draft
DELETE/email-list-campaigns/:campaignId/drafts/:draftIdcrm:writeDelete a campaign draft
Copyright © 2026