> 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"}}}}}}
```
