> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/api/integrations.md).

# Integrations

## List Source Integrations

> Lists source integrations the user can connect to a dataflow.\
> \
> Each item has \`key\` and \`name\`. Pass \`key\` as \`id\` to\
> GET /v1/integrations/sources/{id} for the fields that integration accepts.<br>

```json
{"openapi":"3.1.0","info":{"title":"Coupler.io Public API","version":"v1"},"servers":[{"url":"https://api.coupler.io"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Bearer token: a personal API token or an OAuth access token."}},"schemas":{"public_api.integrations.collection.response":{"type":"object","properties":{"integrations":{"type":"array","description":"Integrations the user can connect.","items":{"$ref":"#/components/schemas/public_api.integrations.item.response"}}},"required":["integrations"]},"public_api.integrations.item.response":{"type":"object","properties":{"key":{"type":"string","description":"Integration key. Pass it as id on the show endpoint, and when creating a source or destination."},"name":{"type":"string","description":"Integration name."}},"required":["key","name"]},"error_response":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}},"paths":{"/v1/integrations/sources":{"get":{"summary":"List Source Integrations","tags":["Integrations"],"description":"Lists source integrations the user can connect to a dataflow.\n\nEach item has `key` and `name`. Pass `key` as `id` to\nGET /v1/integrations/sources/{id} for the fields that integration accepts.\n","responses":{"200":{"description":"source integrations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/public_api.integrations.collection.response"}}}},"401":{"description":"missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}}}}}}}
```

## Show Source Integration

> Returns one source integration.\
> \
> \`key\` is the value to pass when creating a source. \`credential\_provider\`\
> is the provider to pass when listing credentials, or null when the\
> integration needs no credential. \`params\` are the fields the user can\
> set. \`llm\_instructions\` are extra setup notes, or null when there are none.\
> \
> A param with \`resolve\_options\_with\_tool\` true has no fixed \`options\`.\
> Load them with\
> GET /v1/workspaces/{workspace\_id}/integrations/sources/{id}/field\_options.<br>

```json
{"openapi":"3.1.0","info":{"title":"Coupler.io Public API","version":"v1"},"servers":[{"url":"https://api.coupler.io"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Bearer token: a personal API token or an OAuth access token."}},"schemas":{"public_api.integrations.member.response":{"type":"object","properties":{"key":{"type":"string","description":"Integration key. Pass it as id on the show endpoint, and when creating a source or destination."},"name":{"type":"string","description":"Integration name."},"credential_provider":{"type":["string","null"],"description":"Provider key for the credential this integration uses. Null when the integration needs no credential. Pass it as provider when listing credentials."},"llm_instructions":{"type":["string","null"],"description":"Extra setup notes for this integration. Null when there are none."},"params":{"type":"array","description":"Fields the user can set on this integration.","items":{"$ref":"#/components/schemas/public_api.integrations.param.response"}}},"required":["key","name","credential_provider","llm_instructions","params"]},"public_api.integrations.param.response":{"type":"object","properties":{"name":{"type":"string","description":"Field name. Pass it as field when loading options."},"title":{"type":["string","null"],"description":"Label shown for the field."},"type":{"type":"string","description":"Field type, such as input or select."},"required":{"type":"boolean","description":"True when the field must be set."},"default_value":{"description":"Default value, when the integration defines one."},"helper_text":{"type":"string","description":"Help text for the field."},"depends_on":{"type":["object","null"],"description":"Other fields this field depends on. Null when it depends on nothing."},"options":{"type":["array","null"],"description":"Fixed selectable values. Null when the field has none. Omitted when resolve_options_with_tool is true.","items":{"description":"A string, or an object with label and value.","properties":{"label":{"type":["string","null"],"description":"Label shown for the option. Null when unset."},"value":{"type":["string","null"],"description":"Value to send for the option. Null when unset."}}}},"options_by":{"type":["object","null"],"description":"Unused. Null on fields with a fixed list."},"resolve_options_with_tool":{"type":"boolean","description":"True when options are loaded from field options instead of options."},"options_requires_credential":{"type":"boolean","description":"True when field options require credential_id."},"options_depends_on":{"type":"array","description":"Fields to pass as params[<name>] when loading options.","items":{"type":"string"}}},"required":["name","title","type","required","helper_text","depends_on"]},"error_response":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}},"paths":{"/v1/integrations/sources/{id}":{"get":{"summary":"Show Source Integration","tags":["Integrations"],"parameters":[{"name":"id","in":"path","required":true,"description":"Key of the source integration. Use a key from GET /v1/integrations/sources.","schema":{"type":"string"}}],"description":"Returns one source integration.\n\n`key` is the value to pass when creating a source. `credential_provider`\nis the provider to pass when listing credentials, or null when the\nintegration needs no credential. `params` are the fields the user can\nset. `llm_instructions` are extra setup notes, or null when there are none.\n\nA param with `resolve_options_with_tool` true has no fixed `options`.\nLoad them with\nGET /v1/workspaces/{workspace_id}/integrations/sources/{id}/field_options.\n","responses":{"200":{"description":"source integration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/public_api.integrations.member.response"}}}},"401":{"description":"missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}},"404":{"description":"integration not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}}}}}}}
```

## Get Source Field Options

> Returns the selectable values for one source integration field.\
> \
> Pass \`field\` as the param \`name\`. Pass \`credential\_id\` when the param sets\
> \`options\_requires\_credential\`. Pass each \`options\_depends\_on\` entry as a\
> \`params\[\<name>]\` query parameter.\
> \
> \`options\` is a list of \`label\` and \`value\`. When Coupler.io cannot read\
> options from the source, the response uses the source status and\
> \`error.message\` starts with "Failed to load dynamic options".<br>

```json
{"openapi":"3.1.0","info":{"title":"Coupler.io Public API","version":"v1"},"servers":[{"url":"https://api.coupler.io"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Bearer token: a personal API token or an OAuth access token."}},"schemas":{"public_api.integrations.field_options.response":{"type":"object","properties":{"field":{"type":"string","description":"Param name the options belong to."},"options":{"type":["array","null"],"description":"Selectable values for the field. Null when none apply.","items":{"description":"A string, or an object with label and value.","properties":{"label":{"type":["string","null"],"description":"Label shown for the option. Null when unset."},"value":{"type":["string","null"],"description":"Value to send for the option. Null when unset."}}}}},"required":["field","options"]},"error_response":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}},"paths":{"/v1/workspaces/{workspace_id}/integrations/sources/{id}/field_options":{"get":{"summary":"Get Source Field Options","tags":["Integrations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Id of the workspace. Use an id returned by GET /v1/workspaces.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Key of the source integration. Use a key from GET /v1/integrations/sources.","schema":{"type":"string"}},{"name":"field","in":"query","required":true,"description":"Name of the param to load options for. Use a name from the source integration where resolve_options_with_tool is true.","schema":{"type":"string"}},{"name":"credential_id","in":"query","required":false,"description":"Id of the credential used to load options. Required when the param sets options_requires_credential. Use an id from GET /v1/workspaces/{workspace_id}/credentials.","schema":{"type":"string"}},{"name":"params[reportType.value]","in":"query","required":false,"description":"Value of a field this param depends on. Send each options_depends_on entry as params[<name>]. This example is the report type for Google Search Console dimensions.","schema":{"type":"string"}}],"description":"Returns the selectable values for one source integration field.\n\nPass `field` as the param `name`. Pass `credential_id` when the param sets\n`options_requires_credential`. Pass each `options_depends_on` entry as a\n`params[<name>]` query parameter.\n\n`options` is a list of `label` and `value`. When Coupler.io cannot read\noptions from the source, the response uses the source status and\n`error.message` starts with \"Failed to load dynamic options\".\n","responses":{"200":{"description":"options for the field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/public_api.integrations.field_options.response"}}}},"401":{"description":"missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}},"403":{"description":"workspace is not accessible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}},"404":{"description":"field not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}},"502":{"description":"options could not be loaded from the source","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}}}}}}}
```

## List Destination Integrations

> Lists destination integrations the user can send dataflow results to.\
> \
> Each item has \`key\` and \`name\`. Pass \`key\` as \`id\` to\
> GET /v1/integrations/destinations/{id} for the fields that integration accepts.<br>

```json
{"openapi":"3.1.0","info":{"title":"Coupler.io Public API","version":"v1"},"servers":[{"url":"https://api.coupler.io"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Bearer token: a personal API token or an OAuth access token."}},"schemas":{"public_api.integrations.collection.response":{"type":"object","properties":{"integrations":{"type":"array","description":"Integrations the user can connect.","items":{"$ref":"#/components/schemas/public_api.integrations.item.response"}}},"required":["integrations"]},"public_api.integrations.item.response":{"type":"object","properties":{"key":{"type":"string","description":"Integration key. Pass it as id on the show endpoint, and when creating a source or destination."},"name":{"type":"string","description":"Integration name."}},"required":["key","name"]},"error_response":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}},"paths":{"/v1/integrations/destinations":{"get":{"summary":"List Destination Integrations","tags":["Integrations"],"description":"Lists destination integrations the user can send dataflow results to.\n\nEach item has `key` and `name`. Pass `key` as `id` to\nGET /v1/integrations/destinations/{id} for the fields that integration accepts.\n","responses":{"200":{"description":"destination integrations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/public_api.integrations.collection.response"}}}},"401":{"description":"missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}}}}}}}
```

## Show Destination Integration

> Returns one destination integration.\
> \
> \`key\` is the value to pass when creating a destination.\
> \`credential\_provider\` is the provider to pass when listing credentials,\
> or null when the integration needs no credential. \`params\` are the\
> fields the user can set. \`llm\_instructions\` are extra setup notes, or\
> null when there are none.<br>

```json
{"openapi":"3.1.0","info":{"title":"Coupler.io Public API","version":"v1"},"servers":[{"url":"https://api.coupler.io"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Bearer token: a personal API token or an OAuth access token."}},"schemas":{"public_api.integrations.member.response":{"type":"object","properties":{"key":{"type":"string","description":"Integration key. Pass it as id on the show endpoint, and when creating a source or destination."},"name":{"type":"string","description":"Integration name."},"credential_provider":{"type":["string","null"],"description":"Provider key for the credential this integration uses. Null when the integration needs no credential. Pass it as provider when listing credentials."},"llm_instructions":{"type":["string","null"],"description":"Extra setup notes for this integration. Null when there are none."},"params":{"type":"array","description":"Fields the user can set on this integration.","items":{"$ref":"#/components/schemas/public_api.integrations.param.response"}}},"required":["key","name","credential_provider","llm_instructions","params"]},"public_api.integrations.param.response":{"type":"object","properties":{"name":{"type":"string","description":"Field name. Pass it as field when loading options."},"title":{"type":["string","null"],"description":"Label shown for the field."},"type":{"type":"string","description":"Field type, such as input or select."},"required":{"type":"boolean","description":"True when the field must be set."},"default_value":{"description":"Default value, when the integration defines one."},"helper_text":{"type":"string","description":"Help text for the field."},"depends_on":{"type":["object","null"],"description":"Other fields this field depends on. Null when it depends on nothing."},"options":{"type":["array","null"],"description":"Fixed selectable values. Null when the field has none. Omitted when resolve_options_with_tool is true.","items":{"description":"A string, or an object with label and value.","properties":{"label":{"type":["string","null"],"description":"Label shown for the option. Null when unset."},"value":{"type":["string","null"],"description":"Value to send for the option. Null when unset."}}}},"options_by":{"type":["object","null"],"description":"Unused. Null on fields with a fixed list."},"resolve_options_with_tool":{"type":"boolean","description":"True when options are loaded from field options instead of options."},"options_requires_credential":{"type":"boolean","description":"True when field options require credential_id."},"options_depends_on":{"type":"array","description":"Fields to pass as params[<name>] when loading options.","items":{"type":"string"}}},"required":["name","title","type","required","helper_text","depends_on"]},"error_response":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}},"paths":{"/v1/integrations/destinations/{id}":{"get":{"summary":"Show Destination Integration","tags":["Integrations"],"parameters":[{"name":"id","in":"path","required":true,"description":"Key of the destination integration. Use a key from GET /v1/integrations/destinations.","schema":{"type":"string"}}],"description":"Returns one destination integration.\n\n`key` is the value to pass when creating a destination.\n`credential_provider` is the provider to pass when listing credentials,\nor null when the integration needs no credential. `params` are the\nfields the user can set. `llm_instructions` are extra setup notes, or\nnull when there are none.\n","responses":{"200":{"description":"destination integration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/public_api.integrations.member.response"}}}},"401":{"description":"missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}},"404":{"description":"integration not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error_response"}}}}}}}}}
```


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.coupler.io/api/integrations.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
