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

# HTTP Connectors

HTTP Connectors define reusable API frameworks — base URIs, versioning strategies, authentication presets, and supported-by rules — that HTTP connections, iClients, imports, and exports inherit.

Each connector has one or more versions and may group multiple API products under `apis[]`. Child resources (HTTP Connector Resources and Endpoints) define the specific operations available.

Two structural patterns exist:

* **Flat** — versions and baseURIs sit directly on the connector. Most connectors use this pattern.
* **Grouped** — the connector nests API products under `apis[]`, each with its own versions and baseURIs.

### HTTP connector schema

## The HTTPConnector object

````json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"components":{"schemas":{"HTTPConnector":{"type":"object","required":["_id","_userId","name","createdAt","lastModified"],"description":"HTTP Connector object as returned by the detail (by-ID) endpoint.","allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","description":"User who created this connector.","readOnly":true},"legacyIds":{"type":"array","description":"All legacy assistant IDs associated with this connector.","readOnly":true,"items":{"type":"string"}},"supportsIClient":{"type":"boolean","description":"When true, this connector supports shared iClient credentials.","readOnly":true},"supportsWebhook":{"type":"boolean","description":"When true, this connector supports webhook-based exports.","readOnly":true},"hasBlobEndpoints":{"type":"boolean","description":"When true, at least one endpoint under this connector handles binary/blob data.","readOnly":true},"metadataLoadStrategy":{"type":"string","enum":["staged"],"readOnly":true,"description":"Present only when the connector uses staged metadata loading. Omitted\nwhen the stored strategy is `full`."},"__numOfBlobEndpoints":{"type":"number","description":"Number of blob endpoints for this connector","readOnly":true},"metadata":{"type":"object","readOnly":true,"description":"Connector metadata used by Data Intelligence tooling. Returned\nonly by the detail (by-ID) endpoint — list responses omit it.","properties":{"di":{"type":"object","description":"Data Intelligence attributes for this connector.","properties":{"isSourceOnboard":{"type":"boolean","description":"When true, the connector is onboarded as a Data Intelligence source."},"apiResolution":{"type":"object","description":"Which API group and version Data Intelligence resolves this\nconnector to. Present only on connectors with multiple API\ngroups or versions.","properties":{"api":{"type":"string","description":"Name of the resolved API group."},"version":{"type":"string","description":"Name of the resolved version."}}}}}}}}}]},"HTTPConnectorBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for this HTTP Connector.","maxLength":255},"published":{"type":"boolean","description":"When true, this connector is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates (used when `apis` is empty).","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this connector."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this connector targets a GraphQL API."},"requireBodyMatchForLinking":{"type":"boolean","description":"Require request body matching when auto-linking exports/imports."},"disableAutoLinking":{"type":"boolean","description":"Disable automatic linking of exports/imports to this connector."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Connector versions (used when `apis` is empty).","items":{"$ref":"#/components/schemas/Version"}},"apis":{"type":"array","description":"API groups under this connector. Each group has its own versions, baseURIs, and supportedBy config.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this API group."},"name":{"type":"string","description":"Display name for this API group."},"description":{"type":"string","maxLength":10240,"description":"Explains what this API group covers, shown to users when selecting an API."},"published":{"type":"boolean","description":"When true, this API group is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this API group.","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this API group."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this API group targets a GraphQL API."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Versions available under this API group.","items":{"$ref":"#/components/schemas/Version"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"},"setDefault":{"type":"boolean","description":"When true, this API group is the connector's default selection."}}}},"supportedBy":{"allOf":[{"$ref":"#/components/schemas/SupportedBy"}]},"preBuiltExports":{"type":"array","description":"Pre-built export templates associated with this connector.","items":{"type":"object","properties":{"_exportId":{"type":"string","format":"objectId","description":"Export resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built export is visible to users."}},"required":["_exportId"]}},"preBuiltImports":{"type":"array","description":"Pre-built import templates associated with this connector.","items":{"type":"object","properties":{"_importId":{"type":"string","format":"objectId","description":"Import resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built import is visible to users."}},"required":["_importId"]}}}},"Versioning":{"type":"object","description":"Strategy for how API versions are passed in requests. Used at the\nconnector level and per API group; both use the same shape.","properties":{"location":{"type":"string","enum":["uri","query_parameter","header"],"description":"Where the version identifier is placed in outgoing requests."},"headerName":{"type":"string","description":"Header name when `location` is `header`."},"queryParameterName":{"type":"string","description":"Query parameter name when `location` is `query_parameter`."}}},"Version":{"type":"object","description":"A version of the connector (or of an API group). Both contexts use the\nsame shape.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."},"published":{"type":"boolean","description":"When true, this version is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this version.","items":{"type":"string"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"}}},"SupportedBy":{"type":"object","description":"Framework-defined defaults that pre-configure fields and prompt users\nwhen a connection, export, import, or iClient is created from this\nconnector (or from a specific version / API group).","properties":{"connection":{"$ref":"#/components/schemas/SupportedBySection"},"export":{"$ref":"#/components/schemas/SupportedBySection"},"import":{"$ref":"#/components/schemas/SupportedBySection"},"iClient":{"$ref":"#/components/schemas/SupportedBySection"}}},"SupportedBySection":{"type":"object","description":"Conditions, pre-configured field values, and fields the user must set\nfor one resource type (connection, export, import, or iClient) when it\nis created from this connector. All four sections share this shape.","properties":{"preConfiguredFields":{"type":"array","description":"Fields automatically set on the target resource. Not editable by the user.","items":{"$ref":"#/components/schemas/SupportedByPreConfiguredField"}},"fieldsUserMustSet":{"type":"array","description":"Fields the user must provide values for when creating the target resource.","items":{"$ref":"#/components/schemas/SupportedByFieldUserMustSet"}},"fieldsToUnset":{"type":"array","description":"Field paths to clear on the target resource."},"conditions":{"type":"array","description":"Expression-based filters referenced by `_conditionIds` in\n`preConfiguredFields` and `fieldsUserMustSet` to conditionally\napply those field configurations.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this condition, referenced by `_conditionIds` in field entries."},"condition":{"$ref":"#/components/schemas/Filter"}}}}}},"SupportedByPreConfiguredField":{"type":"object","description":"A field automatically set to a predefined value on the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Value(s) to assign. Typically a single-element array; entries may be\nany JSON type."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply. If absent, always applies.","items":{"type":"string","format":"objectId"}}}},"SupportedByFieldUserMustSet":{"type":"object","description":"A field the user must provide a value for when creating the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Optional suggested or constrained values. Entries may be any JSON\ntype."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply.","items":{"type":"string","format":"objectId"}},"helpURL":{"type":"string","description":"URL to documentation for this field."},"labelOverride":{"type":"string","description":"Custom label to display in the UI instead of the default."},"inputType":{"type":"string","enum":["number","password","uri"],"description":"UI input widget type shown when prompting the user for this field.\nUses the same widget vocabulary as Trading Partner Connectors."}}},"Filter":{"type":"object","description":"Configuration for selectively processing records based on specified criteria. This object enables\nprecise control over which items are included or excluded from processing operations.\n\n**Filter behavior**\n\nWhen configured, the filter is applied before processing begins:\n- Items that match the filter criteria are processed\n- Items that don't match are completely skipped\n- No partial processing is performed\n\n**Implementation approaches**\n\nThere are two distinct filtering mechanisms available:\n\n**Rule-Based Filtering (`type: \"expression\"`)**\n- **Best For**: Common filtering patterns based on standard attributes\n- **Capabilities**: Filter by names, values, dates, numerical ranges, text patterns\n- **Advantages**: Declarative, no coding required, consistent performance\n- **Configuration**: Define rules in the `expression` object\n- **Use When**: You have clear, static criteria for selection\n\n**Script-Based Filtering (`type: \"script\"`)**\n- **Best For**: Complex logic, dynamic criteria, or business rules\n- **Capabilities**: Full programmatic control, access to complete metadata\n- **Advantages**: Maximum flexibility, can implement any filtering logic\n- **Configuration**: Reference a script in the `script` object\n- **Use When**: Simple rules aren't sufficient or logic needs to be dynamic\n","properties":{"type":{"type":"string","description":"Determines which filtering mechanism to use. This choice affects which properties\nmust be configured and how filtering logic is implemented.\n\n**Available types**\n\n**Rule-Based Filtering (`\"expression\"`)**\n- **Required Config**: The `expression` object with rule definitions\n- **Behavior**: Evaluates declarative rules against item attributes\n- **Best For**: Common patterns like name matching, date ranges, value limits\n- **Advantages**: Simpler to configure, no custom code required\n\n**Script-Based Filtering (`\"script\"`)**\n- **Required Config**: The `script` object with _scriptId and function\n- **Behavior**: Executes custom JavaScript to determine which items to process\n- **Best For**: Complex conditions, business logic, dynamic criteria\n- **Advantages**: Maximum flexibility, can implement any logic\n\n**Implementation guidance**\n\n1. For standard filtering needs (name, size, date), use `\"expression\"`\n2. For complex logic or conditions not covered by expressions, use `\"script\"`\n3. When selecting a type, you must configure the corresponding object:\n    - `type: \"expression\"` requires the `expression` object\n    - `type: \"script\"` requires the `script` object\n","enum":["expression","script"]},"expression":{"type":"object","description":"Configuration for declarative rule-based filtering. This object enables filtering\nitems based on common attributes without requiring custom code.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"expression\" and should not be\nconfigured otherwise. It provides a standardized way to define filtering rules that\ncan match against item attributes like name, type, value, date, and other properties.\n\n**Implementation guidance**\n\nThe expression system uses a rule-based approach where:\n- Rules can be combined with AND/OR logic\n- Each rule can check a specific attribute\n- Multiple conditions can be applied (ranges, pattern matching, exact matches)\n\n**Common filter patterns**\n\n1. **Pattern matching**: Using wildcards like `*` and `?`\n2. **Value range filtering**: Numbers between min and max values\n3. **Date range filtering**: Items created/modified within specific time ranges\n4. **Status checking**: Items with specific status values or properties\n\nFor AI agents: Rule-based filtering should be your first choice when the filtering criteria\ncan be expressed in terms of standard attributes. Only use script-based filtering when\nmore complex logic is required.\n","properties":{"version":{"type":"string","description":"Version identifier for the expression format. Currently only version \"1\" is supported.\n\nThis field ensures future compatibility if the expression format evolves. Always set to \"1\"\nfor current implementations.\n","enum":["1"]},"rules":{"type":"array","description":"Expression array defining filter conditions using prefix notation. The first element is the operator,\nfollowed by its operands which may themselves be nested expression arrays.\n\nThe rule expression follows this pattern:\n- First element: Operator name (string)\n- Remaining elements: Operands for that operator (values or nested expressions)\n\n**Expression structure**\n\nFilter expressions use a prefix notation where operators appear before their operands:\n```\n[operator, operand1, operand2, ...]\n```\n\n**Comparison Operators**\n- `\"equals\"`: Exact match (equals)\n- `\"notequals\"`: Not equal to value (not equals)\n- `\"greaterthan\"`: Value is greater than specified value (is greater than)\n- `\"greaterthanequals\"`: Value is greater than or equal to specified value (is greater than or equals)\n- `\"lessthan\"`: Value is less than specified value (is less than)\n- `\"lessthanequals\"`: Value is less than or equal to specified value (is less than or equals)\n- `\"startswith\"`: String starts with specified prefix (starts with)\n- `\"endswith\"`: String ends with specified suffix (ends with)\n- `\"contains\"`: String contains specified substring (contains)\n- `\"doesnotcontain\"`: String does not contain specified substring (does not contain)\n- `\"isempty\"`: Field is empty or null (is empty)\n- `\"isnotempty\"`: Field contains a value (is not empty)\n- `\"matches\"`: Matches specified pattern (matches)\n\n**Logical Operators**\n- `\"and\"`: All conditions must be true\n- `\"or\"`: At least one condition must be true\n- `\"not\"`: Negates the condition\n\n**Field Access and Type Conversion**\n- `\"extract\"`: Access a field from the item by name\n- `\"settings\"`: Access a custom setting from the flow, flow step, or integration configuration\n- `\"boolean\"`: Convert value to Boolean type\n- `\"epochtime\"`: Convert value to Epoch Time (Unix timestamp)\n- `\"number\"`: Convert value to Number type\n- `\"string\"`: Convert value to String type\n\n**Field Access Details**\n\n**Using `extract` to access record fields:**\n- Retrieves values from the current record being processed\n- Can access nested properties using dot notation (e.g., `\"customer.email\"`)\n- Returns the raw field value which may need type conversion\n\n**Using `settings` to access configuration values:**\n- Retrieves values from the integration's configuration settings\n- Supports different scopes with prefix notation:\n  - `flow.settingName`: Access flow-level settings\n  - `export.settingName`: Access export-level settings\n  - `import.settingName`: Access import-level settings\n  - `integration.settingName`: Access integration-level settings\n- Useful for dynamic filtering based on configuration\n\n**Field Transformations**\n- `\"lowercase\"`: Convert string to lowercase\n- `\"uppercase\"`: Convert string to uppercase\n- `\"ceiling\"`: Round number up to the nearest integer\n- `\"floor\"`: Round number down to the nearest integer\n- `\"abs\"`: Get absolute value of a number\n\nType conversion operators are often necessary when comparing extracted field values against literals or when the field type doesn't match the comparison operator's expected type. For example:\n\n```json\n[\n  \"equals\",\n  [\n    \"number\",  // Convert to number before comparison\n    [\n      \"extract\",\n      \"quantity\"\n    ]\n  ],\n  100\n]\n```\n\nExample with datetime conversion:\n```json\n[\n  \"greaterthan\",\n  [\n    \"epochtime\",  // Convert to Unix timestamp before comparison\n    [\n      \"extract\",\n      \"createdDate\"\n    ]\n  ],\n  1609459200000  // January 1, 2021 as Unix timestamp in milliseconds\n]\n```\n\nExample with transformations:\n```json\n[\n  \"and\",\n  [\n    \"matches\",\n    [\n      \"lowercase\",  // Convert to lowercase before matching\n      [\n        \"string\",\n        [\n          \"extract\",\n          \"categories\"\n        ]\n      ]\n    ],\n    \"netsuite\"\n  ],\n  [\n    \"notequals\",\n    [\n      \"string\",\n      [\n        \"extract\",\n        \"recurrence.pattern.type\"\n      ]\n    ],\n    \"\"\n  ]\n]\n```\n\nExample comparing a record field with a flow setting:\n```json\n[\n  \"equals\",\n  [\n    \"string\",\n    [\n      \"extract\",\n      \"trantype\"\n    ]\n  ],\n  [\n    \"string\",\n    [\n      \"settings\",\n      \"flow.trantype\"\n    ]\n  ]\n]\n```\n\n**Examples**\n\nExample 1: Status field is not equal to \"cancelled\"\n```json\n[\n  \"notequals\",\n  [\n    \"extract\",\n    \"status\"\n  ],\n  \"cancelled\"\n]\n```\n\nExample 2: Filename starts with \"HC\"\n```json\n[\n  \"startswith\",\n  [\n    \"extract\",\n    \"filename\"\n  ],\n  \"HC\"\n]\n```\n\nExample 3: Amount is greater than 100\n```json\n[\n  \"greaterthan\",\n  [\n    \"number\",\n    [\n      \"extract\",\n      \"amount\"\n    ]\n  ],\n  100\n]\n```\n\nExample 4: Order date is after January 1, 2023\n```json\n[\n  \"greaterthan\",\n  [\n    \"extract\",\n    \"orderDate\"\n  ],\n  \"2023-01-01T00:00:00Z\"\n]\n```\n\nExample 5: Category contains any of [\"Urgent\", \"High Priority\"]\n```json\n[\n  \"anyof\",\n  [\n    \"extract\",\n    \"category\"\n  ],\n  [\"Urgent\", \"High Priority\"]\n]\n```\n","items":{"oneOf":[{"title":"String","type":"string"},{"title":"Number","type":"number"},{"title":"Boolean","type":"boolean"},{"title":"Object","type":"object"},{"title":"Array","type":"array"},{"title":"Null","type":"null"}]}}}},"script":{"type":"object","description":"Configuration for programmable script-based filtering. This object enables complex, custom\nfiltering logic beyond what expression-based filtering can provide.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"script\" and should not be configured\notherwise. It provides a way to execute custom JavaScript code to determine which items\nshould be processed.\n\n**Implementation approach**\n\nScript-based filtering works by:\n1. Executing the specified function from the referenced script\n2. Passing item data to the function\n3. Using the function's return value (true/false) to determine inclusion\n\n**Common use cases**\n\nScript filtering is ideal for:\n- Complex business logic that can't be expressed as simple rules\n- Dynamic filtering criteria that change based on external factors\n- Content-based filtering that requires deep inspection\n- Advanced pattern matching beyond simple wildcards\n- Multi-stage filtering with intermediate logic\n\nFor AI agents: Only use script-based filtering when expression-based filtering is insufficient.\nScript filtering requires maintaining custom code, which adds complexity to the integration.\n","properties":{"_scriptId":{"type":"string","description":"Reference to the Script resource that contains the filtering logic. This must be a valid\nObjectId of a Script resource that exists in the system.\n\nThe referenced script must contain the function specified in the `function` field\nand must be written to handle filtering specifically. The script receives\nitem data as its input and must return a boolean value indicating whether\nto process the item (true) or skip it (false).\n\nFormat: 24-character hexadecimal string (MongoDB ObjectId)\n"},"function":{"type":"string","description":"Name of the function within the script to execute for filtering decisions. This function\nmust exist in the script referenced by _scriptId.\n\n**Function requirements**\n\nThe specified function must:\n- Accept item data as its first parameter\n- Return a boolean value (true to process the item, false to skip it)\n- Handle errors gracefully\n- Execute efficiently (as it may run for many items)\n\n**Function signature**\n\n```javascript\nfunction filterItems(itemData) {\n  // itemData contains properties of the item being evaluated\n  // Custom logic here\n  return true; // or false to skip the item\n}\n```\n\nFor AI agents: Ensure the function name exactly matches a function defined in the\nreferenced script, as mismatches will cause the filter to fail.\n"}}}}},"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 HTTP connectors

> Returns all HTTP Connectors visible to the authenticated account.\
> The list response is abridged -- it omits \`published\`, \`baseURIs\`,\
> \`supportedBy\`, and other detail fields. Use the by-ID endpoint for\
> the full object.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"ListItem":{"type":"object","description":"Abridged HTTP Connector returned in list responses. Omits `published`,\n`baseURIs`, `supportedBy`, `apis`, `versioning`, and write-only fields\ncompared to the detail endpoint.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"name":{"type":"string","description":"Display name for this HTTP Connector."},"_userId":{"type":"string","format":"objectId","readOnly":true,"description":"User who created this connector."},"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."},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this connector."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"legacyIds":{"type":"array","description":"All legacy assistant IDs associated with this connector.","items":{"type":"string"},"readOnly":true},"isGraphQL":{"type":"boolean","description":"When true, this connector targets a GraphQL API."},"supportsIClient":{"type":"boolean","readOnly":true,"description":"When true, this connector supports shared iClient credentials."},"supportsWebhook":{"type":"boolean","readOnly":true,"description":"When true, this connector supports webhook-based exports."},"hasBlobEndpoints":{"type":"boolean","readOnly":true,"description":"When true, at least one endpoint under this connector handles binary/blob data."},"metadataLoadStrategy":{"type":"string","enum":["staged"],"readOnly":true,"description":"Present only when the connector uses staged metadata loading. Omitted\nwhen the stored strategy is `full`."},"versions":{"type":"array","description":"Connector versions, abridged to identifiers and names.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."}}}},"apis":{"type":"array","description":"API groups under this connector, abridged to identifiers, names, and versions.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","description":"Unique identifier for this API group."},"name":{"type":"string","description":"Display name for this API group."},"versions":{"type":"array","description":"Versions available under this API group.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."}}}}}}}}}},"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/httpconnectors":{"get":{"operationId":"listHttpConnectors","tags":["HTTP Connectors"],"summary":"List HTTP connectors","description":"Returns all HTTP Connectors visible to the authenticated account.\nThe list response is abridged -- it omits `published`, `baseURIs`,\n`supportedBy`, and other detail fields. Use the by-ID endpoint for\nthe full object.","parameters":[{"name":"publishedOnly","in":"query","description":"When true, only return published HTTP Connectors.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Successfully retrieved list of HTTP Connectors.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ListItem"}}}}},"204":{"description":"No HTTP Connectors match the filter criteria."},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Create an HTTP connector

> Creates a new HTTP Connector framework definition. \`name\` is\
> required, along with either \`versions\` (flat connector) or \`apis\`\
> (grouped connector).

````json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":"Fields for creating or updating an HTTP Connector. `name` is always\nrequired. On create, provide either `versions` (flat connector) or\n`apis` (grouped connector) -- most connectors use the flat pattern.","required":["name"],"allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"}]},"HTTPConnectorBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for this HTTP Connector.","maxLength":255},"published":{"type":"boolean","description":"When true, this connector is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates (used when `apis` is empty).","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this connector."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this connector targets a GraphQL API."},"requireBodyMatchForLinking":{"type":"boolean","description":"Require request body matching when auto-linking exports/imports."},"disableAutoLinking":{"type":"boolean","description":"Disable automatic linking of exports/imports to this connector."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Connector versions (used when `apis` is empty).","items":{"$ref":"#/components/schemas/Version"}},"apis":{"type":"array","description":"API groups under this connector. Each group has its own versions, baseURIs, and supportedBy config.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this API group."},"name":{"type":"string","description":"Display name for this API group."},"description":{"type":"string","maxLength":10240,"description":"Explains what this API group covers, shown to users when selecting an API."},"published":{"type":"boolean","description":"When true, this API group is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this API group.","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this API group."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this API group targets a GraphQL API."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Versions available under this API group.","items":{"$ref":"#/components/schemas/Version"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"},"setDefault":{"type":"boolean","description":"When true, this API group is the connector's default selection."}}}},"supportedBy":{"allOf":[{"$ref":"#/components/schemas/SupportedBy"}]},"preBuiltExports":{"type":"array","description":"Pre-built export templates associated with this connector.","items":{"type":"object","properties":{"_exportId":{"type":"string","format":"objectId","description":"Export resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built export is visible to users."}},"required":["_exportId"]}},"preBuiltImports":{"type":"array","description":"Pre-built import templates associated with this connector.","items":{"type":"object","properties":{"_importId":{"type":"string","format":"objectId","description":"Import resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built import is visible to users."}},"required":["_importId"]}}}},"Versioning":{"type":"object","description":"Strategy for how API versions are passed in requests. Used at the\nconnector level and per API group; both use the same shape.","properties":{"location":{"type":"string","enum":["uri","query_parameter","header"],"description":"Where the version identifier is placed in outgoing requests."},"headerName":{"type":"string","description":"Header name when `location` is `header`."},"queryParameterName":{"type":"string","description":"Query parameter name when `location` is `query_parameter`."}}},"Version":{"type":"object","description":"A version of the connector (or of an API group). Both contexts use the\nsame shape.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."},"published":{"type":"boolean","description":"When true, this version is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this version.","items":{"type":"string"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"}}},"SupportedBy":{"type":"object","description":"Framework-defined defaults that pre-configure fields and prompt users\nwhen a connection, export, import, or iClient is created from this\nconnector (or from a specific version / API group).","properties":{"connection":{"$ref":"#/components/schemas/SupportedBySection"},"export":{"$ref":"#/components/schemas/SupportedBySection"},"import":{"$ref":"#/components/schemas/SupportedBySection"},"iClient":{"$ref":"#/components/schemas/SupportedBySection"}}},"SupportedBySection":{"type":"object","description":"Conditions, pre-configured field values, and fields the user must set\nfor one resource type (connection, export, import, or iClient) when it\nis created from this connector. All four sections share this shape.","properties":{"preConfiguredFields":{"type":"array","description":"Fields automatically set on the target resource. Not editable by the user.","items":{"$ref":"#/components/schemas/SupportedByPreConfiguredField"}},"fieldsUserMustSet":{"type":"array","description":"Fields the user must provide values for when creating the target resource.","items":{"$ref":"#/components/schemas/SupportedByFieldUserMustSet"}},"fieldsToUnset":{"type":"array","description":"Field paths to clear on the target resource."},"conditions":{"type":"array","description":"Expression-based filters referenced by `_conditionIds` in\n`preConfiguredFields` and `fieldsUserMustSet` to conditionally\napply those field configurations.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this condition, referenced by `_conditionIds` in field entries."},"condition":{"$ref":"#/components/schemas/Filter"}}}}}},"SupportedByPreConfiguredField":{"type":"object","description":"A field automatically set to a predefined value on the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Value(s) to assign. Typically a single-element array; entries may be\nany JSON type."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply. If absent, always applies.","items":{"type":"string","format":"objectId"}}}},"SupportedByFieldUserMustSet":{"type":"object","description":"A field the user must provide a value for when creating the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Optional suggested or constrained values. Entries may be any JSON\ntype."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply.","items":{"type":"string","format":"objectId"}},"helpURL":{"type":"string","description":"URL to documentation for this field."},"labelOverride":{"type":"string","description":"Custom label to display in the UI instead of the default."},"inputType":{"type":"string","enum":["number","password","uri"],"description":"UI input widget type shown when prompting the user for this field.\nUses the same widget vocabulary as Trading Partner Connectors."}}},"Filter":{"type":"object","description":"Configuration for selectively processing records based on specified criteria. This object enables\nprecise control over which items are included or excluded from processing operations.\n\n**Filter behavior**\n\nWhen configured, the filter is applied before processing begins:\n- Items that match the filter criteria are processed\n- Items that don't match are completely skipped\n- No partial processing is performed\n\n**Implementation approaches**\n\nThere are two distinct filtering mechanisms available:\n\n**Rule-Based Filtering (`type: \"expression\"`)**\n- **Best For**: Common filtering patterns based on standard attributes\n- **Capabilities**: Filter by names, values, dates, numerical ranges, text patterns\n- **Advantages**: Declarative, no coding required, consistent performance\n- **Configuration**: Define rules in the `expression` object\n- **Use When**: You have clear, static criteria for selection\n\n**Script-Based Filtering (`type: \"script\"`)**\n- **Best For**: Complex logic, dynamic criteria, or business rules\n- **Capabilities**: Full programmatic control, access to complete metadata\n- **Advantages**: Maximum flexibility, can implement any filtering logic\n- **Configuration**: Reference a script in the `script` object\n- **Use When**: Simple rules aren't sufficient or logic needs to be dynamic\n","properties":{"type":{"type":"string","description":"Determines which filtering mechanism to use. This choice affects which properties\nmust be configured and how filtering logic is implemented.\n\n**Available types**\n\n**Rule-Based Filtering (`\"expression\"`)**\n- **Required Config**: The `expression` object with rule definitions\n- **Behavior**: Evaluates declarative rules against item attributes\n- **Best For**: Common patterns like name matching, date ranges, value limits\n- **Advantages**: Simpler to configure, no custom code required\n\n**Script-Based Filtering (`\"script\"`)**\n- **Required Config**: The `script` object with _scriptId and function\n- **Behavior**: Executes custom JavaScript to determine which items to process\n- **Best For**: Complex conditions, business logic, dynamic criteria\n- **Advantages**: Maximum flexibility, can implement any logic\n\n**Implementation guidance**\n\n1. For standard filtering needs (name, size, date), use `\"expression\"`\n2. For complex logic or conditions not covered by expressions, use `\"script\"`\n3. When selecting a type, you must configure the corresponding object:\n    - `type: \"expression\"` requires the `expression` object\n    - `type: \"script\"` requires the `script` object\n","enum":["expression","script"]},"expression":{"type":"object","description":"Configuration for declarative rule-based filtering. This object enables filtering\nitems based on common attributes without requiring custom code.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"expression\" and should not be\nconfigured otherwise. It provides a standardized way to define filtering rules that\ncan match against item attributes like name, type, value, date, and other properties.\n\n**Implementation guidance**\n\nThe expression system uses a rule-based approach where:\n- Rules can be combined with AND/OR logic\n- Each rule can check a specific attribute\n- Multiple conditions can be applied (ranges, pattern matching, exact matches)\n\n**Common filter patterns**\n\n1. **Pattern matching**: Using wildcards like `*` and `?`\n2. **Value range filtering**: Numbers between min and max values\n3. **Date range filtering**: Items created/modified within specific time ranges\n4. **Status checking**: Items with specific status values or properties\n\nFor AI agents: Rule-based filtering should be your first choice when the filtering criteria\ncan be expressed in terms of standard attributes. Only use script-based filtering when\nmore complex logic is required.\n","properties":{"version":{"type":"string","description":"Version identifier for the expression format. Currently only version \"1\" is supported.\n\nThis field ensures future compatibility if the expression format evolves. Always set to \"1\"\nfor current implementations.\n","enum":["1"]},"rules":{"type":"array","description":"Expression array defining filter conditions using prefix notation. The first element is the operator,\nfollowed by its operands which may themselves be nested expression arrays.\n\nThe rule expression follows this pattern:\n- First element: Operator name (string)\n- Remaining elements: Operands for that operator (values or nested expressions)\n\n**Expression structure**\n\nFilter expressions use a prefix notation where operators appear before their operands:\n```\n[operator, operand1, operand2, ...]\n```\n\n**Comparison Operators**\n- `\"equals\"`: Exact match (equals)\n- `\"notequals\"`: Not equal to value (not equals)\n- `\"greaterthan\"`: Value is greater than specified value (is greater than)\n- `\"greaterthanequals\"`: Value is greater than or equal to specified value (is greater than or equals)\n- `\"lessthan\"`: Value is less than specified value (is less than)\n- `\"lessthanequals\"`: Value is less than or equal to specified value (is less than or equals)\n- `\"startswith\"`: String starts with specified prefix (starts with)\n- `\"endswith\"`: String ends with specified suffix (ends with)\n- `\"contains\"`: String contains specified substring (contains)\n- `\"doesnotcontain\"`: String does not contain specified substring (does not contain)\n- `\"isempty\"`: Field is empty or null (is empty)\n- `\"isnotempty\"`: Field contains a value (is not empty)\n- `\"matches\"`: Matches specified pattern (matches)\n\n**Logical Operators**\n- `\"and\"`: All conditions must be true\n- `\"or\"`: At least one condition must be true\n- `\"not\"`: Negates the condition\n\n**Field Access and Type Conversion**\n- `\"extract\"`: Access a field from the item by name\n- `\"settings\"`: Access a custom setting from the flow, flow step, or integration configuration\n- `\"boolean\"`: Convert value to Boolean type\n- `\"epochtime\"`: Convert value to Epoch Time (Unix timestamp)\n- `\"number\"`: Convert value to Number type\n- `\"string\"`: Convert value to String type\n\n**Field Access Details**\n\n**Using `extract` to access record fields:**\n- Retrieves values from the current record being processed\n- Can access nested properties using dot notation (e.g., `\"customer.email\"`)\n- Returns the raw field value which may need type conversion\n\n**Using `settings` to access configuration values:**\n- Retrieves values from the integration's configuration settings\n- Supports different scopes with prefix notation:\n  - `flow.settingName`: Access flow-level settings\n  - `export.settingName`: Access export-level settings\n  - `import.settingName`: Access import-level settings\n  - `integration.settingName`: Access integration-level settings\n- Useful for dynamic filtering based on configuration\n\n**Field Transformations**\n- `\"lowercase\"`: Convert string to lowercase\n- `\"uppercase\"`: Convert string to uppercase\n- `\"ceiling\"`: Round number up to the nearest integer\n- `\"floor\"`: Round number down to the nearest integer\n- `\"abs\"`: Get absolute value of a number\n\nType conversion operators are often necessary when comparing extracted field values against literals or when the field type doesn't match the comparison operator's expected type. For example:\n\n```json\n[\n  \"equals\",\n  [\n    \"number\",  // Convert to number before comparison\n    [\n      \"extract\",\n      \"quantity\"\n    ]\n  ],\n  100\n]\n```\n\nExample with datetime conversion:\n```json\n[\n  \"greaterthan\",\n  [\n    \"epochtime\",  // Convert to Unix timestamp before comparison\n    [\n      \"extract\",\n      \"createdDate\"\n    ]\n  ],\n  1609459200000  // January 1, 2021 as Unix timestamp in milliseconds\n]\n```\n\nExample with transformations:\n```json\n[\n  \"and\",\n  [\n    \"matches\",\n    [\n      \"lowercase\",  // Convert to lowercase before matching\n      [\n        \"string\",\n        [\n          \"extract\",\n          \"categories\"\n        ]\n      ]\n    ],\n    \"netsuite\"\n  ],\n  [\n    \"notequals\",\n    [\n      \"string\",\n      [\n        \"extract\",\n        \"recurrence.pattern.type\"\n      ]\n    ],\n    \"\"\n  ]\n]\n```\n\nExample comparing a record field with a flow setting:\n```json\n[\n  \"equals\",\n  [\n    \"string\",\n    [\n      \"extract\",\n      \"trantype\"\n    ]\n  ],\n  [\n    \"string\",\n    [\n      \"settings\",\n      \"flow.trantype\"\n    ]\n  ]\n]\n```\n\n**Examples**\n\nExample 1: Status field is not equal to \"cancelled\"\n```json\n[\n  \"notequals\",\n  [\n    \"extract\",\n    \"status\"\n  ],\n  \"cancelled\"\n]\n```\n\nExample 2: Filename starts with \"HC\"\n```json\n[\n  \"startswith\",\n  [\n    \"extract\",\n    \"filename\"\n  ],\n  \"HC\"\n]\n```\n\nExample 3: Amount is greater than 100\n```json\n[\n  \"greaterthan\",\n  [\n    \"number\",\n    [\n      \"extract\",\n      \"amount\"\n    ]\n  ],\n  100\n]\n```\n\nExample 4: Order date is after January 1, 2023\n```json\n[\n  \"greaterthan\",\n  [\n    \"extract\",\n    \"orderDate\"\n  ],\n  \"2023-01-01T00:00:00Z\"\n]\n```\n\nExample 5: Category contains any of [\"Urgent\", \"High Priority\"]\n```json\n[\n  \"anyof\",\n  [\n    \"extract\",\n    \"category\"\n  ],\n  [\"Urgent\", \"High Priority\"]\n]\n```\n","items":{"oneOf":[{"title":"String","type":"string"},{"title":"Number","type":"number"},{"title":"Boolean","type":"boolean"},{"title":"Object","type":"object"},{"title":"Array","type":"array"},{"title":"Null","type":"null"}]}}}},"script":{"type":"object","description":"Configuration for programmable script-based filtering. This object enables complex, custom\nfiltering logic beyond what expression-based filtering can provide.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"script\" and should not be configured\notherwise. It provides a way to execute custom JavaScript code to determine which items\nshould be processed.\n\n**Implementation approach**\n\nScript-based filtering works by:\n1. Executing the specified function from the referenced script\n2. Passing item data to the function\n3. Using the function's return value (true/false) to determine inclusion\n\n**Common use cases**\n\nScript filtering is ideal for:\n- Complex business logic that can't be expressed as simple rules\n- Dynamic filtering criteria that change based on external factors\n- Content-based filtering that requires deep inspection\n- Advanced pattern matching beyond simple wildcards\n- Multi-stage filtering with intermediate logic\n\nFor AI agents: Only use script-based filtering when expression-based filtering is insufficient.\nScript filtering requires maintaining custom code, which adds complexity to the integration.\n","properties":{"_scriptId":{"type":"string","description":"Reference to the Script resource that contains the filtering logic. This must be a valid\nObjectId of a Script resource that exists in the system.\n\nThe referenced script must contain the function specified in the `function` field\nand must be written to handle filtering specifically. The script receives\nitem data as its input and must return a boolean value indicating whether\nto process the item (true) or skip it (false).\n\nFormat: 24-character hexadecimal string (MongoDB ObjectId)\n"},"function":{"type":"string","description":"Name of the function within the script to execute for filtering decisions. This function\nmust exist in the script referenced by _scriptId.\n\n**Function requirements**\n\nThe specified function must:\n- Accept item data as its first parameter\n- Return a boolean value (true to process the item, false to skip it)\n- Handle errors gracefully\n- Execute efficiently (as it may run for many items)\n\n**Function signature**\n\n```javascript\nfunction filterItems(itemData) {\n  // itemData contains properties of the item being evaluated\n  // Custom logic here\n  return true; // or false to skip the item\n}\n```\n\nFor AI agents: Ensure the function name exactly matches a function defined in the\nreferenced script, as mismatches will cause the filter to fail.\n"}}}}},"HTTPConnector":{"type":"object","required":["_id","_userId","name","createdAt","lastModified"],"description":"HTTP Connector object as returned by the detail (by-ID) endpoint.","allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","description":"User who created this connector.","readOnly":true},"legacyIds":{"type":"array","description":"All legacy assistant IDs associated with this connector.","readOnly":true,"items":{"type":"string"}},"supportsIClient":{"type":"boolean","description":"When true, this connector supports shared iClient credentials.","readOnly":true},"supportsWebhook":{"type":"boolean","description":"When true, this connector supports webhook-based exports.","readOnly":true},"hasBlobEndpoints":{"type":"boolean","description":"When true, at least one endpoint under this connector handles binary/blob data.","readOnly":true},"metadataLoadStrategy":{"type":"string","enum":["staged"],"readOnly":true,"description":"Present only when the connector uses staged metadata loading. Omitted\nwhen the stored strategy is `full`."},"__numOfBlobEndpoints":{"type":"number","description":"Number of blob endpoints for this connector","readOnly":true},"metadata":{"type":"object","readOnly":true,"description":"Connector metadata used by Data Intelligence tooling. Returned\nonly by the detail (by-ID) endpoint — list responses omit it.","properties":{"di":{"type":"object","description":"Data Intelligence attributes for this connector.","properties":{"isSourceOnboard":{"type":"boolean","description":"When true, the connector is onboarded as a Data Intelligence source."},"apiResolution":{"type":"object","description":"Which API group and version Data Intelligence resolves this\nconnector to. Present only on connectors with multiple API\ngroups or versions.","properties":{"api":{"type":"string","description":"Name of the resolved API group."},"version":{"type":"string","description":"Name of the resolved version."}}}}}}}}}]},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\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/httpconnectors":{"post":{"operationId":"createHttpConnector","tags":["HTTP Connectors"],"summary":"Create an HTTP connector","description":"Creates a new HTTP Connector framework definition. `name` is\nrequired, along with either `versions` (flat connector) or `apis`\n(grouped connector).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"201":{"description":"HTTP Connector created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPConnector"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
````

## Get an HTTP connector

> Retrieves the full HTTP Connector object including \`published\`,\
> \`baseURIs\`, \`supportedBy\`, and version details omitted from the\
> list endpoint.

````json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"HTTPConnector":{"type":"object","required":["_id","_userId","name","createdAt","lastModified"],"description":"HTTP Connector object as returned by the detail (by-ID) endpoint.","allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","description":"User who created this connector.","readOnly":true},"legacyIds":{"type":"array","description":"All legacy assistant IDs associated with this connector.","readOnly":true,"items":{"type":"string"}},"supportsIClient":{"type":"boolean","description":"When true, this connector supports shared iClient credentials.","readOnly":true},"supportsWebhook":{"type":"boolean","description":"When true, this connector supports webhook-based exports.","readOnly":true},"hasBlobEndpoints":{"type":"boolean","description":"When true, at least one endpoint under this connector handles binary/blob data.","readOnly":true},"metadataLoadStrategy":{"type":"string","enum":["staged"],"readOnly":true,"description":"Present only when the connector uses staged metadata loading. Omitted\nwhen the stored strategy is `full`."},"__numOfBlobEndpoints":{"type":"number","description":"Number of blob endpoints for this connector","readOnly":true},"metadata":{"type":"object","readOnly":true,"description":"Connector metadata used by Data Intelligence tooling. Returned\nonly by the detail (by-ID) endpoint — list responses omit it.","properties":{"di":{"type":"object","description":"Data Intelligence attributes for this connector.","properties":{"isSourceOnboard":{"type":"boolean","description":"When true, the connector is onboarded as a Data Intelligence source."},"apiResolution":{"type":"object","description":"Which API group and version Data Intelligence resolves this\nconnector to. Present only on connectors with multiple API\ngroups or versions.","properties":{"api":{"type":"string","description":"Name of the resolved API group."},"version":{"type":"string","description":"Name of the resolved version."}}}}}}}}}]},"HTTPConnectorBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for this HTTP Connector.","maxLength":255},"published":{"type":"boolean","description":"When true, this connector is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates (used when `apis` is empty).","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this connector."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this connector targets a GraphQL API."},"requireBodyMatchForLinking":{"type":"boolean","description":"Require request body matching when auto-linking exports/imports."},"disableAutoLinking":{"type":"boolean","description":"Disable automatic linking of exports/imports to this connector."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Connector versions (used when `apis` is empty).","items":{"$ref":"#/components/schemas/Version"}},"apis":{"type":"array","description":"API groups under this connector. Each group has its own versions, baseURIs, and supportedBy config.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this API group."},"name":{"type":"string","description":"Display name for this API group."},"description":{"type":"string","maxLength":10240,"description":"Explains what this API group covers, shown to users when selecting an API."},"published":{"type":"boolean","description":"When true, this API group is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this API group.","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this API group."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this API group targets a GraphQL API."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Versions available under this API group.","items":{"$ref":"#/components/schemas/Version"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"},"setDefault":{"type":"boolean","description":"When true, this API group is the connector's default selection."}}}},"supportedBy":{"allOf":[{"$ref":"#/components/schemas/SupportedBy"}]},"preBuiltExports":{"type":"array","description":"Pre-built export templates associated with this connector.","items":{"type":"object","properties":{"_exportId":{"type":"string","format":"objectId","description":"Export resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built export is visible to users."}},"required":["_exportId"]}},"preBuiltImports":{"type":"array","description":"Pre-built import templates associated with this connector.","items":{"type":"object","properties":{"_importId":{"type":"string","format":"objectId","description":"Import resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built import is visible to users."}},"required":["_importId"]}}}},"Versioning":{"type":"object","description":"Strategy for how API versions are passed in requests. Used at the\nconnector level and per API group; both use the same shape.","properties":{"location":{"type":"string","enum":["uri","query_parameter","header"],"description":"Where the version identifier is placed in outgoing requests."},"headerName":{"type":"string","description":"Header name when `location` is `header`."},"queryParameterName":{"type":"string","description":"Query parameter name when `location` is `query_parameter`."}}},"Version":{"type":"object","description":"A version of the connector (or of an API group). Both contexts use the\nsame shape.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."},"published":{"type":"boolean","description":"When true, this version is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this version.","items":{"type":"string"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"}}},"SupportedBy":{"type":"object","description":"Framework-defined defaults that pre-configure fields and prompt users\nwhen a connection, export, import, or iClient is created from this\nconnector (or from a specific version / API group).","properties":{"connection":{"$ref":"#/components/schemas/SupportedBySection"},"export":{"$ref":"#/components/schemas/SupportedBySection"},"import":{"$ref":"#/components/schemas/SupportedBySection"},"iClient":{"$ref":"#/components/schemas/SupportedBySection"}}},"SupportedBySection":{"type":"object","description":"Conditions, pre-configured field values, and fields the user must set\nfor one resource type (connection, export, import, or iClient) when it\nis created from this connector. All four sections share this shape.","properties":{"preConfiguredFields":{"type":"array","description":"Fields automatically set on the target resource. Not editable by the user.","items":{"$ref":"#/components/schemas/SupportedByPreConfiguredField"}},"fieldsUserMustSet":{"type":"array","description":"Fields the user must provide values for when creating the target resource.","items":{"$ref":"#/components/schemas/SupportedByFieldUserMustSet"}},"fieldsToUnset":{"type":"array","description":"Field paths to clear on the target resource."},"conditions":{"type":"array","description":"Expression-based filters referenced by `_conditionIds` in\n`preConfiguredFields` and `fieldsUserMustSet` to conditionally\napply those field configurations.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this condition, referenced by `_conditionIds` in field entries."},"condition":{"$ref":"#/components/schemas/Filter"}}}}}},"SupportedByPreConfiguredField":{"type":"object","description":"A field automatically set to a predefined value on the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Value(s) to assign. Typically a single-element array; entries may be\nany JSON type."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply. If absent, always applies.","items":{"type":"string","format":"objectId"}}}},"SupportedByFieldUserMustSet":{"type":"object","description":"A field the user must provide a value for when creating the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Optional suggested or constrained values. Entries may be any JSON\ntype."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply.","items":{"type":"string","format":"objectId"}},"helpURL":{"type":"string","description":"URL to documentation for this field."},"labelOverride":{"type":"string","description":"Custom label to display in the UI instead of the default."},"inputType":{"type":"string","enum":["number","password","uri"],"description":"UI input widget type shown when prompting the user for this field.\nUses the same widget vocabulary as Trading Partner Connectors."}}},"Filter":{"type":"object","description":"Configuration for selectively processing records based on specified criteria. This object enables\nprecise control over which items are included or excluded from processing operations.\n\n**Filter behavior**\n\nWhen configured, the filter is applied before processing begins:\n- Items that match the filter criteria are processed\n- Items that don't match are completely skipped\n- No partial processing is performed\n\n**Implementation approaches**\n\nThere are two distinct filtering mechanisms available:\n\n**Rule-Based Filtering (`type: \"expression\"`)**\n- **Best For**: Common filtering patterns based on standard attributes\n- **Capabilities**: Filter by names, values, dates, numerical ranges, text patterns\n- **Advantages**: Declarative, no coding required, consistent performance\n- **Configuration**: Define rules in the `expression` object\n- **Use When**: You have clear, static criteria for selection\n\n**Script-Based Filtering (`type: \"script\"`)**\n- **Best For**: Complex logic, dynamic criteria, or business rules\n- **Capabilities**: Full programmatic control, access to complete metadata\n- **Advantages**: Maximum flexibility, can implement any filtering logic\n- **Configuration**: Reference a script in the `script` object\n- **Use When**: Simple rules aren't sufficient or logic needs to be dynamic\n","properties":{"type":{"type":"string","description":"Determines which filtering mechanism to use. This choice affects which properties\nmust be configured and how filtering logic is implemented.\n\n**Available types**\n\n**Rule-Based Filtering (`\"expression\"`)**\n- **Required Config**: The `expression` object with rule definitions\n- **Behavior**: Evaluates declarative rules against item attributes\n- **Best For**: Common patterns like name matching, date ranges, value limits\n- **Advantages**: Simpler to configure, no custom code required\n\n**Script-Based Filtering (`\"script\"`)**\n- **Required Config**: The `script` object with _scriptId and function\n- **Behavior**: Executes custom JavaScript to determine which items to process\n- **Best For**: Complex conditions, business logic, dynamic criteria\n- **Advantages**: Maximum flexibility, can implement any logic\n\n**Implementation guidance**\n\n1. For standard filtering needs (name, size, date), use `\"expression\"`\n2. For complex logic or conditions not covered by expressions, use `\"script\"`\n3. When selecting a type, you must configure the corresponding object:\n    - `type: \"expression\"` requires the `expression` object\n    - `type: \"script\"` requires the `script` object\n","enum":["expression","script"]},"expression":{"type":"object","description":"Configuration for declarative rule-based filtering. This object enables filtering\nitems based on common attributes without requiring custom code.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"expression\" and should not be\nconfigured otherwise. It provides a standardized way to define filtering rules that\ncan match against item attributes like name, type, value, date, and other properties.\n\n**Implementation guidance**\n\nThe expression system uses a rule-based approach where:\n- Rules can be combined with AND/OR logic\n- Each rule can check a specific attribute\n- Multiple conditions can be applied (ranges, pattern matching, exact matches)\n\n**Common filter patterns**\n\n1. **Pattern matching**: Using wildcards like `*` and `?`\n2. **Value range filtering**: Numbers between min and max values\n3. **Date range filtering**: Items created/modified within specific time ranges\n4. **Status checking**: Items with specific status values or properties\n\nFor AI agents: Rule-based filtering should be your first choice when the filtering criteria\ncan be expressed in terms of standard attributes. Only use script-based filtering when\nmore complex logic is required.\n","properties":{"version":{"type":"string","description":"Version identifier for the expression format. Currently only version \"1\" is supported.\n\nThis field ensures future compatibility if the expression format evolves. Always set to \"1\"\nfor current implementations.\n","enum":["1"]},"rules":{"type":"array","description":"Expression array defining filter conditions using prefix notation. The first element is the operator,\nfollowed by its operands which may themselves be nested expression arrays.\n\nThe rule expression follows this pattern:\n- First element: Operator name (string)\n- Remaining elements: Operands for that operator (values or nested expressions)\n\n**Expression structure**\n\nFilter expressions use a prefix notation where operators appear before their operands:\n```\n[operator, operand1, operand2, ...]\n```\n\n**Comparison Operators**\n- `\"equals\"`: Exact match (equals)\n- `\"notequals\"`: Not equal to value (not equals)\n- `\"greaterthan\"`: Value is greater than specified value (is greater than)\n- `\"greaterthanequals\"`: Value is greater than or equal to specified value (is greater than or equals)\n- `\"lessthan\"`: Value is less than specified value (is less than)\n- `\"lessthanequals\"`: Value is less than or equal to specified value (is less than or equals)\n- `\"startswith\"`: String starts with specified prefix (starts with)\n- `\"endswith\"`: String ends with specified suffix (ends with)\n- `\"contains\"`: String contains specified substring (contains)\n- `\"doesnotcontain\"`: String does not contain specified substring (does not contain)\n- `\"isempty\"`: Field is empty or null (is empty)\n- `\"isnotempty\"`: Field contains a value (is not empty)\n- `\"matches\"`: Matches specified pattern (matches)\n\n**Logical Operators**\n- `\"and\"`: All conditions must be true\n- `\"or\"`: At least one condition must be true\n- `\"not\"`: Negates the condition\n\n**Field Access and Type Conversion**\n- `\"extract\"`: Access a field from the item by name\n- `\"settings\"`: Access a custom setting from the flow, flow step, or integration configuration\n- `\"boolean\"`: Convert value to Boolean type\n- `\"epochtime\"`: Convert value to Epoch Time (Unix timestamp)\n- `\"number\"`: Convert value to Number type\n- `\"string\"`: Convert value to String type\n\n**Field Access Details**\n\n**Using `extract` to access record fields:**\n- Retrieves values from the current record being processed\n- Can access nested properties using dot notation (e.g., `\"customer.email\"`)\n- Returns the raw field value which may need type conversion\n\n**Using `settings` to access configuration values:**\n- Retrieves values from the integration's configuration settings\n- Supports different scopes with prefix notation:\n  - `flow.settingName`: Access flow-level settings\n  - `export.settingName`: Access export-level settings\n  - `import.settingName`: Access import-level settings\n  - `integration.settingName`: Access integration-level settings\n- Useful for dynamic filtering based on configuration\n\n**Field Transformations**\n- `\"lowercase\"`: Convert string to lowercase\n- `\"uppercase\"`: Convert string to uppercase\n- `\"ceiling\"`: Round number up to the nearest integer\n- `\"floor\"`: Round number down to the nearest integer\n- `\"abs\"`: Get absolute value of a number\n\nType conversion operators are often necessary when comparing extracted field values against literals or when the field type doesn't match the comparison operator's expected type. For example:\n\n```json\n[\n  \"equals\",\n  [\n    \"number\",  // Convert to number before comparison\n    [\n      \"extract\",\n      \"quantity\"\n    ]\n  ],\n  100\n]\n```\n\nExample with datetime conversion:\n```json\n[\n  \"greaterthan\",\n  [\n    \"epochtime\",  // Convert to Unix timestamp before comparison\n    [\n      \"extract\",\n      \"createdDate\"\n    ]\n  ],\n  1609459200000  // January 1, 2021 as Unix timestamp in milliseconds\n]\n```\n\nExample with transformations:\n```json\n[\n  \"and\",\n  [\n    \"matches\",\n    [\n      \"lowercase\",  // Convert to lowercase before matching\n      [\n        \"string\",\n        [\n          \"extract\",\n          \"categories\"\n        ]\n      ]\n    ],\n    \"netsuite\"\n  ],\n  [\n    \"notequals\",\n    [\n      \"string\",\n      [\n        \"extract\",\n        \"recurrence.pattern.type\"\n      ]\n    ],\n    \"\"\n  ]\n]\n```\n\nExample comparing a record field with a flow setting:\n```json\n[\n  \"equals\",\n  [\n    \"string\",\n    [\n      \"extract\",\n      \"trantype\"\n    ]\n  ],\n  [\n    \"string\",\n    [\n      \"settings\",\n      \"flow.trantype\"\n    ]\n  ]\n]\n```\n\n**Examples**\n\nExample 1: Status field is not equal to \"cancelled\"\n```json\n[\n  \"notequals\",\n  [\n    \"extract\",\n    \"status\"\n  ],\n  \"cancelled\"\n]\n```\n\nExample 2: Filename starts with \"HC\"\n```json\n[\n  \"startswith\",\n  [\n    \"extract\",\n    \"filename\"\n  ],\n  \"HC\"\n]\n```\n\nExample 3: Amount is greater than 100\n```json\n[\n  \"greaterthan\",\n  [\n    \"number\",\n    [\n      \"extract\",\n      \"amount\"\n    ]\n  ],\n  100\n]\n```\n\nExample 4: Order date is after January 1, 2023\n```json\n[\n  \"greaterthan\",\n  [\n    \"extract\",\n    \"orderDate\"\n  ],\n  \"2023-01-01T00:00:00Z\"\n]\n```\n\nExample 5: Category contains any of [\"Urgent\", \"High Priority\"]\n```json\n[\n  \"anyof\",\n  [\n    \"extract\",\n    \"category\"\n  ],\n  [\"Urgent\", \"High Priority\"]\n]\n```\n","items":{"oneOf":[{"title":"String","type":"string"},{"title":"Number","type":"number"},{"title":"Boolean","type":"boolean"},{"title":"Object","type":"object"},{"title":"Array","type":"array"},{"title":"Null","type":"null"}]}}}},"script":{"type":"object","description":"Configuration for programmable script-based filtering. This object enables complex, custom\nfiltering logic beyond what expression-based filtering can provide.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"script\" and should not be configured\notherwise. It provides a way to execute custom JavaScript code to determine which items\nshould be processed.\n\n**Implementation approach**\n\nScript-based filtering works by:\n1. Executing the specified function from the referenced script\n2. Passing item data to the function\n3. Using the function's return value (true/false) to determine inclusion\n\n**Common use cases**\n\nScript filtering is ideal for:\n- Complex business logic that can't be expressed as simple rules\n- Dynamic filtering criteria that change based on external factors\n- Content-based filtering that requires deep inspection\n- Advanced pattern matching beyond simple wildcards\n- Multi-stage filtering with intermediate logic\n\nFor AI agents: Only use script-based filtering when expression-based filtering is insufficient.\nScript filtering requires maintaining custom code, which adds complexity to the integration.\n","properties":{"_scriptId":{"type":"string","description":"Reference to the Script resource that contains the filtering logic. This must be a valid\nObjectId of a Script resource that exists in the system.\n\nThe referenced script must contain the function specified in the `function` field\nand must be written to handle filtering specifically. The script receives\nitem data as its input and must return a boolean value indicating whether\nto process the item (true) or skip it (false).\n\nFormat: 24-character hexadecimal string (MongoDB ObjectId)\n"},"function":{"type":"string","description":"Name of the function within the script to execute for filtering decisions. This function\nmust exist in the script referenced by _scriptId.\n\n**Function requirements**\n\nThe specified function must:\n- Accept item data as its first parameter\n- Return a boolean value (true to process the item, false to skip it)\n- Handle errors gracefully\n- Execute efficiently (as it may run for many items)\n\n**Function signature**\n\n```javascript\nfunction filterItems(itemData) {\n  // itemData contains properties of the item being evaluated\n  // Custom logic here\n  return true; // or false to skip the item\n}\n```\n\nFor AI agents: Ensure the function name exactly matches a function defined in the\nreferenced script, as mismatches will cause the filter to fail.\n"}}}}},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/httpconnectors/{_id}":{"get":{"operationId":"getHttpConnectorById","tags":["HTTP Connectors"],"summary":"Get an HTTP connector","description":"Retrieves the full HTTP Connector object including `published`,\n`baseURIs`, `supportedBy`, and version details omitted from the\nlist endpoint.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."}],"responses":{"200":{"description":"HTTP Connector retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPConnector"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
````

## Update an HTTP connector

> Replaces the HTTP Connector with the provided fields.

````json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":"Fields for creating or updating an HTTP Connector. `name` is always\nrequired. On create, provide either `versions` (flat connector) or\n`apis` (grouped connector) -- most connectors use the flat pattern.","required":["name"],"allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"}]},"HTTPConnectorBase":{"type":"object","description":"Writable fields shared by the request and response schemas.","properties":{"name":{"type":"string","description":"Display name for this HTTP Connector.","maxLength":255},"published":{"type":"boolean","description":"When true, this connector is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates (used when `apis` is empty).","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this connector."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this connector targets a GraphQL API."},"requireBodyMatchForLinking":{"type":"boolean","description":"Require request body matching when auto-linking exports/imports."},"disableAutoLinking":{"type":"boolean","description":"Disable automatic linking of exports/imports to this connector."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Connector versions (used when `apis` is empty).","items":{"$ref":"#/components/schemas/Version"}},"apis":{"type":"array","description":"API groups under this connector. Each group has its own versions, baseURIs, and supportedBy config.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this API group."},"name":{"type":"string","description":"Display name for this API group."},"description":{"type":"string","maxLength":10240,"description":"Explains what this API group covers, shown to users when selecting an API."},"published":{"type":"boolean","description":"When true, this API group is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this API group.","items":{"type":"string"}},"helpURL":{"type":"string","description":"Documentation URL shown to users when configuring this API group."},"legacyId":{"type":"string","description":"Legacy assistant ID for backward compatibility."},"isGraphQL":{"type":"boolean","description":"When true, this API group targets a GraphQL API."},"versioning":{"$ref":"#/components/schemas/Versioning"},"versions":{"type":"array","description":"Versions available under this API group.","items":{"$ref":"#/components/schemas/Version"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"},"setDefault":{"type":"boolean","description":"When true, this API group is the connector's default selection."}}}},"supportedBy":{"allOf":[{"$ref":"#/components/schemas/SupportedBy"}]},"preBuiltExports":{"type":"array","description":"Pre-built export templates associated with this connector.","items":{"type":"object","properties":{"_exportId":{"type":"string","format":"objectId","description":"Export resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built export is visible to users."}},"required":["_exportId"]}},"preBuiltImports":{"type":"array","description":"Pre-built import templates associated with this connector.","items":{"type":"object","properties":{"_importId":{"type":"string","format":"objectId","description":"Import resource that serves as the pre-built template."},"published":{"type":"boolean","description":"When true, this pre-built import is visible to users."}},"required":["_importId"]}}}},"Versioning":{"type":"object","description":"Strategy for how API versions are passed in requests. Used at the\nconnector level and per API group; both use the same shape.","properties":{"location":{"type":"string","enum":["uri","query_parameter","header"],"description":"Where the version identifier is placed in outgoing requests."},"headerName":{"type":"string","description":"Header name when `location` is `header`."},"queryParameterName":{"type":"string","description":"Query parameter name when `location` is `query_parameter`."}}},"Version":{"type":"object","description":"A version of the connector (or of an API group). Both contexts use the\nsame shape.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this version."},"name":{"type":"string","description":"Display name for this version (e.g. `v3`)."},"published":{"type":"boolean","description":"When true, this version is visible to users."},"baseURIs":{"type":"array","description":"Base URI templates used for requests targeting this version.","items":{"type":"string"}},"supportedBy":{"$ref":"#/components/schemas/SupportedBy"}}},"SupportedBy":{"type":"object","description":"Framework-defined defaults that pre-configure fields and prompt users\nwhen a connection, export, import, or iClient is created from this\nconnector (or from a specific version / API group).","properties":{"connection":{"$ref":"#/components/schemas/SupportedBySection"},"export":{"$ref":"#/components/schemas/SupportedBySection"},"import":{"$ref":"#/components/schemas/SupportedBySection"},"iClient":{"$ref":"#/components/schemas/SupportedBySection"}}},"SupportedBySection":{"type":"object","description":"Conditions, pre-configured field values, and fields the user must set\nfor one resource type (connection, export, import, or iClient) when it\nis created from this connector. All four sections share this shape.","properties":{"preConfiguredFields":{"type":"array","description":"Fields automatically set on the target resource. Not editable by the user.","items":{"$ref":"#/components/schemas/SupportedByPreConfiguredField"}},"fieldsUserMustSet":{"type":"array","description":"Fields the user must provide values for when creating the target resource.","items":{"$ref":"#/components/schemas/SupportedByFieldUserMustSet"}},"fieldsToUnset":{"type":"array","description":"Field paths to clear on the target resource."},"conditions":{"type":"array","description":"Expression-based filters referenced by `_conditionIds` in\n`preConfiguredFields` and `fieldsUserMustSet` to conditionally\napply those field configurations.","items":{"type":"object","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this condition, referenced by `_conditionIds` in field entries."},"condition":{"$ref":"#/components/schemas/Filter"}}}}}},"SupportedByPreConfiguredField":{"type":"object","description":"A field automatically set to a predefined value on the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Value(s) to assign. Typically a single-element array; entries may be\nany JSON type."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply. If absent, always applies.","items":{"type":"string","format":"objectId"}}}},"SupportedByFieldUserMustSet":{"type":"object","description":"A field the user must provide a value for when creating the target resource.","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for this field entry."},"path":{"type":"string","description":"Dot-notation path of the field on the target resource."},"values":{"type":"array","description":"Optional suggested or constrained values. Entries may be any JSON\ntype."},"_conditionIds":{"type":"array","description":"Condition IDs that must be satisfied for this field to apply.","items":{"type":"string","format":"objectId"}},"helpURL":{"type":"string","description":"URL to documentation for this field."},"labelOverride":{"type":"string","description":"Custom label to display in the UI instead of the default."},"inputType":{"type":"string","enum":["number","password","uri"],"description":"UI input widget type shown when prompting the user for this field.\nUses the same widget vocabulary as Trading Partner Connectors."}}},"Filter":{"type":"object","description":"Configuration for selectively processing records based on specified criteria. This object enables\nprecise control over which items are included or excluded from processing operations.\n\n**Filter behavior**\n\nWhen configured, the filter is applied before processing begins:\n- Items that match the filter criteria are processed\n- Items that don't match are completely skipped\n- No partial processing is performed\n\n**Implementation approaches**\n\nThere are two distinct filtering mechanisms available:\n\n**Rule-Based Filtering (`type: \"expression\"`)**\n- **Best For**: Common filtering patterns based on standard attributes\n- **Capabilities**: Filter by names, values, dates, numerical ranges, text patterns\n- **Advantages**: Declarative, no coding required, consistent performance\n- **Configuration**: Define rules in the `expression` object\n- **Use When**: You have clear, static criteria for selection\n\n**Script-Based Filtering (`type: \"script\"`)**\n- **Best For**: Complex logic, dynamic criteria, or business rules\n- **Capabilities**: Full programmatic control, access to complete metadata\n- **Advantages**: Maximum flexibility, can implement any filtering logic\n- **Configuration**: Reference a script in the `script` object\n- **Use When**: Simple rules aren't sufficient or logic needs to be dynamic\n","properties":{"type":{"type":"string","description":"Determines which filtering mechanism to use. This choice affects which properties\nmust be configured and how filtering logic is implemented.\n\n**Available types**\n\n**Rule-Based Filtering (`\"expression\"`)**\n- **Required Config**: The `expression` object with rule definitions\n- **Behavior**: Evaluates declarative rules against item attributes\n- **Best For**: Common patterns like name matching, date ranges, value limits\n- **Advantages**: Simpler to configure, no custom code required\n\n**Script-Based Filtering (`\"script\"`)**\n- **Required Config**: The `script` object with _scriptId and function\n- **Behavior**: Executes custom JavaScript to determine which items to process\n- **Best For**: Complex conditions, business logic, dynamic criteria\n- **Advantages**: Maximum flexibility, can implement any logic\n\n**Implementation guidance**\n\n1. For standard filtering needs (name, size, date), use `\"expression\"`\n2. For complex logic or conditions not covered by expressions, use `\"script\"`\n3. When selecting a type, you must configure the corresponding object:\n    - `type: \"expression\"` requires the `expression` object\n    - `type: \"script\"` requires the `script` object\n","enum":["expression","script"]},"expression":{"type":"object","description":"Configuration for declarative rule-based filtering. This object enables filtering\nitems based on common attributes without requiring custom code.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"expression\" and should not be\nconfigured otherwise. It provides a standardized way to define filtering rules that\ncan match against item attributes like name, type, value, date, and other properties.\n\n**Implementation guidance**\n\nThe expression system uses a rule-based approach where:\n- Rules can be combined with AND/OR logic\n- Each rule can check a specific attribute\n- Multiple conditions can be applied (ranges, pattern matching, exact matches)\n\n**Common filter patterns**\n\n1. **Pattern matching**: Using wildcards like `*` and `?`\n2. **Value range filtering**: Numbers between min and max values\n3. **Date range filtering**: Items created/modified within specific time ranges\n4. **Status checking**: Items with specific status values or properties\n\nFor AI agents: Rule-based filtering should be your first choice when the filtering criteria\ncan be expressed in terms of standard attributes. Only use script-based filtering when\nmore complex logic is required.\n","properties":{"version":{"type":"string","description":"Version identifier for the expression format. Currently only version \"1\" is supported.\n\nThis field ensures future compatibility if the expression format evolves. Always set to \"1\"\nfor current implementations.\n","enum":["1"]},"rules":{"type":"array","description":"Expression array defining filter conditions using prefix notation. The first element is the operator,\nfollowed by its operands which may themselves be nested expression arrays.\n\nThe rule expression follows this pattern:\n- First element: Operator name (string)\n- Remaining elements: Operands for that operator (values or nested expressions)\n\n**Expression structure**\n\nFilter expressions use a prefix notation where operators appear before their operands:\n```\n[operator, operand1, operand2, ...]\n```\n\n**Comparison Operators**\n- `\"equals\"`: Exact match (equals)\n- `\"notequals\"`: Not equal to value (not equals)\n- `\"greaterthan\"`: Value is greater than specified value (is greater than)\n- `\"greaterthanequals\"`: Value is greater than or equal to specified value (is greater than or equals)\n- `\"lessthan\"`: Value is less than specified value (is less than)\n- `\"lessthanequals\"`: Value is less than or equal to specified value (is less than or equals)\n- `\"startswith\"`: String starts with specified prefix (starts with)\n- `\"endswith\"`: String ends with specified suffix (ends with)\n- `\"contains\"`: String contains specified substring (contains)\n- `\"doesnotcontain\"`: String does not contain specified substring (does not contain)\n- `\"isempty\"`: Field is empty or null (is empty)\n- `\"isnotempty\"`: Field contains a value (is not empty)\n- `\"matches\"`: Matches specified pattern (matches)\n\n**Logical Operators**\n- `\"and\"`: All conditions must be true\n- `\"or\"`: At least one condition must be true\n- `\"not\"`: Negates the condition\n\n**Field Access and Type Conversion**\n- `\"extract\"`: Access a field from the item by name\n- `\"settings\"`: Access a custom setting from the flow, flow step, or integration configuration\n- `\"boolean\"`: Convert value to Boolean type\n- `\"epochtime\"`: Convert value to Epoch Time (Unix timestamp)\n- `\"number\"`: Convert value to Number type\n- `\"string\"`: Convert value to String type\n\n**Field Access Details**\n\n**Using `extract` to access record fields:**\n- Retrieves values from the current record being processed\n- Can access nested properties using dot notation (e.g., `\"customer.email\"`)\n- Returns the raw field value which may need type conversion\n\n**Using `settings` to access configuration values:**\n- Retrieves values from the integration's configuration settings\n- Supports different scopes with prefix notation:\n  - `flow.settingName`: Access flow-level settings\n  - `export.settingName`: Access export-level settings\n  - `import.settingName`: Access import-level settings\n  - `integration.settingName`: Access integration-level settings\n- Useful for dynamic filtering based on configuration\n\n**Field Transformations**\n- `\"lowercase\"`: Convert string to lowercase\n- `\"uppercase\"`: Convert string to uppercase\n- `\"ceiling\"`: Round number up to the nearest integer\n- `\"floor\"`: Round number down to the nearest integer\n- `\"abs\"`: Get absolute value of a number\n\nType conversion operators are often necessary when comparing extracted field values against literals or when the field type doesn't match the comparison operator's expected type. For example:\n\n```json\n[\n  \"equals\",\n  [\n    \"number\",  // Convert to number before comparison\n    [\n      \"extract\",\n      \"quantity\"\n    ]\n  ],\n  100\n]\n```\n\nExample with datetime conversion:\n```json\n[\n  \"greaterthan\",\n  [\n    \"epochtime\",  // Convert to Unix timestamp before comparison\n    [\n      \"extract\",\n      \"createdDate\"\n    ]\n  ],\n  1609459200000  // January 1, 2021 as Unix timestamp in milliseconds\n]\n```\n\nExample with transformations:\n```json\n[\n  \"and\",\n  [\n    \"matches\",\n    [\n      \"lowercase\",  // Convert to lowercase before matching\n      [\n        \"string\",\n        [\n          \"extract\",\n          \"categories\"\n        ]\n      ]\n    ],\n    \"netsuite\"\n  ],\n  [\n    \"notequals\",\n    [\n      \"string\",\n      [\n        \"extract\",\n        \"recurrence.pattern.type\"\n      ]\n    ],\n    \"\"\n  ]\n]\n```\n\nExample comparing a record field with a flow setting:\n```json\n[\n  \"equals\",\n  [\n    \"string\",\n    [\n      \"extract\",\n      \"trantype\"\n    ]\n  ],\n  [\n    \"string\",\n    [\n      \"settings\",\n      \"flow.trantype\"\n    ]\n  ]\n]\n```\n\n**Examples**\n\nExample 1: Status field is not equal to \"cancelled\"\n```json\n[\n  \"notequals\",\n  [\n    \"extract\",\n    \"status\"\n  ],\n  \"cancelled\"\n]\n```\n\nExample 2: Filename starts with \"HC\"\n```json\n[\n  \"startswith\",\n  [\n    \"extract\",\n    \"filename\"\n  ],\n  \"HC\"\n]\n```\n\nExample 3: Amount is greater than 100\n```json\n[\n  \"greaterthan\",\n  [\n    \"number\",\n    [\n      \"extract\",\n      \"amount\"\n    ]\n  ],\n  100\n]\n```\n\nExample 4: Order date is after January 1, 2023\n```json\n[\n  \"greaterthan\",\n  [\n    \"extract\",\n    \"orderDate\"\n  ],\n  \"2023-01-01T00:00:00Z\"\n]\n```\n\nExample 5: Category contains any of [\"Urgent\", \"High Priority\"]\n```json\n[\n  \"anyof\",\n  [\n    \"extract\",\n    \"category\"\n  ],\n  [\"Urgent\", \"High Priority\"]\n]\n```\n","items":{"oneOf":[{"title":"String","type":"string"},{"title":"Number","type":"number"},{"title":"Boolean","type":"boolean"},{"title":"Object","type":"object"},{"title":"Array","type":"array"},{"title":"Null","type":"null"}]}}}},"script":{"type":"object","description":"Configuration for programmable script-based filtering. This object enables complex, custom\nfiltering logic beyond what expression-based filtering can provide.\n\n**Usage context**\n\nThis object is REQUIRED when `filter.type` is set to \"script\" and should not be configured\notherwise. It provides a way to execute custom JavaScript code to determine which items\nshould be processed.\n\n**Implementation approach**\n\nScript-based filtering works by:\n1. Executing the specified function from the referenced script\n2. Passing item data to the function\n3. Using the function's return value (true/false) to determine inclusion\n\n**Common use cases**\n\nScript filtering is ideal for:\n- Complex business logic that can't be expressed as simple rules\n- Dynamic filtering criteria that change based on external factors\n- Content-based filtering that requires deep inspection\n- Advanced pattern matching beyond simple wildcards\n- Multi-stage filtering with intermediate logic\n\nFor AI agents: Only use script-based filtering when expression-based filtering is insufficient.\nScript filtering requires maintaining custom code, which adds complexity to the integration.\n","properties":{"_scriptId":{"type":"string","description":"Reference to the Script resource that contains the filtering logic. This must be a valid\nObjectId of a Script resource that exists in the system.\n\nThe referenced script must contain the function specified in the `function` field\nand must be written to handle filtering specifically. The script receives\nitem data as its input and must return a boolean value indicating whether\nto process the item (true) or skip it (false).\n\nFormat: 24-character hexadecimal string (MongoDB ObjectId)\n"},"function":{"type":"string","description":"Name of the function within the script to execute for filtering decisions. This function\nmust exist in the script referenced by _scriptId.\n\n**Function requirements**\n\nThe specified function must:\n- Accept item data as its first parameter\n- Return a boolean value (true to process the item, false to skip it)\n- Handle errors gracefully\n- Execute efficiently (as it may run for many items)\n\n**Function signature**\n\n```javascript\nfunction filterItems(itemData) {\n  // itemData contains properties of the item being evaluated\n  // Custom logic here\n  return true; // or false to skip the item\n}\n```\n\nFor AI agents: Ensure the function name exactly matches a function defined in the\nreferenced script, as mismatches will cause the filter to fail.\n"}}}}},"HTTPConnector":{"type":"object","required":["_id","_userId","name","createdAt","lastModified"],"description":"HTTP Connector object as returned by the detail (by-ID) endpoint.","allOf":[{"$ref":"#/components/schemas/HTTPConnectorBase"},{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_userId":{"type":"string","format":"objectId","description":"User who created this connector.","readOnly":true},"legacyIds":{"type":"array","description":"All legacy assistant IDs associated with this connector.","readOnly":true,"items":{"type":"string"}},"supportsIClient":{"type":"boolean","description":"When true, this connector supports shared iClient credentials.","readOnly":true},"supportsWebhook":{"type":"boolean","description":"When true, this connector supports webhook-based exports.","readOnly":true},"hasBlobEndpoints":{"type":"boolean","description":"When true, at least one endpoint under this connector handles binary/blob data.","readOnly":true},"metadataLoadStrategy":{"type":"string","enum":["staged"],"readOnly":true,"description":"Present only when the connector uses staged metadata loading. Omitted\nwhen the stored strategy is `full`."},"__numOfBlobEndpoints":{"type":"number","description":"Number of blob endpoints for this connector","readOnly":true},"metadata":{"type":"object","readOnly":true,"description":"Connector metadata used by Data Intelligence tooling. Returned\nonly by the detail (by-ID) endpoint — list responses omit it.","properties":{"di":{"type":"object","description":"Data Intelligence attributes for this connector.","properties":{"isSourceOnboard":{"type":"boolean","description":"When true, the connector is onboarded as a Data Intelligence source."},"apiResolution":{"type":"object","description":"Which API group and version Data Intelligence resolves this\nconnector to. Present only on connectors with multiple API\ngroups or versions.","properties":{"api":{"type":"string","description":"Name of the resolved API group."},"version":{"type":"string","description":"Name of the resolved version."}}}}}}}}}]},"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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/httpconnectors/{_id}":{"put":{"operationId":"updateHttpConnector","tags":["HTTP Connectors"],"summary":"Update an HTTP connector","description":"Replaces the HTTP Connector with the provided fields.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"200":{"description":"HTTP Connector updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPConnector"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
````

## Delete an HTTP connector

> Permanently deletes an HTTP Connector and all its child resources\
> and endpoints.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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"]}}}},"403-forbidden":{"description":"Forbidden. The authenticated caller does not have permission to perform this operation.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"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/httpconnectors/{_id}":{"delete":{"operationId":"deleteHttpConnector","tags":["HTTP Connectors"],"summary":"Delete an HTTP connector","description":"Permanently deletes an HTTP Connector and all its child resources\nand endpoints.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."}],"responses":{"204":{"description":"HTTP Connector deleted successfully."},"401":{"$ref":"#/components/responses/401-unauthorized"},"403":{"$ref":"#/components/responses/403-forbidden"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get form metadata catalog

> Returns projected resource and endpoint summaries for one import or export\
> plane. Import catalogs may include derived \`ignoreExisting\`, \`ignoreMissing\`,\
> and \`isIdentifierPresent\` flags on endpoints. Export catalogs return\
> endpoint \`{ id, name }\` only. Published-only requests may be served from\
> the MongoDB catalog cache and include an \`X-Catalog-Cache\` response header.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"HTTPConnectorCatalogResponse":{"type":"object","required":["resources"],"description":"Form metadata catalog for one import or export plane.","properties":{"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Display labels for catalog UI sections."},"versions":{"type":"array","description":"Connector versions included in the catalog projection.","items":{"type":"object","properties":{"version":{"type":"string","description":"Display name for the version."},"_id":{"type":"string","format":"objectId","description":"Version ID."}}}},"resources":{"type":"array","description":"Projected resources and their endpoints for the requested plane.","items":{"$ref":"#/components/schemas/CatalogResourceSummary"}}}},"CatalogResourceSummary":{"type":"object","required":["id","name","endpoints"],"description":"Projected resource summary in a form metadata catalog response.","properties":{"id":{"type":"string","format":"objectId","description":"HTTP Connector Resource ID."},"name":{"type":"string","description":"Display name for this resource."},"_httpConnectorApiId":{"type":"string","format":"objectId","description":"API group this resource belongs to when the connector uses grouped APIs."},"_versionIds":{"type":"array","description":"Version IDs this resource is associated with.","items":{"type":"string","format":"objectId"}},"versions":{"type":"array","description":"Version labels associated with this resource.","items":{"type":"object","properties":{"version":{"type":"string","description":"Display name for the version."},"_id":{"type":"string","format":"objectId","description":"Version ID."}}}},"endpoints":{"type":"array","description":"Endpoint summaries available on this resource for the requested plane.","items":{"$ref":"#/components/schemas/CatalogEndpointSummary"}}}},"CatalogEndpointSummary":{"type":"object","required":["id","name"],"description":"Projected endpoint summary in a form metadata catalog response.","properties":{"id":{"type":"string","format":"objectId","description":"HTTP Connector Endpoint ID."},"name":{"type":"string","description":"Display name for this endpoint."},"ignoreExisting":{"type":"boolean","description":"When true, import flows ignore records that already exist. Present for import catalogs only."},"ignoreMissing":{"type":"boolean","description":"When true, import flows ignore missing records. Present for import catalogs only."},"isIdentifierPresent":{"type":"boolean","description":"When true, the import endpoint exposes an identifier field. Present for import catalogs only."}}},"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/httpconnectors/{_id}/catalog":{"get":{"operationId":"getHttpConnectorCatalog","tags":["HTTP Connectors"],"summary":"Get form metadata catalog","description":"Returns projected resource and endpoint summaries for one import or export\nplane. Import catalogs may include derived `ignoreExisting`, `ignoreMissing`,\nand `isIdentifierPresent` flags on endpoints. Export catalogs return\nendpoint `{ id, name }` only. Published-only requests may be served from\nthe MongoDB catalog cache and include an `X-Catalog-Cache` response header.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."},{"name":"resourceType","in":"query","required":true,"schema":{"type":"string","enum":["export","import"]},"description":"Resource plane to project."},{"name":"blob","in":"query","required":true,"schema":{"type":"string","enum":["true","false"]},"description":"Selects the blob or non-blob endpoint plane."},{"name":"api","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional API group scope filter."},{"name":"version","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional version scope filter."},{"name":"publishedOnly","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]},"description":"When `true`, only published documents are returned and eligible requests\nmay be served from the catalog cache."}],"responses":{"200":{"description":"Form metadata catalog retrieved successfully.","headers":{"X-Catalog-Cache":{"description":"Catalog cache status for eligible published-only requests. Absent\nwhen the request is not cache-eligible.","schema":{"type":"string","enum":["hit","miss"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPConnectorCatalogResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get resource and endpoint detail

> Returns scoped \`httpConnectorResource\` and \`httpConnectorEndpoint\`\
> documents for a single export/import endpoint, or a paired import\
> create/update batch. Lookup endpoints may be inlined when they are\
> published and belong to the same connector. \`endpointId\` and\
> \`endpointIds\` are mutually exclusive; \`endpointIds\` is only valid when\
> \`resourceType\` is \`import\` and must contain exactly two comma-separated\
> ObjectIds. Composite \`id1+id2\` values are rejected.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"ResourceEndpointDetail":{"type":"object","required":["resolvedResourceId","httpConnectorResource"],"description":"Scoped resource and endpoint metadata for the HTTP connector form.\nSingle-endpoint requests return `resolvedEndpointId` and\n`httpConnectorEndpoint`. Import batch requests (`endpointIds`) return\n`resolvedEndpointIds` and `httpConnectorEndpoints` instead.","properties":{"resolvedResourceId":{"type":"string","format":"objectId","description":"Resource ID resolved for the request."},"resolvedEndpointId":{"type":"string","format":"objectId","description":"Endpoint ID for single-endpoint requests. Present when `resolvedEndpointIds` is absent."},"resolvedEndpointIds":{"type":"array","minItems":2,"maxItems":2,"description":"Create/update endpoint ID pair for import batch requests. Present for batch responses.","items":{"type":"string","format":"objectId"}},"resolvedVersionId":{"type":"string","format":"objectId","description":"Echoed when a version scope filter was supplied on the request."},"httpConnectorResource":{"$ref":"#/components/schemas/HTTPConnectorResourceSummary"},"httpConnectorEndpoint":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary","description":"Endpoint document for single-endpoint requests. Present when `resolvedEndpointIds` is absent."},"httpConnectorEndpoints":{"type":"array","minItems":2,"maxItems":2,"description":"Create/update endpoint documents for import batch requests. Present for batch responses.","items":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary"}},"lookupHttpConnectorEndpoint":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary","description":"Present for import single-endpoint requests when a lookup endpoint\nresolves in scope."},"lookupHttpConnectorEndpoints":{"type":"array","description":"Lookup endpoints resolved for import batch requests.","items":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary"}}},"if":{"required":["resolvedEndpointIds"]},"then":{"required":["resolvedEndpointIds","httpConnectorEndpoints"]},"else":{"required":["resolvedEndpointId","httpConnectorEndpoint"]}},"HTTPConnectorResourceSummary":{"type":"object","description":"Sanitized HTTP Connector Resource document returned by resourceEndpointDetail.","additionalProperties":true},"HTTPConnectorEndpointSummary":{"type":"object","description":"Sanitized HTTP Connector Endpoint document returned by resourceEndpointDetail.","additionalProperties":true},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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/httpconnectors/{_id}/resourceEndpointDetail":{"get":{"operationId":"getHttpConnectorResourceEndpointDetail","tags":["HTTP Connectors"],"summary":"Get resource and endpoint detail","description":"Returns scoped `httpConnectorResource` and `httpConnectorEndpoint`\ndocuments for a single export/import endpoint, or a paired import\ncreate/update batch. Lookup endpoints may be inlined when they are\npublished and belong to the same connector. `endpointId` and\n`endpointIds` are mutually exclusive; `endpointIds` is only valid when\n`resourceType` is `import` and must contain exactly two comma-separated\nObjectIds. Composite `id1+id2` values are rejected.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."},{"name":"resourceType","in":"query","required":true,"schema":{"type":"string","enum":["export","import"]},"description":"Resource plane to resolve."},{"name":"resourceId","in":"query","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector Resource ID that belongs to this connector."},{"name":"blob","in":"query","required":true,"schema":{"type":"string","enum":["true","false"]},"description":"Selects the blob or non-blob endpoint plane."},{"name":"endpointId","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Single endpoint ID. Mutually exclusive with `endpointIds`."},{"name":"endpointIds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated pair of import endpoint IDs for create/update batch\nmode. Import only; exactly two unique IDs. Mutually exclusive with\n`endpointId`."},{"name":"api","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional API group scope filter."},{"name":"version","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional version scope filter; echoed as `resolvedVersionId` when present."},{"name":"publishedOnly","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]},"description":"When `true`, only published documents are returned."}],"responses":{"200":{"description":"Resource and endpoint detail retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceEndpointDetail"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get form metadata catalog

> Returns projected resource and endpoint summaries for one import or export\
> plane. Import catalogs may include derived \`ignoreExisting\`, \`ignoreMissing\`,\
> and \`isIdentifierPresent\` flags on endpoints. Export catalogs return\
> endpoint \`{ id, name }\` only. Published-only requests may be served from\
> the MongoDB catalog cache and include an \`X-Catalog-Cache\` response header.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"HTTPConnectorCatalogResponse":{"type":"object","required":["resources"],"description":"Form metadata catalog for one import or export plane.","properties":{"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Display labels for catalog UI sections."},"versions":{"type":"array","description":"Connector versions included in the catalog projection.","items":{"type":"object","properties":{"version":{"type":"string","description":"Display name for the version."},"_id":{"type":"string","format":"objectId","description":"Version ID."}}}},"resources":{"type":"array","description":"Projected resources and their endpoints for the requested plane.","items":{"$ref":"#/components/schemas/CatalogResourceSummary"}}}},"CatalogResourceSummary":{"type":"object","required":["id","name","endpoints"],"description":"Projected resource summary in a form metadata catalog response.","properties":{"id":{"type":"string","format":"objectId","description":"HTTP Connector Resource ID."},"name":{"type":"string","description":"Display name for this resource."},"_httpConnectorApiId":{"type":"string","format":"objectId","description":"API group this resource belongs to when the connector uses grouped APIs."},"_versionIds":{"type":"array","description":"Version IDs this resource is associated with.","items":{"type":"string","format":"objectId"}},"versions":{"type":"array","description":"Version labels associated with this resource.","items":{"type":"object","properties":{"version":{"type":"string","description":"Display name for the version."},"_id":{"type":"string","format":"objectId","description":"Version ID."}}}},"endpoints":{"type":"array","description":"Endpoint summaries available on this resource for the requested plane.","items":{"$ref":"#/components/schemas/CatalogEndpointSummary"}}}},"CatalogEndpointSummary":{"type":"object","required":["id","name"],"description":"Projected endpoint summary in a form metadata catalog response.","properties":{"id":{"type":"string","format":"objectId","description":"HTTP Connector Endpoint ID."},"name":{"type":"string","description":"Display name for this endpoint."},"ignoreExisting":{"type":"boolean","description":"When true, import flows ignore records that already exist. Present for import catalogs only."},"ignoreMissing":{"type":"boolean","description":"When true, import flows ignore missing records. Present for import catalogs only."},"isIdentifierPresent":{"type":"boolean","description":"When true, the import endpoint exposes an identifier field. Present for import catalogs only."}}},"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":{"/api/httpconnectors/{_id}/catalog":{"get":{"operationId":"getHttpConnectorCatalog","tags":["HTTP Connectors"],"summary":"Get form metadata catalog","description":"Returns projected resource and endpoint summaries for one import or export\nplane. Import catalogs may include derived `ignoreExisting`, `ignoreMissing`,\nand `isIdentifierPresent` flags on endpoints. Export catalogs return\nendpoint `{ id, name }` only. Published-only requests may be served from\nthe MongoDB catalog cache and include an `X-Catalog-Cache` response header.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."},{"name":"resourceType","in":"query","required":true,"schema":{"type":"string","enum":["export","import"]},"description":"Resource plane to project."},{"name":"blob","in":"query","required":true,"schema":{"type":"string","enum":["true","false"]},"description":"Selects the blob or non-blob endpoint plane."},{"name":"api","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional API group scope filter."},{"name":"version","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional version scope filter."},{"name":"publishedOnly","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]},"description":"When `true`, only published documents are returned and eligible requests\nmay be served from the catalog cache."}],"responses":{"200":{"description":"Form metadata catalog retrieved successfully.","headers":{"X-Catalog-Cache":{"description":"Catalog cache status for eligible published-only requests. Absent\nwhen the request is not cache-eligible.","schema":{"type":"string","enum":["hit","miss"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPConnectorCatalogResponse"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get resource and endpoint detail

> Returns scoped \`httpConnectorResource\` and \`httpConnectorEndpoint\`\
> documents for a single export/import endpoint, or a paired import\
> create/update batch. Lookup endpoints may be inlined when they are\
> published and belong to the same connector. \`endpointId\` and\
> \`endpointIds\` are mutually exclusive; \`endpointIds\` is only valid when\
> \`resourceType\` is \`import\` and must contain exactly two comma-separated\
> ObjectIds. Composite \`id1+id2\` values are rejected.

```json
{"openapi":"3.2.0","info":{"title":"HTTP Connectors","version":"1.0.0"},"tags":[{"name":"HTTP Connectors","description":"HTTP Connectors define reusable API frameworks — base URIs, versioning\nstrategies, authentication presets, and supported-by rules — that\nHTTP connections, iClients, imports, and exports inherit.\n\nEach connector has one or more versions and may group multiple API\nproducts under `apis[]`. Child resources (HTTP Connector Resources\nand Endpoints) define the specific operations available.\n\nTwo structural patterns exist:\n- **Flat** — versions and baseURIs sit directly on the connector.\n  Most connectors use this pattern.\n- **Grouped** — the connector nests API products under `apis[]`,\n  each with its own versions and baseURIs.\n\n## HTTP connector schema\n\n{% openapi-schemas spec=\"httpconnector\" schemas=\"HTTPConnector\" 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":{"ResourceEndpointDetail":{"type":"object","required":["resolvedResourceId","httpConnectorResource"],"description":"Scoped resource and endpoint metadata for the HTTP connector form.\nSingle-endpoint requests return `resolvedEndpointId` and\n`httpConnectorEndpoint`. Import batch requests (`endpointIds`) return\n`resolvedEndpointIds` and `httpConnectorEndpoints` instead.","properties":{"resolvedResourceId":{"type":"string","format":"objectId","description":"Resource ID resolved for the request."},"resolvedEndpointId":{"type":"string","format":"objectId","description":"Endpoint ID for single-endpoint requests. Present when `resolvedEndpointIds` is absent."},"resolvedEndpointIds":{"type":"array","minItems":2,"maxItems":2,"description":"Create/update endpoint ID pair for import batch requests. Present for batch responses.","items":{"type":"string","format":"objectId"}},"resolvedVersionId":{"type":"string","format":"objectId","description":"Echoed when a version scope filter was supplied on the request."},"httpConnectorResource":{"$ref":"#/components/schemas/HTTPConnectorResourceSummary"},"httpConnectorEndpoint":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary","description":"Endpoint document for single-endpoint requests. Present when `resolvedEndpointIds` is absent."},"httpConnectorEndpoints":{"type":"array","minItems":2,"maxItems":2,"description":"Create/update endpoint documents for import batch requests. Present for batch responses.","items":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary"}},"lookupHttpConnectorEndpoint":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary","description":"Present for import single-endpoint requests when a lookup endpoint\nresolves in scope."},"lookupHttpConnectorEndpoints":{"type":"array","description":"Lookup endpoints resolved for import batch requests.","items":{"$ref":"#/components/schemas/HTTPConnectorEndpointSummary"}}},"if":{"required":["resolvedEndpointIds"]},"then":{"required":["resolvedEndpointIds","httpConnectorEndpoints"]},"else":{"required":["resolvedEndpointId","httpConnectorEndpoint"]}},"HTTPConnectorResourceSummary":{"type":"object","description":"Sanitized HTTP Connector Resource document returned by resourceEndpointDetail.","additionalProperties":true},"HTTPConnectorEndpointSummary":{"type":"object","description":"Sanitized HTTP Connector Endpoint document returned by resourceEndpointDetail.","additionalProperties":true},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"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":{"/api/httpconnectors/{_id}/resourceEndpointDetail":{"get":{"operationId":"getHttpConnectorResourceEndpointDetail","tags":["HTTP Connectors"],"summary":"Get resource and endpoint detail","description":"Returns scoped `httpConnectorResource` and `httpConnectorEndpoint`\ndocuments for a single export/import endpoint, or a paired import\ncreate/update batch. Lookup endpoints may be inlined when they are\npublished and belong to the same connector. `endpointId` and\n`endpointIds` are mutually exclusive; `endpointIds` is only valid when\n`resourceType` is `import` and must contain exactly two comma-separated\nObjectIds. Composite `id1+id2` values are rejected.","parameters":[{"in":"path","name":"_id","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector ID."},{"name":"resourceType","in":"query","required":true,"schema":{"type":"string","enum":["export","import"]},"description":"Resource plane to resolve."},{"name":"resourceId","in":"query","required":true,"schema":{"type":"string","format":"objectId"},"description":"HTTP Connector Resource ID that belongs to this connector."},{"name":"blob","in":"query","required":true,"schema":{"type":"string","enum":["true","false"]},"description":"Selects the blob or non-blob endpoint plane."},{"name":"endpointId","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Single endpoint ID. Mutually exclusive with `endpointIds`."},{"name":"endpointIds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated pair of import endpoint IDs for create/update batch\nmode. Import only; exactly two unique IDs. Mutually exclusive with\n`endpointId`."},{"name":"api","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional API group scope filter."},{"name":"version","in":"query","required":false,"schema":{"type":"string","format":"objectId"},"description":"Optional version scope filter; echoed as `resolvedVersionId` when present."},{"name":"publishedOnly","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]},"description":"When `true`, only published documents are returned."}],"responses":{"200":{"description":"Resource and endpoint detail retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceEndpointDetail"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```


---

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

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

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

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

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

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

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