Skip to content

docs: migration#3678

Merged
chronark merged 8 commits intomainfrom
migration-docs
Jul 31, 2025
Merged

docs: migration#3678
chronark merged 8 commits intomainfrom
migration-docs

Conversation

@chronark
Copy link
Collaborator

@chronark chronark commented Jul 29, 2025

  • fix: openapi
  • docs: migration from v1 to v2

Check the migration docs at http://localhost:3000/api-reference/v1/migration/

Summary by CodeRabbit

  • New Features

    • Added a comprehensive migration guide in the documentation for upgrading from API v1 to v2, covering keys, APIs, identities, permissions, rate limiting, and error handling.
    • Introduced an overview page summarizing migration steps, benefits, and SDK upgrade instructions.
    • Enhanced documentation navigation with a new "Migration Guide" section for easy access to migration topics.
  • Documentation

    • Added detailed migration guides for keys, APIs, identities, permissions, rate limiting, and error handling.
    • Updated API overview with a deprecation warning for v1 and a link to the migration guide.
  • Style

    • Improved documentation structure for better clarity and navigation.
  • Chores

    • Minor updates to internal schema references and navigation configuration for consistency.

@vercel
Copy link

vercel bot commented Jul 29, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
dashboard ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 31, 2025 8:56am
1 Skipped Deployment
Name Status Preview Comments Updated (UTC)
engineering ⬜️ Ignored (Inspect) Visit Preview Jul 31, 2025 8:56am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 29, 2025

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

This change introduces a comprehensive migration guide for the Unkey API, detailing the transition from v1 to v2 across multiple areas including keys, APIs, identities, permissions, rate limiting, and error handling. It restructures documentation navigation to include these guides, updates warning notices, and makes minor OpenAPI schema reference adjustments and benchmarking script improvements.

Changes

Cohort / File(s) Change Summary
Migration Documentation (New Guides)
apps/docs/api-reference/v1/migration/index.mdx, apps/docs/api-reference/v1/migration/keys.mdx, apps/docs/api-reference/v1/migration/apis.mdx, apps/docs/api-reference/v1/migration/identities.mdx, apps/docs/api-reference/v1/migration/permissions.mdx, apps/docs/api-reference/v1/migration/ratelimiting.mdx, apps/docs/api-reference/v1/migration/errors.mdx
Adds detailed migration guides covering all major API areas (overview, keys, APIs, identities, permissions, rate limiting, errors) for transitioning from v1 to v2.
Documentation Navigation
apps/docs/docs.json
Updates navigation to include a "Migration Guide" group with the new migration pages under the v1 introduction.
API Overview Warning
apps/docs/api-reference/v1/overview.mdx
Adds a deprecation warning for v1 and a migration prompt at the top of the overview.
OpenAPI Schema Reference Updates
go/apps/api/openapi/openapi-generated.yaml, go/apps/api/openapi/spec/paths/v2/permissions/getRole/V2PermissionsGetRoleResponseData.yaml, go/apps/api/openapi/spec/paths/v2/permissions/listRoles/V2PermissionsListRolesResponseData.yaml
Changes schema references for roles from "Role" to "role" (case change) in OpenAPI spec and YAML files.
Go OpenAPI Struct Relocation
go/apps/api/openapi/gen.go
Moves the Role struct definition to a new location within the file; no changes to structure or fields.
Benchmarking Script: Key Verification
go/benchmarks/keyverify.js
Expands AWS load zones, splits test scenarios for v1 and v2, updates environment variable usage, and refactors exported functions.
Benchmarking Script: Rate Limiting
go/benchmarks/ratelimit.js
Expands load zones, removes region-specific tagging, simplifies request construction, and updates metric recording.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Docs
    participant APIv1
    participant APIv2

    User->>Docs: Access Migration Guide
    Docs-->>User: Show v1 vs v2 endpoint changes, examples, migration steps

    User->>APIv1: (Legacy) Make v1 request
    APIv1-->>User: v1 response format

    User->>APIv2: (Migrated) Make v2 request (per migration guide)
    APIv2-->>User: v2 response format ({meta, data} envelope)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • chore: deprecate v1 endpoints #3680: Marks v1 API endpoints as deprecated with migration notices, directly related to the same endpoints and migration process.
  • docs: migration #3678: Adds the same migration guide document for API namespace management endpoints from v1 to v2, indicating direct overlap.

Suggested labels

🕹️ oss.gg

Suggested reviewers

  • perkinsjr
  • mcstepp
  • MichaelUnkey
  • ogzhanolguncu

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 26024b0 and 74ea2c6.

📒 Files selected for processing (4)
  • go/apps/api/openapi/gen.go (1 hunks)
  • go/apps/api/openapi/openapi-generated.yaml (2 hunks)
  • go/benchmarks/keyverify.js (2 hunks)
  • go/benchmarks/ratelimit.js (2 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch migration-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link
Contributor

github-actions bot commented Jul 29, 2025

Thank you for following the naming conventions for pull request titles! 🙏

@changeset-bot
Copy link

changeset-bot bot commented Jul 29, 2025

⚠️ No Changeset found

Latest commit: 26024b0

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

♻️ Duplicate comments (1)
go/apps/api/openapi/spec/paths/v2/permissions/getRole/V2PermissionsGetRoleResponseData.yaml (1)

4-4: Same case-sensitivity concern for role.yaml reference

See previous comment – verify that the lowercase file is present to avoid broken $ref links.

@graphite-app
Copy link

graphite-app bot commented Jul 29, 2025

Graphite Automations

"Notify author when CI fails" took an action on this PR • (07/29/25)

1 teammate was notified to this PR based on Andreas Thomas's automation.

Copy link
Member

@perkinsjr perkinsjr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the notes.

One more thing we should probably post a note that V1 is deprecrated here also just in case you land there.

api-reference/v1/overview

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
apps/docs/api-reference/v1/migration/index.mdx (1)

21-25: Caret version specifier breaks pip install
Same issue was raised previously and is still present.

pip install unkey-py@^2.0.0 will fail under PEP 440 semantics.

- pip install unkey-py@^2.0.0
+pip install "unkey-py>=2.0.0,<3.0.0"   # or: pip install -U unkey-py
apps/docs/api-reference/v1/migration/ratelimiting.mdx (2)

12-17: autoApply vs async – examples still use legacy field

Bullet point states the parameter was renamed to autoApply, yet subsequent request/response examples continue to show "async". Update all JSON and code samples accordingly to prevent users from adopting the deprecated field.


114-146: Replace all "async" occurrences with "autoApply" in override examples

At Lines 121, 143, 171 etc. the old field is still present.

-  "async": false
+  "autoApply": false

Apply the same replacement across request and response snippets in this file.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7f0472a and 26024b0.

📒 Files selected for processing (3)
  • apps/docs/api-reference/v1/migration/index.mdx (1 hunks)
  • apps/docs/api-reference/v1/migration/ratelimiting.mdx (1 hunks)
  • apps/docs/api-reference/v1/overview.mdx (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
apps/docs/api-reference/v1/overview.mdx (4)

Learnt from: Flo4604
PR: #2955
File: go/apps/api/routes/v2_identities_create_identity/handler.go:162-202
Timestamp: 2025-03-19T09:25:59.751Z
Learning: In the Unkey codebase, input validation for API endpoints is primarily handled through OpenAPI schema validation, which occurs before requests reach the handler code. For example, in the identities.createIdentity endpoint, minimum values for ratelimit duration and limit are defined in the OpenAPI schema rather than duplicating these checks in the handler.

Learnt from: chronark
PR: #3560
File: go/apps/api/routes/v2_keys_create_key/handler.go:353-466
Timestamp: 2025-07-15T14:25:05.608Z
Learning: In the Unkey codebase, input validation for API endpoints is handled at the OpenAPI schema layer, which validates request fields like permission slugs (pattern: "^[a-zA-Z0-9_]+$", length: 1-100 characters) before requests reach the handler code. This validation occurs during the zen.BindBody call in handlers.

Learnt from: ogzhanolguncu
PR: #3321
File: apps/dashboard/lib/trpc/routers/authorization/roles/keys/schema-with-helpers.ts:5-8
Timestamp: 2025-06-18T12:28:10.449Z
Learning: In the unkey dashboard application, API validation for pagination limits is controlled at the UI level rather than requiring additional server-side validation, as the APIs are internal and protected by UI logic.

Learnt from: Flo4604
PR: #3421
File: go/apps/api/openapi/openapi.yaml:196-200
Timestamp: 2025-07-03T05:58:10.699Z
Learning: In the Unkey codebase, OpenAPI 3.1 is used, which allows sibling keys (such as description) alongside $ref in schema objects. Do not flag this as an error in future reviews.

apps/docs/api-reference/v1/migration/index.mdx (2)

Learnt from: chronark
PR: #2693
File: apps/api/src/routes/v1_keys_updateKey.ts:350-368
Timestamp: 2024-11-29T15:15:47.308Z
Learning: In apps/api/src/routes/v1_keys_updateKey.ts, the code intentionally handles externalId and ownerId separately for clarity. The ownerId field will be removed in the future, simplifying the code.

Learnt from: Flo4604
PR: #3421
File: go/apps/api/openapi/openapi.yaml:196-200
Timestamp: 2025-07-03T05:58:10.699Z
Learning: In the Unkey codebase, OpenAPI 3.1 is used, which allows sibling keys (such as description) alongside $ref in schema objects. Do not flag this as an error in future reviews.

apps/docs/api-reference/v1/migration/ratelimiting.mdx (6)

Learnt from: chronark
PR: #2544
File: apps/api/src/pkg/env.ts:4-6
Timestamp: 2024-10-23T12:05:31.121Z
Learning: The cloudflareRatelimiter type definition in apps/api/src/pkg/env.ts should not have its interface changed; it should keep the limit method returning Promise<{ success: boolean }> without additional error properties.

Learnt from: ogzhanolguncu
PR: #2707
File: apps/dashboard/lib/trpc/routers/ratelimit/createOverride.ts:63-63
Timestamp: 2024-12-05T13:27:55.555Z
Learning: In apps/dashboard/lib/trpc/routers/ratelimit/createOverride.ts, when determining the maximum number of rate limit overrides (max), the intentional use of const max = hasWorkspaceAccess("ratelimitOverrides", namespace.workspace) || 5; allows max to fall back to 5 when hasWorkspaceAccess returns 0 or false. This fallback behavior is expected and intended in the codebase.

Learnt from: MichaelUnkey
PR: #3173
File: apps/docs/security/delete-protection.mdx:21-24
Timestamp: 2025-04-22T17:34:04.438Z
Learning: In the Unkey dashboard UI for enabling delete protection, the button/link to initiate the process is labeled "Enable Delete Protection" while the confirmation button is labeled "Enable API Delete Protection". The documentation should maintain these different labels to match the actual UI.

Learnt from: MichaelUnkey
PR: #3173
File: apps/docs/security/delete-protection.mdx:32-36
Timestamp: 2025-04-22T17:33:28.162Z
Learning: In the Unkey dashboard UI for delete protection, the button/link to initiate the process is labeled "Disable Delete Protection" while the confirmation button is labeled "Disable API Delete Protection". The documentation should maintain these different labels to match the actual UI.

Learnt from: CR
PR: unkeyed/unkey#0
File: go/deploy/CLAUDE.md:0-0
Timestamp: 2025-07-21T18:05:58.236Z
Learning: Applies to go/deploy/**/*.{go,js,ts,tsx,py,sh,md,txt,json,yaml,yml,ini,env,conf,html,css,scss,xml,c,h,cpp,java,rb,rs,php,pl,sql} : Use AIDEV-NOTE:, AIDEV-TODO:, AIDEV-BUSINESS_RULE:, or AIDEV-QUESTION: (all-caps prefix) as anchor comments aimed at AI and developers.

Learnt from: ogzhanolguncu
PR: #3321
File: apps/dashboard/lib/trpc/routers/authorization/roles/keys/schema-with-helpers.ts:5-8
Timestamp: 2025-06-18T12:28:10.449Z
Learning: In the unkey dashboard application, API validation for pagination limits is controlled at the UI level rather than requiring additional server-side validation, as the APIs are internal and protected by UI logic.

🪛 LanguageTool
apps/docs/api-reference/v1/overview.mdx

[grammar] ~6-~6: Use correct spacing
Context: ...January 2026. Please migrate to the v2 API. The Unkey API uses HTTP RPC-style method...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

apps/docs/api-reference/v1/migration/index.mdx

[grammar] ~6-~6: Use correct spacing
Context: ...structures that require updates to your integration. The v2 API is available at **api.unkey.c...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~8-~8: Use correct spacing
Context: ...ill be shut down at the end of the year 2025. ## Quick Start The fastest way to migrate ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~11-~11: Use correct spacing
Context: ...end of the year 2025. ## Quick Start The fastest way to migrate is to update ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~13-~13: Use correct spacing
Context: ...astest way to migrate is to update your SDK: bash npm install @unkey/api@latest bash pip install unkey-py@^2.0.0 bash go get github.com/unkeyed/unkey-go@v2 The v2 SDK automatically points to the n...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~33-~33: Use correct spacing
Context: ...gh all request/response changes via its types. ## Why Migrate to v2? ### Proven Performan...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~35-~35: Use correct spacing
Context: ...anges via its types. ## Why Migrate to v2? ### Proven Performance Improvements Our v2 ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~37-~37: Use correct spacing
Context: ... Migrate to v2? ### Proven Performance Improvements Our v2 changes produce measurable latenc...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~39-~39: Use correct spacing
Context: ...surable latency improvements across all regions: ### Key Changes of v2 - New Domain: API...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~45-~45: Use correct spacing
Context: ...op.png" /> ### Key Changes of v2 - New Domain: API available at `api.unke...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~50-~50: Use correct spacing
Context: ... consistent error handling and response formats ## What You Need to Change The main change...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~52-~52: Use correct spacing
Context: ...d response formats ## What You Need to Change The main changes you'll need to make whe...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~54-~54: Use correct spacing
Context: ...e main changes you'll need to make when migrating: - Update your base URL from `api.unkey.d...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~56-~56: There might be a mistake here.
Context: ... SDKs do this automatically starting at v2.0.0) - Change response parsing from direct re...

(QB_NEW_EN_OTHER)


[grammar] ~58-~58: There might be a mistake here.
Context: ...th hierarchical error codes and request IDs ## Response Format Changes All v2 response...

(QB_NEW_EN_OTHER)


[grammar] ~60-~60: Use correct spacing
Context: ...des and request IDs ## Response Format Changes All v2 responses now use a standardized ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~62-~62: Use correct spacing
Context: ... envelope format with meta and data fields: #### v1 Response Format ```json { "valid": ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~64-~64: Use correct spacing
Context: ...aanddata` fields: #### v1 Response Format json { "valid": true, "keyId": "key_123", "name": "Production API Key" } #### v2 Response Format ```json { "meta": {...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~73-~73: Use correct spacing
Context: ...uction API Key" } #### v2 Response Formatjson { "meta": { "requestId": "req_abc123" }, "data": { "valid": true, "keyId": "key_123", "name": "Production API Key" } } ``` --- ## Detailed Migration by Category Choose t...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~90-~90: Use correct spacing
Context: ...} } ``` --- ## Detailed Migration by Category Choose the endpoint category you need to...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~92-~92: Use correct spacing
Context: ...hoose the endpoint category you need to migrate: Key creation, verification, updates, permissions, and roles API namespace creation, retrieval, and key listing Identity management and shared rate limits Standalone permission and role management Rate limiting and override management Error response format changes and codes ### Getting Help - Documentation: https...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~116-~116: Use correct spacing
Context: ...odes ### Getting Help - Documentation: https://unkey.com/docs/...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

apps/docs/api-reference/v1/migration/ratelimiting.mdx

[grammar] ~6-~6: Use hyphens correctly
Context: ...s from v1 to v2" --- This guide covers rate limiting functionality including namespa...

(QB_NEW_EN_OTHER_ERROR_IDS_29)


[grammar] ~6-~6: Use a comma after introductory words or phrases
Context: ...2" --- This guide covers rate limiting functionality including namespace creation, override ...

(QB_NEW_EN_OTHER_ERROR_IDS_19)


[grammar] ~6-~6: Use hyphens correctly
Context: ...pace creation, override management, and rate limit checking. ## Overview Rate limit...

(QB_NEW_EN_OTHER_ERROR_IDS_29)


[grammar] ~6-~6: Use correct spacing
Context: ...on, override management, and rate limit checking. ## Overview Rate limiting endpoints manage...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~9-~9: Use hyphens correctly
Context: ... and rate limit checking. ## Overview Rate limiting endpoints manage request limits...

(QB_NEW_EN_OTHER_ERROR_IDS_29)


[grammar] ~10-~10: Use correct spacing
Context: ...ace-based rate limiting across your API infrastructure. ### Key Changes in v2: - Response format...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~16-~16: Use correct spacing
Context: ...mproved autoApply parameter (formerly async) ### Migration Impact: - Existing in v1: ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[uncategorized] ~21-~21: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...lities - Maintained in v2: All core rate limiting functionality with backward-compatible ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~21-~21: Use correct spacing
Context: ...nality with backward-compatible request formats --- ## Rate Limit Checking ### POST /v1/rateli...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~25-~25: Use correct spacing
Context: ...ble request formats --- ## Rate Limit Checking ### POST /v1/ratelimits.limit → POST /v2/rat...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~27-~27: Use correct spacing
Context: ...g ### POST /v1/ratelimits.limit → POST /v2/ratelimits.limit Key Changes: - Response format: Direct...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~32-~32: Use correct spacing
Context: ...h additional metadata - Better override handling json title="Rate Limit Request" icon="bolt" { "namespace": "email_sending", "identifier": "user_123", "limit": 100, "duration": 3600000, "cost": 1 } ```json title="Rate Limit Response Diff" icon="database" expandable // v1 Response (direct response) { "success": true, // [!code --] "limit": 100, // [!code --] "remaining": 99, // [!code --] "reset": 1672531200000 // [!code --] } // v2 Response { "meta": { // [!code +...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~69-~69: Use correct spacing
Context: ...ost": 1 // [!code ++] } // [!code ++] } </Tab> <Tab title="cURL Examples">bash title="v1 cURL" icon="terminal" curl -X POST https://api.unkey.dev/v1/ratelimits.limit \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "namespace": "email_sending", "identifier": "user_123", "limit": 100, "duration": 3600000, "cost": 1 }' bash title="v2 cURL" icon="terminal" curl -X POST https://api.unkey.com/v2/ratelimits.limit \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "namespace": "email_sending", "identifier": "user_123", "limit": 100, "duration": 3600000, "cost": 1 }' ``` --- ## Rate Limit Overrides ### POST /v1/ratel...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~104-~104: Use correct spacing
Context: ... ``` --- ## Rate Limit Overrides ### POST /v1/ratelimits.setOverride → POST /...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~106-~106: Use correct spacing
Context: ... POST /v1/ratelimits.setOverride → POST /v2/ratelimits.setOverride Key Changes: - Response format: Direct...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~111-~111: Use correct spacing
Context: ...g options - Better validation and error handling json title="Set Override Request" icon="settings" expandable { "namespace": "api_requests", "identifier": "premium_user_456", "limit": 10000, "duration": 3600000, "async": false } ```json title="Set Override Response Diff" icon="check-circle" expandable // v1 Response (direct response) { "overrideId": "over_123" // [!code --] } // v2 Response { "meta": { // [!code +...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~145-~145: Use correct spacing
Context: ...30:00Z" // [!code ++] } // [!code ++] } </Tab> <Tab title="cURL Examples">bash title="v1 cURL" icon="terminal" curl -X POST https://api.unkey.dev/v1/ratelimits.setOverride \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "identifier": "premium_user_456", "limit": 10000, "duration": 3600000 }' bash title="v2 cURL" icon="terminal" curl -X POST https://api.unkey.com/v2/ratelimits.setOverride \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "identifier": "premium_user_456", "limit": 10000, "duration": 3600000, "async": false }' ``` --- ### GET /v1/ratelimits.getOverride → POST /v...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~179-~179: Use correct spacing
Context: ...# GET /v1/ratelimits.getOverride → POST /v2/ratelimits.getOverride Key Changes: - HTTP method: GET → POST...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~184-~184: Use correct spacing
Context: ...ormat: Direct response → {meta, data} envelope json title="Get Override Request" icon="search" { "namespace": "api_requests", "identifier": "premium_user_456" } json title="Get Override Response Diff" icon="database" expandable // v1 Response (direct response) { "id": "over_123", // [!code --] "identifier": "premium_user_456", // [!code --] "limit": 10000, // [!code --] "duration": 3600000, // [!code --] "async": false // [!code --] } // v2 Response { "meta": { // [!code ++] "requestId": "req_getoverride789" // [!code ++] }, // [!code ++] "data": { // [!code ++] "overrideId": "override_abc123", // [!code ++] "namespace": "api_requests", // [!code ++] "identifier": "premium_user_456", // [!code ++] "limit": 10000, // [!code ++] "duration": 3600000, // [!code ++] "async": false, // [!code ++] "createdAt": "2024-01-15T10:30:00Z" // [!code ++] } // [!code ++] } bash title="v1 cURL" icon="terminal" curl -X GET "https://api.unkey.dev/v1/ratelimits.getOverride?identifier=premium_user_456&namespaceName=api_requests" \ -H "Authorization: Bearer <your-root-key>" bash title="v2 cURL" icon="terminal" curl -X POST https://api.unkey.com/v2/ratelimits.getOverride \ -H "Authorization: Bearer <your-root-key>" \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "identifier": "premium_user_456" }' --- ### GET /v1/ratelimits.listOverrides → POST ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~242-~242: Use correct spacing
Context: ...GET /v1/ratelimits.listOverrides → POST /v2/ratelimits.listOverrides Purpose: Get paginated list of all ove...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~244-~244: Use correct spacing
Context: ...et paginated list of all overrides in a namespace. Key Changes: - HTTP method: GET → POST...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~249-~249: Use correct spacing
Context: ...ormat: Direct response → {meta, data} envelope json title="List Overrides Request" icon="list" { "namespace": "api_requests", "limit": 100, "cursor": "optional_cursor" } ```json title="List Overrides Response Diff" icon="database" expandable // v1 Response (direct response) { "overrides": [ // [!code --] { // [!code --] "id": "override_abc123", // [!code --] "identifier": "premium_user_456", // [!code --] "limit": 10000, // [!code --] "duration": 3600000, // [!code --] "async": false // [!code --] } // [!code --] ], // [!code --] "cursor": "next_page_cursor_here", // [!code --] "total": 42 // [!code --] } // v2 Response (envelope format) { "me...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~296-~296: Use correct spacing
Context: ...r_here" // [!code ++] } // [!code ++] } </Tab> <Tab title="cURL Examples" icon="terminal">bash title="v1 cURL" icon="terminal" curl -X GET "https://api.unkey.dev/v1/ratelimits.listOverrides?namespaceName=api_requests&limit=100" \ -H "Authorization: Bearer " bash title="v2 cURL" icon="terminal" curl -X POST https://api.unkey.com/v2/ratelimits.listOverrides \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "limit": 100, "cursor": "optional_cursor" }' ``` --- ### POST /v1/ratelimits.deleteOverride → POS...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~321-~321: Use correct spacing
Context: ...ST /v1/ratelimits.deleteOverride → POST /v2/ratelimits.deleteOverride Key Changes: - Response format: Direct...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~324-~324: Use correct spacing
Context: ...ormat: Direct response → {meta, data} envelope json title="Delete Override Request" icon="trash" { "namespace": "api_requests", "identifier": "premium_user_456" } json title="Delete Override Response Diff" icon="check-circle" // v1 Response (direct empty response) {} // [!code --] // v2 Response { "meta": { // [!code ++] "requestId": "req_deleteoverride999" // [!code ++] }, // [!code ++] "data": {} // [!code ++] } bash title="v1 cURL" icon="terminal" curl -X POST https://api.unkey.dev/v1/ratelimits.deleteOverride \ -H "Authorization: Bearer <your-root-key>" \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "identifier": "premium_user_456" }' bash title="v2 cURL" icon="terminal" curl -X POST https://api.unkey.com/v2/ratelimits.deleteOverride \ -H "Authorization: Bearer <your-root-key>" \ -H "Content-Type: application/json" \ -d '{ "namespace": "api_requests", "identifier": "premium_user_456" }' --- ## Key-Level Rate Limiting Changes ### v1 ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[uncategorized] ~373-~373: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...' ``` --- ## Key-Level Rate Limiting Changes ### v1 Single Rate Limit → v2 ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~373-~373: Use correct spacing
Context: .../Tabs> --- ## Key-Level Rate Limiting Changes ### v1 Single Rate Limit → v2 Multiple Named...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~375-~375: Use correct spacing
Context: ...gle Rate Limit → v2 Multiple Named Rate Limits ```json title="Key Rate Limit Structure Migration" icon="key" expandable // v1 Key Creation { "apiId": "api_123", "ratelimit": { // [!code --] "limit": 1000, // [!code --] "duration": 3600000, // [!code --] "async": true // [!code --] } // [!code --] } // v2 Key Creation { "apiId": "api_123...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~406-~406: Use correct spacing
Context: ...] } // [!code ++] ] // [!code ++] } </Tab> <Tab title="Key Verification Changes">json title="Rate Limit Verification Migration" icon="shield-check" expandable // v1 Key Verification Request { "key": "sk_123" } // v2 Key Verification Request with Named Rate Limits { "key": "sk_123", "ratelimits": [ { "name": "api_requests", "cost": 1 }, { "name": "heavy_operations", "cost": 5 } ] } </Tab> <Tab title="Response Changes">json title="Rate Limit Response Migration" icon="database" expandable // v1 Response { "result": { "valid": true, "ratelimit": { // [!code --] "limit": 1000, // [!code --] "remaining": 999, // [!code --] "reset": 1672531200000 // [!code --] } // [!code --] } } // v2 Response { "data": { "valid"...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[uncategorized] ~530-~530: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...e ++] ``` ### Key-Level Rate Limiting Migration <Tab title="Rate Limi...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~530-~530: Use correct spacing
Context: ...b> ### Key-Level Rate Limiting Migration ```json title="v1 vs v2: Key Rate Limit Structure" // v1: Single Rate Limit { "apiId": "api_123", "ratelimit": { // [!code --] "limit": 1000, // [!code --] "duration": 3600000, // [!code --] "async": true // [!code --] } // [!code --] } // v2: Multiple Named Rate Limits { "a...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[style] ~548-~548: Using many exclamation marks might seem excessive (in this case: 91 exclamation marks for a text that’s 8535 characters long)
Context: ...piId": "api_123", "ratelimits": [ // [!code ++] { // [!code ++] "name": "general_requests", // [!code ++] "limit": 1000, // [!code ++] "duration": 3600000, // [!code ++] "autoApply": true // [!code ++] }, // [!code ++] { // [!code ++] "name": "expensive_ops", // [!code ++] "limit": 10, // [!code ++] "duration": 60000, // [!code ++] "autoApply": false // [!code ++] } // [!code ++] ] // [!code ++] } ``` ### Overr...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~561-~561: Use correct spacing
Context: ...] } // [!code ++] ] // [!code ++] } </Tab> </Tabs> ### Override Management Patterns <Tabs> <Tab title="Basic Override Operations" icon="settings">typescript title="Override CRUD Operations" // Set override (same in v1 & v2) const override = await fetch('/v2/ratelimits.setOverride', { method: 'POST', headers: { 'Authorization': 'Bearer ', 'Content-Type': 'application/json' }, body: JSON.stringify({ namespace: 'api_requests', identifier: 'premium_user', limit: 10000, duration: 3600000 }) }); // Get override (same in v1 & v2) const existing = await fetch('/v2/ratelimits.getOverride', { method: 'POST', headers: { 'Authorization': 'Bearer ', 'Content-Type': 'application/json' }, body: JSON.stringify({ namespace: 'api_requests', identifier: 'premium_user' }) }); const result = await existing.json(); const limit = result.data.limit; // v2: access via data </Tab> <Tab title="v2 Enhanced Override Management" icon="list-check">typescript title="v2: List and Batch Management" // v2: List all overrides (new capability) const overrides = await fetch('/v2/ratelimits.listOverrides', { method: 'POST', headers: { 'Authorization': 'Bearer ', 'Content-Type': 'application/json' }, body: JSON.stringify({ namespace: 'api_requests', limit: 100 }) }); const result = await overrides.json(); c...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~620-~620: Use correct spacing
Context: ... overrides.json(); const overrideList = result.data.overrides; // Process overrides in batches for (con...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~639-~639: Use correct spacing
Context: ... override.duration }) }); } } </Tab> </Tabs> --- ## Advanced Features in v2 ### Multiple Rate Limits per Key json title="Complex rate limiting setup" icon="bolt" expandable { "apiId": "api_123", "ratelimits": [ { "name": "requests_per_minute", "limit": 60, "duration": 60000, "autoApply": true }, { "name": "requests_per_hour", "limit": 1000, "duration": 3600000, "autoApply": true }, { "name": "expensive_operations", "limit": 5, "duration": 300000, "autoApply": false } ] } ### Named Rate Limit Targeting json titl...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~677-~677: Use correct spacing
Context: ...e } ] } ### Named Rate Limit Targeting json title="Selective rate limit application" icon="target" { "key": "sk_123", "ratelimits": [ { "name": "expensive_operations", "cost": 1 } ] } ``` Only applies cost to the "expensive_oper...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~691-~691: Use correct spacing
Context: ..._operations" rate limit, leaving others unchanged. ### Batch Override Management ```typescript...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~693-~693: Use correct spacing
Context: ...g others unchanged. ### Batch Override Management typescript title="Managing multiple overrides" icon="list-check" // List all overrides in namespace const overrides = await unkey.ratelimits.listOverrides({ namespace: "api_requests" }); // Process overrides in batches for (const override of overrides.data?.overrides || []) { if (override.limit < 1000) { // Update low-limit overrides await unkey.ratelimits.setOverride({ namespace: override.namespace, identifier: override.identifier, limit: 1000, duration: override.duration }); } } --- ## Migration Checklist ### Response Format...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~717-~717: Use correct spacing
Context: ...on }); } } ``` --- ## Migration Checklist ### Response Format Updates - [ ] Change dir...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~720-~720: Use hyphens correctly
Context: ...sponse access to response.data in all rate limiting calls - [ ] Extract and log `me...

(QB_NEW_EN_OTHER_ERROR_IDS_29)


[grammar] ~720-~720: There might be a mistake here.
Context: ...to response.data in all rate limiting calls - [ ] Extract and log meta.requestId fro...

(QB_NEW_EN_OTHER)


[grammar] ~721-~721: There might be a mistake here.
Context: ...log meta.requestId from responses for debugging - [ ] Update error handling for new envelo...

(QB_NEW_EN_OTHER)


[grammar] ~722-~722: There might be a mistake here.
Context: ...rror handling for new envelope response structure - [ ] Handle enhanced metadata in override...

(QB_NEW_EN_OTHER)


[grammar] ~723-~723: There might be a mistake here.
Context: ... ] Handle enhanced metadata in override responses ### Key-Level Rate Limiting Updates - [ ] Co...

(QB_NEW_EN_OTHER)


[uncategorized] ~725-~725: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ta in override responses ### Key-Level Rate Limiting Updates - [ ] Convert ratelimit objec...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~726-~726: There might be a mistake here.
Context: ...itobject toratelimitsarray in key creation - [ ] Addname` field to all rate limit c...

(QB_NEW_EN_OTHER)


[grammar] ~727-~727: There might be a mistake here.
Context: ... [ ] Add name field to all rate limit configurations - [ ] Change async parameter to `autoApp...

(QB_NEW_EN_OTHER)


[grammar] ~729-~729: There might be a mistake here.
Context: ...ate limits per key (different operation types) - [ ] Update key verification to handle mu...

(QB_NEW_EN_OTHER)


[grammar] ~730-~730: There might be a mistake here.
Context: ...ey verification to handle multiple rate limits ### Override Management Updates - [ ] Update...

(QB_NEW_EN_OTHER)


[grammar] ~736-~736: Use correct spacing
Context: ...sor-based pagination for large override lists ### Enhanced Features - [ ] Implement named ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~739-~739: There might be a mistake here.
Context: ...ement named rate limit targeting in key verification - [ ] Use multiple rate limits for differe...

(QB_NEW_EN_OTHER)


[grammar] ~740-~740: There might be a mistake here.
Context: ...ple rate limits for different operation types - [ ] Set up batch override management pro...

(QB_NEW_EN_OTHER)


[grammar] ~741-~741: There might be a mistake here.
Context: ...tch override management processes using listOverrides - [ ] Plan for granular rate limit control...

(QB_NEW_EN_OTHER)


[grammar] ~742-~742: There might be a mistake here.
Context: ...lan for granular rate limit control and monitoring - [ ] Use request IDs for debugging and su...

(QB_NEW_EN_OTHER)


[grammar] ~743-~743: There might be a mistake here.
Context: ...- [ ] Use request IDs for debugging and support ### Advanced Rate Limiting Patterns - [ ] Im...

(QB_NEW_EN_OTHER)


[uncategorized] ~745-~745: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...for debugging and support ### Advanced Rate Limiting Patterns - [ ] Implement selective rate...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~746-~746: There might be a mistake here.
Context: ...ent selective rate limit application by name - [ ] Set up different costs for different...

(QB_NEW_EN_OTHER)


[grammar] ~747-~747: There might be a mistake here.
Context: ...t up different costs for different rate limits - [ ] Use identity-level rate limiting com...

(QB_NEW_EN_OTHER)


[grammar] ~748-~748: There might be a mistake here.
Context: ...l rate limiting combined with key-level limits - [ ] Build override management dashboards...

(QB_NEW_EN_OTHER)


[grammar] ~749-~749: There might be a mistake here.
Context: ...ide management dashboards with enhanced data ### Testing - [ ] Test rate limiting with ne...

(QB_NEW_EN_OTHER)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Build / Build
  • GitHub Check: Test Agent Local / test_agent_local
  • GitHub Check: Test Go API Local / Test
  • GitHub Check: Test Packages / Test
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (1)
apps/docs/api-reference/v1/overview.mdx (1)

6-7: Deprecation date conflicts with migration guide – verify before publishing

Here you announce removal in January 2026, while migration/index.mdx (Line 8) states shutdown end of 2025. Please confirm the correct EOL and keep it consistent across docs to avoid confusing users.

@chronark
Copy link
Collaborator Author

addressed all

@chronark chronark merged commit d0c2bb5 into main Jul 31, 2025
9 of 13 checks passed
@chronark chronark deleted the migration-docs branch July 31, 2025 08:55
chronark added a commit that referenced this pull request Aug 7, 2025
* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* almost

* re ordered badge list collapse

* undo rabbit

* [autofix.ci] apply automated fixes

* fix scroll

* changes before merge

* chore: deprecate v1 endpoints (#3680)

* fix: openapi

* chore: deprecate v1 endpoints

* fix: vault credentials and chproxy config (#3681)

* fix: openapi

* fix: vault credentials and chproxy config

* fix: rename flag accessor too

* fix: linter issues

* fix: some more v2 api changes (#3677)

* remove namespaceID

* actually use limit and cursor

* filter out delted overrides

* fix error messages list endpoints

* fix more error messages

* ensure identity create handles like permission/role create

* fix regex for roles

* fix regex for roles

* fix list keys cursor

* fix: uppercase common files (#3683)

* name files uppercase

* name files uppercase

* [autofix.ci] apply automated fixes

* name files uppercase

* name files uppercase

---------

Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: conflicting casing (#3689)

* fix the openapi spec again (#3692)

* dont trace chproxy endpoints (#3691)

* fix: log verifications to the owning workspace (#3693)

* functioning again

* style change

* more tweaks

* fix: validate s3 config (#3694)

* Fix all the fucking things

* remove close button

* fmt

* fix: speakeasy ignore directive is ignored if it's a string (#3699)

* fix: upsert permissions with slug or name colission (#3696)

* fix: upsert permissions with slug or name colission

* chore: also remove index

* fix permission test and remove unnnecessary test

---------

Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com>

* docs: migration (#3678)

* fix: openapi

* docs: migration from v1 to v2

* fix: remove binaries

* [autofix.ci] apply automated fixes

* docs: add james' feedback

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: api list keys zod errors (#3702)

* fix api zod errors

* [autofix.ci] apply automated fixes

* make array handling uniform

* make array handling uniform

* fix rabbi comment

* fix: permission array for roles

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: don't build for windows and freebsd (#3700)

* docs: errors (#3703)

* chore: move sdks to unkeyed/sdks (#3701)

* fix: omitting array vs null (#3704)

* fix omitting array vs null

* [autofix.ci] apply automated fixes

* fix flakey test

* fix flakey test

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: panics not being catched (#3706)

* fix panics not being catched

* feat: add counter to track panics

Signed-off-by: Ian Meyer <k@imeyer.io>

---------

Signed-off-by: Ian Meyer <k@imeyer.io>
Co-authored-by: Ian Meyer <k@imeyer.io>

* docs: use `CodeGroup` in hono/nextjs TS libraries (#3708)

* Update hono.mdx

* Update nextjs.mdx

* ci: remove outdated steps and flows (#3709)

* docs: update sdks (#3712)

* docs: update sdks

* Update nextjs.mdx

* [autofix.ci] apply automated fixes

* fix: rabbit feedback

* Update nextjs.mdx

* fix: root key is required

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* dialog and confirm added

* feat(deployment beta): projects UI for Unkey Deploy (#3662)

* projects and branches

* wip

* wip

* spec differ wip

* fix some docker, add some trpc, integrate diff viewer

* change version to deployments, add feature flag, update go schema

* update versions page

* fix null condition

* delete old router, fix null assertion

* fmt

* fmt

* fmt again

* apply auth and feature flagging access to projects, remove versions

* yolo

* stable yolo

* stable yolo

* style: fmt

* fix: hardcode time, so it doesn't fail on the first of a month

* [autofix.ci] apply automated fixes

---------

Co-authored-by: chronark <dev@chronark.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* chore: add missingd delete endpoint for v2 (#3711)

* only log key at the end (#3716)

* fix: allow wildcard and colon in permissions query (#3717)

* remove regex for permissions

* allow for asterix and colon in permissions

* fix: update identity by identity key instead of externalId and fix wrong body for permission and role (#3713)

* docs and remove externalId from keyResponse

* fix updateIdentity to take in an identity parameter instead of an externalId

* fix get role/permission

* Update go/apps/api/openapi/spec/common/Permission.yaml

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update openapi-generated.yaml

* fix comment

---------

Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore: openapi references (#3723)

* feat: add paginated tRPC endpoint for projects (#3697)

* feat: add new endpoint for deploy projects

* chore: replace file path

* [autofix.ci] apply automated fixes

* feat: add missing endpoint

* fix: trpc path

* fix: add feature flag

* chore: remove optin

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: region not showing and wrong rl id (#3722)

* fix: region not showing and wrong rl id

* pass region down

* perf: bad get key performance (#3724)

* perf: make getKey 2 seperate queries so mysql chooses correct idx

* fix query

* fix query name

* docs: verify identities endpoints (#3727)

* chore: docs (#3728)

* chore: fixup migration guide

* adjust more

* adjust more

* adjust more

* rabbit comments

* Update index.mdx

* working updates

* re factor for clarity

* only update if diff than existing

* [autofix.ci] apply automated fixes

* re name create-root-key to root-key folder

---------

Signed-off-by: Ian Meyer <k@imeyer.io>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com>
Co-authored-by: Oğuzhan Olguncu <21091016+ogzhanolguncu@users.noreply.github.com>
Co-authored-by: James Perkins <jamesperkins@hey.com>
Co-authored-by: Ian Meyer <k@imeyer.io>
Co-authored-by: JA Castro <51177379+ubinatus@users.noreply.github.com>
Co-authored-by: Meg Stepp <mcstepp@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
perkinsjr added a commit that referenced this pull request Aug 20, 2025
* chore: new root key dialog (#3637)

* Dialog created

* small changes

* feat: ui show permission side bar when select permission button is (#3654)

* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* feat: UI when a permission is selected it should show in the modal (#3663)

* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* almost

* re ordered badge list collapse

* undo rabbit

* [autofix.ci] apply automated fixes

* fix scroll

* button size and margin

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat: UI when a user searches for a permission it should show (#3695)

* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* almost

* re ordered badge list collapse

* undo rabbit

* [autofix.ci] apply automated fixes

* fix scroll

* changes before merge

* functioning again

* style change

* more tweaks

* Fix all the fucking things

* remove close button

* fmt

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: James Perkins <jamesperkins@hey.com>

* feat: rootkey create with success dialog and confirm close (#3714)

* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* almost

* re ordered badge list collapse

* undo rabbit

* [autofix.ci] apply automated fixes

* fix scroll

* changes before merge

* functioning again

* style change

* more tweaks

* Fix all the fucking things

* remove close button

* fmt

* dialog and confirm added

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: James Perkins <jamesperkins@hey.com>

* feat: a user selects edit root key and an edit root key modal (#3731)

* Dialog created

* small changes

* half functional

* small spacing changes and chevron

* Rabbit Changes

* remove useffect

* almost

* re ordered badge list collapse

* undo rabbit

* [autofix.ci] apply automated fixes

* fix scroll

* changes before merge

* chore: deprecate v1 endpoints (#3680)

* fix: openapi

* chore: deprecate v1 endpoints

* fix: vault credentials and chproxy config (#3681)

* fix: openapi

* fix: vault credentials and chproxy config

* fix: rename flag accessor too

* fix: linter issues

* fix: some more v2 api changes (#3677)

* remove namespaceID

* actually use limit and cursor

* filter out delted overrides

* fix error messages list endpoints

* fix more error messages

* ensure identity create handles like permission/role create

* fix regex for roles

* fix regex for roles

* fix list keys cursor

* fix: uppercase common files (#3683)

* name files uppercase

* name files uppercase

* [autofix.ci] apply automated fixes

* name files uppercase

* name files uppercase

---------

Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: conflicting casing (#3689)

* fix the openapi spec again (#3692)

* dont trace chproxy endpoints (#3691)

* fix: log verifications to the owning workspace (#3693)

* functioning again

* style change

* more tweaks

* fix: validate s3 config (#3694)

* Fix all the fucking things

* remove close button

* fmt

* fix: speakeasy ignore directive is ignored if it's a string (#3699)

* fix: upsert permissions with slug or name colission (#3696)

* fix: upsert permissions with slug or name colission

* chore: also remove index

* fix permission test and remove unnnecessary test

---------

Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com>

* docs: migration (#3678)

* fix: openapi

* docs: migration from v1 to v2

* fix: remove binaries

* [autofix.ci] apply automated fixes

* docs: add james' feedback

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: api list keys zod errors (#3702)

* fix api zod errors

* [autofix.ci] apply automated fixes

* make array handling uniform

* make array handling uniform

* fix rabbi comment

* fix: permission array for roles

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: don't build for windows and freebsd (#3700)

* docs: errors (#3703)

* chore: move sdks to unkeyed/sdks (#3701)

* fix: omitting array vs null (#3704)

* fix omitting array vs null

* [autofix.ci] apply automated fixes

* fix flakey test

* fix flakey test

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: panics not being catched (#3706)

* fix panics not being catched

* feat: add counter to track panics

Signed-off-by: Ian Meyer <k@imeyer.io>

---------

Signed-off-by: Ian Meyer <k@imeyer.io>
Co-authored-by: Ian Meyer <k@imeyer.io>

* docs: use `CodeGroup` in hono/nextjs TS libraries (#3708)

* Update hono.mdx

* Update nextjs.mdx

* ci: remove outdated steps and flows (#3709)

* docs: update sdks (#3712)

* docs: update sdks

* Update nextjs.mdx

* [autofix.ci] apply automated fixes

* fix: rabbit feedback

* Update nextjs.mdx

* fix: root key is required

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* dialog and confirm added

* feat(deployment beta): projects UI for Unkey Deploy (#3662)

* projects and branches

* wip

* wip

* spec differ wip

* fix some docker, add some trpc, integrate diff viewer

* change version to deployments, add feature flag, update go schema

* update versions page

* fix null condition

* delete old router, fix null assertion

* fmt

* fmt

* fmt again

* apply auth and feature flagging access to projects, remove versions

* yolo

* stable yolo

* stable yolo

* style: fmt

* fix: hardcode time, so it doesn't fail on the first of a month

* [autofix.ci] apply automated fixes

---------

Co-authored-by: chronark <dev@chronark.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* chore: add missingd delete endpoint for v2 (#3711)

* only log key at the end (#3716)

* fix: allow wildcard and colon in permissions query (#3717)

* remove regex for permissions

* allow for asterix and colon in permissions

* fix: update identity by identity key instead of externalId and fix wrong body for permission and role (#3713)

* docs and remove externalId from keyResponse

* fix updateIdentity to take in an identity parameter instead of an externalId

* fix get role/permission

* Update go/apps/api/openapi/spec/common/Permission.yaml

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update openapi-generated.yaml

* fix comment

---------

Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore: openapi references (#3723)

* feat: add paginated tRPC endpoint for projects (#3697)

* feat: add new endpoint for deploy projects

* chore: replace file path

* [autofix.ci] apply automated fixes

* feat: add missing endpoint

* fix: trpc path

* fix: add feature flag

* chore: remove optin

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: region not showing and wrong rl id (#3722)

* fix: region not showing and wrong rl id

* pass region down

* perf: bad get key performance (#3724)

* perf: make getKey 2 seperate queries so mysql chooses correct idx

* fix query

* fix query name

* docs: verify identities endpoints (#3727)

* chore: docs (#3728)

* chore: fixup migration guide

* adjust more

* adjust more

* adjust more

* rabbit comments

* Update index.mdx

* working updates

* re factor for clarity

* only update if diff than existing

* [autofix.ci] apply automated fixes

* re name create-root-key to root-key folder

---------

Signed-off-by: Ian Meyer <k@imeyer.io>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com>
Co-authored-by: Oğuzhan Olguncu <21091016+ogzhanolguncu@users.noreply.github.com>
Co-authored-by: James Perkins <jamesperkins@hey.com>
Co-authored-by: Ian Meyer <k@imeyer.io>
Co-authored-by: JA Castro <51177379+ubinatus@users.noreply.github.com>
Co-authored-by: Meg Stepp <mcstepp@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fresh

* start rabbit changes

* rabbits

* missing processing

* Update apps/dashboard/lib/trpc/routers/index.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update apps/dashboard/app/(app)/settings/root-keys/components/root-key/components/permission-badge-list.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* more rabbit

* function name

* [autofix.ci] apply automated fixes

* minor changes

* rabbit checked locally

* comment changes

* light mode fix

* removed old page files

* updated success

* slack comment changes

* cleanup

* rabbit

* more rabbits

* most consts

* change clear and details

* cleanup

* pr suggested changes

* few nits

---------

Signed-off-by: Ian Meyer <k@imeyer.io>
Co-authored-by: CodeReaper <148160799+MichaelUnkey@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com>
Co-authored-by: Oğuzhan Olguncu <21091016+ogzhanolguncu@users.noreply.github.com>
Co-authored-by: Ian Meyer <k@imeyer.io>
Co-authored-by: JA Castro <51177379+ubinatus@users.noreply.github.com>
Co-authored-by: Meg Stepp <mcstepp@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: MichaelUnkey <michael@unkey.com>
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