# Connectors

## List connectors

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

```json
{"openapi":"3.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","required":["name"],"properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string"},"websiteURL":{"type":"string"},"contactEmail":{"type":"string","format":"email"},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"published":{"type":"boolean"},"managed":{"type":"boolean"},"_integrationId":{"type":"string","format":"objectId"},"_stackId":{"type":"string","format":"objectId"},"installerFunction":{"type":"string"},"updateFunction":{"type":"string"},"preUninstallFunction":{"type":"string"},"uninstallerFunction":{"type":"string"},"externalInstallerFunction":{"type":"string"},"lastModified":{"type":"string","format":"date-time","readOnly":true},"_sharedImportIds":{"type":"array","items":{"type":"string"}},"_sharedExportIds":{"type":"array","items":{"type":"string"}},"_iClientIdMap":{"type":"array","items":{"type":"object","properties":{"_id":{"oneOf":[{"type":"string"},{"type":"boolean"}]},"_iClientIds":{"type":"array","items":{"type":"string"}},"connection":{"type":"object","properties":{"type":{"type":"string"}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."},"trialEnabled":{"type":"boolean","description":"Whether trial licenses are enabled for this connector. Setting\nto `true` requires `trialPeriod` and `_trialLicenseId`."},"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","properties":{"_iClientId":{"type":"string","format":"objectId"}}}}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","required":["name"],"properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string"},"websiteURL":{"type":"string"},"contactEmail":{"type":"string","format":"email"},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"published":{"type":"boolean"},"managed":{"type":"boolean"},"_integrationId":{"type":"string","format":"objectId"},"_stackId":{"type":"string","format":"objectId"},"installerFunction":{"type":"string"},"updateFunction":{"type":"string"},"preUninstallFunction":{"type":"string"},"uninstallerFunction":{"type":"string"},"externalInstallerFunction":{"type":"string"},"lastModified":{"type":"string","format":"date-time","readOnly":true},"_sharedImportIds":{"type":"array","items":{"type":"string"}},"_sharedExportIds":{"type":"array","items":{"type":"string"}},"_iClientIdMap":{"type":"array","items":{"type":"object","properties":{"_id":{"oneOf":[{"type":"string"},{"type":"boolean"}]},"_iClientIds":{"type":"array","items":{"type":"string"}},"connection":{"type":"object","properties":{"type":{"type":"string"}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."},"trialEnabled":{"type":"boolean","description":"Whether trial licenses are enabled for this connector. Setting\nto `true` requires `trialPeriod` and `_trialLicenseId`."},"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","properties":{"_iClientId":{"type":"string","format":"objectId"}}}}},"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/Connector"}}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","required":["name"],"properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string"},"websiteURL":{"type":"string"},"contactEmail":{"type":"string","format":"email"},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"published":{"type":"boolean"},"managed":{"type":"boolean"},"_integrationId":{"type":"string","format":"objectId"},"_stackId":{"type":"string","format":"objectId"},"installerFunction":{"type":"string"},"updateFunction":{"type":"string"},"preUninstallFunction":{"type":"string"},"uninstallerFunction":{"type":"string"},"externalInstallerFunction":{"type":"string"},"lastModified":{"type":"string","format":"date-time","readOnly":true},"_sharedImportIds":{"type":"array","items":{"type":"string"}},"_sharedExportIds":{"type":"array","items":{"type":"string"}},"_iClientIdMap":{"type":"array","items":{"type":"object","properties":{"_id":{"oneOf":[{"type":"string"},{"type":"boolean"}]},"_iClientIds":{"type":"array","items":{"type":"string"}},"connection":{"type":"object","properties":{"type":{"type":"string"}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."},"trialEnabled":{"type":"boolean","description":"Whether trial licenses are enabled for this connector. Setting\nto `true` requires `trialPeriod` and `_trialLicenseId`."},"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","properties":{"_iClientId":{"type":"string","format":"objectId"}}}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Connector":{"type":"object","required":["name"],"properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string"},"websiteURL":{"type":"string"},"contactEmail":{"type":"string","format":"email"},"handle":{"type":"string","readOnly":true,"description":"Auto-generated short unique slug for the connector."},"published":{"type":"boolean"},"managed":{"type":"boolean"},"_integrationId":{"type":"string","format":"objectId"},"_stackId":{"type":"string","format":"objectId"},"installerFunction":{"type":"string"},"updateFunction":{"type":"string"},"preUninstallFunction":{"type":"string"},"uninstallerFunction":{"type":"string"},"externalInstallerFunction":{"type":"string"},"lastModified":{"type":"string","format":"date-time","readOnly":true},"_sharedImportIds":{"type":"array","items":{"type":"string"}},"_sharedExportIds":{"type":"array","items":{"type":"string"}},"_iClientIdMap":{"type":"array","items":{"type":"object","properties":{"_id":{"oneOf":[{"type":"string"},{"type":"boolean"}]},"_iClientIds":{"type":"array","items":{"type":"string"}},"connection":{"type":"object","properties":{"type":{"type":"string"}}}}}},"applications":{"type":"array","items":{"type":"string"},"description":"Application slugs (e.g. `netsuite`, `shopify`)."},"numInstalls":{"type":"integer","readOnly":true,"description":"Number of active installations of this connector."},"trialEnabled":{"type":"boolean","description":"Whether trial licenses are enabled for this connector. Setting\nto `true` requires `trialPeriod` and `_trialLicenseId`."},"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","properties":{"_iClientId":{"type":"string","format":"objectId"}}}}},"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/Connector"}}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"expires":{"type":"string","format":"date-time"},"created":{"type":"string","format":"date-time"},"opts":{"type":"object","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"licenses":{"type":"array","items":{"type":"object","properties":{"addOnEdition":{"type":"string"}}}}}}}}},"user":{"type":"object","properties":{"email":{"type":"string","format":"email"},"_id":{"type":"string","format":"objectId"},"name":{"type":"string"}}},"_integrationId":{"type":"string","format":"objectId"}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"LicenseCreateRequest":{"type":"object","required":["email","expires","opts"],"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"},"opts":{"type":"object","properties":{"connectorEdition":{"type":"string"},"addonLicenses":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"licenses":{"type":"array","items":{"type":"object","properties":{"addOnEdition":{"type":"string"}}}}}}}}}}},"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"expires":{"type":"string","format":"date-time"},"created":{"type":"string","format":"date-time"},"opts":{"type":"object","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"licenses":{"type":"array","items":{"type":"object","properties":{"addOnEdition":{"type":"string"}}}}}}}}},"user":{"type":"object","properties":{"email":{"type":"string","format":"email"},"_id":{"type":"string","format":"objectId"},"name":{"type":"string"}}},"_integrationId":{"type":"string","format":"objectId"}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"expires":{"type":"string","format":"date-time"},"created":{"type":"string","format":"date-time"},"opts":{"type":"object","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"licenses":{"type":"array","items":{"type":"object","properties":{"addOnEdition":{"type":"string"}}}}}}}}},"user":{"type":"object","properties":{"email":{"type":"string","format":"email"},"_id":{"type":"string","format":"objectId"},"name":{"type":"string"}}},"_integrationId":{"type":"string","format":"objectId"}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"License":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true},"expires":{"type":"string","format":"date-time"},"created":{"type":"string","format":"date-time"},"opts":{"type":"object","properties":{"connectorEdition":{"type":"string","description":"License tier (e.g. `standard`, `premium`, `enterprise`)."},"addonLicenses":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"licenses":{"type":"array","items":{"type":"object","properties":{"addOnEdition":{"type":"string"}}}}}}}}},"user":{"type":"object","properties":{"email":{"type":"string","format":"email"},"_id":{"type":"string","format":"objectId"},"name":{"type":"string"}}},"_integrationId":{"type":"string","format":"objectId"}}},"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.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.\
> \
> AI guidance:\
> \- The \`\_id\` must be a \*\*connector\*\* ID, not a template ID. Templates\
> &#x20; are installed via \`POST /v1/integrations/template/{\_id}\`.\
> \- \*\*422 \`invalid\_integration\_app\`\*\* if the connector is not associated\
> &#x20; with an integration that supports the install function.\
> \- \*\*404 \`invalid\_ref\` "Resource not found."\*\* for a bogus connector ID.

```json
{"openapi":"3.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.\n\nAI guidance:\n- The `_id` must be a **connector** ID, not a template ID. Templates\n  are installed via `POST /v1/integrations/template/{_id}`.\n- **422 `invalid_integration_app`** if the connector is not associated\n  with an integration that supports the install function.\n- **404 `invalid_ref` \"Resource not found.\"** for a bogus connector ID.","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.\
> Same validation as the install endpoint — the connector must be\
> associated with an integration that has the install function.\
> \
> AI guidance:\
> \- Use this before \`POST /v1/connectors/{\_id}/install\` to show the\
> &#x20; user what resources the install would create.\
> \- \*\*422 \`invalid\_integration\_app\`\*\* if the connector is not associated\
> &#x20; with an integration that supports the install function.\
> \- \*\*404 \`invalid\_ref\` "Resource not found."\*\* for a bogus connector ID.

```json
{"openapi":"3.1.0","info":{"title":"Connectors","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU 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.\nSame validation as the install endpoint — the connector must be\nassociated with an integration that has the install function.\n\nAI guidance:\n- Use this before `POST /v1/connectors/{_id}/install` to show the\n  user what resources the install would create.\n- **422 `invalid_integration_app`** if the connector is not associated\n  with an integration that supports the install function.\n- **404 `invalid_ref` \"Resource not found.\"** for a bogus connector ID.","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"}}}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.celigo.com/api/api-reference/connectors.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
