# Transfers

## Preview a transfer

> Previews what resources would be transferred if you invite a user to transfer the selected integrations (and optionally standalone flows).\
> \
> Notes:\
> \- \`\_integrationIds\` is passed as a JSON-encoded array string in the query.\
> \- Include \`"none"\` in \`\_integrationIds\` to represent standalone flows (flows not attached to an integration).

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"PreviewResponse":{"type":"object","description":"Preview of resources that would be transferred.\n\nThis response can include many resource collections (flows, imports, exports, connections, etc.).\nEach collection item is typically a \"lean\" document with at least `_id` and often `name` and reference fields.","properties":{"integrations":{"type":"array","description":"Integrations included in the transfer.","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"_connectorId":{"type":"string"}}}},"flows":{"type":"array","description":"Flows included in the transfer.","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"_integrationId":{"type":"string"},"disabled":{"type":"boolean"}}}},"exports":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"_integrationId":{"type":"string"},"type":{"type":"string"}}}},"imports":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"_integrationId":{"type":"string"},"adaptorType":{"type":"string"}}}},"connections":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"_integrationId":{"type":"string"},"type":{"type":"string"}}}},"filedefinitions":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}}},"notifications":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"scripts":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"iclients":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"stacks":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"revisions":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"}}}},"ediprofiles":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"syncs":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"datasets":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"lookupcaches":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"}}}},"ialicenseinstalls":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"}}}}}},"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/transfers/preview":{"get":{"summary":"Preview a transfer","operationId":"previewTransfer","tags":["Transfers"],"description":"Previews what resources would be transferred if you invite a user to transfer the selected integrations (and optionally standalone flows).\n\nNotes:\n- `_integrationIds` is passed as a JSON-encoded array string in the query.\n- Include `\"none\"` in `_integrationIds` to represent standalone flows (flows not attached to an integration).","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","format":"email"},"description":"Email address of the user who would receive the transfer."},{"name":"_integrationIds","in":"query","required":true,"schema":{"type":"string"},"description":"JSON-encoded array of integration ids to transfer, e.g. `[\"<integrationId1>\",\"<integrationId2>\"]`.\n\nInclude `\"none\"` to include standalone flows."}],"responses":{"200":{"description":"Preview of resources that would be transferred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"204":{"description":"No transferable resources found for the request"},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Invite a user to receive a transfer

> Creates a transfer invitation for another user.\
> \
> You can transfer:\
> \- specific integrations (and optionally standalone flows), or\
> \- the entire account (\`account: true\`)

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"InviteRequest":{"type":"object","description":"Request body for `POST /v1/transfers/invite`.\n\nAI guidance:\n- To transfer specific integrations, set `_integrationIds` and omit `account`.\n- To transfer standalone flows, include `\"none\"` in `_integrationIds`.\n- To transfer the entire account, set `account: true` and omit `_integrationIds`.","properties":{"email":{"type":"string","format":"email","description":"Email address of the user who will receive the transfer invitation."},"_integrationIds":{"type":"array","description":"List of integration ids to transfer.\n\nInclude `\"none\"` to include standalone flows.","items":{"type":"string"}},"account":{"type":"boolean","description":"Whether to transfer the entire account to the recipient."}},"required":["email"]},"Transfer":{"type":"object","description":"Transfer record.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Transfer id."},"_transferToUserId":{"type":"string","format":"objectId","readOnly":true,"description":"User id of the recipient (invitee)."},"accepted":{"type":"boolean","readOnly":true,"description":"Whether the recipient accepted the transfer invite."},"dismissed":{"type":"boolean","readOnly":true,"description":"Whether the recipient dismissed the transfer invite."},"status":{"type":"string","readOnly":true,"description":"Transfer processing status.","enum":["unapproved","queued","started","done","canceled","failed"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Creation timestamp."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Last modification timestamp."},"transferredAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when transfer completed (if done)."},"account":{"type":"boolean","readOnly":true,"description":"Whether this transfer is an account-level transfer (true) vs an integration-level transfer."},"toTransfer":{"$ref":"#/components/schemas/ToTransfer"},"transferErrors":{"type":"array","readOnly":true,"description":"Errors encountered while processing the transfer (if any).","items":{"type":"object"}}}},"ToTransfer":{"type":"object","description":"A grouped list of resources that are part of the transfer.\n\nKeys are resource collections (e.g., `integrations`, `flows`, `exports`) and values are arrays of id/name pairs.","properties":{"integrations":{"type":"array","description":"Integrations being transferred. May include `\"none\"` as a special id representing standalone flows.","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"flows":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"exports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"imports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"connections":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"filedefinitions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"scripts":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"iclients":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"stacks":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"revisions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ediprofiles":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"syncs":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"datasets":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"lookupcaches":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ialicenseinstalls":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}}}},"TransferResourceRef":{"type":"object","description":"Minimal id/name reference for a resource in a transfer.","properties":{"_id":{"type":"string","description":"Resource id (ObjectId string for most resources; may be `\"none\"` for standalone flows grouping)."},"name":{"type":"string","description":"Resource name (if available)."}}},"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/transfers/invite":{"post":{"summary":"Invite a user to receive a transfer","operationId":"inviteTransfer","tags":["Transfers"],"description":"Creates a transfer invitation for another user.\n\nYou can transfer:\n- specific integrations (and optionally standalone flows), or\n- the entire account (`account: true`)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteRequest"}}}},"responses":{"201":{"description":"Transfer invitation created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## List outbound transfers

> Lists transfer records created by the current user (outbound transfer invitations).

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"parameters":{"Include":{"name":"include","in":"query","required":false,"description":"Comma-separated list of fields to project into each returned record.\nTriggers **summary projection** on supported list endpoints: the server\nreturns a minimal identity set for each record (`_id`, `name`, plus a\nresource-specific always-on set like `adaptorType` on exports/imports,\nor richer defaults on `ashares`, `audit`, `httpconnectors`, `transfers`,\netc.) and adds any listed fields that exist on the record. Listed fields\nthe record doesn't carry are silently dropped.\n\nDot notation is supported for projecting nested sub-fields — e.g.\n`include=ftp.directoryPath` on `/v1/exports` returns just that nested\nfield inside `ftp` for FTP-type exports (and omits `ftp` entirely for\nnon-FTP exports).\n\nRules:\n- Value regex is `{a-z A-Z . _}` (letters, dots, underscores) plus the\n  comma separator; digits are also accepted in practice. Any other\n  character returns **400 `invalid_query_params`**.\n- Empty value (`include=`) or bare `include` is ignored — the full\n  default record is returned.\n- `include` and `exclude` are **mutually exclusive**. Passing both\n  returns **400 `invalid_query_params`**: *\"Please provide either\n  include or exclude param in the request query and not both.\"*\n- Array-bracket syntax (`include[]=...`) is not supported and can return\n  a 500.\n- Only list endpoints honor projection — on GET-by-id the parameter is\n  silently ignored.\n- A small set of list endpoints explicitly reject both `include` and\n  `exclude` with **400 `invalid_query_params`** and a message of the form\n  *\"Include or exclude query params are not applicable for `<resource>`\n  resource.\"* Known rejections: `/v1/ediprofiles`, `/v1/environments`,\n  `/v1/iClients`, `/v1/lookupcaches`, `/v1/tags`.","schema":{"type":"string"}},"Exclude":{"name":"exclude","in":"query","required":false,"description":"Comma-separated list of fields to remove from the default response on\nsupported list endpoints. Unlike `include`, `exclude` does NOT trigger\nsummary projection — callers get the standard full-record shape with the\nnamed fields stripped out.\n\nRules:\n- Value regex is `{a-z A-Z . _}` (letters, dots, underscores) plus the\n  comma separator; digits are also accepted in practice. Any other\n  character returns **400 `invalid_query_params`**.\n- Empty value (`exclude=`) is ignored.\n- Certain protected identity fields **cannot be stripped** — e.g.\n  `exclude=name` on `/v1/exports` is silently ignored and `name` remains\n  in the response. Protected sets vary per resource.\n- `include` and `exclude` are **mutually exclusive**. Passing both\n  returns **400 `invalid_query_params`**: *\"Please provide either\n  include or exclude param in the request query and not both.\"*\n- Only list endpoints honor stripping — on GET-by-id the parameter is\n  silently ignored.\n- A small set of list endpoints explicitly reject both `include` and\n  `exclude` with **400 `invalid_query_params`** and a message of the form\n  *\"Include or exclude query params are not applicable for `<resource>`\n  resource.\"* Known rejections: `/v1/ediprofiles`, `/v1/environments`,\n  `/v1/iClients`, `/v1/lookupcaches`, `/v1/tags`.","schema":{"type":"string"}}},"schemas":{"TransferOutbound":{"allOf":[{"$ref":"#/components/schemas/Transfer"},{"type":"object","description":"Outbound transfer record with embedded recipient details.","properties":{"transferToUser":{"$ref":"#/components/schemas/UserSummary"}}}]},"Transfer":{"type":"object","description":"Transfer record.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Transfer id."},"_transferToUserId":{"type":"string","format":"objectId","readOnly":true,"description":"User id of the recipient (invitee)."},"accepted":{"type":"boolean","readOnly":true,"description":"Whether the recipient accepted the transfer invite."},"dismissed":{"type":"boolean","readOnly":true,"description":"Whether the recipient dismissed the transfer invite."},"status":{"type":"string","readOnly":true,"description":"Transfer processing status.","enum":["unapproved","queued","started","done","canceled","failed"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Creation timestamp."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Last modification timestamp."},"transferredAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when transfer completed (if done)."},"account":{"type":"boolean","readOnly":true,"description":"Whether this transfer is an account-level transfer (true) vs an integration-level transfer."},"toTransfer":{"$ref":"#/components/schemas/ToTransfer"},"transferErrors":{"type":"array","readOnly":true,"description":"Errors encountered while processing the transfer (if any).","items":{"type":"object"}}}},"ToTransfer":{"type":"object","description":"A grouped list of resources that are part of the transfer.\n\nKeys are resource collections (e.g., `integrations`, `flows`, `exports`) and values are arrays of id/name pairs.","properties":{"integrations":{"type":"array","description":"Integrations being transferred. May include `\"none\"` as a special id representing standalone flows.","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"flows":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"exports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"imports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"connections":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"filedefinitions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"scripts":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"iclients":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"stacks":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"revisions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ediprofiles":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"syncs":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"datasets":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"lookupcaches":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ialicenseinstalls":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}}}},"TransferResourceRef":{"type":"object","description":"Minimal id/name reference for a resource in a transfer.","properties":{"_id":{"type":"string","description":"Resource id (ObjectId string for most resources; may be `\"none\"` for standalone flows grouping)."},"name":{"type":"string","description":"Resource name (if available)."}}},"UserSummary":{"type":"object","description":"Minimal user summary embedded in transfer list responses.","properties":{"_id":{"type":"string","format":"objectId","description":"User id."},"email":{"type":"string","format":"email","description":"User email."},"name":{"type":"string","description":"User display name."}}}},"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/transfers":{"get":{"summary":"List outbound transfers","operationId":"listOutboundTransfers","tags":["Transfers"],"description":"Lists transfer records created by the current user (outbound transfer invitations).","parameters":[{"$ref":"#/components/parameters/Include"},{"$ref":"#/components/parameters/Exclude"}],"responses":{"200":{"description":"List of outbound transfers","headers":{"Link":{"description":"RFC-5988 pagination links. When more pages remain, includes a `<...>; rel=\"next\"` entry;\nabsent on the final page.\n","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransferOutbound"}}}}},"204":{"description":"No outbound transfers found"},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## List inbound transfers

> Lists transfer invitations sent to the current user (inbound transfer invitations).

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"parameters":{"Include":{"name":"include","in":"query","required":false,"description":"Comma-separated list of fields to project into each returned record.\nTriggers **summary projection** on supported list endpoints: the server\nreturns a minimal identity set for each record (`_id`, `name`, plus a\nresource-specific always-on set like `adaptorType` on exports/imports,\nor richer defaults on `ashares`, `audit`, `httpconnectors`, `transfers`,\netc.) and adds any listed fields that exist on the record. Listed fields\nthe record doesn't carry are silently dropped.\n\nDot notation is supported for projecting nested sub-fields — e.g.\n`include=ftp.directoryPath` on `/v1/exports` returns just that nested\nfield inside `ftp` for FTP-type exports (and omits `ftp` entirely for\nnon-FTP exports).\n\nRules:\n- Value regex is `{a-z A-Z . _}` (letters, dots, underscores) plus the\n  comma separator; digits are also accepted in practice. Any other\n  character returns **400 `invalid_query_params`**.\n- Empty value (`include=`) or bare `include` is ignored — the full\n  default record is returned.\n- `include` and `exclude` are **mutually exclusive**. Passing both\n  returns **400 `invalid_query_params`**: *\"Please provide either\n  include or exclude param in the request query and not both.\"*\n- Array-bracket syntax (`include[]=...`) is not supported and can return\n  a 500.\n- Only list endpoints honor projection — on GET-by-id the parameter is\n  silently ignored.\n- A small set of list endpoints explicitly reject both `include` and\n  `exclude` with **400 `invalid_query_params`** and a message of the form\n  *\"Include or exclude query params are not applicable for `<resource>`\n  resource.\"* Known rejections: `/v1/ediprofiles`, `/v1/environments`,\n  `/v1/iClients`, `/v1/lookupcaches`, `/v1/tags`.","schema":{"type":"string"}},"Exclude":{"name":"exclude","in":"query","required":false,"description":"Comma-separated list of fields to remove from the default response on\nsupported list endpoints. Unlike `include`, `exclude` does NOT trigger\nsummary projection — callers get the standard full-record shape with the\nnamed fields stripped out.\n\nRules:\n- Value regex is `{a-z A-Z . _}` (letters, dots, underscores) plus the\n  comma separator; digits are also accepted in practice. Any other\n  character returns **400 `invalid_query_params`**.\n- Empty value (`exclude=`) is ignored.\n- Certain protected identity fields **cannot be stripped** — e.g.\n  `exclude=name` on `/v1/exports` is silently ignored and `name` remains\n  in the response. Protected sets vary per resource.\n- `include` and `exclude` are **mutually exclusive**. Passing both\n  returns **400 `invalid_query_params`**: *\"Please provide either\n  include or exclude param in the request query and not both.\"*\n- Only list endpoints honor stripping — on GET-by-id the parameter is\n  silently ignored.\n- A small set of list endpoints explicitly reject both `include` and\n  `exclude` with **400 `invalid_query_params`** and a message of the form\n  *\"Include or exclude query params are not applicable for `<resource>`\n  resource.\"* Known rejections: `/v1/ediprofiles`, `/v1/environments`,\n  `/v1/iClients`, `/v1/lookupcaches`, `/v1/tags`.","schema":{"type":"string"}}},"schemas":{"TransferInbound":{"allOf":[{"$ref":"#/components/schemas/Transfer"},{"type":"object","description":"Inbound transfer record with embedded owner (sender) details.","properties":{"ownerUser":{"$ref":"#/components/schemas/UserSummary"}}}]},"Transfer":{"type":"object","description":"Transfer record.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Transfer id."},"_transferToUserId":{"type":"string","format":"objectId","readOnly":true,"description":"User id of the recipient (invitee)."},"accepted":{"type":"boolean","readOnly":true,"description":"Whether the recipient accepted the transfer invite."},"dismissed":{"type":"boolean","readOnly":true,"description":"Whether the recipient dismissed the transfer invite."},"status":{"type":"string","readOnly":true,"description":"Transfer processing status.","enum":["unapproved","queued","started","done","canceled","failed"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Creation timestamp."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Last modification timestamp."},"transferredAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when transfer completed (if done)."},"account":{"type":"boolean","readOnly":true,"description":"Whether this transfer is an account-level transfer (true) vs an integration-level transfer."},"toTransfer":{"$ref":"#/components/schemas/ToTransfer"},"transferErrors":{"type":"array","readOnly":true,"description":"Errors encountered while processing the transfer (if any).","items":{"type":"object"}}}},"ToTransfer":{"type":"object","description":"A grouped list of resources that are part of the transfer.\n\nKeys are resource collections (e.g., `integrations`, `flows`, `exports`) and values are arrays of id/name pairs.","properties":{"integrations":{"type":"array","description":"Integrations being transferred. May include `\"none\"` as a special id representing standalone flows.","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"flows":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"exports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"imports":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"connections":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"filedefinitions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"scripts":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"iclients":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"stacks":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"revisions":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ediprofiles":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"syncs":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"datasets":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"lookupcaches":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}},"ialicenseinstalls":{"type":"array","items":{"$ref":"#/components/schemas/TransferResourceRef"}}}},"TransferResourceRef":{"type":"object","description":"Minimal id/name reference for a resource in a transfer.","properties":{"_id":{"type":"string","description":"Resource id (ObjectId string for most resources; may be `\"none\"` for standalone flows grouping)."},"name":{"type":"string","description":"Resource name (if available)."}}},"UserSummary":{"type":"object","description":"Minimal user summary embedded in transfer list responses.","properties":{"_id":{"type":"string","format":"objectId","description":"User id."},"email":{"type":"string","format":"email","description":"User email."},"name":{"type":"string","description":"User display name."}}}},"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/transfers/invited":{"get":{"summary":"List inbound transfers","operationId":"listInboundTransfers","tags":["Transfers"],"description":"Lists transfer invitations sent to the current user (inbound transfer invitations).","parameters":[{"$ref":"#/components/parameters/Include"},{"$ref":"#/components/parameters/Exclude"}],"responses":{"200":{"description":"List of inbound transfers","headers":{"Link":{"description":"RFC-5988 pagination links. When more pages remain, includes a `<...>; rel=\"next\"` entry;\nabsent on the final page.\n","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransferInbound"}}}}},"204":{"description":"No inbound transfers found"},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Accept a transfer invitation

> Accept a pending transfer invitation and take ownership of the transferred resources.

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/transfers/{_id}/accept":{"put":{"summary":"Accept a transfer invitation","operationId":"acceptTransfer","tags":["Transfers"],"description":"Accept a pending transfer invitation and take ownership of the transferred resources.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"Transfer id."}],"responses":{"204":{"description":"Transfer invitation accepted"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Dismiss a transfer invitation

> Dismiss a pending transfer invitation without accepting it.

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/transfers/{_id}/dismiss":{"put":{"summary":"Dismiss a transfer invitation","operationId":"dismissTransfer","tags":["Transfers"],"description":"Dismiss a pending transfer invitation without accepting it.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"Transfer id."}],"responses":{"204":{"description":"Transfer invitation dismissed"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Cancel a transfer

> Cancel a transfer initiated by the current user before the invitee accepts it.

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/transfers/{_id}/cancel":{"put":{"summary":"Cancel a transfer","operationId":"cancelTransfer","tags":["Transfers"],"description":"Cancel a transfer initiated by the current user before the invitee accepts it.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"Transfer id."}],"responses":{"204":{"description":"Transfer cancelled"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Delete a transfer record

> Delete a transfer record. Only completed or cancelled transfers can be deleted.

```json
{"openapi":"3.1.0","info":{"title":"Transfers","version":"1.0.0"},"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/transfers/{_id}":{"delete":{"summary":"Delete a transfer record","operationId":"deleteTransfer","tags":["Transfers"],"description":"Delete a transfer record. Only completed or cancelled transfers can be deleted.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"Transfer id."}],"responses":{"204":{"description":"Transfer deleted"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

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

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

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

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

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