Skip to main content
Push enriched Locus intelligence into your CRM, ticketing system, or automation platform. Each integration enriches records with composite scores, safety levels, permit activity, and neighborhood context. All integration endpoints share the same lifecycle:
  1. ConnectPOST with credentials to verify and save the integration.
  2. Check statusGET to see whether the integration is active.
  3. DisconnectDELETE to deactivate.
You can optionally include an enrich object in the POST body to trigger immediate enrichment of a specific record.

POST /api/v1/integrations/salesforce

Requires Bearer token.
Push enriched location data to Salesforce CRM. Request body
{
  "instance_url": "https://yourorg.my.salesforce.com",
  "access_token": "00D...",
  "refresh_token": "5Aep...",
  "object_type": "Lead",
  "enrich": {
    "record_id": "00Q5f00000XXXXX",
    "address": "123 Market St, San Francisco, CA"
  }
}
FieldTypeRequiredDescription
instance_urlstringSalesforce instance URL (*.salesforce.com or *.force.com).
access_tokenstringOAuth access token.
refresh_tokenstringOAuth refresh token.
object_typestringTarget object: Lead, Account, Opportunity, or Custom.
enrichobjectOptional. Enrich a record immediately on setup.
Enrichment fields pushed to Salesforce:
Salesforce fieldDescription
Axiom_Score__cComposite score (0–100).
Axiom_Safety_Level__cSafety assessment level.
Axiom_Permit_Momentum__cPermit activity momentum indicator.
Axiom_Fragility_Score__cSupply chain fragility score.
Axiom_Profile__cScoring profile used.
Axiom_Permits_12m__cPermit count over the last 12 months.
Axiom_Neighborhood__cResolved neighborhood name.
Axiom_Enriched_At__cTimestamp of last enrichment.
Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/salesforce" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "instance_url": "https://yourorg.my.salesforce.com",
    "access_token": "00D...",
    "refresh_token": "5Aep...",
    "object_type": "Lead"
  }'

POST /api/v1/integrations/hubspot

Requires Bearer token.
Push enriched data to HubSpot CRM contacts, companies, or deals. Request body
{
  "access_token": "pat-na1-...",
  "object_type": "contacts",
  "enrich": {
    "record_id": "123456",
    "address": "456 Broadway, New York, NY"
  }
}
FieldTypeRequiredDescription
access_tokenstringOAuth token or private app token.
refresh_tokenstringRequired for OAuth flows. Omit for private app tokens.
object_typestringTarget object: contacts, companies, or deals.
enrichobjectOptional. Enrich a record immediately. Include record_id and address or company.
Enrichment properties pushed to HubSpot: axiom_score, axiom_safety, axiom_permit_activity, axiom_fragility, axiom_profile, axiom_permits_12m, axiom_neighborhood, axiom_enriched_at Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/hubspot" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "access_token": "pat-na1-abc123",
    "object_type": "companies"
  }'

POST /api/v1/integrations/dynamics

Requires Bearer token.
Push enriched data to Microsoft Dynamics 365 entities via the Dataverse Web API. Request body
{
  "tenant_id": "your-azure-tenant-id",
  "client_id": "your-app-registration-id",
  "client_secret": "your-client-secret",
  "resource_url": "https://yourorg.crm.dynamics.com",
  "entity_type": "lead"
}
FieldTypeRequiredDescription
tenant_idstringAzure AD tenant ID.
client_idstringApp registration client ID.
client_secretstringApp registration client secret.
resource_urlstringDynamics instance URL (must end in .dynamics.com or .crm.dynamics.com).
entity_typestringDynamics entity logical name (e.g. lead, account, opportunity).
enrichobjectOptional. Enrich a record immediately. Include record_id and address or company.
Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/dynamics" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "tenant_id": "abc-123",
    "client_id": "def-456",
    "client_secret": "secret",
    "resource_url": "https://yourorg.crm.dynamics.com",
    "entity_type": "lead"
  }'

POST /api/v1/integrations/zoho

Requires Bearer token.
Push enriched data to Zoho CRM modules. Request body
{
  "access_token": "1000.abc123...",
  "refresh_token": "1000.def456...",
  "module": "Leads",
  "enrich": {
    "record_id": "5234876000001234567",
    "address": "789 Pine St, Denver, CO"
  }
}
FieldTypeRequiredDescription
access_tokenstringZoho OAuth access token.
refresh_tokenstringZoho OAuth refresh token.
api_domainstringAPI domain. Defaults to https://www.zohoapis.com. Also accepts .zoho.com or .zohoapis.eu.
modulestringTarget module: Leads, Accounts, Contacts, or Deals. Defaults to Leads.
enrichobjectOptional. Enrich a record immediately. Include record_id and address or company.
Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/zoho" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "access_token": "1000.abc123...",
    "refresh_token": "1000.def456...",
    "module": "Accounts"
  }'

POST /api/v1/integrations/zendesk

Requires Bearer token.
Enrich Zendesk tickets with location intelligence. Adds an internal note with scoring data and sets custom ticket fields. Request body
{
  "subdomain": "mycompany",
  "api_token": "your-zendesk-api-token",
  "email": "admin@mycompany.com",
  "enrich": {
    "ticket_id": "12345",
    "address": "100 Oak Ave, Austin, TX"
  }
}
FieldTypeRequiredDescription
subdomainstringYour Zendesk subdomain (e.g. mycompany for mycompany.zendesk.com).
api_tokenstringZendesk API token.
emailstringAdmin email address for authentication.
enrichobjectOptional. Enrich a ticket immediately. Include ticket_id and address or facility.
Enrichment behavior:
  • Adds a private internal note on the ticket with composite score, safety level, and neighborhood data.
  • Sets custom ticket fields: axiom_score and axiom_safety.
Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/zendesk" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "subdomain": "mycompany",
    "api_token": "abc123",
    "email": "admin@mycompany.com"
  }'

POST /api/v1/integrations/zapier

Requires Bearer token.
Forward Locus events to any webhook URL. Works with Zapier, Make, n8n, or any platform that accepts webhooks. Request body
{
  "webhook_url": "https://hooks.zapier.com/hooks/catch/123/abc/",
  "trigger_events": ["score_change", "permit_surge", "fragility_spike"],
  "name": "My Zapier Zap"
}
FieldTypeRequiredDescription
webhook_urlstringHTTPS webhook URL to receive events.
trigger_eventsarrayEvent types to forward. Defaults to all.
formatstringPayload format: json (default) or form (form-urlencoded).
namestringFriendly name. Defaults to Zapier Webhook.
enrichobjectOptional. Push an enrichment payload immediately. Include address, company, or facility.
Available trigger events:
EventDescription
hotspot_detectedA new permit or activity hotspot appears.
fragility_spikeSupply chain fragility score spikes for a company.
rule_changeZoning or regulatory rule change detected.
permit_surgePermit filing rate exceeds normal levels.
score_changeComposite score changes significantly.
shortage_alertDrug shortage or supply disruption detected.
Example
curl -X POST "https://axiomlocus.io/api/v1/integrations/zapier" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{
    "webhook_url": "https://hooks.zapier.com/hooks/catch/123/abc/",
    "trigger_events": ["permit_surge", "score_change"]
  }'

Managing integrations

All integration endpoints support GET and DELETE methods for status checks and deactivation.

Check status

curl "https://axiomlocus.io/api/v1/integrations/hubspot" \
  -H "Authorization: Bearer al_your_key_here"
{
  "configured": true,
  "object_type": "contacts",
  "active": true,
  "last_sync_at": "2026-04-19T10:30:00Z"
}

Deactivate

curl -X DELETE "https://axiomlocus.io/api/v1/integrations/hubspot" \
  -H "Authorization: Bearer al_your_key_here"

POST /api/v1/keys

Requires Bearer token.
Create and manage API keys programmatically. Keys are prefixed with al_ and can be scoped to specific endpoints. Request body
{
  "action": "create",
  "name": "Production Key",
  "scopes": ["score", "enrich", "permits"]
}
FieldTypeRequiredDefaultDescription
actionstringAction: create, list, or revoke.
namestringHuman-readable key name (required for create).
scopesarrayEndpoint scopes. Omit for full access.
key_idstringKey ID to revoke (required for revoke action).
Example
curl -X POST "https://axiomlocus.io/api/v1/keys" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{"action":"create","name":"Production Key","scopes":["score","enrich"]}'
Response
{
  "key": {
    "id": "key_abc123",
    "name": "Production Key",
    "token": "al_live_abc123def456ghi789",
    "scopes": ["score", "enrich"],
    "created_at": "2026-03-31T12:00:00Z"
  }
}
FieldTypeDescription
key.idstringKey identifier for management operations.
key.tokenstringFull API key (only shown once on creation).
key.scopesarrayEndpoint scopes this key can access.