Chronary Account API
The Account API from Chronary — 1 operation(s) for account.
The Account API from Chronary — 1 operation(s) for account.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/chronary-ai:chronary-ai-account-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Chronary Account API
version: 1.0.0
description: 'Calendar-as-a-service API for AI agents.
Manage calendars, events, and availability for AI and human agents.
All endpoints require an API key passed as a Bearer token.
**Authentication:** `Authorization: Bearer chr_sk_...` or `Authorization: Bearer chr_ak_...`
**Rate limit:** 10 requests/second per API key. Exceeds return HTTP 429.
**Quotas:** Monthly operation limits by plan — see Billing & plans and Rate limits.
**Agent bootstrap:** Custom extensions prefixed `x-agent-*` describe the self-signup flow for AI agents. These are not part of any registered OpenAPI extension — they are a Chronary convention.'
contact:
name: Chronary Support
email: support@chronary.ai
url: https://docs.chronary.ai
servers:
- url: https://api.chronary.ai
description: Production
security:
- BearerAuth: []
tags:
- name: Account
paths:
/v1/auth/export:
get:
operationId: exportAccountData
summary: Export all account data (GDPR Art. 15 + 20 portability)
description: 'Returns a JSON dump of every row this org owns: agents, calendars, events (with decrypted titles + descriptions), iCal subscriptions (with decrypted URL), webhook subscriptions (with decrypted secret), availability rules, scheduling proposals + slots + responses, API key prefixes, ToS acceptance history, and usage/quota counters. Internal infrastructure data (incident_records, scheduling internals, password/OTP/key hashes, claim tokens) is excluded. JWT-authenticated (console session cookie or Bearer token). Rate-limited to 10 exports/hour/org. Response includes `Cache-Control: no-store` and `Content-Disposition: attachment` so the browser triggers a download.'
tags:
- Account
security:
- SessionAuth: []
responses:
'200':
description: Full account data export
headers:
Content-Disposition:
schema:
type: string
description: attachment; filename="chronary-export-YYYY-MM-DD.json"
Cache-Control:
schema:
type: string
description: no-store
content:
application/json:
schema:
$ref: '#/components/schemas/DataExport'
'401':
description: Missing or invalid console session — these endpoints require a console JWT, not an API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited — 10 requests per second per key exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
DataExport:
type: object
properties:
exported_at:
type: string
format: date-time
format_version:
type: string
enum:
- '1'
org:
type: object
properties:
id:
type: string
name:
type: string
email:
type: string
format: email
plan:
type: string
signup_source:
type: string
status:
type: string
oauth_provider:
type:
- string
- 'null'
oauth_provider_id:
type:
- string
- 'null'
email_verified:
type: boolean
onboarding_completed_at:
type:
- string
- 'null'
format: date-time
accepted_terms_version:
type:
- string
- 'null'
accepted_terms_at:
type:
- string
- 'null'
format: date-time
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
required:
- id
- name
- email
- plan
- signup_source
- status
- oauth_provider
- oauth_provider_id
- email_verified
- onboarding_completed_at
- accepted_terms_version
- accepted_terms_at
- created_at
- updated_at
agents:
type: array
items: {}
calendars:
type: array
items: {}
events:
type: array
items: {}
availability_rules:
type: array
items: {}
ical_subscriptions:
type: array
items: {}
webhook_subscriptions:
type: array
items: {}
api_keys:
type: array
items: {}
scheduling_proposals:
type: array
items: {}
proposal_slots:
type: array
items: {}
proposal_responses:
type: array
items: {}
usage_records:
type: array
items: {}
quota_counters:
type: array
items: {}
tos_acceptances:
type: array
items: {}
account_claims_initiated:
type: array
items: {}
account_claims_targeting_this_org:
type: array
items: {}
feedback_submissions:
type: array
items: {}
required:
- exported_at
- format_version
- org
- agents
- calendars
- events
- availability_rules
- ical_subscriptions
- webhook_subscriptions
- api_keys
- scheduling_proposals
- proposal_slots
- proposal_responses
- usage_records
- quota_counters
- tos_acceptances
- account_claims_initiated
- account_claims_targeting_this_org
- feedback_submissions
Error:
type: object
properties:
error:
type: object
properties:
type:
type: string
example: invalid_request
message:
type: string
example: The field "name" is required.
request_id:
type: string
example: req_01H9X4M2P5R8T6V0
required_plan:
type: string
example: pro
description: 'plan_required: the plan that unlocks the feature'
feature:
type: string
description: 'plan_required: the gated feature'
metric:
type: string
description: 'quota_exceeded and count caps: the metric at its limit (a PLAN_LIMITS key, accepted by POST /v1/billing/upgrade-requests)'
limit:
type: integer
description: 'quota_exceeded and count caps: the plan''s limit for `metric`'
upgrade_url:
type: string
description: Where a human upgrades the plan
docs_url:
type: string
contact_url:
type: string
description: 'Contract-managed plans: where to contact sales'
retry_after:
type: integer
description: Seconds until the request may be retried
required:
- type
- message
- request_id
required:
- error
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'API key with `chr_sk_*` for org-level access or `chr_ak_*` for agent-scoped access. Pass in the Authorization header: `Authorization: Bearer chr_sk_...`'
SessionAuth:
type: apiKey
in: cookie
name: chronary_session
description: Console session JWT (HS256), issued by sign-in and sent as the `chronary_session` cookie (a Bearer JWT is also accepted). This is NOT a chr_sk_*/chr_ak_* API key — API keys are rejected with 401 on these endpoints.
x-agent-self-signup:
url: https://api.chronary.ai/v1/agent/sign-up
verify_url: https://api.chronary.ai/v1/agent/verify
restricted_key_returned: true
human_in_the_loop: otp_email
rate_limit: 5 requests per 60s per client IP
x-agent-bootstrap-script:
npx: npx @chronary/agent-init@latest
shell: https://chronary.ai/agent-init.sh
description: One-liner that performs sign-up, prompts for OTP, verifies, and creates a smoke calendar. Accepts CHRONARY_EMAIL and CHRONARY_OTP env vars for non-interactive flows.
x-llms-txt: https://docs.chronary.ai/llms.txt
x-llms-full-txt: https://docs.chronary.ai/llms-full.txt
x-mcp-server-card: https://chronary.ai/.well-known/mcp/server-card.json
x-api-catalog: https://chronary.ai/.well-known/api-catalog