docs(accounts): Update Account, pod and inbox account reads - #256
Merged
Merged
Conversation
…_update permission
Documents the account update API and the scoped account routes:
POST /v0/accounts/{account_id}/update
GET /v0/pods/{pod_id}/accounts
GET /v0/pods/{pod_id}/accounts/{account_id}
POST /v0/pods/{pod_id}/accounts/{account_id}/update
GET /v0/inboxes/{inbox_id}/accounts
GET /v0/inboxes/{inbox_id}/accounts/{account_id}
POST /v0/inboxes/{inbox_id}/accounts/{account_id}/update
Account gains a sparse `status` (present only as `disabled`) and
`disabled_at`. The update request takes its own enum, `enabled | disabled`,
so re-enabling needs no null and existing rows need no backfill. Adds the
`account_update` permission to ApiKeyPermissions, a changelog entry, and a
pointer from the AgentID sign-in guide.
openapi/openapi.yml carries only the account-related hunks of a fresh
export; the pre-existing drift on main is left for the CI regeneration.
The seven new operations are annotated in the CLI overrides and
bin/gen-cli-overrides.py --check passes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
📋 View the side-by-side API change reviewThe link expires in 7 days. 🔒 Your API specs are encrypted in CI before they're uploaded. The decryption key stays in this link's URL fragment (after the #), which browsers never send to a server, so oasdiff cannot read your specs. How it works → Posted automatically by the oasdiff GitHub Action. To turn this off (no spec upload, no comment), set |
✨ API Changes# API Changelog n/a vs. n/a
## API Changes
### GET /v0/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status
### GET /v0/accounts/{account_id}
- added the optional property `disabled_at` to the response with the `200` status
- added the optional property `status` to the response with the `200` status
### POST /v0/accounts/{account_id}/update
- endpoint added
### GET /v0/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/api-keys/{api_key_id}
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/inboxes/{inbox_id}/accounts
- endpoint added
### GET /v0/inboxes/{inbox_id}/accounts/{account_id}
- endpoint added
### POST /v0/inboxes/{inbox_id}/accounts/{account_id}/update
- endpoint added
### GET /v0/inboxes/{inbox_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/inboxes/{inbox_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/inboxes/{inbox_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/pods/{pod_id}/accounts
- endpoint added
### GET /v0/pods/{pod_id}/accounts/{account_id}
- endpoint added
### POST /v0/pods/{pod_id}/accounts/{account_id}/update
- endpoint added
### GET /v0/pods/{pod_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/pods/{pod_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `permissions/account_update` to the response with the `200` status
### PATCH /v0/pods/{pod_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/providers/{provider_id}/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status💡 Download |
Follows agentmail-to/agentmail-api#1353: the update is PATCH /v0/accounts/{account_id}/update, and the pod and inbox forms of the update are gone. The pod and inbox List and Get forms stay. Spec and CLI overrides rebuilt: five new operations instead of seven. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
✨ API Changes# API Changelog n/a vs. n/a
## API Changes
### GET /v0/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status
### GET /v0/accounts/{account_id}
- added the optional property `disabled_at` to the response with the `200` status
- added the optional property `status` to the response with the `200` status
### PATCH /v0/accounts/{account_id}/update
- endpoint added
### GET /v0/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/api-keys/{api_key_id}
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/inboxes/{inbox_id}/accounts
- endpoint added
### GET /v0/inboxes/{inbox_id}/accounts/{account_id}
- endpoint added
### GET /v0/inboxes/{inbox_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/inboxes/{inbox_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/inboxes/{inbox_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/pods/{pod_id}/accounts
- endpoint added
### GET /v0/pods/{pod_id}/accounts/{account_id}
- endpoint added
### GET /v0/pods/{pod_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/pods/{pod_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `permissions/account_update` to the response with the `200` status
### PATCH /v0/pods/{pod_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/providers/{provider_id}/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status💡 Download |
Update Account's reference now covers the whole disable flow: where the account_id comes from, that an account exists only after a first sign-in, what the provider sees once it is disabled (access_denied, then invalid_grant for an earlier code), what is not revoked, that sign-in keys cannot hold account_update, and what a 409 means. Same text in the Fern definition and the OpenAPI spec. Checked against agentmail-api main at 11d0d0684. The changelog entry moves to 2026-09-21, the day the route went live in prod. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
✨ API Changes# API Changelog n/a vs. n/a
## API Changes
### GET /v0/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status
### GET /v0/accounts/{account_id}
- added the optional property `disabled_at` to the response with the `200` status
- added the optional property `status` to the response with the `200` status
### PATCH /v0/accounts/{account_id}/update
- endpoint added
### GET /v0/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/api-keys/{api_key_id}
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/inboxes/{inbox_id}/accounts
- endpoint added
### GET /v0/inboxes/{inbox_id}/accounts/{account_id}
- endpoint added
### GET /v0/inboxes/{inbox_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/inboxes/{inbox_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `oneOf[subschema #1: CreateApiKeyResponse]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### PATCH /v0/inboxes/{inbox_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/pods/{pod_id}/accounts
- endpoint added
### GET /v0/pods/{pod_id}/accounts/{account_id}
- endpoint added
### GET /v0/pods/{pod_id}/api-keys
- added the optional property `api_keys/items/oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `api_keys/items/oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### POST /v0/pods/{pod_id}/api-keys
- added the new optional request property `oneOf[subschema #1: CreateBearerApiKeyRequest]/allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the new optional request property `oneOf[subschema #2: CreatePublicKeyRequest]/permissions/account_update`
- added the optional property `permissions/account_update` to the response with the `200` status
### PATCH /v0/pods/{pod_id}/api-keys/{api_key_id}
- added the new optional request property `allOf[subschema #1: ApiKeyMutableFields]/permissions/account_update`
- added the optional property `oneOf[subschema #1: BearerApiKey]/permissions/account_update` to the response with the `200` status
- added the optional property `oneOf[subschema #2: PublicKeyCredential]/permissions/account_update` to the response with the `200` status
### GET /v0/providers/{provider_id}/accounts
- added the optional property `accounts/items/disabled_at` to the response with the `200` status
- added the optional property `accounts/items/status` to the response with the `200` status💡 Download |
duharry0915
approved these changes
Sep 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Documents the account update API and the pod and inbox forms of the accounts resource. Matches agentmail-to/agentmail-api#1353.
New endpoints in the API reference
PATCH /v0/accounts/{account_id}/updateGET /v0/pods/{pod_id}/accounts,GET /v0/pods/{pod_id}/accounts/{account_id}GET /v0/inboxes/{inbox_id}/accounts,GET /v0/inboxes/{inbox_id}/accounts/{account_id}The update exists only on
/accounts. The account ID is global, so the pod and inbox forms are read-only.Schema
Account.statusis optional and present only asdisabled, withdisabled_atbeside it. An enabled account carries neither, so existing rows need no backfill.UpdateAccountRequest.statustakes its own enum,enabled | disabled. No null form.ApiKeyPermissionsgainsaccount_update. Reads still need onlyinbox_read.Also
account_id, what the provider sees (access_denied, theninvalid_grant), what is not revoked, that sign-in keys cannot holdaccount_update, and the 409 retry.2026-09-21.mdx(the day the route went live), and a pointer to Update Account from the AgentID sign-in guide.openapi/openapi.ymland the CLI overrides gain the five new operations.bin/gen-cli-overrides.py --checkpasses.Notes for review
1898afcc5) contains both the live route and theenabled | disabledcontract. Verified against agentmail-api main at11d0d0684.fern exportand only the account-related hunks were applied. Pre-existing drift on main (Authorize Inbox response,APIKeystag casing, and a few others) is untouched and will resolve when CI regenerates.Test plan
fern check: 0 errorspython3 bin/gen-cli-overrides.py --check: overrides in sync with spec🤖 Generated with Claude Code