Search documentation
Fuzzy search across every docs page and section
Getting startedAuthentication
Fuzzy search across every docs page and section
Getting startedAuthentication
Getting started
Secret-key bearer auth for /v1: key formats, environments, response headers, rotation, and failure modes.
Every /v1 request authenticates with a secret key in the Authorization header. The key identifies your application and selects the data environment.
curl https://api.feelconnect.dev/v1/accounts/get \-H "Authorization: Bearer fc_sk_test_4Kj9mQ2xP7cW1nR4tYb8sJd3fV6zL0aG" \-H "Content-Type: application/json" \-d '{"access_token":"fc_at_..."}'
| Prefix | Environment | Purpose |
|---|---|---|
fc_sk_test_ | test | Sandbox data plane. Free on every plan. Safe for CI. |
fc_sk_live_ | live | Live data plane. Requires the Startup plan or above (live_access_unavailable otherwise). |
fc_at_ | either | Item access token — pairs with the key that created it, not a login credential. |
whsec_ | either | Webhook endpoint signing secret. Shown once at creation. |
Keys are created in Dashboard → API keys. FeelConnect stores only a SHA-256 hash of each secret, plus a display prefix and last four characters — a lost key cannot be recovered, only replaced.
The key is the environment. A fc_sk_test_ key can only see items created with test keys, and fc_sk_live_ only live items. Access tokens are bound to the application and environment that created them — using a test key with a live item's token returns item_not_found.
| Header | Meaning |
|---|---|
X-Request-Id | Unique id (req_…) for the request. Include it in support tickets. |
FC-Version | API contract date, currently 2026-07-01. |
X-RateLimit-Limit | Your key's sustained requests-per-second allowance. |
X-RateLimit-Remaining | Tokens left in the burst bucket. |
X-RateLimit-Reset | Seconds until the bucket fully refills. |
All failures use the standard error envelope with HTTP 401 or 403:
| Code | Status | Meaning |
|---|---|---|
missing_api_key | 401 | No Authorization: Bearer header was sent. |
invalid_api_key | 401 | The key is malformed, unknown, or revoked. |
item_not_found | 401 | The access_token does not belong to this app + environment. |
live_access_unavailable | 403 | Live keys require a paid plan. |
{"error": {"type": "authentication_error","code": "invalid_api_key","message": "This API key does not exist or was revoked.","request_id": "req_2kD8fQx1mZ7cW4nY0bT3"}}
invalid_api_key.