> For the complete documentation index, see [llms.txt](https://developer.celigo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.celigo.com/api/api-reference/marketplace-and-templates/connectors.md).

# Connectors

API for managing Integration App connectors and their licenses.

**These endpoints are only available to Celigo Partners.**

Connectors are packaged integration applications (e.g. "Shopify – NetSuite Connector") that Partners publish to the Celigo marketplace. Each connector has an install base, license management, and update push capabilities.

### Connector schema

## The Connector object

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"components":{"schemas":{"Connector":{"type":"object","description":"Connector object as returned by the API. Also used as the request body for create and update; `readOnly` fields are server-managed and ignored on writes.","required":["_id","_userId","name","handle"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who published the connector."},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."}}}]},"ConnectorBase":{"type":"object","description":"Writable connector fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for the connector, shown on its marketplace listing."},"description":{"type":"string","description":"Summary of what the connector does, shown on its marketplace listing."},"imageURL":{"type":"string","description":"URL of the connector's logo image displayed in the marketplace."},"websiteURL":{"type":"string","description":"URL of the publisher's product or documentation page for the connector."},"contactEmail":{"type":"string","format":"email","description":"Contact email for the connector's publisher."},"published":{"type":"boolean","description":"When true, the connector is visible in the Celigo marketplace."},"managed":{"type":"boolean","description":"When true, the connector is managed by Celigo."},"_integrationId":{"type":"string","format":"objectId","description":"Master integration the connector packages and installs."},"_stackId":{"type":"string","format":"objectId","description":"Stack that hosts the connector's installer and lifecycle functions."},"installerFunction":{"type":"string","description":"Function invoked from the connector's stack when the connector is installed."},"updateFunction":{"type":"string","description":"Function invoked to apply connector updates to existing installations."},"preUninstallFunction":{"type":"string","description":"Function invoked before an installation is uninstalled."},"uninstallerFunction":{"type":"string","description":"Function invoked when an installation is uninstalled."},"externalInstallerFunction":{"type":"string","description":"Function invoked for externally triggered installs (for example, `installConnectorFromExternalApp`)."},"_sharedImportIds":{"type":"array","description":"Imports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_sharedExportIds":{"type":"array","description":"Exports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_iClientIdMap":{"type":"array","description":"Maps connection types to the iClient credentials connector installations use.","items":{"type":"object","properties":{"_iClientIds":{"type":"array","description":"iClients available for this map entry.","items":{"type":"string","format":"objectId"}},"connection":{"type":"object","description":"Connection criteria this entry applies to.","properties":{"type":{"type":"string","description":"Connection type this entry applies to (e.g. `netsuite`, `http`, `rest`, `salesforce`)."},"assistant":{"type":"string","description":"Assistant (application-specific flavor) this entry applies to, used with generic connection types like `http` or `rest` to scope the entry to one application."}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"trialEnabled":{"type":"boolean","description":"When true, trial licenses are enabled for this connector. Requires\n`trialPeriod` and `_trialLicenseId` to be set."},"trialPeriod":{"type":"integer","description":"Trial period in days. Required when `trialEnabled` is `true`."},"_trialLicenseId":{"type":"string","format":"objectId","description":"License template ID for trials. Required when `trialEnabled`\nis `true`."},"oAuthServerFlow":{"type":"object","description":"OAuth server-flow configuration used by connector installations.","properties":{"_iClientId":{"type":"string","format":"objectId","description":"iClient used for the OAuth server flow."}}},"framework":{"type":"string","enum":["twoDotZero"],"description":"Marks a connector built on the Integration App Framework 2.0. Set to `twoDotZero` for 2.0 connectors and omit for classic connectors; when set, `twoDotZero._integrationId` is required and must match `_integrationId`."},"twoDotZero":{"type":"object","description":"Integration App Framework 2.0 configuration. The server initializes this object (typically as `{\"editions\":[]}`) on classic connectors too, so its presence alone does not imply a 2.0 connector; `_integrationId` is required inside it only when `framework` is `twoDotZero`.","properties":{"_integrationId":{"type":"string","format":"objectId","description":"Master integration this 2.0 connector packages. Must match the connector's top-level `_integrationId`."},"editions":{"type":"array","description":"Editions the connector offers, each bundling the resources an installation receives.","items":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"Edition name shown when choosing an edition during install."},"order":{"type":"integer","description":"Sort position of the edition in the install UI."},"resources":{"$ref":"#/components/schemas/EditionResourceList"},"childResources":{"$ref":"#/components/schemas/EditionResourceList"}}}},"changeEdition":{"type":"object","description":"Hook invoked when an installation switches between editions.","properties":{"function":{"type":"string","description":"Stack function called to migrate an installation between editions."},"_scriptId":{"type":"string","format":"objectId","description":"Script backing the change-edition function."}}},"isParentChild":{"type":"boolean","readOnly":true,"description":"When true, the master integration supports parent-child (multi-store) installs. Computed automatically from the integration; not settable."}}}},"if":{"properties":{"framework":{"const":"twoDotZero"}},"required":["framework"]},"then":{"required":["twoDotZero"],"properties":{"twoDotZero":{"required":["_integrationId"]}}}},"EditionResourceList":{"type":"object","description":"Resource ids bundled into a connector edition.","properties":{"_flowIds":{"type":"array","description":"Flows included in the edition.","items":{"type":"string","format":"objectId"}},"_importIds":{"type":"array","description":"Imports included in the edition.","items":{"type":"string","format":"objectId"}},"_exportIds":{"type":"array","description":"Exports included in the edition.","items":{"type":"string","format":"objectId"}},"_connectionIds":{"type":"array","description":"Connections included in the edition.","items":{"type":"string","format":"objectId"}},"_asyncHelperIds":{"type":"array","description":"Async helpers included in the edition.","items":{"type":"string","format":"objectId"}},"_fileDefinitionIds":{"type":"array","description":"File definitions included in the edition.","items":{"type":"string","format":"objectId"}}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}}}}
```

## List connectors

> Returns all connectors owned by the authenticated Partner account.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","description":"Connector object as returned by the API. Also used as the request body for create and update; `readOnly` fields are server-managed and ignored on writes.","required":["_id","_userId","name","handle"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who published the connector."},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."}}}]},"ConnectorBase":{"type":"object","description":"Writable connector fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for the connector, shown on its marketplace listing."},"description":{"type":"string","description":"Summary of what the connector does, shown on its marketplace listing."},"imageURL":{"type":"string","description":"URL of the connector's logo image displayed in the marketplace."},"websiteURL":{"type":"string","description":"URL of the publisher's product or documentation page for the connector."},"contactEmail":{"type":"string","format":"email","description":"Contact email for the connector's publisher."},"published":{"type":"boolean","description":"When true, the connector is visible in the Celigo marketplace."},"managed":{"type":"boolean","description":"When true, the connector is managed by Celigo."},"_integrationId":{"type":"string","format":"objectId","description":"Master integration the connector packages and installs."},"_stackId":{"type":"string","format":"objectId","description":"Stack that hosts the connector's installer and lifecycle functions."},"installerFunction":{"type":"string","description":"Function invoked from the connector's stack when the connector is installed."},"updateFunction":{"type":"string","description":"Function invoked to apply connector updates to existing installations."},"preUninstallFunction":{"type":"string","description":"Function invoked before an installation is uninstalled."},"uninstallerFunction":{"type":"string","description":"Function invoked when an installation is uninstalled."},"externalInstallerFunction":{"type":"string","description":"Function invoked for externally triggered installs (for example, `installConnectorFromExternalApp`)."},"_sharedImportIds":{"type":"array","description":"Imports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_sharedExportIds":{"type":"array","description":"Exports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_iClientIdMap":{"type":"array","description":"Maps connection types to the iClient credentials connector installations use.","items":{"type":"object","properties":{"_iClientIds":{"type":"array","description":"iClients available for this map entry.","items":{"type":"string","format":"objectId"}},"connection":{"type":"object","description":"Connection criteria this entry applies to.","properties":{"type":{"type":"string","description":"Connection type this entry applies to (e.g. `netsuite`, `http`, `rest`, `salesforce`)."},"assistant":{"type":"string","description":"Assistant (application-specific flavor) this entry applies to, used with generic connection types like `http` or `rest` to scope the entry to one application."}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"trialEnabled":{"type":"boolean","description":"When true, trial licenses are enabled for this connector. Requires\n`trialPeriod` and `_trialLicenseId` to be set."},"trialPeriod":{"type":"integer","description":"Trial period in days. Required when `trialEnabled` is `true`."},"_trialLicenseId":{"type":"string","format":"objectId","description":"License template ID for trials. Required when `trialEnabled`\nis `true`."},"oAuthServerFlow":{"type":"object","description":"OAuth server-flow configuration used by connector installations.","properties":{"_iClientId":{"type":"string","format":"objectId","description":"iClient used for the OAuth server flow."}}},"framework":{"type":"string","enum":["twoDotZero"],"description":"Marks a connector built on the Integration App Framework 2.0. Set to `twoDotZero` for 2.0 connectors and omit for classic connectors; when set, `twoDotZero._integrationId` is required and must match `_integrationId`."},"twoDotZero":{"type":"object","description":"Integration App Framework 2.0 configuration. The server initializes this object (typically as `{\"editions\":[]}`) on classic connectors too, so its presence alone does not imply a 2.0 connector; `_integrationId` is required inside it only when `framework` is `twoDotZero`.","properties":{"_integrationId":{"type":"string","format":"objectId","description":"Master integration this 2.0 connector packages. Must match the connector's top-level `_integrationId`."},"editions":{"type":"array","description":"Editions the connector offers, each bundling the resources an installation receives.","items":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"Edition name shown when choosing an edition during install."},"order":{"type":"integer","description":"Sort position of the edition in the install UI."},"resources":{"$ref":"#/components/schemas/EditionResourceList"},"childResources":{"$ref":"#/components/schemas/EditionResourceList"}}}},"changeEdition":{"type":"object","description":"Hook invoked when an installation switches between editions.","properties":{"function":{"type":"string","description":"Stack function called to migrate an installation between editions."},"_scriptId":{"type":"string","format":"objectId","description":"Script backing the change-edition function."}}},"isParentChild":{"type":"boolean","readOnly":true,"description":"When true, the master integration supports parent-child (multi-store) installs. Computed automatically from the integration; not settable."}}}},"if":{"properties":{"framework":{"const":"twoDotZero"}},"required":["framework"]},"then":{"required":["twoDotZero"],"properties":{"twoDotZero":{"required":["_integrationId"]}}}},"EditionResourceList":{"type":"object","description":"Resource ids bundled into a connector edition.","properties":{"_flowIds":{"type":"array","description":"Flows included in the edition.","items":{"type":"string","format":"objectId"}},"_importIds":{"type":"array","description":"Imports included in the edition.","items":{"type":"string","format":"objectId"}},"_exportIds":{"type":"array","description":"Exports included in the edition.","items":{"type":"string","format":"objectId"}},"_connectionIds":{"type":"array","description":"Connections included in the edition.","items":{"type":"string","format":"objectId"}},"_asyncHelperIds":{"type":"array","description":"Async helpers included in the edition.","items":{"type":"string","format":"objectId"}},"_fileDefinitionIds":{"type":"array","description":"File definitions included in the edition.","items":{"type":"string","format":"objectId"}}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/connectors":{"get":{"operationId":"listConnectors","tags":["Connectors"],"summary":"List connectors","description":"Returns all connectors owned by the authenticated Partner account.\n\n**Partner-only endpoint.**","responses":{"200":{"description":"Array of connector resources.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Connector"}}}}},"204":{"description":"No connectors exist."},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Create a connector

> Creates a new connector (Integration App).\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Fields that can be sent when creating or updating a connector. Partner accounts only.","required":["name"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"}]},"ConnectorBase":{"type":"object","description":"Writable connector fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for the connector, shown on its marketplace listing."},"description":{"type":"string","description":"Summary of what the connector does, shown on its marketplace listing."},"imageURL":{"type":"string","description":"URL of the connector's logo image displayed in the marketplace."},"websiteURL":{"type":"string","description":"URL of the publisher's product or documentation page for the connector."},"contactEmail":{"type":"string","format":"email","description":"Contact email for the connector's publisher."},"published":{"type":"boolean","description":"When true, the connector is visible in the Celigo marketplace."},"managed":{"type":"boolean","description":"When true, the connector is managed by Celigo."},"_integrationId":{"type":"string","format":"objectId","description":"Master integration the connector packages and installs."},"_stackId":{"type":"string","format":"objectId","description":"Stack that hosts the connector's installer and lifecycle functions."},"installerFunction":{"type":"string","description":"Function invoked from the connector's stack when the connector is installed."},"updateFunction":{"type":"string","description":"Function invoked to apply connector updates to existing installations."},"preUninstallFunction":{"type":"string","description":"Function invoked before an installation is uninstalled."},"uninstallerFunction":{"type":"string","description":"Function invoked when an installation is uninstalled."},"externalInstallerFunction":{"type":"string","description":"Function invoked for externally triggered installs (for example, `installConnectorFromExternalApp`)."},"_sharedImportIds":{"type":"array","description":"Imports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_sharedExportIds":{"type":"array","description":"Exports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_iClientIdMap":{"type":"array","description":"Maps connection types to the iClient credentials connector installations use.","items":{"type":"object","properties":{"_iClientIds":{"type":"array","description":"iClients available for this map entry.","items":{"type":"string","format":"objectId"}},"connection":{"type":"object","description":"Connection criteria this entry applies to.","properties":{"type":{"type":"string","description":"Connection type this entry applies to (e.g. `netsuite`, `http`, `rest`, `salesforce`)."},"assistant":{"type":"string","description":"Assistant (application-specific flavor) this entry applies to, used with generic connection types like `http` or `rest` to scope the entry to one application."}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"trialEnabled":{"type":"boolean","description":"When true, trial licenses are enabled for this connector. Requires\n`trialPeriod` and `_trialLicenseId` to be set."},"trialPeriod":{"type":"integer","description":"Trial period in days. Required when `trialEnabled` is `true`."},"_trialLicenseId":{"type":"string","format":"objectId","description":"License template ID for trials. Required when `trialEnabled`\nis `true`."},"oAuthServerFlow":{"type":"object","description":"OAuth server-flow configuration used by connector installations.","properties":{"_iClientId":{"type":"string","format":"objectId","description":"iClient used for the OAuth server flow."}}},"framework":{"type":"string","enum":["twoDotZero"],"description":"Marks a connector built on the Integration App Framework 2.0. Set to `twoDotZero` for 2.0 connectors and omit for classic connectors; when set, `twoDotZero._integrationId` is required and must match `_integrationId`."},"twoDotZero":{"type":"object","description":"Integration App Framework 2.0 configuration. The server initializes this object (typically as `{\"editions\":[]}`) on classic connectors too, so its presence alone does not imply a 2.0 connector; `_integrationId` is required inside it only when `framework` is `twoDotZero`.","properties":{"_integrationId":{"type":"string","format":"objectId","description":"Master integration this 2.0 connector packages. Must match the connector's top-level `_integrationId`."},"editions":{"type":"array","description":"Editions the connector offers, each bundling the resources an installation receives.","items":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"Edition name shown when choosing an edition during install."},"order":{"type":"integer","description":"Sort position of the edition in the install UI."},"resources":{"$ref":"#/components/schemas/EditionResourceList"},"childResources":{"$ref":"#/components/schemas/EditionResourceList"}}}},"changeEdition":{"type":"object","description":"Hook invoked when an installation switches between editions.","properties":{"function":{"type":"string","description":"Stack function called to migrate an installation between editions."},"_scriptId":{"type":"string","format":"objectId","description":"Script backing the change-edition function."}}},"isParentChild":{"type":"boolean","readOnly":true,"description":"When true, the master integration supports parent-child (multi-store) installs. Computed automatically from the integration; not settable."}}}},"if":{"properties":{"framework":{"const":"twoDotZero"}},"required":["framework"]},"then":{"required":["twoDotZero"],"properties":{"twoDotZero":{"required":["_integrationId"]}}}},"EditionResourceList":{"type":"object","description":"Resource ids bundled into a connector edition.","properties":{"_flowIds":{"type":"array","description":"Flows included in the edition.","items":{"type":"string","format":"objectId"}},"_importIds":{"type":"array","description":"Imports included in the edition.","items":{"type":"string","format":"objectId"}},"_exportIds":{"type":"array","description":"Exports included in the edition.","items":{"type":"string","format":"objectId"}},"_connectionIds":{"type":"array","description":"Connections included in the edition.","items":{"type":"string","format":"objectId"}},"_asyncHelperIds":{"type":"array","description":"Async helpers included in the edition.","items":{"type":"string","format":"objectId"}},"_fileDefinitionIds":{"type":"array","description":"File definitions included in the edition.","items":{"type":"string","format":"objectId"}}}},"Connector":{"type":"object","description":"Connector object as returned by the API. Also used as the request body for create and update; `readOnly` fields are server-managed and ignored on writes.","required":["_id","_userId","name","handle"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who published the connector."},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors":{"post":{"operationId":"createConnector","tags":["Connectors"],"summary":"Create a connector","description":"Creates a new connector (Integration App).\n\n**Partner-only endpoint.**","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"201":{"description":"Connector created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Get a connector

> Returns a single connector by ID.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","description":"Connector object as returned by the API. Also used as the request body for create and update; `readOnly` fields are server-managed and ignored on writes.","required":["_id","_userId","name","handle"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who published the connector."},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."}}}]},"ConnectorBase":{"type":"object","description":"Writable connector fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for the connector, shown on its marketplace listing."},"description":{"type":"string","description":"Summary of what the connector does, shown on its marketplace listing."},"imageURL":{"type":"string","description":"URL of the connector's logo image displayed in the marketplace."},"websiteURL":{"type":"string","description":"URL of the publisher's product or documentation page for the connector."},"contactEmail":{"type":"string","format":"email","description":"Contact email for the connector's publisher."},"published":{"type":"boolean","description":"When true, the connector is visible in the Celigo marketplace."},"managed":{"type":"boolean","description":"When true, the connector is managed by Celigo."},"_integrationId":{"type":"string","format":"objectId","description":"Master integration the connector packages and installs."},"_stackId":{"type":"string","format":"objectId","description":"Stack that hosts the connector's installer and lifecycle functions."},"installerFunction":{"type":"string","description":"Function invoked from the connector's stack when the connector is installed."},"updateFunction":{"type":"string","description":"Function invoked to apply connector updates to existing installations."},"preUninstallFunction":{"type":"string","description":"Function invoked before an installation is uninstalled."},"uninstallerFunction":{"type":"string","description":"Function invoked when an installation is uninstalled."},"externalInstallerFunction":{"type":"string","description":"Function invoked for externally triggered installs (for example, `installConnectorFromExternalApp`)."},"_sharedImportIds":{"type":"array","description":"Imports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_sharedExportIds":{"type":"array","description":"Exports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_iClientIdMap":{"type":"array","description":"Maps connection types to the iClient credentials connector installations use.","items":{"type":"object","properties":{"_iClientIds":{"type":"array","description":"iClients available for this map entry.","items":{"type":"string","format":"objectId"}},"connection":{"type":"object","description":"Connection criteria this entry applies to.","properties":{"type":{"type":"string","description":"Connection type this entry applies to (e.g. `netsuite`, `http`, `rest`, `salesforce`)."},"assistant":{"type":"string","description":"Assistant (application-specific flavor) this entry applies to, used with generic connection types like `http` or `rest` to scope the entry to one application."}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"trialEnabled":{"type":"boolean","description":"When true, trial licenses are enabled for this connector. Requires\n`trialPeriod` and `_trialLicenseId` to be set."},"trialPeriod":{"type":"integer","description":"Trial period in days. Required when `trialEnabled` is `true`."},"_trialLicenseId":{"type":"string","format":"objectId","description":"License template ID for trials. Required when `trialEnabled`\nis `true`."},"oAuthServerFlow":{"type":"object","description":"OAuth server-flow configuration used by connector installations.","properties":{"_iClientId":{"type":"string","format":"objectId","description":"iClient used for the OAuth server flow."}}},"framework":{"type":"string","enum":["twoDotZero"],"description":"Marks a connector built on the Integration App Framework 2.0. Set to `twoDotZero` for 2.0 connectors and omit for classic connectors; when set, `twoDotZero._integrationId` is required and must match `_integrationId`."},"twoDotZero":{"type":"object","description":"Integration App Framework 2.0 configuration. The server initializes this object (typically as `{\"editions\":[]}`) on classic connectors too, so its presence alone does not imply a 2.0 connector; `_integrationId` is required inside it only when `framework` is `twoDotZero`.","properties":{"_integrationId":{"type":"string","format":"objectId","description":"Master integration this 2.0 connector packages. Must match the connector's top-level `_integrationId`."},"editions":{"type":"array","description":"Editions the connector offers, each bundling the resources an installation receives.","items":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"Edition name shown when choosing an edition during install."},"order":{"type":"integer","description":"Sort position of the edition in the install UI."},"resources":{"$ref":"#/components/schemas/EditionResourceList"},"childResources":{"$ref":"#/components/schemas/EditionResourceList"}}}},"changeEdition":{"type":"object","description":"Hook invoked when an installation switches between editions.","properties":{"function":{"type":"string","description":"Stack function called to migrate an installation between editions."},"_scriptId":{"type":"string","format":"objectId","description":"Script backing the change-edition function."}}},"isParentChild":{"type":"boolean","readOnly":true,"description":"When true, the master integration supports parent-child (multi-store) installs. Computed automatically from the integration; not settable."}}}},"if":{"properties":{"framework":{"const":"twoDotZero"}},"required":["framework"]},"then":{"required":["twoDotZero"],"properties":{"twoDotZero":{"required":["_integrationId"]}}}},"EditionResourceList":{"type":"object","description":"Resource ids bundled into a connector edition.","properties":{"_flowIds":{"type":"array","description":"Flows included in the edition.","items":{"type":"string","format":"objectId"}},"_importIds":{"type":"array","description":"Imports included in the edition.","items":{"type":"string","format":"objectId"}},"_exportIds":{"type":"array","description":"Exports included in the edition.","items":{"type":"string","format":"objectId"}},"_connectionIds":{"type":"array","description":"Connections included in the edition.","items":{"type":"string","format":"objectId"}},"_asyncHelperIds":{"type":"array","description":"Async helpers included in the edition.","items":{"type":"string","format":"objectId"}},"_fileDefinitionIds":{"type":"array","description":"File definitions included in the edition.","items":{"type":"string","format":"objectId"}}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}":{"get":{"operationId":"getConnectorById","tags":["Connectors"],"summary":"Get a connector","description":"Returns a single connector by ID.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"responses":{"200":{"description":"The connector resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Update a connector

> Full-replaces a connector resource.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Fields that can be sent when creating or updating a connector. Partner accounts only.","required":["name"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"}]},"ConnectorBase":{"type":"object","description":"Writable connector fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for the connector, shown on its marketplace listing."},"description":{"type":"string","description":"Summary of what the connector does, shown on its marketplace listing."},"imageURL":{"type":"string","description":"URL of the connector's logo image displayed in the marketplace."},"websiteURL":{"type":"string","description":"URL of the publisher's product or documentation page for the connector."},"contactEmail":{"type":"string","format":"email","description":"Contact email for the connector's publisher."},"published":{"type":"boolean","description":"When true, the connector is visible in the Celigo marketplace."},"managed":{"type":"boolean","description":"When true, the connector is managed by Celigo."},"_integrationId":{"type":"string","format":"objectId","description":"Master integration the connector packages and installs."},"_stackId":{"type":"string","format":"objectId","description":"Stack that hosts the connector's installer and lifecycle functions."},"installerFunction":{"type":"string","description":"Function invoked from the connector's stack when the connector is installed."},"updateFunction":{"type":"string","description":"Function invoked to apply connector updates to existing installations."},"preUninstallFunction":{"type":"string","description":"Function invoked before an installation is uninstalled."},"uninstallerFunction":{"type":"string","description":"Function invoked when an installation is uninstalled."},"externalInstallerFunction":{"type":"string","description":"Function invoked for externally triggered installs (for example, `installConnectorFromExternalApp`)."},"_sharedImportIds":{"type":"array","description":"Imports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_sharedExportIds":{"type":"array","description":"Exports shared with installations of this connector.","items":{"type":"string","format":"objectId"}},"_iClientIdMap":{"type":"array","description":"Maps connection types to the iClient credentials connector installations use.","items":{"type":"object","properties":{"_iClientIds":{"type":"array","description":"iClients available for this map entry.","items":{"type":"string","format":"objectId"}},"connection":{"type":"object","description":"Connection criteria this entry applies to.","properties":{"type":{"type":"string","description":"Connection type this entry applies to (e.g. `netsuite`, `http`, `rest`, `salesforce`)."},"assistant":{"type":"string","description":"Assistant (application-specific flavor) this entry applies to, used with generic connection types like `http` or `rest` to scope the entry to one application."}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"trialEnabled":{"type":"boolean","description":"When true, trial licenses are enabled for this connector. Requires\n`trialPeriod` and `_trialLicenseId` to be set."},"trialPeriod":{"type":"integer","description":"Trial period in days. Required when `trialEnabled` is `true`."},"_trialLicenseId":{"type":"string","format":"objectId","description":"License template ID for trials. Required when `trialEnabled`\nis `true`."},"oAuthServerFlow":{"type":"object","description":"OAuth server-flow configuration used by connector installations.","properties":{"_iClientId":{"type":"string","format":"objectId","description":"iClient used for the OAuth server flow."}}},"framework":{"type":"string","enum":["twoDotZero"],"description":"Marks a connector built on the Integration App Framework 2.0. Set to `twoDotZero` for 2.0 connectors and omit for classic connectors; when set, `twoDotZero._integrationId` is required and must match `_integrationId`."},"twoDotZero":{"type":"object","description":"Integration App Framework 2.0 configuration. The server initializes this object (typically as `{\"editions\":[]}`) on classic connectors too, so its presence alone does not imply a 2.0 connector; `_integrationId` is required inside it only when `framework` is `twoDotZero`.","properties":{"_integrationId":{"type":"string","format":"objectId","description":"Master integration this 2.0 connector packages. Must match the connector's top-level `_integrationId`."},"editions":{"type":"array","description":"Editions the connector offers, each bundling the resources an installation receives.","items":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"Edition name shown when choosing an edition during install."},"order":{"type":"integer","description":"Sort position of the edition in the install UI."},"resources":{"$ref":"#/components/schemas/EditionResourceList"},"childResources":{"$ref":"#/components/schemas/EditionResourceList"}}}},"changeEdition":{"type":"object","description":"Hook invoked when an installation switches between editions.","properties":{"function":{"type":"string","description":"Stack function called to migrate an installation between editions."},"_scriptId":{"type":"string","format":"objectId","description":"Script backing the change-edition function."}}},"isParentChild":{"type":"boolean","readOnly":true,"description":"When true, the master integration supports parent-child (multi-store) installs. Computed automatically from the integration; not settable."}}}},"if":{"properties":{"framework":{"const":"twoDotZero"}},"required":["framework"]},"then":{"required":["twoDotZero"],"properties":{"twoDotZero":{"required":["_integrationId"]}}}},"EditionResourceList":{"type":"object","description":"Resource ids bundled into a connector edition.","properties":{"_flowIds":{"type":"array","description":"Flows included in the edition.","items":{"type":"string","format":"objectId"}},"_importIds":{"type":"array","description":"Imports included in the edition.","items":{"type":"string","format":"objectId"}},"_exportIds":{"type":"array","description":"Exports included in the edition.","items":{"type":"string","format":"objectId"}},"_connectionIds":{"type":"array","description":"Connections included in the edition.","items":{"type":"string","format":"objectId"}},"_asyncHelperIds":{"type":"array","description":"Async helpers included in the edition.","items":{"type":"string","format":"objectId"}},"_fileDefinitionIds":{"type":"array","description":"File definitions included in the edition.","items":{"type":"string","format":"objectId"}}}},"Connector":{"type":"object","description":"Connector object as returned by the API. Also used as the request body for create and update; `readOnly` fields are server-managed and ignored on writes.","required":["_id","_userId","name","handle"],"allOf":[{"$ref":"#/components/schemas/ConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who published the connector."},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}":{"put":{"operationId":"updateConnector","tags":["Connectors"],"summary":"Update a connector","description":"Full-replaces a connector resource.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"200":{"description":"Updated connector.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Delete a connector

> Deletes a connector. This does not affect existing installations.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}":{"delete":{"operationId":"deleteConnector","tags":["Connectors"],"summary":"Delete a connector","description":"Deletes a connector. This does not affect existing installations.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"responses":{"204":{"description":"Connector deleted."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get the install base for a connector

> Returns the list of accounts that have installed this connector.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}/installBase":{"get":{"operationId":"getConnectorInstallBase","tags":["Connectors"],"summary":"Get the install base for a connector","description":"Returns the list of accounts that have installed this connector.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"responses":{"200":{"description":"Install base data.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"204":{"description":"No installations exist for this connector."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Push update to connector installations

> Pushes an update to all (or specified) installations of this connector.\
> Triggers the connector's \`updateFunction\` on each target integration.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}/update":{"put":{"operationId":"pushConnectorUpdate","tags":["Connectors"],"summary":"Push update to connector installations","description":"Pushes an update to all (or specified) installations of this connector.\nTriggers the connector's `updateFunction` on each target integration.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"_integrationIds":{"type":"array","items":{"type":"string"},"description":"Optional list of specific integration IDs to update.\nOmit to push to all installations."}}}}}},"responses":{"200":{"description":"Update pushed."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## List licenses for a connector

> Returns all licenses issued for this connector.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"System-generated unique identifier for the license."},"expires":{"type":"string","format":"date-time","description":"Date and time at which the license expires."},"created":{"type":"string","format":"date-time","description":"Timestamp when the license was created."},"opts":{"type":"object","description":"License options — connector edition and any add-on licenses granted.","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","description":"Add-on licenses granted in addition to the base connector edition, grouped by add-on type.","items":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type this group of license grants applies to (e.g. `store`)."},"licenses":{"type":"array","description":"Individual add-on license grants of this type.","items":{"type":"object","properties":{"addOnEdition":{"type":"string","description":"Edition tier of the add-on license grant (e.g. `premium`)."}}}}}}}}},"user":{"type":"object","description":"Integrator.io user the license is issued to, resolved from the email supplied at creation.","properties":{"email":{"type":"string","format":"email","description":"Email address of the licensed user."},"_id":{"type":"string","format":"objectId","description":"Unique identifier of the licensed user."},"name":{"type":"string","description":"Display name of the licensed user."}}},"_integrationId":{"type":"string","format":"objectId","description":"Integration instance created for the licensed user's installation of this connector. Each connector license maps one user's installation to its own integration."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}/licenses":{"get":{"operationId":"listConnectorLicenses","tags":["Connectors"],"summary":"List licenses for a connector","description":"Returns all licenses issued for this connector.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"responses":{"200":{"description":"Array of license records.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/License"}}}}},"204":{"description":"No licenses exist for this connector."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Create a license for a connector

> Creates a new license for a connector. Supply the target user's email\
> address in the request body — the backend resolves it to a user\
> account. If the email is not a registered integrator.io user, an\
> \`invalid\_user\` error is returned.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"LicenseCreateRequest":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the integrator.io user to license. The backend\nresolves this to a user account."},"expires":{"type":"string","format":"date-time","description":"Date and time at which the license expires."},"opts":{"type":"object","description":"License options — connector edition and any add-on licenses to grant.","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","description":"Add-on licenses to grant in addition to the base connector edition, grouped by add-on type.","items":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type this group of license grants applies to (e.g. `store`)."},"licenses":{"type":"array","description":"Individual add-on license grants of this type.","items":{"type":"object","properties":{"addOnEdition":{"type":"string","description":"Edition tier of the add-on license grant (e.g. `premium`)."}}}}}}}}}}},"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"System-generated unique identifier for the license."},"expires":{"type":"string","format":"date-time","description":"Date and time at which the license expires."},"created":{"type":"string","format":"date-time","description":"Timestamp when the license was created."},"opts":{"type":"object","description":"License options — connector edition and any add-on licenses granted.","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","description":"Add-on licenses granted in addition to the base connector edition, grouped by add-on type.","items":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type this group of license grants applies to (e.g. `store`)."},"licenses":{"type":"array","description":"Individual add-on license grants of this type.","items":{"type":"object","properties":{"addOnEdition":{"type":"string","description":"Edition tier of the add-on license grant (e.g. `premium`)."}}}}}}}}},"user":{"type":"object","description":"Integrator.io user the license is issued to, resolved from the email supplied at creation.","properties":{"email":{"type":"string","format":"email","description":"Email address of the licensed user."},"_id":{"type":"string","format":"objectId","description":"Unique identifier of the licensed user."},"name":{"type":"string","description":"Display name of the licensed user."}}},"_integrationId":{"type":"string","format":"objectId","description":"Integration instance created for the licensed user's installation of this connector. Each connector license maps one user's installation to its own integration."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}/licenses":{"post":{"operationId":"createConnectorLicense","tags":["Connectors"],"summary":"Create a license for a connector","description":"Creates a new license for a connector. Supply the target user's email\naddress in the request body — the backend resolves it to a user\naccount. If the email is not a registered integrator.io user, an\n`invalid_user` error is returned.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseCreateRequest"}}}},"responses":{"201":{"description":"License created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Get a license

> Returns a specific license for a connector.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"System-generated unique identifier for the license."},"expires":{"type":"string","format":"date-time","description":"Date and time at which the license expires."},"created":{"type":"string","format":"date-time","description":"Timestamp when the license was created."},"opts":{"type":"object","description":"License options — connector edition and any add-on licenses granted.","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","description":"Add-on licenses granted in addition to the base connector edition, grouped by add-on type.","items":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type this group of license grants applies to (e.g. `store`)."},"licenses":{"type":"array","description":"Individual add-on license grants of this type.","items":{"type":"object","properties":{"addOnEdition":{"type":"string","description":"Edition tier of the add-on license grant (e.g. `premium`)."}}}}}}}}},"user":{"type":"object","description":"Integrator.io user the license is issued to, resolved from the email supplied at creation.","properties":{"email":{"type":"string","format":"email","description":"Email address of the licensed user."},"_id":{"type":"string","format":"objectId","description":"Unique identifier of the licensed user."},"name":{"type":"string","description":"Display name of the licensed user."}}},"_integrationId":{"type":"string","format":"objectId","description":"Integration instance created for the licensed user's installation of this connector. Each connector license maps one user's installation to its own integration."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}/licenses/{_licenseId}":{"get":{"operationId":"getConnectorLicenseById","tags":["Connectors"],"summary":"Get a license","description":"Returns a specific license for a connector.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."},{"name":"_licenseId","in":"path","required":true,"schema":{"type":"string"},"description":"The license ID."}],"responses":{"200":{"description":"The license record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Update a license

> Updates an existing license for a connector (e.g. change expiry or\
> edition).\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"System-generated unique identifier for the license."},"expires":{"type":"string","format":"date-time","description":"Date and time at which the license expires."},"created":{"type":"string","format":"date-time","description":"Timestamp when the license was created."},"opts":{"type":"object","description":"License options — connector edition and any add-on licenses granted.","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","description":"Add-on licenses granted in addition to the base connector edition, grouped by add-on type.","items":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type this group of license grants applies to (e.g. `store`)."},"licenses":{"type":"array","description":"Individual add-on license grants of this type.","items":{"type":"object","properties":{"addOnEdition":{"type":"string","description":"Edition tier of the add-on license grant (e.g. `premium`)."}}}}}}}}},"user":{"type":"object","description":"Integrator.io user the license is issued to, resolved from the email supplied at creation.","properties":{"email":{"type":"string","format":"email","description":"Email address of the licensed user."},"_id":{"type":"string","format":"objectId","description":"Unique identifier of the licensed user."},"name":{"type":"string","description":"Display name of the licensed user."}}},"_integrationId":{"type":"string","format":"objectId","description":"Integration instance created for the licensed user's installation of this connector. Each connector license maps one user's installation to its own integration."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/connectors/{_id}/licenses/{_licenseId}":{"put":{"operationId":"updateConnectorLicense","tags":["Connectors"],"summary":"Update a license","description":"Updates an existing license for a connector (e.g. change expiry or\nedition).\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."},{"name":"_licenseId","in":"path","required":true,"schema":{"type":"string"},"description":"The license ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}}},"responses":{"200":{"description":"Updated license.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Delete a license

> Deletes a license for a connector.\
> \
> \*\*Partner-only endpoint.\*\*

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}/licenses/{_licenseId}":{"delete":{"operationId":"deleteConnectorLicense","tags":["Connectors"],"summary":"Delete a license","description":"Deletes a license for a connector.\n\n**Partner-only endpoint.**","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string"},"description":"The connector ID."},{"name":"_licenseId","in":"path","required":true,"schema":{"type":"string"},"description":"The license ID."}],"responses":{"204":{"description":"License deleted."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Install a connector (Integration App)

> Triggers the install flow for a connector (Integration App). The\
> connector must be associated with an integration that has the install\
> function configured. Templates are installed via\
> \`POST /v1/integrations/template/{\_id}\` instead.

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}/install":{"post":{"operationId":"installConnector","tags":["Connectors"],"summary":"Install a connector (Integration App)","description":"Triggers the install flow for a connector (Integration App). The\nconnector must be associated with an integration that has the install\nfunction configured. Templates are installed via\n`POST /v1/integrations/template/{_id}` instead.","parameters":[{"name":"_id","in":"path","required":true,"description":"The connector ID.","schema":{"type":"string","format":"objectId"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"Optional install configuration.","additionalProperties":true}}}},"responses":{"200":{"description":"Connector install initiated.","content":{"application/json":{"schema":{"type":"object","description":"Install response.","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"description":"Connector not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Connector is not associated with an integration that supports\nthe install function.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Preview a connector install

> Returns a preview of what installing this connector would produce.\
> The connector must be associated with an integration that has the\
> install function configured.

```json
{"openapi":"3.2.0","info":{"title":"Connectors","version":"1.0.0"},"tags":[{"name":"Connectors","description":"API for managing Integration App connectors and their licenses.\n\n**These endpoints are only available to Celigo Partners.**\n\nConnectors are packaged integration applications (e.g. \"Shopify –\nNetSuite Connector\") that Partners publish to the Celigo marketplace.\nEach connector has an install base, license management, and update\npush capabilities.\n\n## Connector schema\n\n{% openapi-schemas spec=\"connector\" schemas=\"Connector\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/connectors/{_id}/preview":{"get":{"operationId":"previewConnectorInstall","tags":["Connectors"],"summary":"Preview a connector install","description":"Returns a preview of what installing this connector would produce.\nThe connector must be associated with an integration that has the\ninstall function configured.","parameters":[{"name":"_id","in":"path","required":true,"description":"The connector ID.","schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Connector install preview.","content":{"application/json":{"schema":{"type":"object","description":"Preview envelope with resource docs.","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"description":"Connector not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Connector is not associated with an integration that supports\nthe install function.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```
