SugarCRM
SugarCRM is a CRM. Datafly Signal creates Leads server-side through the Sugar REST API (POST /rest/<version>/Leads) when a visitor submits a lead form or signs up.
Why route SugarCRM through Datafly Signal
- Records come from your server, not the browser. They reach SugarCRM even when a tracker blocker or a failed page unload would have dropped a client-side call, and no form integration or browser tag is needed.
- Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
- One consent decision governs every destination. SugarCRM is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Get your SugarCRM credentials
Create an API user
Create a dedicated Sugar user with create permission on Leads.
Choose a platform name
Pick a platform name that is not base, mobile or portal (for example datafly_signal), so Signal’s session does not log out interactive users.
Configuration
| Field | Required | Description |
|---|---|---|
instance_url | Yes | Base URL of your SugarCRM instance (no trailing slash). For SugarCloud this is https://<name>.sugarondemand.com; for on-site it is your server URL. |
api_version | Yes | Sugar REST API version path segment, e.g. v11_24. Use the latest version supported by your Sugar release; v11 also works as a stable alias. |
client_id | Yes | OAuth2 client_id for the token request. Use a dedicated API client key configured in Admin > OAuth Keys (the default ‘sugar’ client also exists on most instances). |
client_secret | No | OAuth2 client_secret paired with the Client ID. Often blank for the default ‘sugar’ client; set it if your OAuth key defines one. |
username | Yes | Username of a dedicated Sugar user with create/edit permission on the target module(s). Create a service user rather than reusing an admin’s interactive login. |
password | Yes | Password for the API user above. Used with the OAuth2 password grant to mint access tokens. |
platform | Yes | Custom platform identifier for the token request. MUST NOT be base, mobile, or portal — use a unique name (e.g. datafly_signal) to avoid logging out interactive sessions. |
module | Yes | Sugar module records are created in by default, e.g. Leads or Contacts. The blueprint preset overrides this per pipeline if needed. |
Management UI setup
- Go to Integrations in the sidebar and open the Integration Library tab.
- Find SugarCRM under CRM and click Install.
- Choose a preset, enter the fields above and click Install Integration.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/sugarcrm/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "SugarCRM",
"variant": "default",
"config": {
"instance_url": "your_instance_url",
"api_version": "your_api_version",
"client_id": "your_client_id",
"username": "your_username",
"password": "your_password",
"platform": "your_platform",
"module": "your_module"
},
"delivery_mode": "server_side"
}'What Signal sends
An example request, rendered from the default preset for generate_lead:
POST https://acme.sugarondemand.com/rest/v11_27/Leads
{
"account_name": "Acme Ltd",
"email": [
{
"email_address": "neill@example.com",
"primary_address": true
}
],
"first_name": "Neill",
"last_name": "Mcfixture",
"lead_source": "Web Site",
"lead_source_description": "contact-us",
"phone_mobile": "+447700900123",
"primary_address_city": "Bath",
"primary_address_country": "GB",
"primary_address_postalcode": "BA1 1AA",
"primary_address_state": "Somerset",
"title": "Head of Growth",
"website": "https://acme.example"
}| Field | Source |
|---|---|
first_name, last_name | From traits. Sugar requires last_name: an event without one is not sent. |
email | Sugar’s email link-field array: [{email_address, primary_address: true}], trimmed and lower-cased. |
phone_mobile | The phone trait in E.164. |
title, account_name, website | From traits (company for the account name). |
primary_address_* | City, state, postcode and country (upper-cased) from the address trait. |
lead_source, lead_source_description | Web Site, and the form, lead type or event that produced the lead. |
Sugar is your own CRM, so name, email and phone are sent in plain text.
Presets
| Preset | Signal events |
|---|---|
Lead Capture (default) | generate_lead, sign_up |
B2B / SaaS (saas) | generate_lead, demo_requested, sign_up |
Insurance (insurance) | quote_requested, generate_lead |
Automotive (automotive) | test_drive_booked, dealer_contacted, generate_lead |
Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.
Notes and limits
- Not deliverable yet. Sugar’s REST API authenticates with the OAuth 2.0 password grant, which Signal’s OAuth client does not implement yet (issue #1496). The blueprint and settings are ready; no request can be sent until that lands.
- The create call does not de-duplicate, so the presets map one-off lead events.
Consent
Assign the consent category you use for this processing when you install SugarCRM, so an event is delivered only when the visitor has granted it. Signal never writes a cookie-banner choice into SugarCRM’s contact permissions (email[].opt_out): consent to cookies is not consent to be emailed, called or messaged. Record communication opt-in and opt-out in SugarCRM.
Verify it’s working
- Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
- Confirm a 2xx response from SugarCRM.
- Find the record in SugarCRM and check it arrived.
Troubleshooting
| Symptom | Resolution |
|---|---|
unsupported OAuth grant type: password | Expected until #1496 ships. |
401 after #1496 | Wrong username, password, client ID or platform. |