Changelog

The changes to the public API that a consumer can see. The most recent change is first.

2026-10 — Connectors: the connection id is accepted

A workspace can hold several connections of one integration. The connector identifier will name one connection. This change prepares it: every route accepts the id of the connection, and the responses name the integration beside each identifier. The identifiers the API returns do not change yet.

What is new

  • kind and method on each connector: the integration it connects to, and how Corma reaches it.
  • kind and method on the source and disconnected mappings of GET /user-fields.
  • connectorId on licences and users: the id of the connection the record belongs to. null when no connector holds it.
  • connectorId on POST /action-runs and POST /tasks: the connector the action runs on. It must connect the integration of the action. Omitted, the action runs on the only connector of that integration.
  • The id of a connection is accepted wherever a connector identifier is, for example GET /connectors/12.

What changes meaning

  • name on a connector is the name of the integration. The name of the connection is connectionName.

What stays compatible

  • The connector identifiers in every response keep their current form. Read kind and method instead of parsing the identifier: its form changes in a later release.

2026-10 — Sources: one model for every record

Corma now records the provenance of every record in one model: one source per writer, with its own dates. The sources arrays read that model.

What is new

  • author on each source: the name of the member who wrote through a Corma channel, or the name of the public API key. null for a connector, an agent, an action, and for the writes from before this change.
  • isOriginating on each source: true on the source that created the record. false also means "unknown" on older records.
  • Two new source types, beside integration_sync_unit and corma:
    • custom_integration: a custom integration agent of the workspace. A license found by a custom agent now lists it in sources. It was missing before.
    • action: a registry action that wrote the record, for example a workflow that provisioned a license. kind and method name its connector.
  • sources on more records: job titles, the country of a user, user emails and application instances.

What changes meaning

  • createdAt and lastUpdatedAt on a source are the dates the source saw the record first, and confirmed it last. Since the 2026-09 migration of the sync units they held the dates of an internal row, which the migration reset. They read "known by this source since" again.

  • The manual Corma channel is legacy. New writes use a precise channel:

    • web_app: a member in the Corma app;
    • csv_import: a CSV import;
    • sso: an OAuth sign-in;
    • sso_saml: a SAML sign-in, just-in-time provisioning included;
    • copilot: Cormie;
    • api: the public API.

    A consumer that filters on kind: manual sees only the older records. Filter on the precise channels to see the new ones.

  • remoteId and remoteEmail on a user integration_sync_unit source can now be null, for a source that has no connector identity behind it.

  • Team sources: a team lists its typed sources (type), and its older sourceKind rows only when no source of the same family covers them.

  • License type and license role sources keep their shape, list one entry per writer, and add author and isOriginating.

What does not change

  • The existing type values: integration_sync_unit and corma on licenses, users and teams, merge_legacy_integration on users.
  • The order of sources: the source that confirmed the record last comes first.