> ## Documentation Index
> Fetch the complete documentation index at: https://www.c1.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose how to connect an application

> Compare pre-built connectors, file import, C1AI custom connectors, configuration-driven connectors, and the Baton SDK, and pick the one that fits your application.

C1 can connect to an application in several ways. Choose the simplest one that does what you need. This page helps you decide, and each option links to the page that shows you how to set it up.

## Find the right option

Work through these questions in order and stop at the first one that fits.

1. **Is there a pre-built connector for the application?** Check the [connector library](https://www.c1.ai/docs/baton/intro.md) and the [capabilities index](https://www.c1.ai/docs/baton/capabilities.md). If one exists, use it. C1 maintains pre-built connectors, they need only credentials to set up, and many can provision access as well as sync it.
2. **Is the application a SQL database?** Use [SQL authoring (baton-sql)](https://www.c1.ai/docs/baton/baton-sql.md).
3. **Does the application support SCIM?** Use [SCIM authoring (baton-scim)](https://www.c1.ai/docs/baton/baton-scim.md).
4. **Does the application have a REST API?**
   * If you only need to sync who has access to what, the API is reachable over HTTPS on the public internet, and you want C1 to build and host the connector, use a [C1AI custom connector](https://www.c1.ai/docs/baton/custom-connectors.md).
   * If you need to grant or revoke access, the application isn't reachable from the internet, or you want to control the configuration yourself, use [HTTP authoring (baton-http)](https://www.c1.ai/docs/baton/baton-http.md).
5. **Does the application have no API?** If you can export its data, use a [file connector](https://www.c1.ai/docs/baton/file-connectors.md). If you need ongoing sync and the application has a web UI, use [RPA authoring (baton-rpa)](https://www.c1.ai/docs/baton/rpa.md) to drive the UI with a declarative playbook.
6. **Does none of that fit?** For another protocol, account creation through an API, custom business logic, or an authentication method the other options don't support, build a connector with the [Baton SDK](https://www.c1.ai/docs/developer/intro.md).

## Compare the options

| Option | You provide | Where it runs | Sync | Provisioning |
| - | - | - | - | - |
| **Pre-built connector** | Credentials | Cloud-hosted or self-hosted, depending on the connector | Yes | Varies by connector |
| **C1AI custom connector** (early access) | A conversation with the C1AI assistant, API documentation, and read-only credentials | Hosted by C1 | Yes | No |
| **HTTP authoring** (baton-http) | YAML configuration | You run it ([self-hosted](https://www.c1.ai/docs/baton/deploy.md)) | Yes | Grant and revoke. Not account creation. |
| **SQL authoring** (baton-sql) | YAML configuration | You run it | Yes | Grant, revoke, and account provisioning |
| **SCIM authoring** (baton-scim) | A service provider name or YAML configuration | You run it | Yes | Group membership and role assignment |
| **RPA authoring** (baton-rpa) | A declarative playbook | You run it, or cloud-hosted via AWS Bedrock AgentCore | Yes | No |
| **File connector** | A file, or an external data source | Uploaded to C1 | Import only | No |
| **Baton SDK** | Go code | You run it | Yes | Everything the SDK supports, including custom actions |

## About each option

### Pre-built connectors

Use a pre-built connector whenever one exists. You don't build or maintain anything, and each connector's page shows whether it can provision and how it can be hosted. A custom connector, a configuration-driven connector, or SDK code is only worth the effort when no pre-built connector covers your application.

### C1AI custom connectors

Describe the application to the C1AI assistant, and the assistant builds and tests a connector against its API. After you approve it, C1 hosts it. Choose this when:

* The application has an HTTP API with published documentation or an OpenAPI specification.
* You only need to sync access data.
* The API is reachable over HTTPS on the public internet.
* You'd rather not write or host anything.

Custom connectors don't support provisioning or custom actions. See [Build a connector with C1AI](https://www.c1.ai/docs/baton/custom-connectors.md) for the requirements and the build steps.

### Configuration-driven connectors

These connectors read a configuration file instead of Go code. You download the connector, write the configuration, and run it in your own environment, so they can reach systems that aren't exposed to the internet.

* **[HTTP authoring](https://www.c1.ai/docs/baton/baton-http.md)** fits applications with a REST API where the access model maps to users, groups, and resources. Choose it when you need to grant and revoke access, or when you want someone other than a developer to maintain the integration. It can't create accounts, and you need the SDK for authentication it doesn't support, such as Kerberos or SAML.
* **[SQL authoring](https://www.c1.ai/docs/baton/baton-sql.md)** fits internal user directories, custom applications, and legacy systems where you have database access but no API. It supports PostgreSQL, MySQL, Microsoft SQL Server, Oracle, SAP HANA, SQLite, and Amazon Redshift, and IBM DB2 on request.
* **[SCIM authoring](https://www.c1.ai/docs/baton/baton-scim.md)** fits applications that support SCIM. It has built-in service providers for Miro, Postman, Slack, and Zoom, and you can write a configuration for others.
* **[RPA authoring](https://www.c1.ai/docs/baton/rpa.md)** fits applications with no API at all. It signs in to the application's own web UI and extracts data according to a declarative playbook, instead of calling an API. It's sync-only and can't provision or deprovision access. It can run self-hosted or cloud-hosted against a browser on AWS Bedrock AgentCore.

### File connectors

Use a file connector for an application with no automated connector and no API, such as a legacy or homegrown on-premises application. You upload an `.xlsx`, `.csv`, or `.c1z` file, or sync from an external data source. See [Import application data from a file](https://www.c1.ai/docs/baton/file-connectors.md).

### Baton SDK

Write a connector in Go when the other options can't do what you need. The SDK supports every operation C1 offers, including account creation, resource creation and deletion, credential rotation, and custom actions, and it lets you handle any protocol or authentication method. It also means writing, building, and maintaining code. Start with [Getting started with Baton connectors](https://www.c1.ai/docs/developer/intro.md).

## Where a connector runs is a separate choice

How you build a connector and where it runs are independent decisions. Pre-built connectors can be cloud-hosted in your C1 tenant or self-hosted in your own environment. Most configuration-driven connectors and all SDK connectors run in your environment; RPA authoring is the exception, with a cloud-hosted option. C1AI custom connectors run in C1's environment. See [Should I use self-hosted connectors?](https://www.c1.ai/docs/baton/deploy.md#should-i-use-self-hosted-connectors) to decide between hosting methods.
