Connections — ERP, CRM & email
Give CoPilot a named door into your business systems, so chat can look up items, check stock, create records or send a report by email.
What a connection is
A connection is a base URL plus a credential, saved under a name like ERP. Once it exists, anyone in your organization can use it from chat in any CAD system:
The credential is encrypted at rest and the call is executed on the server — the secret never reaches a user's PC and is never shown again after saving.
Setting one up
An organization admin opens Org portal → Connections (sign in), picks a provider from Start from an example, replaces the <placeholders> with the company's values, and pastes the secret. The config is a small JSON object:
baseUrl— where the API lives; chat requests are relative to it.authKind— how the secret is presented:bearer(Authorization: Bearer),apiKeyHeader(a custom header, name inheaderName),basic(username inbasicUser+ the secret as password), oroauthClientCredentials(the secret is an OAuth client secret; the server exchanges it for a token attokenUrlusingclientIdand optionalscope).
ERP examples
Microsoft Dynamics 365 Business Central
Register an app in Microsoft Entra ID with a client secret, grant it the Business Central API permission (Application type, admin-consented), then register that app inside Business Central admin and assign its permission sets.
{
"baseUrl": "https://api.businesscentral.dynamics.com/v2.0/<tenant-id>/Production/api/v2.0",
"authKind": "oauthClientCredentials",
"tokenUrl": "https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token",
"clientId": "<entra-app-client-id>",
"scope": "https://api.businesscentral.dynamics.com/.default"
}
Secret: the Entra app's client secret. First test from chat: “call the ERP connection: GET companies”.
SAP S/4HANA Cloud
Create a Communication User and a Communication Arrangement for the API you need (for example SAP_COM_0008 for Business Partner).
{
"baseUrl": "https://<host>-api.s4hana.cloud.sap/sap/opu/odata/sap",
"authKind": "basic",
"basicUser": "<communication-user>"
}
Secret: the communication user's password. Test: GET API_BUSINESS_PARTNER/A_BusinessPartner?$top=5&$format=json.
ERPNext / Frappe
Generate an API key and secret on the user's page (Settings → My Settings → API Access).
{
"baseUrl": "https://<your-site>/api/resource",
"authKind": "apiKeyHeader",
"headerName": "Authorization"
}
Secret: the literal text token <api-key>:<api-secret> — including the word “token”. Test: GET Item?limit_page_length=5.
CRM examples
Salesforce
Create a Connected App with OAuth enabled, turn on the Client Credentials flow, and assign a run-as integration user on the app's policies page.
{
"baseUrl": "https://<my-domain>.my.salesforce.com/services/data/v61.0",
"authKind": "oauthClientCredentials",
"tokenUrl": "https://<my-domain>.my.salesforce.com/services/oauth2/token",
"clientId": "<connected-app-consumer-key>"
}
Secret: the connected app's consumer secret. Test: GET query?q=SELECT+Name+FROM+Account+LIMIT+5.
HubSpot
Create a private app (Settings → Integrations → Private Apps) with the CRM scopes you need.
{ "baseUrl": "https://api.hubapi.com", "authKind": "bearer" }
Secret: the private app access token (pat-…). Test: GET crm/v3/objects/companies?limit=5.
Email examples
For email connections, add a "sender" key with the from-address — chat then sends mail without asking who it is from, and can attach local files (Word reports, screenshots, CSV exports) to the message:
Microsoft 365 (Graph)
Register an Entra app with the Mail.Send application permission, admin-consented.
{
"baseUrl": "https://graph.microsoft.com/v1.0",
"authKind": "oauthClientCredentials",
"tokenUrl": "https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token",
"clientId": "<entra-app-client-id>",
"scope": "https://graph.microsoft.com/.default",
"sender": "<sender-address>"
}
Secret: the Entra app's client secret. The sender must be an Exchange Online mailbox in the same tenant.
SendGrid
Create an API key with Mail Send permission and verify your sender domain first.
{ "baseUrl": "https://api.sendgrid.com/v3", "authKind": "bearer", "sender": "<verified-sender>" }
Secret: the SG.… API key. Sending is a POST mail/send.
Postmark
{
"baseUrl": "https://api.postmarkapp.com",
"authKind": "apiKeyHeader",
"headerName": "X-Postmark-Server-Token",
"sender": "<verified-sender>"
}
Secret: the server API token; the from-address must be a verified sender signature. Sending is a POST email.
Any other REST API
The Generic REST template covers anything that authenticates with a static key or token — internal services, PLM systems, ticketing tools. If the API speaks JSON over HTTPS with bearer, basic, header-key or client-credentials auth, it can be a connection.
Good to know
- Test a new connection from chat right away — ask CoPilot to make a simple GET and quote the response. A wrong base URL or expired secret shows up as the API's own error message.
- Connection names are what users say in chat — keep them obvious: ERP, CRM, Email.
- Disable a connection instead of deleting it to take it offline without losing the setup.
- Connections are available on Trial, Pro, Team and Dedicated plans.