Skip to content

[GA] Publish SDK and API contract for public-key registration and approval#192

Merged
shalim786 merged 4 commits into
mainfrom
agent/ga-public-key-sdk-api-contract
Jul 20, 2026
Merged

[GA] Publish SDK and API contract for public-key registration and approval#192
shalim786 merged 4 commits into
mainfrom
agent/ga-public-key-sdk-api-contract

Conversation

@shalim786

@shalim786 shalim786 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • publish dedicated Fern request and response models for the public-key credential lifecycle under /api-keys/public-keys
  • keep legacy bearer API-key models separate while making credential type server-owned and output-only
  • add Python and TypeScript guidance for P-256 generation, public-only registration, strict AgentID approval signing, rotation, expiry, scope, and revocation
  • document the accepted attacker-initiated transaction/session-swap residual

Why

Customer enablement for AgentID key-pair authentication needs a generated SDK/API contract that matches the merged backend handlers. Callers must be able to register only public key material, store the returned api_key_id as kid, and submit one narrowly-scoped ES256 approval without exposing bearer or private-key credentials.

Developer impact

Generated Python and TypeScript clients gain dedicated list, create, rename, single-revoke, and revoke-all methods. Legacy /api-keys create/list/delete request models remain bearer-only and cannot carry a public JWK or caller-selected credential type.

The guide includes complete helper implementations and operational guidance for organization, pod, and inbox scopes; expiry inheritance; create-new/delete-old rotation; revoke-all idempotency; and keeping private keys below model context.

Validation

  • npx -y fern-api@4.63.0 check — passed with 0 errors
  • local TypeScript and Python SDK generation — passed
  • npm run lint — passed
  • git diff --check — passed

Repository note

fern check --strict-broken-links still reports 11 pre-existing broken links in unrelated existing pages. The new guide introduced no broken-link finding.

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown

📋 View the side-by-side API change review

The 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 review: false on the action.

@github-actions

Copy link
Copy Markdown

✨ API Changes

# API Changelog n/a vs. n/a


## API Changes

### GET /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys/agentid-sign-in/revoke-all
-  endpoint added


### DELETE /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### PATCH /v0/api-keys/public-keys/{api_key_id}
-  endpoint added

💡 Download api-changelog-diff artifact or tag @fern Writer in #github-prs for changelog.

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

✨ API Changes

# API Changelog n/a vs. n/a


## API Changes

### GET /v0/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys/agentid-sign-in/revoke-all
-  endpoint added


### DELETE /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### PATCH /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### GET /v0/inboxes/{inbox_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/inboxes/{inbox_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/pods/{pod_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/pods/{pod_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status

💡 Download api-changelog-diff artifact or tag @fern Writer in #github-prs for changelog.

- guide: "stable cookie binding" -> "per-transaction cookie binding" to
  match the random per-transaction transaction cookie the backend sets
- changelog: separate auth.agentid.com/authorize/approve from the Fern/SDK
  endpoints, noting it is issuer-served and called directly

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

✨ API Changes

# API Changelog n/a vs. n/a


## API Changes

### GET /v0/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys/agentid-sign-in/revoke-all
-  endpoint added


### DELETE /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### PATCH /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### GET /v0/inboxes/{inbox_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/inboxes/{inbox_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/pods/{pod_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/pods/{pod_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status

💡 Download api-changelog-diff artifact or tag @fern Writer in #github-prs for changelog.

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

✨ API Changes

# API Changelog n/a vs. n/a


## API Changes

### GET /v0/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys
-  endpoint added


### POST /v0/api-keys/public-keys/agentid-sign-in/revoke-all
-  endpoint added


### DELETE /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### PATCH /v0/api-keys/public-keys/{api_key_id}
-  endpoint added


### GET /v0/inboxes/{inbox_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/inboxes/{inbox_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status


### GET /v0/pods/{pod_id}/api-keys
-  added the optional property `api_keys/items/permissions/api_key_update` to the response with the `200` status


### POST /v0/pods/{pod_id}/api-keys
-  added the new optional request property `permissions/api_key_update`
-  added the optional property `permissions/api_key_update` to the response with the `200` status

💡 Download api-changelog-diff artifact or tag @fern Writer in #github-prs for changelog.

@shalim786
shalim786 marked this pull request as ready for review July 20, 2026 21:59
@shalim786
shalim786 merged commit aff44d2 into main Jul 20, 2026
4 checks passed
@shalim786
shalim786 deleted the agent/ga-public-key-sdk-api-contract branch July 20, 2026 22:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants