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

# ETL: OneTouch Health Source

> How to connect OneTouch Health with an API token or a username and password, and read Clients, Carers, Invoices and lookup tables in your Integrate.io ETL pipeline.

Use the OneTouch Health source component to read care-management data (Clients, Carers, Invoices and OneTouch's lookup tables) from the OneTouch Connect C3 API into your [Integrate.io](http://integrate.io/) ETL pipeline.

## Connection Setup

Create a OneTouch Health connection from **Connections → New connection → OneTouch Health**.

| Field        | Description                                                                                                                                                          |
| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name         | Display name for the connection inside Integrate.io.                                                                                                                 |
| API Host     | Your OneTouch regional API host, for example `api-uk.onetouchhealth.net`. Enter the host name only: no `https://` and no path. It must end in `.onetouchhealth.net`. |
| Connect with | How Integrate.io authenticates: **Username & password** (recommended) or **API token**. See [Choosing how to connect](#choosing-how-to-connect).                     |
| Username     | Shown for **Username & password**. The OneTouch user Integrate.io logs in as.                                                                                        |
| Password     | Shown for **Username & password**. That user's OneTouch password.                                                                                                    |
| API Token    | Shown for **API token**. A OneTouch bearer token you obtained yourself.                                                                                              |

After filling in the form, click **Test connection**. A successful test means OneTouch accepted the credentials and returned the list of areas (`/general/get-areas`).

### Choosing how to connect

OneTouch tokens expire after roughly 15–20 minutes, and OneTouch has no refresh endpoint.

* **Username & password (recommended).** Integrate.io logs in to OneTouch when it needs a token and logs in again whenever the token expires, including in the middle of a job. Long reads such as a full Invoices load keep running for hours without intervention.
* **API token.** Integrate.io uses the token exactly as you pasted it. When it expires, test connection, previews and jobs fail with an authentication error until you edit the connection and paste a new token. Use this only for short jobs, or if you can't give Integrate.io a OneTouch login.

To switch an existing connection, edit it, change **Connect with**, and re-enter the password or token. The old value is cleared on a switch so a token is never sent to OneTouch as a password.

<Warning>**Use a dedicated OneTouch user for Integrate.io.** OneTouch keeps one live token per user and revokes it on every new login. If Integrate.io shares a user with another tool, another environment, or a person, each login cancels the other's token: your other tool gets logged out, and the Integrate.io job has to log in again. Create a separate OneTouch user for Integrate.io and use it only on this connection.</Warning>

## Source Properties

### Source Table (Object)

| Object              | OneTouch endpoint            | Paginated                                    |
| :------------------ | :--------------------------- | :------------------------------------------- |
| Clients             | `/clients/all`               | Yes, 100 records per page                    |
| Carers              | `/carers/all`                | Yes, 100 records per page                    |
| Invoices            | `/invoicing`                 | Yes, 20 records per page (fixed by OneTouch) |
| Locations           | `/general/locations`         | No                                           |
| Areas               | `/general/get-areas`         | No                                           |
| Tags                | `/tags/view/all`             | No                                           |
| ClientStatuses      | `/client/statuses`           | No                                           |
| CarerStatuses       | `/carer/statuses`            | No                                           |
| CarerPositions      | `/carer/get-positions`       | No                                           |
| CarerTransportTypes | `/carer/get-transport-types` | No                                           |

<Note>**Locations** needs a master (account-wide) OneTouch user. A user restricted to specific locations may be refused on this object.</Note>

### Load Type

The OneTouch Health source reads every record for the selected object on each run (full load).

## Schema

After selecting the object, the **Schema** section lists the fields OneTouch returns, with their detected data types. Choose the columns to include, rename them with aliases, and override data types as needed.

## Best Practices

* **Connect with Username & password** for any job that may run longer than about 15 minutes. That includes every full Invoices load.
* **Give Integrate.io its own OneTouch user** (see the warning above), and don't reuse it in another environment or tool.
* **Run jobs on a recently created cluster.** Username & password connections need the current connector version, which clusters pick up when they are created. A cluster created before the feature was released fails these jobs with `Unknown auth type: password_login`; create a new cluster and run the job again.

## FAQ

**Q: What happens when the token expires in the middle of a job?**

With **Username & password**, the connector logs in again and retries the request that failed, and the job carries on. With **API token**, the job fails with an authentication error. Paste a fresh token into the connection and run the job again.

**Q: Test connection says the credentials are invalid, but they work in OneTouch.**

OneTouch can reject a login that overlaps another login for the same user, such as a running job logging in at the same moment. Integrate.io waits and retries once automatically. If the error persists, confirm the user can log in to OneTouch directly and that no other tool is using the same user.

**Q: How long does a full Invoices load take?**

OneTouch serves invoices 20 per page and limits API calls to 8 requests per second, so a large account takes time: about 300,000 invoices took roughly two and a half hours in testing. The connector keeps renewing its token for the whole run. Use **Username & password** for this object.

**Q: Is there a rate limit?**

Yes. The connector sends at most 8 requests per second, matching OneTouch's documented limit, and retries up to 3 times on HTTP 429 or 503 with backoff capped at 60 seconds.

**Q: Does Integrate.io store my OneTouch password?**

Yes. It's stored encrypted like every connection credential and used only to log in to OneTouch's login endpoint (`/connect/c3/v1/auth`). A **Username & password** connection never needs a token from you.

## Related

<CardGroup cols={2}>
  <Card title="REST API Source" icon="arrow-right" href="/docs/etl/using-components-rest-api-source" horizontal />

  <Card title="API Endpoints with Pagination Support" icon="arrow-right" href="/docs/etl/api-endpoints-with-pagination-support" horizontal />

  <Card title="Defining Connections" icon="arrow-right" href="/docs/etl/defining-connections" horizontal />

  <Card title="Sources Overview" icon="arrow-right" href="/docs/etl/category/sources" horizontal />
</CardGroup>
