> 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/apim.md).

# APIM

APIM management endpoints for publishing integrator.io APIs, exports, and imports to the APIM platform, retrieving console redirect URLs, and configuring APIM account settings.

Most routes require the `apim:operations` permission and an enabled APIM license. Setup, validate, HRID validate, and resume routes are production-environment only.

### APIM schema

## The ManageApiResponse object

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"components":{"schemas":{"ManageApiResponse":{"type":"object","description":"API object returned after publishing a resource to APIM.","properties":{"id":{"type":"string","description":"APIM API identifier."},"environmentId":{"type":"string","description":"APIM environment identifier."},"name":{"type":"string","description":"API display name in APIM."},"version":{"type":"string","description":"API version string."},"description":{"type":"string","description":"API description in APIM."},"context_path":{"type":"string","description":"Published context path."},"state":{"type":"string","description":"Runtime state of the API in APIM."},"visibility":{"type":"string","description":"API visibility in APIM."}},"additionalProperties":true}}}}
```

## Get APIM console redirect URL

> Returns a signed URL that opens the APIM console home page for the account.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"RedirectUrl":{"type":"object","description":"Signed redirect URL for the APIM console.","required":["url"],"properties":{"url":{"type":"string","description":"Fully qualified URL to open in the APIM console."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/redirect":{"get":{"summary":"Get APIM console redirect URL","description":"Returns a signed URL that opens the APIM console home page for the account.","operationId":"getApimRedirect","tags":["APIM"],"responses":{"200":{"description":"Redirect URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"},"500":{"description":"Failed to generate APIM console JWT token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Get APIM analytics redirect URL

> Returns a signed URL that opens the APIM analytics dashboard for the account.\
> Optionally scope the dashboard to a time range with \`from\` and \`to\`.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"RedirectUrl":{"type":"object","description":"Signed redirect URL for the APIM console.","required":["url"],"properties":{"url":{"type":"string","description":"Fully qualified URL to open in the APIM console."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/apim/redirect/analytics":{"get":{"summary":"Get APIM analytics redirect URL","description":"Returns a signed URL that opens the APIM analytics dashboard for the account.\nOptionally scope the dashboard to a time range with `from` and `to`.","operationId":"getApimRedirectAnalytics","tags":["APIM"],"parameters":[{"name":"from","in":"query","description":"Start timestamp in milliseconds for the analytics window.","schema":{"type":"number"}},{"name":"to","in":"query","description":"End timestamp in milliseconds for the analytics window.","schema":{"type":"number"}}],"responses":{"200":{"description":"Redirect URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"}}}}}}
```

## Get APIM resource view URL

> Returns a signed URL that opens a published resource in the APIM console.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"RedirectUrl":{"type":"object","description":"Signed redirect URL for the APIM console.","required":["url"],"properties":{"url":{"type":"string","description":"Fully qualified URL to open in the APIM console."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/{apiId}/{modelPlural}/{_id}/view":{"get":{"summary":"Get APIM resource view URL","description":"Returns a signed URL that opens a published resource in the APIM console.","operationId":"getApimResourceView","tags":["APIM"],"parameters":[{"name":"apiId","in":"path","description":"APIM API identifier.","required":true,"schema":{"type":"string"}},{"name":"modelPlural","in":"path","description":"Integrator.io resource collection name.","required":true,"schema":{"type":"string","enum":["exports","imports","apis"]}},{"name":"_id","in":"path","description":"Integrator.io resource identifier.","required":true,"schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Redirect URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"400":{"description":"Resource is not published to APIM.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## List APIM APIs

> Returns APIs published in the APIM platform for the account.\
> Results are paginated with \`page\` and \`perPage\`.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ApimApisListResponse":{"type":"object","description":"Paginated list of APIs published in the APIM platform.","properties":{"apis":{"type":"object","description":"APIM API search result.","properties":{"data":{"type":"array","description":"APIM API records for the current page.","items":{"$ref":"#/components/schemas/ApimApiSummary"}},"pagination":{"$ref":"#/components/schemas/ApimApisPagination"},"links":{"$ref":"#/components/schemas/ApimApisLinks"}}}}},"ApimApiSummary":{"type":"object","description":"An API record returned by the APIM platform.","properties":{"id":{"type":"string","description":"APIM API identifier."},"crossId":{"type":"string","description":"Identifier that links the same API across environments."},"name":{"type":"string","description":"API display name."},"description":{"type":"string","description":"Short description of the API."},"apiVersion":{"type":"string","description":"API version label shown in the developer portal."},"definitionVersion":{"type":"string","enum":["V1","V2","V4","FEDERATED"],"description":"API definition format version."},"state":{"type":"string","enum":["CLOSED","INITIALIZED","STARTED","STOPPED","STOPPING"],"description":"Runtime state of the API on the gateway."},"deploymentState":{"type":"string","enum":["DEPLOYED","NEED_REDEPLOY"],"description":"Deployment state relative to the gateway."},"visibility":{"type":"string","enum":["PUBLIC","PRIVATE"],"description":"Visibility of the API in the developer portal."},"lifecycleState":{"type":"string","enum":["CREATED","PUBLISHED","UNPUBLISHED","DEPRECATED","ARCHIVED"],"description":"Portal lifecycle state of the API."},"groups":{"type":"array","description":"Group identifiers granting team access to the API.","items":{"type":"string"}},"labels":{"type":"array","description":"Free-form labels associated with the API.","items":{"type":"string"}},"tags":{"type":"array","description":"Sharding tags associated with the API.","items":{"type":"string"}},"deployedAt":{"type":"string","format":"date-time","description":"Timestamp when the API was last deployed."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the API was created."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the API was last updated."}},"additionalProperties":true},"ApimApisPagination":{"type":"object","description":"Pagination metadata for an APIM API search result.","properties":{"page":{"type":"integer","description":"The current page number."},"perPage":{"type":"integer","description":"The number of items requested per page."},"pageCount":{"type":"integer","description":"The total number of pages."},"pageItemsCount":{"type":"integer","description":"The number of items on the current page."},"totalCount":{"type":"integer","format":"int64","description":"The total number of matching APIs."}}},"ApimApisLinks":{"type":"object","description":"Pagination links for an APIM API search result.","properties":{"self":{"type":"string","description":"Link to the current page."},"first":{"type":"string","description":"Link to the first page."},"last":{"type":"string","description":"Link to the last page."},"previous":{"type":"string","description":"Link to the previous page; absent on the first page."},"next":{"type":"string","description":"Link to the next page; absent on the last page."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/apim/apis":{"get":{"summary":"List APIM APIs","description":"Returns APIs published in the APIM platform for the account.\nResults are paginated with `page` and `perPage`.","operationId":"listApimApis","tags":["APIM"],"parameters":[{"name":"page","in":"query","description":"Page number for APIM API search results.","schema":{"type":"integer","default":1}},{"name":"perPage","in":"query","description":"Number of APIs to return per page.","schema":{"type":"integer","default":10}}],"responses":{"200":{"description":"Paginated APIM API list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimApisListResponse"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"}}}}}}
```

## Publish resource to new APIM API

> Publishes an integrator.io resource to APIM as a new API.\
> \
> Requires \`apim:operations\` permission and an enabled APIM license.\
> Custom webhooks (non-integrator-extension) are rejected with 400.\
> Upstream API management errors may be returned with the upstream HTTP status.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ManageApiCreateRequest":{"type":"object","description":"Payload for publishing an integrator.io resource to APIM as a new API.","required":["contextPath","flowName"],"properties":{"contextPath":{"type":"string","description":"Context path for the new APIM API (without leading slash)."},"flowName":{"type":"string","description":"Flow name to associate with the published API."},"method":{"type":"string","description":"HTTP method exposed by the published API endpoint. Defaults to POST."},"definitionVersion":{"type":"string","enum":["v2","v4"],"description":"API definition version; omit for legacy v2 behavior."}}},"ManageApiResponse":{"type":"object","description":"API object returned after publishing a resource to APIM.","properties":{"id":{"type":"string","description":"APIM API identifier."},"environmentId":{"type":"string","description":"APIM environment identifier."},"name":{"type":"string","description":"API display name in APIM."},"version":{"type":"string","description":"API version string."},"description":{"type":"string","description":"API description in APIM."},"context_path":{"type":"string","description":"Published context path."},"state":{"type":"string","description":"Runtime state of the API in APIM."},"visibility":{"type":"string","description":"API visibility in APIM."}},"additionalProperties":true},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/{modelPlural}/{_id}/manageAPI":{"post":{"summary":"Publish resource to new APIM API","description":"Publishes an integrator.io resource to APIM as a new API.\n\nRequires `apim:operations` permission and an enabled APIM license.\nCustom webhooks (non-integrator-extension) are rejected with 400.\nUpstream API management errors may be returned with the upstream HTTP status.","operationId":"publishResourceToApim","tags":["APIM"],"parameters":[{"name":"modelPlural","in":"path","description":"Integrator.io resource collection name.","required":true,"schema":{"type":"string","enum":["exports","imports","apis"]}},{"name":"_id","in":"path","description":"Integrator.io resource identifier.","required":true,"schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManageApiCreateRequest"}}}},"responses":{"200":{"description":"Published APIM API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManageApiResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Publish resource to existing APIM API

> Publishes an integrator.io resource to an existing APIM API.\
> \
> Requires \`apim:operations\` permission and an enabled APIM license.\
> Upstream API management errors may be returned with the upstream HTTP status.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ManageApiUpdateRequest":{"type":"object","description":"Payload for publishing an integrator.io resource to an existing APIM API.","required":["apiId","flowName"],"properties":{"apiId":{"type":"string","description":"APIM API identifier to publish the resource into."},"flowName":{"type":"string","description":"Flow name to associate with the published API."},"method":{"type":"string","description":"HTTP method exposed by the published API endpoint."}}},"ManageApiResponse":{"type":"object","description":"API object returned after publishing a resource to APIM.","properties":{"id":{"type":"string","description":"APIM API identifier."},"environmentId":{"type":"string","description":"APIM environment identifier."},"name":{"type":"string","description":"API display name in APIM."},"version":{"type":"string","description":"API version string."},"description":{"type":"string","description":"API description in APIM."},"context_path":{"type":"string","description":"Published context path."},"state":{"type":"string","description":"Runtime state of the API in APIM."},"visibility":{"type":"string","description":"API visibility in APIM."}},"additionalProperties":true},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/{modelPlural}/{_id}/manageAPI":{"put":{"summary":"Publish resource to existing APIM API","description":"Publishes an integrator.io resource to an existing APIM API.\n\nRequires `apim:operations` permission and an enabled APIM license.\nUpstream API management errors may be returned with the upstream HTTP status.","operationId":"updateResourceInApim","tags":["APIM"],"parameters":[{"name":"modelPlural","in":"path","description":"Integrator.io resource collection name.","required":true,"schema":{"type":"string","enum":["exports","imports","apis"]}},{"name":"_id","in":"path","description":"Integrator.io resource identifier.","required":true,"schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManageApiUpdateRequest"}}}},"responses":{"200":{"description":"Updated APIM API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManageApiResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Publish OpenAPI spec to APIM API

> Publishes an OpenAPI specification to an existing APIM API.\
> \
> When a signed URL is not required for the resource type, the server\
> generates the OpenAPI document from the resource. The resource must\
> already be published to the given \`apiId\` (400 if not).\
> \
> Upstream API management errors may be returned with the upstream HTTP status.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"OpenApiSpecPublishRequest":{"type":"object","description":"Payload for publishing an OpenAPI specification to an APIM API.","properties":{"signedUrl":{"type":"string","description":"Signed S3 URL containing the OpenAPI specification to publish."}}},"OpenApiSpecPublishResponse":{"type":"object","description":"APIM document record created after publishing an OpenAPI specification.","properties":{"id":{"type":"string","description":"APIM document identifier."},"name":{"type":"string","description":"Document name in APIM."},"type":{"type":"string","description":"Document type in APIM."},"content":{"type":"string","description":"OpenAPI specification content uploaded to APIM."}},"additionalProperties":true},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/{apiId}/{modelPlural}/{_id}/openAPIspec":{"post":{"summary":"Publish OpenAPI spec to APIM API","description":"Publishes an OpenAPI specification to an existing APIM API.\n\nWhen a signed URL is not required for the resource type, the server\ngenerates the OpenAPI document from the resource. The resource must\nalready be published to the given `apiId` (400 if not).\n\nUpstream API management errors may be returned with the upstream HTTP status.","operationId":"publishOpenApiSpecToApim","tags":["APIM"],"parameters":[{"name":"apiId","in":"path","description":"APIM API identifier.","required":true,"schema":{"type":"string"}},{"name":"modelPlural","in":"path","description":"Integrator.io resource collection name.","required":true,"schema":{"type":"string","enum":["exports","imports","apis"]}},{"name":"_id","in":"path","description":"Integrator.io resource identifier.","required":true,"schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiSpecPublishRequest"}}}},"responses":{"200":{"description":"Published OpenAPI document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiSpecPublishResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Set up APIM account

> Provisions APIM for the account with a subdomain and service account email.\
> Processing is asynchronous and returns \`202 Accepted\` with an empty body.\
> \
> Production environment only. Requires \`apim:operations\` permission.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ApimSetupRequest":{"type":"object","description":"Initial APIM account setup payload.","required":["subdomain","serviceAccountEmail"],"properties":{"subdomain":{"type":"string","description":"Requested APIM subdomain for the account."},"serviceAccountEmail":{"type":"string","format":"email","description":"Service account email for APIM management operations."}}},"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":{"202-accepted":{"description":"Request accepted for asynchronous processing. Response has no body."},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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"}}}},"409-conflict":{"description":"Conflict — the submitted value is already in use.","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/apim/setup":{"post":{"summary":"Set up APIM account","description":"Provisions APIM for the account with a subdomain and service account email.\nProcessing is asynchronous and returns `202 Accepted` with an empty body.\n\nProduction environment only. Requires `apim:operations` permission.","operationId":"setupApim","tags":["APIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimSetupRequest"}}}},"responses":{"202":{"$ref":"#/components/responses/202-accepted"},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"},"409":{"$ref":"#/components/responses/409-conflict"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Update APIM account settings

> Updates the service account email for an existing APIM account configuration.\
> \
> Production environment only. Requires \`apim:operations\` permission.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ApimSetupUpdateRequest":{"type":"object","description":"Update payload for an existing APIM account configuration.","required":["serviceAccountEmail"],"properties":{"serviceAccountEmail":{"type":"string","format":"email","description":"Updated service account email for APIM management operations."}}},"ApimSetupUpdateResponse":{"type":"object","description":"Response after updating APIM service account email.","required":["serviceAccountEmail"],"properties":{"serviceAccountEmail":{"type":"string","format":"email","description":"Updated service account email for APIM management operations."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"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/apim/setup":{"put":{"summary":"Update APIM account settings","description":"Updates the service account email for an existing APIM account configuration.\n\nProduction environment only. Requires `apim:operations` permission.","operationId":"updateApimSetup","tags":["APIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimSetupUpdateRequest"}}}},"responses":{"200":{"description":"Updated service account email.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimSetupUpdateResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Validate APIM subdomain

> Checks whether a subdomain is available for APIM account setup.\
> \
> Production environment only.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ValidationResult":{"type":"object","description":"Result of an APIM subdomain or environment HRID availability check.","required":["valid"],"properties":{"valid":{"type":"boolean","description":"When true, the submitted value is available for use."}}},"ApimValidationFailure":{"type":"object","description":"Validation failure for APIM subdomain or environment HRID checks.","required":["valid","errors"],"properties":{"valid":{"type":"boolean","enum":[false],"description":"Always false when validation failed."},"errors":{"type":"array","description":"Validation errors.","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error message."}},"required":["message"]}}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/apim/validate":{"put":{"summary":"Validate APIM subdomain","description":"Checks whether a subdomain is available for APIM account setup.\n\nProduction environment only.","operationId":"validateApimSubdomain","tags":["APIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["subdomain"],"properties":{"subdomain":{"type":"string","description":"Subdomain to validate."}}}}}},"responses":{"200":{"description":"Subdomain is available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResult"}}}},"400":{"description":"Invalid subdomain format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimValidationFailure"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"409":{"description":"Subdomain is not available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimValidationFailure"}}}}}}}}}
```

## Validate APIM environment HRID

> Checks whether an environment HRID is available for APIM configuration.\
> \
> Production environment only.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ValidationResult":{"type":"object","description":"Result of an APIM subdomain or environment HRID availability check.","required":["valid"],"properties":{"valid":{"type":"boolean","description":"When true, the submitted value is available for use."}}},"ApimValidationFailure":{"type":"object","description":"Validation failure for APIM subdomain or environment HRID checks.","required":["valid","errors"],"properties":{"valid":{"type":"boolean","enum":[false],"description":"Always false when validation failed."},"errors":{"type":"array","description":"Validation errors.","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error message."}},"required":["message"]}}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/apim/hrid/validate":{"put":{"summary":"Validate APIM environment HRID","description":"Checks whether an environment HRID is available for APIM configuration.\n\nProduction environment only.","operationId":"validateApimEnvironmentHrid","tags":["APIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["environmentHRID"],"properties":{"environmentHRID":{"type":"string","description":"Environment HRID to validate."}}}}}},"responses":{"200":{"description":"Environment HRID is available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResult"}}}},"400":{"description":"Invalid environment HRID format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimValidationFailure"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"409":{"description":"Environment HRID is not available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimValidationFailure"}}}}}}}}}
```

## Get APIM settings

> Returns the APIM subdomain and service account email configured for the account.

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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":{"ApimSettings":{"type":"object","description":"APIM account configuration for the current user.","properties":{"subdomain":{"type":"string","description":"APIM subdomain assigned to the account."},"serviceAccountEmail":{"type":"string","format":"email","description":"Service account email used for APIM management operations."}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/apim/settings":{"get":{"summary":"Get APIM settings","description":"Returns the APIM subdomain and service account email configured for the account.","operationId":"getApimSettings","tags":["APIM"],"responses":{"200":{"description":"APIM settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApimSettings"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"}}}}}}
```

## Resume APIM

> Resumes APIM for the account after it has been paused or suspended.\
> \
> Production environment only. Requires \`manage:license\` permission (not\
> \`apim:operations\`). Returns \`204\` even when APIM is not yet provisioned\
> (no \`orgId\` on the user).

```json
{"openapi":"3.2.0","info":{"title":"APIM","version":"1.0.0"},"tags":[{"name":"APIM","description":"APIM management endpoints for publishing integrator.io APIs, exports, and\nimports to the APIM platform, retrieving console\nredirect URLs, and configuring APIM account settings.\n\nMost routes require the `apim:operations` permission and an enabled APIM\nlicense. Setup, validate, HRID validate, and resume routes are\nproduction-environment only.\n\n## APIM schema\n\n{% openapi-schemas spec=\"apim\" schemas=\"ManageApiResponse\" 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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\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/resumeAPIM":{"put":{"summary":"Resume APIM","description":"Resumes APIM for the account after it has been paused or suspended.\n\nProduction environment only. Requires `manage:license` permission (not\n`apim:operations`). Returns `204` even when APIM is not yet provisioned\n(no `orgId` on the user).","operationId":"resumeApim","tags":["APIM"],"responses":{"204":{"description":"APIM resumed successfully, or APIM was not provisioned."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://developer.celigo.com/api/api-reference/apim.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
