Skip to content

shell-crm Sensor

What it ingests

CRM records from a shell-crm deployment — Companies, Contacts, Deals, Partnerships, Opportunities, Contracts, and Follow-ups. Read-only, with per-entity error isolation.

Credential

References a shellcrm_api_key credential by id. The secret is a shell-crm API key — a client_id:client_secret string — sent verbatim as the Bearer token on every call. Mint one in shell-crm via POST /admin/oauth-clients with the read scopes you want this sensor to use; the issued client_id:client_secret is the API key.

bash
curl -sS -X POST https://your-corveil-host/api/credentials \
  -H "Authorization: Bearer <admin>" -H "Content-Type: application/json" \
  -d '{"type":"shellcrm_api_key","name":"acme-crm-key","secret":"<client_id>:<client_secret>"}'

Config fields

KeyRequiredNotes
base_urlyesRoot URL of the shell-crm deployment (no trailing slash). Must be https unless pointing at a loopback host for local dev.
enabled_entitiesnoComma-separated entity names. Blank polls every supported entity. Unknown names are rejected at configure time.
default_entity_typenoOverride the ontology entity type produced from each record. Blank uses the per-entity fallback (Organization for companies, Project for deals, etc.). Validated against the org taxonomy on save.

Supported entity names: companies, contacts, deals, partnerships, opportunities, contracts, follow-ups.

Provider-side setup

  1. In shell-crm, POST /admin/oauth-clients with the read scopes this sensor should have.
  2. Copy the issued client_id:client_secret — that's the API key secret above.
  3. Note the deployment's base URL for base_url.

Wire-up

POST /api/sensors

json
{
  "sensor_type": "shellcrm",
  "name": "Acme CRM",
  "config": {
    "base_url": "https://crm.acme.com",
    "enabled_entities": "companies, deals, contacts"
  },
  "credentials": { "api_key": "<shellcrm_api_key credential id>" }
}

Verify

Run Test connection to confirm the base URL and API key authenticate. Once polling, records from the enabled entities appear as their mapped ontology entities.