Skip to content
Docs · Start here

Credentials

Every credential an app meets: who makes it, the environment variable it lives in, whether you ever handle it, and how it is rotated.

View as Markdown
All topics
On this page

One key builds everything: projects, services and deploys, from your laptop, CI or your AI. Each app gets its own key automatically (HARAKUMO_API_KEY): it works for every service in that project, AI and email included, and nothing outside it. Everything else below is made by the platform or by a service, and the secrets among them are stored as the project's environment variables, sealed, so app code reads process.env.NAME (or env.NAME in an edge program) and never holds a value in its files.

Keys

CredentialWho makes itWhere it livesDo you handle it?How it is rotated
Workspace key (hk_live_…)An owner or admin, on the Connect pageYour laptop, CI or your AI (HARAKUMO_API_KEY there)Yes: it is shown onceMake a new one, move to it, revoke the old one; pause or give it an end date meanwhile
App key (hk_live_…, the app's own)The platform, for each app, at its first deployHARAKUMO_API_KEY, set at every deploy (a HARAKUMO_API_KEY of your own in Environment is used instead)No: never shown. For local runs an owner or admin signed in to the dashboard can reveal itPOST /api/projects/:id/app-key { action: 'rotate' } (the SDK's projects.rotateAppKey): the app gets the new one at its next deploy and the old one keeps working 24 hours; immediately: true stops the old one now, for one that leaked
Project key (hk_live_…, one project)A developer or a full key, on the Connect page or POST /api/projects/:id/keysCode hosted elsewhere, as HARAKUMO_API_KEYYes: it is shown onceMake a new one and revoke the old one; it is never wider than the key that made it
Mail key (hk_live_… with mail access)An owner or admin, signed in to the dashboardWherever inbox mail is readYes: it is shown onceAs a workspace key; it loses mail access when its maker stops being an owner or admin
Connector token (hk_mcp_…) and its refresh token (hk_mcr_…)Connecting Claude, ChatGPT or another AI clientThe AI clientNoIt renews itself; cut it off on the Connect page
Agent run keyThe platform, for each agent runInside the runNoMade for one run and revoked when it ends

Sign-in

CredentialWho makes itWhere it livesDo you handle it?How it is rotated
Client id (ap_…)Turning sign-in on for a projectHARAKUMO_AUTH_CLIENT_IDYes, and it is public: browser and phone code may hold itIt does not change
Client secret (as_…)Turning sign-in on for a projectHARAKUMO_AUTH_CLIENT_SECRET (server code only)No: it is stored as the settingAn owner or admin rotates it on the project's Sign-in page; the old one keeps working for 24 hours
JWT secretTurning sign-in on for a projectHARAKUMO_AUTH_JWT_SECRET (server code only)No: it is stored as the settingAn owner or admin rotates it; the old one keeps checking tokens for 24 hours (HARAKUMO_AUTH_JWT_SECRET_PREVIOUS, until HARAKUMO_AUTH_JWT_SECRET_PREVIOUS_UNTIL)
A user's sign-in token and refresh token (hkrt_…)Signing a user inThe app, for that userYes: the app keeps and refreshes themEach refresh answers a new refresh token that replaces the old one

Webhooks and agents

CredentialWho makes itWhere it livesDo you handle it?How it is rotated
Sign-in webhook secretSetting the sign-in webhookHARAKUMO_AUTH_WEBHOOK_SECRETNo: it is stored as the settingRotate it on the webhook; the old one stops at once
Payment webhook secretSetting the payment webhookHARAKUMO_PAYMENTS_WEBHOOK_SECRET when your AI sets it (set_payment_webhook); otherwise answered onceOnly when it is answered once: store it as that settingRotate it on the webhook; the old one stops at once
Agent events secretTurning an agent's app events onHARAKUMO_AGENT_<id>_EVENTS_SECRET when your AI turns them on; the agent's page shows it once otherwiseOnly when it is shown once: store it as that settingA new secret (events: "rotate"); the old one stops at once
Agent tools secretSaving an agent's first function toolHARAKUMO_AGENT_TOOLS_SECRETNo: the function reads it once redeployedIt is the project's, kept as the setting
Agent chat id (hkchat_…)Turning visitor chat onThe page that embeds the chatYes, and it is publicA new id (chat: "rotate")
CredentialWho makes itWhere it livesDo you handle it?How it is rotated
Signed storage link (upload or download)Your server asks for one per fileHanded to a browser or phoneYes: pass it on, never keep itEach one ends on its own (an upload link within 15 minutes)
Video upload link and live stream keyCreating a video or live channelThe uploader, or the broadcasterYes: the stream key is a secret, shown on the project's Media pageA new upload link replaces an expired one; delete a channel to end its key

Set by the platform

  • HARAKUMO_PROJECT_ID, the project's id, in every app, build, edge program and function.
  • HARAKUMO_API_KEY, the app's own key (above), in every deploy of the project's site, app and functions.
  • HARAKUMO_DATABASE_ID, HARAKUMO_BUCKET_ID, HARAKUMO_AUTH_POOL_ID and HARAKUMO_AUTH_CLIENT_ID, the ids new Harakumo() (SDK 0.5.0 or later) and the Build Standard read by default, when the project has exactly one database, bucket and sign-in pool. A variable of your own with one of these names in Environment is used instead.
  • Your own third-party secrets (a GitHub token for a private repository, push keys for Apple and Google) are yours: set them as environment variables, and they are stored sealed like the rest.