The API is read-only. There are no endpoints that create, change or delete anything. Journal content is private to the user who authorizes the connection: a token only ever returns that user’s own data, and the user can revoke it at any time.
Base URL
Authentication
The API uses OAuth 2.0 authorization code flow with PKCE (S256). Clients are public (no client secret). PKCE is required;plain is not accepted.
1
Register a client (once)
POST /oauth/register with {"client_name": "...", "redirect_uris": ["https://..."]} returns a client_id starting with agc_. Redirect URIs must be HTTPS (or http://localhost). The redirect_uri you use later must exactly match a registered one.2
Send the user to authorize
Open
GET /oauth/authorize in the user’s browser with response_type=code, client_id, redirect_uri, scope, state, code_challenge and code_challenge_method=S256. The user signs in to Life Note if needed and clicks Allow. The browser is redirected to your redirect_uri with code and state. The code expires after 5 minutes and works once.3
Exchange the code
POST /oauth/token with grant_type=authorization_code, code, redirect_uri and code_verifier.4
Refresh
Access tokens last 1 hour. Before or after expiry,
POST /oauth/token with grant_type=refresh_token and refresh_token. Refresh tokens last 30 days and rotate: each refresh returns a new refresh token and invalidates the old one. Reusing an old refresh token revokes the whole token family, so always save the newest one.https://mylifenote.ai/.well-known/oauth-authorization-server and https://mylifenote.ai/.well-known/oauth-protected-resource.
Sending the token
Send the access token in theAuthorization header on every API request:
Scopes
Request scopes as a space-separated list. A token is never silently upgraded: new scopes require the user to approve again.
Rate limits
Limits apply to every authenticated request:
Exceeding any limit returns
429. No Retry-After header is sent; wait for the next minute (or day) window. Windows are fixed, not sliding. /oauth/token is not part of these limits, but unauthenticated client registration is limited per IP.
Errors
Errors are JSON with a machine-readableerror code and, usually, a detail string:
The API does not return 503 itself; an unhandled server fault is a plain 500.
Pagination
GET /entries pages with limit (max 100) and offset. There is no cursor. GET /search is not paginated (max 50 results).
