canonical: https://jentic.com/apis/exist.io/exist-io

# Exist.io API

Jentic publishes the only available OpenAPI specification for Exist.io API, keeping it validated and agent-ready. Exist.io is a personal analytics platform that aggregates self-tracking data from services like Fitbit, Apple Health, Oura, RescueTime, and Google Fit into one timeline. The API exposes user profiles, attribute templates, attribute values, daily insights, correlations, and averages, and lets approved clients write data to attributes they own. It is built around 14 endpoints under `/api/2`/ and uses bearer token authentication for personal-access or OAuth-issued tokens.

## For AI agents

Read a user's aggregated personal analytics data from Exist.io, surface insights and correlations, and write back values for owned attributes such as mood, productivity, or custom metrics.

## Scope

Does not handle device-level raw fitness data, calendar events, or task management - use for aggregated personal analytics, attribute values, and Exist-generated insights only.

## Capabilities

- Read a user's aggregated daily attribute values across mood, sleep, activity, and productivity metrics
- Fetch generated insights and trend correlations Exist computes from the user's tracked data
- Acquire ownership of an attribute so an integration can write daily values to it
- Increment or set values on owned attributes such as custom counters or mood scores
- Retrieve attribute templates to discover which standardised metrics Exist supports
- Pull rolling averages and historical correlation pairs for self-reflection summaries

## Use cases

### Personal Analytics Dashboard Sync

Pull a user's Exist.io profile, attribute values, and insights into a personal dashboard or journaling app. The `/api/2/attributes/with-values` endpoint returns combined metadata and recent values in a single call, while `/api/2/insights` surfaces narrative insights Exist has generated. Useful for quantified-self apps that want a unified view of mood, sleep, activity, and custom metrics without integrating each underlying source separately.

Example prompt: Call GET `/api/2/attributes/with-values` to fetch the user's last 30 days of mood, sleep, and step values, then call GET `/api/2/insights` to retrieve any insights generated this week.

### Custom Habit Tracking Integration

Acquire ownership of a custom attribute through `/api/2/attributes/acquire` and write daily values back via `/api/2/attributes/update` or `/api/2/attributes/increment.` This lets a habit tracker, journaling app, or smart-home integration contribute new data into the user's Exist timeline so it can be correlated with the rest of their tracked metrics.

Example prompt: Call POST `/api/2/attributes/acquire` to claim a meditation_minutes attribute, then call POST `/api/2/attributes/update` with today's value of 20 minutes.

### Correlation and Insight Extraction

Use `/api/2/correlations` and `/api/2/correlations/combo` to surface statistically significant relationships Exist has detected between attributes, such as caffeine intake versus sleep score. Combined with `/api/2/averages`, this powers reflection prompts or weekly review summaries in a coaching agent.

Example prompt: Call GET `/api/2/correlations` to list the user's strongest correlations and pick the top three to summarise in a weekly review email.

### AI Reflection Agent via Jentic

An AI coaching agent loads Exist.io operations through Jentic, then on each weekly schedule pulls attribute values, insights, and correlations to draft a personalised reflection. Through Jentic the agent searches by intent ("read my exist.io insights") and receives the right operation schema, with bearer credentials kept in your Jentic One instance rather than embedded in the agent.

Example prompt: Through Jentic, search 'read exist.io attribute values', load the GET `/api/2/attributes/with-values` operation, execute it for the past seven days, and summarise mood and sleep trends.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/api/2/accounts/profile` | Get the authenticated user's profile |
| GET | `/api/2/attributes/with-values` | List attributes with recent values |
| GET | `/api/2/insights` | Get generated insights |
| GET | `/api/2/correlations` | List discovered correlations |
| POST | `/api/2/attributes/acquire` | Acquire an attribute for writing |
| POST | `/api/2/attributes/update` | Update values on owned attributes |
| POST | `/api/2/attributes/increment` | Increment values on owned attributes |

## Key resources

- **Profile** — User profile and account metadata
- **Attributes** — Tracked metrics with templates, values, and ownership
- **Insights** — Generated narrative insights about the user's data
- **Correlations** — Statistical relationships between attributes
- **Averages** — Rolling averages for attribute values

## Why Jentic

- **Setup:** Wiring the Exist.io API by hand means learning its bearer token auth and tracking the profile, attribute, insight, and correlation endpoints under `/api/2` yourself. Through Jentic you install once, import Exist.io from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** Exist.io identifies attributes in the request body rather than the URL path, so scope the agent to the operations it needs, such as reading insights or updating an attribute value. Actions like acquiring or incrementing attributes stay out of the allowed set unless you add them.
- **Credential handling:** Your Exist.io bearer token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'read exist.io insights' or 'update an exist attribute', and Jentic returns the matching Exist.io operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Fitbit Web API** — Fitbit feeds activity, sleep, and heart-rate data that Exist aggregates and correlates
- **Oura Ring API** — Oura provides sleep and readiness data that Exist can ingest and correlate
- **Google Fit API** — Google Fit aggregates fitness data but does not generate cross-attribute correlations or insights

## FAQ

### Why is there no official OpenAPI spec for Exist.io API?

Exist.io does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Exist.io API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Exist.io API use?

The Exist.io API uses HTTP bearer token authentication. You pass an Authorization: Bearer <token> header where the token is either a personal access token or an OAuth2-issued token. Through Jentic the token is held in the encrypted vault and only scoped credentials are issued to the agent at execution time, so the raw token never enters agent context.

### Can I write data into a user's Exist.io account with this API?

Yes, but only for attributes your client owns. Call POST `/api/2/attributes/acquire` to claim ownership of a custom or supported attribute, then use POST `/api/2/attributes/update` or POST `/api/2/attributes/increment` to write daily values. Attributes already owned by another integration cannot be written until they are released.

### What insights and correlations are available?

GET `/api/2/insights` returns the narrative insights Exist generates, GET `/api/2/correlations` returns the strongest detected attribute pairs with their correlation strength, and GET `/api/2/correlations/combo` lets you query a specific pair. GET `/api/2/averages` returns rolling averages for an attribute.

### How do I read a user's mood values for the last week through Jentic?

Run pip install jentic, then use the async client to search 'read exist.io attribute values', load the returned GET `/api/2/attributes/with-values` operation, and execute with attributes=mood and limit=7. Jentic returns the parsed response with no manual auth handling required.

### What are the rate limits for the Exist.io API?

The OpenAPI spec does not declare rate limits. Exist.io applies per-user limits in production; treat 429 responses as authoritative and back off using the Retry-After header when present.

### Can I limit what my agent is allowed to do with the Exist.io API?

Yes. Because you host Jentic One yourself, your own rules decide which Exist.io operations and credentials the agent may use, so you can allow read-only calls such as GET `/api/2/attributes/with-values`, GET `/api/2/insights`, and GET `/api/2/correlations` while keeping everything else off. Since Exist.io identifies attributes in the request body rather than the URL path, you scope by operation: write actions like POST `/api/2/attributes/acquire`, `/api/2/attributes/update`, and `/api/2/attributes/increment` stay out of the allowed set unless you add them. Your bearer token is injected only for the operations you have approved, so the agent cannot call an endpoint you have not enabled.
