> 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/data-stores/lookup-caches.md).

# Lookup Caches

Lookup caches are in-memory key-value stores used during flow execution for fast lookups, deduplication, and cross-reference resolution.

Lookup caches are account-level resources — they are not scoped to a specific integration.

* Maximum size: 50 MB per cache
* Aggregate limit: 1 GB per environment
* Data is managed through separate endpoints (`getData`, `upsert`, `delete`, `purge`) that proxy to the Lookup Cache service

### Lookup cache schema

## The LookupCache object

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"components":{"schemas":{"LookupCache":{"type":"object","required":["_id","_userId","createdAt","lastModified"],"description":"Lookup cache object as returned by the API.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who owns this lookup cache."},"_templateId":{"type":"string","format":"objectId","readOnly":true,"description":"Template this lookup cache was installed from, when it originated from a template."},"_sourceId":{"type":"string","format":"objectId","readOnly":true,"description":"Origin resource ID when this cache was created by cloning or installing a template."},"size":{"type":"integer","minimum":0,"readOnly":true,"description":"Current size of the cached data in bytes. Maximum 50 MB per cache; 1 GB aggregate per environment."},"sizeInMB":{"type":"string","readOnly":true,"description":"Human-readable size rounded up to the nearest 5 MB increment.\n`\"0 MB\"` for empty caches, `\"<5 MB\"` through `\"<50 MB\"` for\nnon-empty caches, `\"50 MB\"` at the per-cache cap."},"draft":{"type":"boolean","readOnly":true,"description":"When true, this cache was created as a draft by the AI-assisted builder and has not yet been confirmed."},"draftExpiresAt":{"type":"string","format":"date-time","readOnly":true,"description":"When the draft cache expires and will be automatically deleted. Only present when `draft` is `true`."}}}]},"LookupCacheBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name."},"description":{"type":"string","maxLength":5120,"description":"Purpose or contents of the cache."},"includeDataInTemplatesAndCloning":{"type":"boolean","default":false,"description":"Whether to include the cached key-value data when this cache is\nused in templates or cloned. When `false` (default), only\nmetadata transfers. Set to `true` for static reference tables."},"externalId":{"type":"string","description":"Caller-supplied identifier for cross-system correlation."}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}}}}
```

## List lookup caches

> Returns lookup caches in the account.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"LookupCache":{"type":"object","required":["_id","_userId","createdAt","lastModified"],"description":"Lookup cache object as returned by the API.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who owns this lookup cache."},"_templateId":{"type":"string","format":"objectId","readOnly":true,"description":"Template this lookup cache was installed from, when it originated from a template."},"_sourceId":{"type":"string","format":"objectId","readOnly":true,"description":"Origin resource ID when this cache was created by cloning or installing a template."},"size":{"type":"integer","minimum":0,"readOnly":true,"description":"Current size of the cached data in bytes. Maximum 50 MB per cache; 1 GB aggregate per environment."},"sizeInMB":{"type":"string","readOnly":true,"description":"Human-readable size rounded up to the nearest 5 MB increment.\n`\"0 MB\"` for empty caches, `\"<5 MB\"` through `\"<50 MB\"` for\nnon-empty caches, `\"50 MB\"` at the per-cache cap."},"draft":{"type":"boolean","readOnly":true,"description":"When true, this cache was created as a draft by the AI-assisted builder and has not yet been confirmed."},"draftExpiresAt":{"type":"string","format":"date-time","readOnly":true,"description":"When the draft cache expires and will be automatically deleted. Only present when `draft` is `true`."}}}]},"LookupCacheBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name."},"description":{"type":"string","maxLength":5120,"description":"Purpose or contents of the cache."},"includeDataInTemplatesAndCloning":{"type":"boolean","default":false,"description":"Whether to include the cached key-value data when this cache is\nused in templates or cloned. When `false` (default), only\nmetadata transfers. Set to `true` for static reference tables."},"externalId":{"type":"string","description":"Caller-supplied identifier for cross-system correlation."}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/lookupcaches":{"get":{"summary":"List lookup caches","description":"Returns lookup caches in the account.","operationId":"listLookupCaches","tags":["Lookup Caches"],"parameters":[{"name":"limit","in":"query","description":"Maximum number of caches to return per page. Omit to return all caches.","schema":{"type":"integer","minimum":1}},{"name":"externalId","in":"query","description":"Filter to caches matching this exact external identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"One or more lookup caches found.","headers":{"Link":{"description":"RFC 5988 pagination links. Contains a `rel=\"next\"` entry when\nmore pages remain; absent on the final page.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LookupCache"}}}}},"204":{"description":"No lookup caches exist in the account."},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Create a lookup cache

> Creates a new empty lookup cache. Populate it afterwards via\
> \`POST /v1/lookupcaches/{\_id}/data\`.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Writable fields for creating or updating a lookup cache.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"}]},"LookupCacheBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name."},"description":{"type":"string","maxLength":5120,"description":"Purpose or contents of the cache."},"includeDataInTemplatesAndCloning":{"type":"boolean","default":false,"description":"Whether to include the cached key-value data when this cache is\nused in templates or cloned. When `false` (default), only\nmetadata transfers. Set to `true` for static reference tables."},"externalId":{"type":"string","description":"Caller-supplied identifier for cross-system correlation."}}},"LookupCache":{"type":"object","required":["_id","_userId","createdAt","lastModified"],"description":"Lookup cache object as returned by the API.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who owns this lookup cache."},"_templateId":{"type":"string","format":"objectId","readOnly":true,"description":"Template this lookup cache was installed from, when it originated from a template."},"_sourceId":{"type":"string","format":"objectId","readOnly":true,"description":"Origin resource ID when this cache was created by cloning or installing a template."},"size":{"type":"integer","minimum":0,"readOnly":true,"description":"Current size of the cached data in bytes. Maximum 50 MB per cache; 1 GB aggregate per environment."},"sizeInMB":{"type":"string","readOnly":true,"description":"Human-readable size rounded up to the nearest 5 MB increment.\n`\"0 MB\"` for empty caches, `\"<5 MB\"` through `\"<50 MB\"` for\nnon-empty caches, `\"50 MB\"` at the per-cache cap."},"draft":{"type":"boolean","readOnly":true,"description":"When true, this cache was created as a draft by the AI-assisted builder and has not yet been confirmed."},"draftExpiresAt":{"type":"string","format":"date-time","readOnly":true,"description":"When the draft cache expires and will be automatically deleted. Only present when `draft` is `true`."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/lookupcaches":{"post":{"summary":"Create a lookup cache","description":"Creates a new empty lookup cache. Populate it afterwards via\n`POST /v1/lookupcaches/{_id}/data`.","operationId":"createLookupCache","tags":["Lookup Caches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"201":{"description":"Lookup cache created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCache"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Get a lookup cache

> Returns configuration, metadata, and current size of a lookup cache.\
> This returns metadata only — to read the cached key-value data,\
> use \`POST /v1/lookupcaches/{\_id}/getData\`.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"LookupCache":{"type":"object","required":["_id","_userId","createdAt","lastModified"],"description":"Lookup cache object as returned by the API.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who owns this lookup cache."},"_templateId":{"type":"string","format":"objectId","readOnly":true,"description":"Template this lookup cache was installed from, when it originated from a template."},"_sourceId":{"type":"string","format":"objectId","readOnly":true,"description":"Origin resource ID when this cache was created by cloning or installing a template."},"size":{"type":"integer","minimum":0,"readOnly":true,"description":"Current size of the cached data in bytes. Maximum 50 MB per cache; 1 GB aggregate per environment."},"sizeInMB":{"type":"string","readOnly":true,"description":"Human-readable size rounded up to the nearest 5 MB increment.\n`\"0 MB\"` for empty caches, `\"<5 MB\"` through `\"<50 MB\"` for\nnon-empty caches, `\"50 MB\"` at the per-cache cap."},"draft":{"type":"boolean","readOnly":true,"description":"When true, this cache was created as a draft by the AI-assisted builder and has not yet been confirmed."},"draftExpiresAt":{"type":"string","format":"date-time","readOnly":true,"description":"When the draft cache expires and will be automatically deleted. Only present when `draft` is `true`."}}}]},"LookupCacheBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name."},"description":{"type":"string","maxLength":5120,"description":"Purpose or contents of the cache."},"includeDataInTemplatesAndCloning":{"type":"boolean","default":false,"description":"Whether to include the cached key-value data when this cache is\nused in templates or cloned. When `false` (default), only\nmetadata transfers. Set to `true` for static reference tables."},"externalId":{"type":"string","description":"Caller-supplied identifier for cross-system correlation."}}},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/lookupcaches/{_id}":{"get":{"summary":"Get a lookup cache","description":"Returns configuration, metadata, and current size of a lookup cache.\nThis returns metadata only — to read the cached key-value data,\nuse `POST /v1/lookupcaches/{_id}/getData`.","operationId":"getLookupCacheById","tags":["Lookup Caches"],"parameters":[{"name":"_id","in":"path","description":"Lookup cache ID.","required":true,"schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Lookup cache found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCache"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Update a lookup cache

> Replaces the cache's writable fields. Read-only fields (\`\_id\`,\
> \`\_userId\`, \`size\`, \`sizeInMB\`, timestamps) are silently ignored.\
> To write cached data, use \`POST /v1/lookupcaches/{\_id}/data\`.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Writable fields for creating or updating a lookup cache.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"}]},"LookupCacheBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name."},"description":{"type":"string","maxLength":5120,"description":"Purpose or contents of the cache."},"includeDataInTemplatesAndCloning":{"type":"boolean","default":false,"description":"Whether to include the cached key-value data when this cache is\nused in templates or cloned. When `false` (default), only\nmetadata transfers. Set to `true` for static reference tables."},"externalId":{"type":"string","description":"Caller-supplied identifier for cross-system correlation."}}},"LookupCache":{"type":"object","required":["_id","_userId","createdAt","lastModified"],"description":"Lookup cache object as returned by the API.","allOf":[{"$ref":"#/components/schemas/LookupCacheBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who owns this lookup cache."},"_templateId":{"type":"string","format":"objectId","readOnly":true,"description":"Template this lookup cache was installed from, when it originated from a template."},"_sourceId":{"type":"string","format":"objectId","readOnly":true,"description":"Origin resource ID when this cache was created by cloning or installing a template."},"size":{"type":"integer","minimum":0,"readOnly":true,"description":"Current size of the cached data in bytes. Maximum 50 MB per cache; 1 GB aggregate per environment."},"sizeInMB":{"type":"string","readOnly":true,"description":"Human-readable size rounded up to the nearest 5 MB increment.\n`\"0 MB\"` for empty caches, `\"<5 MB\"` through `\"<50 MB\"` for\nnon-empty caches, `\"50 MB\"` at the per-cache cap."},"draft":{"type":"boolean","readOnly":true,"description":"When true, this cache was created as a draft by the AI-assisted builder and has not yet been confirmed."},"draftExpiresAt":{"type":"string","format":"date-time","readOnly":true,"description":"When the draft cache expires and will be automatically deleted. Only present when `draft` is `true`."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}":{"put":{"summary":"Update a lookup cache","description":"Replaces the cache's writable fields. Read-only fields (`_id`,\n`_userId`, `size`, `sizeInMB`, timestamps) are silently ignored.\nTo write cached data, use `POST /v1/lookupcaches/{_id}/data`.","operationId":"updateLookupCache","tags":["Lookup Caches"],"parameters":[{"name":"_id","in":"path","description":"Lookup cache ID.","required":true,"schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"200":{"description":"Lookup cache updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCache"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Delete a lookup cache

> Soft-deletes a lookup cache and all its data. Retained for 30 days\
> before permanent removal. To clear data without deleting the cache\
> itself, use \`DELETE /v1/lookupcaches/{\_id}/data/purge\` instead.\
> \
> A cache that an export's or import's lookup still uses, or that an\
> integration's alias points at, can't be deleted (422). The delete also\
> removes the cache from every integration's \`\_registeredLookupCacheIds\`,\
> and restoring it from the recycle bin doesn't register it again.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/lookupcaches/{_id}":{"delete":{"summary":"Delete a lookup cache","description":"Soft-deletes a lookup cache and all its data. Retained for 30 days\nbefore permanent removal. To clear data without deleting the cache\nitself, use `DELETE /v1/lookupcaches/{_id}/data/purge` instead.\n\nA cache that an export's or import's lookup still uses, or that an\nintegration's alias points at, can't be deleted (422). The delete also\nremoves the cache from every integration's `_registeredLookupCacheIds`,\nand restoring it from the recycle bin doesn't register it again.","operationId":"deleteLookupCache","tags":["Lookup Caches"],"parameters":[{"name":"_id","in":"path","description":"Lookup cache ID.","required":true,"schema":{"type":"string","format":"objectId"}}],"responses":{"204":{"description":"Lookup cache deleted."},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"description":"The cache is still in use. An integration's `aliases[]` points at it (checked first):\nregistering a cache adds such an alias, so remove it from that integration's `aliases`.\nOr an export's or import's lookup uses it: the message names each such export or import\n(\"must be deleted before you can delete lookupcache\"), and for an export in a flow names\nthat flow as well, but removing the lookup from the step is enough. Then delete again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Patch a lookup cache

> Partially updates a lookup cache using a JSON Patch document (RFC 6902).\
> Only \`replace\` is supported, on these paths:\
> \
> \| Path | Description |\
> \|------|-------------|\
> \| \`/name\` | Cache display name |\
> \| \`/description\` | Cache description |\
> \
> All other paths or operations are rejected.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"JsonPatchRequest":{"type":"array","description":"A JSON Patch document (RFC 6902). Send an array of patch\noperations on whitelisted fields — all other paths are rejected\nwith 422.","minItems":1,"items":{"$ref":"#/components/schemas/JsonPatchOperation"}},"JsonPatchOperation":{"type":"object","description":"A single JSON Patch operation (RFC 6902).","required":["op","path"],"properties":{"op":{"type":"string","enum":["replace","add","remove"],"description":"The operation to perform."},"path":{"type":"string","description":"JSON Pointer (RFC 6901) to the field to patch. Only\nwhitelisted paths are accepted — unlisted paths return\n`422` with `\"<path> is not a whitelisted property\"`."},"value":{"description":"The new value to set. Required for `replace` and `add`, omit for `remove`."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}":{"patch":{"summary":"Patch a lookup cache","description":"Partially updates a lookup cache using a JSON Patch document (RFC 6902).\nOnly `replace` is supported, on these paths:\n\n| Path | Description |\n|------|-------------|\n| `/name` | Cache display name |\n| `/description` | Cache description |\n\nAll other paths or operations are rejected.","operationId":"patchLookupCache","tags":["Lookup Caches"],"parameters":[{"name":"_id","in":"path","description":"Lookup cache ID.","required":true,"schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPatchRequest"}}}},"responses":{"204":{"description":"Lookup cache patched successfully"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Preview cloning a lookup cache

> Returns resources that would be created by cloning this cache.\
> Lookup caches have no transitive dependencies, so the response\
> contains only the cache itself. No resources are created. Whether\
> the clone includes cached data depends on the source cache's\
> \`includeDataInTemplatesAndCloning\` setting.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"ClonePreviewResponse":{"type":"object","description":"Preview of the resources that would be created by a clone operation.\nEach object in the `objects` array represents a resource that will be\ncloned, including the target resource and all transitive dependencies\n(connections, scripts, exports, imports, etc.).\n","properties":{"objects":{"type":"array","description":"List of resources that would be created by the clone. Always includes\nthe target resource and may include transitive dependencies such as\nconnections, scripts, exports, imports, async helpers, and lookup caches.\n","items":{"type":"object","properties":{"model":{"type":"string","description":"The model type of the resource. Observed values include\nAsyncHelper, Connection, Export, Flow, Import, Integration,\nLookupCache, Script, and Tool.\n"},"doc":{"type":"object","description":"The full resource document that would be created by the clone.","additionalProperties":true}}}},"stackRequired":{"type":"boolean","description":"`true` when the resource or one of its dependencies references a stack (a hook or\nwrapper connection that runs on a stack). Send `_stackId` in the clone request: without\nit the clone fails with 400 `stack_not_found`."},"_stackId":{"type":["string","null"],"description":"The first stack the resource or a dependency references, or null. Pass it, or another\nstack in the target environment, as `_stackId` in the clone request; the clone points\nevery stack reference at that one stack."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}/clone/preview":{"get":{"summary":"Preview cloning a lookup cache","description":"Returns resources that would be created by cloning this cache.\nLookup caches have no transitive dependencies, so the response\ncontains only the cache itself. No resources are created. Whether\nthe clone includes cached data depends on the source cache's\n`includeDataInTemplatesAndCloning` setting.","operationId":"previewCloneLookupCache","tags":["Lookup Caches"],"parameters":[{"name":"_id","in":"path","description":"Lookup cache ID.","required":true,"schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Clone preview retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClonePreviewResponse"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Upsert entries into a lookup cache

> Writes key-value entries to a lookup cache. Keys that already exist are\
> overwritten; new keys are created. There is no insert-only, create-if-absent or\
> compare-and-set mode — a write never fails because the key exists, so a\
> "first writer wins" claim cannot be built on this call alone: make the claim\
> on the flow's import step instead (\`ignoreExisting\` with a \`getData\` lookup on\
> the key, under \`idLockTemplate\` on the same key), which serializes\
> read-then-write per key. Values may be null, numbers, booleans,\
> strings, or objects — arrays at the top level are rejected (wrap them in an\
> object). One invalid entry fails the entire batch and nothing in it is written:\
> a bad value returns \`400 invalid\_value\`, an empty, missing, or over-length\
> key, or one holding a tab, newline, carriage return or NUL, returns\
> \`400 cache\_dynamodb\_invalid\_key\`, and a key that appears twice in the batch\
> returns 400 "Duplicate keys found in the request".\
> \
> One request takes at most 1000 entries, each entry at most 64 KB, and at most 5 MB of\
> JSON in all (413, "request entity too large!"). Callers uploading more than that should\
> split their payload; the Celigo CLI auto-batches at 1000 entries / 5 MB and concatenates\
> the per-key results.\
> Each cache is capped at 50 MB and the per-environment aggregate is 1 GB.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"LookupCacheDataUpsertRequest":{"type":"object","description":"Request body for upserting key-value entries into a lookup cache. `data` must be\na non-empty array. Keys already present are overwritten; new keys are created.\n\nOne request takes at most 1000 entries, each entry at most 64 KB, and at most 5 MB of\nJSON in all (413) — callers inserting more than that should split into multiple\nrequests (the Celigo CLI auto-batches at 1000 entries / 5 MB).","properties":{"data":{"type":"array","minItems":1,"description":"Entries to upsert. Must contain at least one item.","items":{"$ref":"#/components/schemas/LookupCacheDataEntry"}}},"required":["data"]},"LookupCacheDataEntry":{"type":"object","description":"A single key-value pair stored in a lookup cache. Values may be JSON null, number,\nboolean, string, or object, and each is read back with the type it was upserted\nwith. Top-level arrays are **rejected** at upsert with\n`400 invalid_value \"The value provided corresponding to the key: <k> is invalid\"`,\nas are objects that carry their own top-level `key` property; callers that need to\nstore an array should wrap it in an object (e.g. `{ \"items\": [...] }`).","properties":{"key":{"type":"string","minLength":1,"maxLength":255,"description":"Lookup key. Treated as an opaque string by the cache — case-sensitive, no\nnormalization. The same cache can hold multiple entries that differ only in\ncase (e.g. `CA` and `ca`). An upsert also refuses a key that holds a tab, a newline,\na carriage return or a NUL character, with the same `cache_dynamodb_invalid_key`."},"value":{"description":"Value associated with the key. Nested arrays inside an object are fine; a\ntop-level array is rejected — wrap it. Consumers should check the runtime type\nbefore use.","oneOf":[{"title":"Null value","type":"null"},{"title":"Number value","type":"number"},{"title":"Boolean value","type":"boolean"},{"title":"String value","type":"string"},{"title":"Object value","type":"object","additionalProperties":true}]}},"required":["key","value"]},"LookupCacheDataUpsertResponse":{"type":"object","description":"Response from a successful lookup-cache upsert. Contains a per-key success flag\nfor every entry in the request — in the same order as submitted.","properties":{"success":{"type":"boolean","description":"When true, the server accepted the upsert request. Individual key results are in `data`."},"data":{"type":"array","description":"Per-key results, one entry per submitted key.","items":{"$ref":"#/components/schemas/LookupCacheKeyResult"}}}},"LookupCacheKeyResult":{"type":"object","description":"Per-key result returned by the upsert and delete-keys endpoints. The `success`\nflag reflects whether the individual key operation succeeded; the wrapping\nresponse's `success` flag reflects whether the request as a whole was accepted.\n\nFor deletes, `success: true` is returned even for keys that did not exist in the\ncache — the API does not distinguish between \"deleted\" and \"absent.\"","properties":{"key":{"type":"string","description":"The key this result applies to."},"success":{"type":"boolean","description":"When true, the operation on this key completed successfully."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}/data":{"post":{"operationId":"upsertLookupCacheData","tags":["Lookup Caches"],"summary":"Upsert entries into a lookup cache","description":"Writes key-value entries to a lookup cache. Keys that already exist are\noverwritten; new keys are created. There is no insert-only, create-if-absent or\ncompare-and-set mode — a write never fails because the key exists, so a\n\"first writer wins\" claim cannot be built on this call alone: make the claim\non the flow's import step instead (`ignoreExisting` with a `getData` lookup on\nthe key, under `idLockTemplate` on the same key), which serializes\nread-then-write per key. Values may be null, numbers, booleans,\nstrings, or objects — arrays at the top level are rejected (wrap them in an\nobject). One invalid entry fails the entire batch and nothing in it is written:\na bad value returns `400 invalid_value`, an empty, missing, or over-length\nkey, or one holding a tab, newline, carriage return or NUL, returns\n`400 cache_dynamodb_invalid_key`, and a key that appears twice in the batch\nreturns 400 \"Duplicate keys found in the request\".\n\nOne request takes at most 1000 entries, each entry at most 64 KB, and at most 5 MB of\nJSON in all (413, \"request entity too large!\"). Callers uploading more than that should\nsplit their payload; the Celigo CLI auto-batches at 1000 entries / 5 MB and concatenates\nthe per-key results.\nEach cache is capped at 50 MB and the per-environment aggregate is 1 GB.","parameters":[{"name":"_id","in":"path","required":true,"description":"Lookup cache id.","schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataUpsertRequest"}}}},"responses":{"200":{"description":"Entries upserted. Per-key success flags in response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataUpsertResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"413":{"description":"The request body is over 5 MB of JSON. Split the batch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Delete specific keys from a lookup cache

> Removes named keys from a lookup cache. Send the keys to delete in the request\
> body. To wipe every entry instead, call \`DELETE /v1/lookupcaches/{\_id}/data/purge\`.\
> \
> Send the request with \`Content-Type: application/json\`. The body must be a\
> JSON object with a \`keys\` property; a request with no body is rejected as\
> \`missing\_parameter\`. The response reports \`success: true\` for every\
> submitted key, including keys that did not exist in the cache.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"LookupCacheDataDeleteRequest":{"type":"object","description":"Request body for deleting specific keys from a lookup cache. The `keys` array\nmay be empty (the endpoint returns `{success: true, data: []}`), but the field\nitself must be present — a request body missing `keys` is rejected with\n`missing_parameter`.\n\nTo remove every entry from a cache instead, call\n`DELETE /v1/lookupcaches/{_id}/data/purge`.","properties":{"keys":{"type":"array","description":"Keys to remove from the cache.","items":{"type":"string"}}},"required":["keys"]},"LookupCacheDataDeleteResponse":{"type":"object","description":"Response from a successful delete-keys call. Mirrors the upsert response shape:\none per-key result entry per submitted key, in submission order.\n\nNote: `success: true` is returned for every submitted key regardless of whether\nit actually existed in the cache — the endpoint does not distinguish between\n\"deleted\" and \"absent.\" Callers that need that distinction should read the\ncache first.","properties":{"success":{"type":"boolean","description":"When true, the server accepted the delete request. Individual key results are in `data`."},"data":{"type":"array","description":"Per-key results, one entry per submitted key.","items":{"$ref":"#/components/schemas/LookupCacheKeyResult"}}}},"LookupCacheKeyResult":{"type":"object","description":"Per-key result returned by the upsert and delete-keys endpoints. The `success`\nflag reflects whether the individual key operation succeeded; the wrapping\nresponse's `success` flag reflects whether the request as a whole was accepted.\n\nFor deletes, `success: true` is returned even for keys that did not exist in the\ncache — the API does not distinguish between \"deleted\" and \"absent.\"","properties":{"key":{"type":"string","description":"The key this result applies to."},"success":{"type":"boolean","description":"When true, the operation on this key completed successfully."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}/data":{"delete":{"operationId":"deleteLookupCacheDataKeys","tags":["Lookup Caches"],"summary":"Delete specific keys from a lookup cache","description":"Removes named keys from a lookup cache. Send the keys to delete in the request\nbody. To wipe every entry instead, call `DELETE /v1/lookupcaches/{_id}/data/purge`.\n\nSend the request with `Content-Type: application/json`. The body must be a\nJSON object with a `keys` property; a request with no body is rejected as\n`missing_parameter`. The response reports `success: true` for every\nsubmitted key, including keys that did not exist in the cache.","parameters":[{"name":"_id","in":"path","required":true,"description":"Lookup cache id.","schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataDeleteRequest"}}}},"responses":{"200":{"description":"Delete accepted. Per-key results in response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataDeleteResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Read entries from a lookup cache

> Returns entries stored in a lookup cache. Called as \`POST\` (not \`GET\`) so the\
> query — explicit keys or a prefix — can travel in the request body.\
> \
> Body variants:\
> &#x20; \- omitted or \`{}\` → first page of all entries (up to \~1000, unordered).\
> &#x20; \- \`{keys: \[...]}\` → one entry per requested key. Hits carry \`value\`; misses\
> &#x20;   carry \`error: {message}\` — missing keys are \*\*reported\*\*, not silently\
> &#x20;   omitted. Branch on \`error\` vs \`value\` when consuming the response.\
> &#x20; \- \`{startsWith: "prefix"}\` → every entry whose key begins with \`prefix\`\
> &#x20;   (case-sensitive).\
> \
> \`keys\` and \`startsWith\` are treated as mutually exclusive client-side; if both\
> are supplied the server honors \`keys\` and ignores \`startsWith\`. Keys are\
> case-sensitive. There is no pagination cursor for unfiltered reads; for\
> caches larger than \~1000 entries, use a prefix scheme with \`startsWith\`.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"LookupCacheDataReadRequest":{"type":"object","description":"Request body for reading entries from a lookup cache.\n\nAll fields are optional. If omitted, the endpoint returns the first page of the\ncache (up to ~1000 entries, unordered). `keys` and `startsWith` should be\ntreated as mutually exclusive — if both are supplied the server honors `keys`\nand ignores `startsWith`. An empty JSON body (`{}`) is equivalent to calling\nthe endpoint with no body.","properties":{"keys":{"type":"array","description":"Explicit keys to fetch. The response returns one `data[]` entry per\nrequested key: hits carry `value`, misses carry `error: {message}` — both\nsurface in the same array. Branch on the presence of `error` vs `value`\nwhen consuming the response.","items":{"type":"string"}},"startsWith":{"type":"string","description":"Key prefix filter. Returns every entry whose key begins with the supplied\nstring (case-sensitive). Useful for namespaced keys like\n`tenant-42/customer-…`."}}},"LookupCacheDataReadResponse":{"type":"object","description":"Response from a successful lookup-cache read. Contains the matching entries.\n\nWhen no filter is supplied, the response contains the first page of the cache\n(up to ~1000 entries). The API does not currently expose a pagination cursor for\nlarge caches — callers that need to iterate a cache larger than the page limit\nshould use `startsWith` to narrow the result set, or key their data with a known\nprefix scheme.","properties":{"success":{"type":"boolean","description":"When true, the read request completed successfully."},"data":{"type":"array","description":"Per-key results, one entry per key returned by the read. Hits carry `key` + `value`\n(`LookupCacheDataEntry`); misses on `keys[]`-filtered reads carry `key` + `error`\n(`LookupCacheDataMissingEntry`). Callers should switch on the presence of `error`\nvs `value` to distinguish. Order is not guaranteed.","items":{"oneOf":[{"$ref":"#/components/schemas/LookupCacheDataEntry"},{"$ref":"#/components/schemas/LookupCacheDataMissingEntry"}]}}}},"LookupCacheDataEntry":{"type":"object","description":"A single key-value pair stored in a lookup cache. Values may be JSON null, number,\nboolean, string, or object, and each is read back with the type it was upserted\nwith. Top-level arrays are **rejected** at upsert with\n`400 invalid_value \"The value provided corresponding to the key: <k> is invalid\"`,\nas are objects that carry their own top-level `key` property; callers that need to\nstore an array should wrap it in an object (e.g. `{ \"items\": [...] }`).","properties":{"key":{"type":"string","minLength":1,"maxLength":255,"description":"Lookup key. Treated as an opaque string by the cache — case-sensitive, no\nnormalization. The same cache can hold multiple entries that differ only in\ncase (e.g. `CA` and `ca`). An upsert also refuses a key that holds a tab, a newline,\na carriage return or a NUL character, with the same `cache_dynamodb_invalid_key`."},"value":{"description":"Value associated with the key. Nested arrays inside an object are fine; a\ntop-level array is rejected — wrap it. Consumers should check the runtime type\nbefore use.","oneOf":[{"title":"Null value","type":"null"},{"title":"Number value","type":"number"},{"title":"Boolean value","type":"boolean"},{"title":"String value","type":"string"},{"title":"Object value","type":"object","additionalProperties":true}]}},"required":["key","value"]},"LookupCacheDataMissingEntry":{"type":"object","description":"Per-key read result returned when a requested `keys[]` entry was not present in\nthe cache. Surfaces in `data[]` alongside successful `LookupCacheDataEntry`\nitems — callers should check for an `error` sub-object to distinguish hits from\nmisses.","properties":{"key":{"type":"string","description":"The key that was not found."},"error":{"type":"object","description":"Miss diagnostic.","properties":{"message":{"type":"string","description":"Human-readable explanation of the miss."}}}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/lookupcaches/{_id}/getData":{"post":{"operationId":"getLookupCacheData","tags":["Lookup Caches"],"summary":"Read entries from a lookup cache","description":"Returns entries stored in a lookup cache. Called as `POST` (not `GET`) so the\nquery — explicit keys or a prefix — can travel in the request body.\n\nBody variants:\n  - omitted or `{}` → first page of all entries (up to ~1000, unordered).\n  - `{keys: [...]}` → one entry per requested key. Hits carry `value`; misses\n    carry `error: {message}` — missing keys are **reported**, not silently\n    omitted. Branch on `error` vs `value` when consuming the response.\n  - `{startsWith: \"prefix\"}` → every entry whose key begins with `prefix`\n    (case-sensitive).\n\n`keys` and `startsWith` are treated as mutually exclusive client-side; if both\nare supplied the server honors `keys` and ignores `startsWith`. Keys are\ncase-sensitive. There is no pagination cursor for unfiltered reads; for\ncaches larger than ~1000 entries, use a prefix scheme with `startsWith`.","parameters":[{"name":"_id","in":"path","required":true,"description":"Lookup cache id.","schema":{"type":"string","format":"objectId"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataReadRequest"}}}},"responses":{"200":{"description":"Matched entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCacheDataReadResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Purge all data from a lookup cache

> Removes every entry from a lookup cache. The cache itself is preserved — only\
> its contents are cleared. Use this instead of deleting-and-recreating when you\
> want to keep the cache's \`\_id\`, name, and any references from flows intact.\
> This operation is irreversible. To delete a subset of keys, use\
> \`DELETE /v1/lookupcaches/{\_id}/data\` with a \`keys\` body.

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/lookupcaches/{_id}/data/purge":{"delete":{"operationId":"purgeLookupCacheData","tags":["Lookup Caches"],"summary":"Purge all data from a lookup cache","description":"Removes every entry from a lookup cache. The cache itself is preserved — only\nits contents are cleared. Use this instead of deleting-and-recreating when you\nwant to keep the cache's `_id`, name, and any references from flows intact.\nThis operation is irreversible. To delete a subset of keys, use\n`DELETE /v1/lookupcaches/{_id}/data` with a `keys` body.","parameters":[{"name":"_id","in":"path","required":true,"description":"Lookup cache id.","schema":{"type":"string","format":"objectId"}}],"responses":{"204":{"description":"Cache data was purged. No response body."},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## List dependencies of a lookup cache

> Returns the set of resources that depend on the specified resource.\
> The response is an object whose keys are dependent-resource types\
> (e.g. \`flows\`, \`imports\`) and whose values are arrays of dependency\
> entries. An empty object \`{}\` means no dependents exist (also\
> returned for a well-formatted but nonexistent id).

```json
{"openapi":"3.2.0","info":{"title":"Lookup Caches","version":"1.0.0"},"tags":[{"name":"Lookup Caches","description":"Lookup caches are in-memory key-value stores used during flow\nexecution for fast lookups, deduplication, and cross-reference\nresolution.\n\nLookup caches are account-level resources — they are not scoped to\na specific integration.\n\n- Maximum size: 50 MB per cache\n- Aggregate limit: 1 GB per environment\n- Data is managed through separate endpoints (`getData`, `upsert`,\n  `delete`, `purge`) that proxy to the Lookup Cache service\n\n## Lookup cache schema\n\n{% openapi-schemas spec=\"lookupcache\" schemas=\"LookupCache\" 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":{"DependencyResponse":{"type":"object","description":"Map of dependent-resource types to arrays of dependency entries.\nKeys are plural resource type strings (e.g. `flows`, `imports`,\n`connections`). An empty object `{}` means no dependents.\n","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/DependencyEntry"}}},"DependencyEntry":{"type":"object","description":"A single resource that depends on the queried resource.","properties":{"id":{"type":"string","description":"Unique identifier of the dependent resource."},"name":{"type":"string","description":"Display name of the dependent resource."},"type":{"type":"string","description":"Sub-type of the dependent resource when its collection distinguishes one, such as\n`stream` for a listener export. Only present for resource types that carry a `type`."},"paths":{"type":"array","description":"Dot-notation paths within the dependent resource that reference\nthe target resource. `[*]` denotes array elements.","items":{"type":"string"}},"accessLevel":{"type":"string","description":"The caller's access level on the dependent resource."},"dependencyIds":{"type":"object","description":"Map of resource types to arrays of IDs that this dependent\nresource references on the target. Keys are singular or plural\nresource type strings; values are arrays of ID strings.","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["id","name","paths","accessLevel","dependencyIds"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/lookupcaches/{_id}/dependencies":{"get":{"operationId":"listLookupCacheDependencies","tags":["Lookup Caches"],"summary":"List dependencies of a lookup cache","description":"Returns the set of resources that depend on the specified resource.\nThe response is an object whose keys are dependent-resource types\n(e.g. `flows`, `imports`) and whose values are arrays of dependency\nentries. An empty object `{}` means no dependents exist (also\nreturned for a well-formatted but nonexistent id).","parameters":[{"name":"_id","in":"path","required":true,"description":"Resource ID.","schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Dependency map. Keys are resource-type strings; values are arrays\nof dependency entries. Returns `{}` when no dependents exist.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyResponse"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```
