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

FieldRequiredDescription
instance_urlYesBase 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_versionYesSugar 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_idYesOAuth2 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_secretNoOAuth2 client_secret paired with the Client ID. Often blank for the default ‘sugar’ client; set it if your OAuth key defines one.
usernameYesUsername 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.
passwordYesPassword for the API user above. Used with the OAuth2 password grant to mint access tokens.
platformYesCustom 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.
moduleYesSugar module records are created in by default, e.g. Leads or Contacts. The blueprint preset overrides this per pipeline if needed.

Management UI setup

  1. Go to Integrations in the sidebar and open the Integration Library tab.
  2. Find SugarCRM under CRM and click Install.
  3. 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"
}
FieldSource
first_name, last_nameFrom traits. Sugar requires last_name: an event without one is not sent.
emailSugar’s email link-field array: [{email_address, primary_address: true}], trimmed and lower-cased.
phone_mobileThe phone trait in E.164.
title, account_name, websiteFrom traits (company for the account name).
primary_address_*City, state, postcode and country (upper-cased) from the address trait.
lead_source, lead_source_descriptionWeb 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

PresetSignal 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.

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

  1. Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
  2. Confirm a 2xx response from SugarCRM.
  3. Find the record in SugarCRM and check it arrived.

Troubleshooting

SymptomResolution
unsupported OAuth grant type: passwordExpected until #1496 ships.
401 after #1496Wrong username, password, client ID or platform.