ChangelogPage 2

We are constantly improving our product, fixing bugs and introducing features.Here you can find the latest updates and changes to Unkey.

Follow us onTwitterandGitHub

All changelog posts

product

August Product Update

In August 2025, our team has rolled out a series of improvements aimed at enhancing user experience and application performance. From new UI features for project management to important bug fixes that ensure smoother functionality, we’ve been busy! Key highlights include the launch of a new workspace slug, refined database schemas for demos, and improved error handling. We’re thrilled for you to explore these changes and are committed to making Unkey even better!

Features

  • Enhanced Project Management: A fresh new UI for managing projects and deployments has been introduced, making it easier to navigate and utilize #3797.
  • New Workspace Slug: We've implemented a new workspace slug feature that streamlines workspace identification and management #3849.
  • Improved Gateway Functionality: The gateway routes now utilize VM addresses for more efficient routing #3878.
  • Deployment-Centric API: We've added a new deployment-centric API along with a Get Deployment endpoint #3878.

Bug Fixes

  • Sidebar Improvements: The "load more" functionality has been fixed in the sidebar, allowing users to load additional projects smoothly #3833.
  • Pentest Remediation: Addressed vulnerabilities found during a penetration test, ensuring user roles and invites are securely managed #3885.
  • Curl Example Update: Updated the curl example to utilize the V2 endpoint #3832.
  • Key Redaction: Improved key redaction to ensure all keys are properly handled and redacted #3860.
  • Scrollability Fix: Fixed an issue where the workspace creation wizard was locked on smaller screens, now allowing scrollability #3843.
  • Workspace ID Query Fix: Resolved slow queries by ensuring that the workspace ID is correctly queried #3836.

Performance

  • Database Schema Enhancements: We’ve made database schema updates that enhance performance and efficiency for our demo environments #3878.
  • Redis Usage Limiting: Transitioned to a Redis-based usage limiter for improved latency and tracking #3800.

Documentation

  • Updated Docs: Documentation has been refreshed to reflect changes in API structures and endpoint versions, ensuring clarity for all users #3747 and #3712.
  • RFC for Let's Encrypt: Introduced an RFC outlining the architecture for issuing TLS certificates for custom domains #3754.

CI Improvements

  • Enhanced CI/CD Pipelines: Optimized CI workflows, including the removal of outdated steps, to streamline our continuous integration processes #3709.
  • Upgrade Scripts: Added utility scripts for environment migrations and improved configuration management #3748.

We hope these updates enhance your experience with Unkey. As always, your feedback is invaluable to us!

product

July Product Update

July was an action-packed month for Unkey, with a whopping 172 pull requests merged. Key highlights include significant improvements in API error handling, UI enhancements for permission management, and a streamlined deployment process. We also focused on performance tweaks, especially with our database interactions and CI workflows. With thorough documentation updates, our users can better navigate the new features and fixes. Dive in to see the highlights of what we achieved this month.

Features

Bug Fixes

Performance

Documentation

Chores

product

June Product Update

Major Enhancements and Fixes in June 2025

This month has been all about enhancements and refactoring! We've moved several components into the UI for better organization and streamlined workflows. The introduction of new features like optional permission slugs and encryption during key creation adds flexibility. Bug fixes have improved the overall stability of the application, addressing issues like Stripe integration and spacing inconsistencies. Our ongoing commitment to improving the user experience shines through this month's updates!

Features

Bug Fixes

Refactoring

Chores

Documentation

Dependencies

Thanks for your continued support and contributions! Let's keep building together!

product

April Product Update

Create Key Wizard

Key Creation Wizard

Our Create Key wizard just got better! Enjoy these new and improved features:

  • Instant feedback during key creation
  • Apply multiple rate limits per key
  • Easy-to-use JSON formatter for metadata
  • Clear warning about one-time key display
Key Creation Wizard with error

API Settings Update

Our new API Settings screen is designed for intuitive control over your API configurations. Adjust default bytes, prefixes, and manage security settings seamlessly.

API Settings

Roles Returned as Part of verifyKey

The /v1/keys.verifyKey endpoint has been updated to include a list of roles associated with the key in the verification response, enabling applications to easily determine the user's roles during key verification and make more informed authorization decisions. This simplifies role-based access control implementation and requires one less API request.

Seeding Local Development

We have introduced proper seeding for log pages and metrics, enhancing the ability to generate realistic test data and improving the development and testing experience. You can easily seed a workspace by running pnpm local and selecting Seed Clickhouse/DB. Our CLI will then ask a series of questions about what you would like to seed and how much test data you want.

Seed example

Other PRs

Bug Fixes

  • #3189: Tooltip now shows the correct time interval
  • #3115: Improve keyboard combinations
  • #3187: Ensure charts and logs data count match
  • #3157: Ensure username doesn't overflow sidebar
  • #3118: Show timestamp correctly on click
  • #3119: Usage chart colors and fix layout shift issue
  • #3104: Only allow access membership list fetching to current org context.
  • #3099: Prevent cancellations if the org has multiple members
  • #3094: Improve errors when using natural language searches
  • #3080: Make confirmation dialog trigger correctly on workspace members page.
  • #3079: Pagination issue and improve fetch logic
  • #3037: navbar-popover active state
  • #3055: Use only time as cursor
  • #3054: Query clickhouse by time

Documentation

  • #3173: Explain how delete protection works

Other Changes

  • #3191: Prevent revalidation of logs and charts to improve dashboard performance.

product

March Product Update

New Features

Pricing Updates

While this isn't a new feature, we've made some updates to our pricing plans to better serve everyone whether you are just starting out or scaling a project.

  • Larger Free Tier : We've significantly increased our free tier! You now get 150,000 requests per month completely free, up from the original 2,500. This allows you to thoroughly test Unkey and start scaling your project before entering your credit card.

  • Simplified Pricing : We've streamlined our pricing model to focus solely on requests. We've removed the separate charges for key verifications and standalone rate limit verifications, making it much simpler to understand and predict your costs.

  • Tiered Pricing : We're introducing tiered pricing starting at just $25. This gives you more flexibility to choose the plan that best fits your needs as you scale, we also reduced the price significantly, below is an example of 10M requests in a month on the new and old pricing:

Old PriceNew Price
$1010.00$250.00
  • No Overage Charges : We will no longer charge for overages. If you exceed your monthly request limit, we won't charge you but send you an email congratulating your success. If you continue to exceed the tier every month, we will ask you to upgrade to the next tier.

We believe these changes will make Unkey an even more attractive and accessible solution for developers of all sizes and allow you to scale without worrying about your bill.

Check out the updated pricing table on our pricing page here.

Ratelimit / API Overview overhaul

We have completely revamped our ratelimit and API overview page, making analytics the main focus of the page.

Ratelimit

You can see all the important details about a specific namespace, including:

  • Request count
  • Identifier
  • Passed / block requests
  • Last request
Ratelimits example

You can also override an identifier directly on the page to make blocking or allowing requests more easily.

Override example

API

In the API overview, we provide all the important details about a specific API, including:

  • API request totals
  • Active key totals
  • Valid / Invalid requests counts and types
  • Last used details

We also include a natural language search and filter to allow you to quickly analyze and manage your API data.

API Overview example

You can also see important details about a specific key, but clicking on the key will open a modal with more information.

Key Details example

Other PRs

Changed

  • Sidebar component added with improved UI and accessibility features.
  • Global baseUrl function created to infer Vercel URL for WorkOS redirect more reliably.
  • Sampling support for tracing allows specifying the rate via configurations.
  • Updated layout.tsx to improve URL structure and maintain consistency.

Removed

  • Removed outdated and redundant quota checks.
  • Unused files and code related to the unused banner component.

Fixed

  • OAuth extraction from URL to improve security.
  • Dark mode forced on the auth page to show correct colors on dialogs
  • Vercel redirection configuration for WorkOS fixed to handle edge cases.
  • Timestamp conversion for logs and related elements.
  • Layout shifts, missing props for UI components, and hydration issues addressed with dynamic imports and better coding practices.
  • Multiple minor bug fixes like navbar realignment, format issues, wrong environment variables, and outdated quota handling.

Security

  • Addresses a critical security vulnerability, CVE-2025-29927.

product

January Product Update

New Features

Logs (Beta)

Our new reques logs are designed to simplify your debugging experience. With comprehensive request filtering, real-time monitoring, and intuitive natural language processing, managing API requests has never been easier.

Logs example
  • Comprehensive Request Filtering: Now you can view all API requests, including those that encountered errors. Easily filter these requests by status code, method, and path to quickly identify and troubleshoot issues, ensuring a smoother development process.

  • Natural Language Filtering: Say goodbye to complex, time-consuming filtering! Our new natural language processing feature allows you to filter API requests using simple, conversational phrases. Just type what you’re looking for, and let our system do the rest!

  • Live Logs for Real-Time Monitoring: Turn on live logs to watch your logs in real time, making it easier to see if your latest deployment is working as expected.

  • Request IDs for Streamlined Support: Each API request provides you with a request ID. This enhancement simplifies the support process—just share the request ID with our support team, and we can quickly locate and address your concerns.

Improvements

Standalone Rate Limit Logs: We took everything we built in the request logs and replaced the old rate limit logs, so you can see all the important details in one place, including the timestamp of the request, identifier, status, when the rate limit resets, and more.

Rate limit logs example

Migrating Keys Now Accepts an External ID: You can now migrate keys using the external ID ready to be used with our identity product; just pass in the external_id while migrating the key.

Permanent Key Deletion: You can now permanently delete a key. By default, Unkey has the ability to recover a key if requested, but by passing "permanent": true with your deletion request, you can bypass this recovery option.

Default Prefix and Bytes: The API will now use the default bytes and prefix set by the user if they aren't included when creating a key.

Top Bugs Crushed

product

December 5th Changelog

Official Python SDK

We now have an official Python SDK that is developer-friendly & type-safe, making it as easy as possible to start with your favorite language. You can get started right away by installing our package pip install unkey.py

Below is an example of how to create a key using the new SDK:

import os
import unkey
from unkey_py import Unkey

s = Unkey(
    bearer_auth=os.getenv("UNKEY_BEARER_AUTH", ""),
)

res = s.keys.create(request={
    "api_id": "api_123",
    "name": "my key",
    "external_id": "team_123",
    "meta": {
        "billingTier": "PRO",
        "trialEnds": "2023-06-16T17:16:37.161Z",
    },
    "roles": [
        "admin",
        "finance",
    ],
    "permissions": [
        "domains.create_record",
        "say_hello",
    ],
    "expires": 1623869797161,
    "remaining": 1000,
    "refill": {
        "interval": unkey.CreateKeyInterval.DAILY,
        "amount": 100,
    },
    "ratelimit": {
        "limit": 10,
        "type": unkey.CreateKeyType.FAST,
        "duration": 60000,
    },
    "enabled": False,
})

if res.object is not None:
    # handle response
    pass

I want to thank Jonxslays for his community SDK, which allowed developers to get started immediately and provided Unkey with the unkey.py name.

Identities

Until today, you had the option to assign an owner to your keys, allowing you to filter keys by a specific owner. This was useful for fetching keys by user or organization via the API, but it didn't provide any additional functionality.

With Identities, you can now group keys together and share metadata and rate limits across them.

For example, we have a company named ACME Corp, which has the enterprise tier and access to our GPT-4o wrapper, with a per-day token limit. So first, we create the identity with the limits:

curl --request POST \
  --url https://api.unkey.dev/v1/identities.createIdentity \
  --header 'Authorization: Bearer unkey_root_key' \
  --header 'Content-Type: application/json' \
  --data '{
  "ratelimits": [
    {
      "name": "enterprise_tier",
      "limit": 50000,
      "duration": 3600000
    },
    {
      "name": "tokens",
      "limit": 86400000,
      "duration": 10
    }
  ],
  "externalId": "acme_corp"
}'

Now we have an identity, we can attach it to one or many keys by referencing the external_id:

curl --request POST \
  --url https://api.unkey.dev/v1/keys.createKey \
  --header 'Authorization: Bearer unkey_root_key' \
  --header 'Content-Type: application/json' \
  --data '{
  "externalId": "acme_corp",
  "apiId": "api_123",
  "byteLength": 16
}'

Finally, when we verify a key, we will deny the request if one of the rate limits is exceeded. You can read more about the identity product and use cases in our documentation

WHOAMI

A new endpoint has been introduced to allow you to retrieve details about any API key when the key ID is unavailable. Users can send the actual API key to /v1/keys.whoami, which will return the associated data. This is a great way to verify remaining usage, current limits, or identities associated with a key.

curl --request POST \
  --url https://api.unkey.dev/v1/keys.whoami \
  --header 'Authorization: Bearer unkey_root_key' \
  --header 'Content-Type: application/json' \
  --data '{"key": "sk_123"}'

The API will return details about the key:

{
  "id": "key_123",
  "name": "API Key 1",
  "remaining": 1000,
  "identity": {
    "id": "id_123",
    "externalId": "ext123"
  },
  "meta": {
    "role": "admin",
    "plan": "premium"
  },
  "createdAt": 1620000000000,
  "enabled": true,
  "environment": "production"
}

Ratelimit Overrides

When we introduced standalone ratelimiting, we included a feature allowing custom overrides without needing to deploy user code. This feature was originally only available via the Unkey dashboard. This month, we introduced the ability to create, update, delete, and list overrides via our API; this unlocks the ability to integrate this into support tooling or back office tools.

curl --request POST \
  --url https://api.unkey.dev/v1/ratelimits.setOverride \
  --header 'Authorization: Bearer unkey-root-key' \
  --header 'Content-Type: application/json' \
  --data '{
    "namespaceName": "email.outbound",
    "identifier": "user_123",
    "limit": 10,
    "duration": 60000,
    "async": true
}'

You can see how to implement them into your tooling in our API reference.

Content

product

July 26 2024 Changelog

For the past two weeks, the team has been laser-focused on tackling technical debt, improving our documentation, and crushing UI bugs.

Unkey Turso Cache store

We collaborated with the team at Turso to introduce a new cache-store. This cache store allows using embedded replicas or remote Turso DB. You can read about implementing your cache store in our documentation.

Documentation improvements

Our documentation has been getting some serious improvements in the past month. First, we introduced a new layout that provides a better way to find what you are looking for based on your use case.

We also introduced new getting started guides that can help you get started with ratelimiting or with identities

We also wrote a new guide on ratelimiting your One Time Passcodes for DDOS and bot protection.

Improvements

  • Double-clicking a root key now redirects to settings PR

  • Optimize all images on our landing page PR

  • Add flags to pnpm local PR

  • Removed contentlayer and added content collections PR

  • Root key details overhaul PR

Bug Fixes

  • Create role modal breaks if the permissions name is too long PR

  • Delete permission modal breaks if the permissions name is too long PR

product

July 14 2024 Changelog

After Accelerate our first-ever launch week, where we launched products like Toolbox, vault, and LLM caching. We are now working on improving infrastructure, usability, and our docs.

Permissions and Roles

We introduced Authorization into beta at the beginning of the year. This week we introduced them into the API to allow you to create and manage them easily.

Creating a role

You can create a role by passing the name and description, the name can be anything you want it to be, make sure your root key has rbac.*.create_role

curl --request POST \
  --url https://api.unkey.dev/v1/permissions.createRole \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "dns.records.manager",
  "description": "dns.records.manager can read and write dns records for our domains."
}'

Creating a permission

You can create a permission by passing the name and description, the name can be anything you want it to be, make sure your root key has rbac.*.create_permission

curl --request POST \
  --url https://api.unkey.dev/v1/permissions.createPermission \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "record.write",
  "description": "record.write can create new dns records for our domains."
}'

You can find the rest of the endpoints for managing roles and permissions in our documentation

Attaching permissions or roles to a key

You can attach a permission or roles via the API to do this you need to provide the permission or role id to the keys.addPermissions or keys.addRoles.

Add Permission

curl --request POST \
  --url https://api.unkey.dev/v1/keys.addPermissions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "keyId": "<string>",
  "permissions": [
    {
      "id": "<string>"
    }
  ]
}'

Add Roles

curl --request POST \
  --url https://api.unkey.dev/v1/keys.addRoles \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "keyId": "<string>",
  "roles": [
    {
      "id": "<string>"
    }
  ]
}'

You can find the rest of the endpoints for managing roles and permissions on a key our documentation

You still need to attach your permissions to roles or directly to a key via the UI but we will add the endpoints in the coming weeks.

LLM Semantic Cache onboarding

If you are a fan of LLM's and want to use Unkey's Semantic caching when you sign up and create a gateway in a single click. This will allow you to save money and reduce latency for your users.

Onboarding

Bug fixes

  • Fix UI Caching issue when deleting keys Link to PR

  • Add missing permissions to root keys in the dashboard Link to PR

  • Filter out deleted keys from permissionsLink to PR

Docs improvements

documentation
community

May 2024 Changelog

Documentation refresh

We have updated our documentation to provide more detailed information on how to use Unkey. Our goal is to make it easier for you to get started and find the information you need. We hope you find the new documentation helpful. If you have any feedback or suggestions, please let us know.

Unkey Local Development

We have dramatically improved our local development experience. With Unkey Local Development, you can now develop and contribute to Unkey without the need for Planetscale and other dependencies. This feature is perfect for developers who want to contribute to Unkey.

Check out our documentation to learn more about Unkey Local Development.

Migrating to Unkey

We added a new API endpoint that allows you to migrate your existing keys to Unkey. This allows for zero down time migration and makes it easy to handle large key migrations. You can find more information in our documentation.

Go SDK

We now have official support for Go through out SDK, you can find all the documentation here.

Improvements

  • Added support to delete all keys in an API docs

Fixes

  • Fixed a bug where root keys were not being deleted properly PR
  • Fixed ratelimit property name PR
  • Added updatedAt property to keys PR

product
company

April 2024 Changelog

A new look

Unkey has a new look! We have updated our website to provide a more modern and hand crafted feel. Our team spent countless hours designing and developing the new site. We hope you enjoy it as much as we do!

A new domain

With the launch of the new website, we have also moved to a new domain. You can now find us at unkey.com. We always wanted to have a .com domain, and we are excited to finally have it.

A new team member

We are excited to welcome a new team member to Unkey. Rodz has joined us as a design engineer. He will be working on new features and improving the dashboard to be more user friendly and intuitive.

Unlimited Keys on pro plan

When you upgrade to the pro plan, you now have unlimited keys. This means you can create as many keys as you need without worrying about hitting a limit. We hope this change makes it easier for you to manage your keys and use Unkey to its full potential.

Fixes

  • Fixed a bug where banners would overlap if more than one was displayed at the same time PR
  • Correctly display payment method on the dashboard PR

Content

product

March 2024 Changelog

Standalone ratelimiting

We are introducing standalone ratelimiting. With this feature, you can rate limit anything while still leveraging the power of Unkey. Our ratelimiting feature works similarly to our keys, providing low global latency and detailed analytics. Moreover, you can configure overrides for specific identifiers, giving you more flexibility.

You can check out a demo that shows our synchronous and asynchronous implementation versus a Redis-based ratelimiter.

Bug fixes

  • Fixed a bug where the byte size was not correctly used when creating a key from the dashboard commit

Content

product

Authorization Alpha Release

Authorization through RBAC

We are excited to announce the Alpha release of our Authorization offering. This feature is opt-in and is available to all customers; while it is in Alpha, we advise keeping it to development environments.

Create roles

When creating roles, we wanted to give you the ability to provide them with an intuitive name and a description. This allows others in your organization to understand the purpose of the role and also gives you the ability to match the systems you have in place.

Create Role

If you have permissions created already, you can assign them to your roles during the creation process. If you don't have permissions created yet, you can create them after creating your role and assign them later.

Creating permissions

Our permissions are designed to be flexible; you can create permissions specific to a single API or service, or you can create more general permissions that can be used across multiple roles. We also offer the ability to wild card your permissions for more flexibility.

Create Permission

After you have created your permissions, you can assign them to your roles.

Visualizing roles and permissions

Unkey has always focused on making securing your APIs more accessible than ever. With the introduction of our Authorization offering, we wanted to simplify how you can see what roles and permissions are assigned to a key and update them as needed.

Roles and Permissions

Permission details

If you want to understand which roles are using permission, when it was last used, what keys are attached, and when it was last updated, you can do so by clicking on the permission.

Permission Details

Create key UI updates

The team refined our create key UI to provide a better User experience. The new UI offers toggles for enabling features while ensuring you are provided with actionable feedback when there is an error.

Create Key UI example

Content Roundup

How to build and authenticate an AI API using Modal, Neon, and Unkey

If you want to learn how to use Neon Postgres and Modal to build, host, and deploy an OpenAI Whisper API - fully secured by Unkey. We collaborated with the team at Neon team to create a tutorial that walks you through the process. You can find the tutorial here.

Decoding CLI Auth

Command Line Interfaces (CLI) have become integral tools for developers looking to streamline their workflows, but how does CLI authentication work? In our latest blog post, we break down the process of authenticating a CLI tool and how Unkey can help. You can find the blog post here.

product

Audit logging, Next.js SDK, Disable Keys, and more

Audit logging (beta)

We are introducing audit logging for the following events to allow for better tracking of changes to your account:

  • Workspace (create, update, delete)
  • API (create, update, delete)
  • Key (create, update, delete)
  • Vercel integration (create, update, delete)

Audit Logs

The audit logs are in the dashboard under the Audit logs tab. To access the beta feature, please get in touch with us at support@unkey.com.

Next.js SDK

We are introducing a new SDK for Next.js. The SDK is available as a npm package and can be installed with:

 npm install @unkey/nextjs

The Next.js SDK gives you a type-safe way to verify API keys, below is an example of how to use the SDK:

import { NextRequestWithUnkeyContext, withUnkey } from '@unkey/nextjs';

export const POST = withUnkey(async (req) => {
  // Process the request here
  // You have access to the verification response using `req.unkey`
  console.log(req.unkey);

  return new Response('Your API key is valid!');
});

Disable Keys

You can now disable a key via the API or in the dashboard. While disabled, the key will act as an invalid key. Suppose you have a customer that has not paid their bill. You may not want to delete the key and wait for the account balance to be current. The key can be disabled temporarily, preventing access until it is enabled.

curl --request POST \
  --url https://api.unkey.dev/v1/keys.updateKey \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "enabled": false,
  "keyId": "<keyId>"
}'

Examples

We recently moved our examples into their dedicated repository. We have also added a few new examples.

AI Billing example

This example shows how to integrate Unkey and Stripe with an AI application. Below are all the features we included:

  • Code to set up Stripe for payment links
  • On payment, users are assigned an Unkey API key with the 'remaining' field set to 10, signifying ten credits
  • This API key is saved to a cookie (httpOnly, so not accessible via client-side Javascript)
  • This cookie is attached to requests to an API route in /api/openai; this API route verifies the key (decrementing remaining) and requests images from OpenAI.

Check it out on Github

CLI Authentication

Adding a CLI to your application is a great way to increase adoption. However, it can be challenging to authenticate users. This example shows you how to use Unkey to authenticate users in your CLI application.

Check it out on Github

Contribution Improvements

The team spent some time removing conflicting type versions and also introducing corepack. Corepack allows us to ensure that when you are contributing, you are using the same version of the dependencies as we are. This should make it easier to contribute to the project.

pricing
operations

New Year New Pricing

Happy New Year from the team at Unkey! Firstly, we would like to thank you for your support in 2023; we are excited by the growth and feedback we have received. We are looking forward to 2024 and the new features we have planned.

Pricing changes

I spent a lot of time thinking about how we can maximize the value we provide to users of Unkey. We want there to be two things that are true for all users of Unkey:

  1. API authentication is easy to implement
  2. It's accessible to everyone

We have decided to change our pricing model to help us achieve these goals. The free tier has stayed the same, and we will continue to gather feedback. Our pro tier stays the same price at $25 per month, but we are increasing what is included.

Old Pro Tier

  • 250 Monthly Active keys included *
  • 10,000 Verifications included *
  • Workspaces with team members
  • Priority Support
  • Data retention for 90 days
  • Additional active keys are billed at $0.10
  • Additional verifications are charged at $1 per 5000

New Pro Tier

  • 250 Monthly Active keys included *
  • 150,000 Successful Verifications included *
  • Workspaces with team members
  • Data retention for 90 days
  • Additional active keys are billed at $0.10
  • Additional verifications are charged at $10 per 100,000

The new pro tier is designed to be a better fit for scaling your API authentication. We have increased the number of verifications included by 15x and reduced the cost of additional verifications by half. To put this in perspective, below are the costs of 1 million verifications on the old and new pro tiers.

Old Pro TierNew Pro Tier
$223$110

This change will make it easier to scale your API authentication with Unkey. If you have any questions or feedback, please reach out to me at james@unkey.dev

Refillable Keys

When working with limited access APIs, for example, if you sell someone 1000 API calls per month, you need a way to refill the API key each month. In the past, developers created a cron job to refill the key each month. This is a lot of work and can be error-prone.

We have introduced refillable keys to make this process easier. You can now set a refill interval and increment on individual keys, and we take care of refilling a key on its set interval. Currently, we support daily and monthly refills. We will handle daily at midnight UTC and monthly on the first of each month.

Here is an example of creating a key with a daily refill of 100 daily uses.

curl --request POST \
  --url https://api.unkey.dev/v1/keys.createKey \
  --header 'Authorization: Bearer <UNKEY>' \
  --header 'Content-Type: application/json' \
  --data '{
  "apiId":"<API_ID>",
  "remaining": 100,
  "refill": {
      "interval": "daily",
      "amount": 100
  }
}'

A new team member

Dom is joining the Unkey team, bringing us to a total of 4! Dom comes with a wealth of knowledge from his time at Vercel. When we talked to Dom about joining Unkey, he spent a lot of time thinking and talking about how we can make Unkey easier to use and our vision for Unkey. Dom will be working on all aspects of the Unkey stack, and you will see his first project in the coming weeks.

analytics
engineering

Unkey is faster, we have improved analytics, and a new billing page

Welcome to the Unkey changelog for Decemeber 15th, 2023. The last two weeks have been busy with some core changes to the Unkey product.

Improved Analytics

Analytics are now more detailed and easier to understand. We added a new chart that shows the number of active keys for your API and allows you to set a timeframe.

Analytics

Active keys

We moved to Cloudflare

Unkey's API has been on Fly.io since we launched in June. We've been reasonably happy with its performance, but we wanted to move to a more reliable and faster platform. We decided to move to Cloudflare Workers, a serverless platform on Cloudflare's edge network. After this change, Unkey's API runs on 300+ data centers worldwide, making it faster and more reliable. You can check out the new API code in our repository to see how we made the changes from Go to Typescript using Hono

Below is a chart of our latency at P95. Can you tell when we moved to CF?

P95 results

New billing page

We added a brand new billing page to the dashboard. Previously, you could change your plan and see your current usage. Now, you can see your billing history, change your payment method, and see your current billing cycle. My favorite part is that you can now see a projected forecast of your usage for the month and a projected bill.

Billing page

RPC methods

With the move to Cloudflare workers, we decided to move to RPC methods. RPC makes it extremely easy to version our API and follow a standard.

Note: We will continue to support the old API for the next few months. We will send out a deprecation notice before we remove the old API.

All our RPC methods are now in the format:

https://api.unkey.dev/{version}/{service}.{method}

Below are a couple of examples of RPC methods: one is a GET request, and the other is a POST request.

curl "https://api.unkey.dev/v1/keys.getKey?keyId=key_123" \
  -H "Authorization: Bearer <ROOT_KEY>"

curl -XPOST "https://api.unkey.dev/v1/keys.createKey" \
  -H "Authorization: Bearer <ROOT_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"apiId": "api_123", "name": "My Key"}'

Content you might have missed

UX of UUIDs: Andreas wrote an article on the UX of UUIDs and how some minor tweaks can make a big difference in the user experience.

product

Bugs, a11y, and onboarding improvements

Welcome to the Unkey changelog. It's been a month since our last changelog, so let's talk about what has changed. We spent the month of November cleaning up bugs and making general improvements to Unkey.

Contributing improvements

When we announced our hiring and funding, we saw an influx of people wanting to contribute to Unkey. We quickly found out our contribution guide was hard to follow, and we had some third-party requirements that could be optional.

We now have a contribution guide that should take less than 5 minutes to follow and allow you to contribute. You can watch the video I made, which takes you through each area.

Onboarding flow improvements

We simplified our new user onboarding flow; prior, you'd have to create your workspace. We realized this adds more friction as a workspace is always required. When you sign up for an account, we automatically create the personal workspace.

a11y

We have started working on a11y issues across the landing and web application. This will continue on every project, improvement, or change to our website and dashboard.

If you find any, feel free to open an issue on our GitHub, and we will make sure it gets remediated.

Global API authentication with Unkey and Koyeb

Koyeb is a developer-friendly serverless platform to deploy apps globally. Koyeb offers a fully managed environment to deploy any apps in seconds without managing any infrastructure. Koyeb supports any programming languages, frameworks, and tools to build your apps.

This template allows you to use Bun and Unkey and deploy it globally using their platform.

Get started with Koyeb and Unkey today!

Active key analytics are fixed

We fixed the active key analytics, so you should now see active keys for the current month both in your usage and our dashboard.

Bug Fixes and highlights

  • Upgraded to Next.js 14
  • Upgraded most pages to edge
  • Improve our mobile experience
  • Use Drizzle directly for CRUD
  • Community Springboot SDK
  • Fixed dialog overflow on desktop
  • Fixed documentation links 404ing
  • Fixed API names overflowing in our sidebar

There are many more bug fixes, but we couldn't include them all here.

operations
product

Employees, Insane Growth, and many improvements

Welcome to the Unkey changelog. I'm sorry the cadence has been a bit off recently; we've been busy working on some exciting things! You might notice we are including more info about the company in the changelogs. We want to be open and transparent, and this is the perfect place for them. I also traveled to San Francisco to watch the Next.js Conference in person, which was a great experience.

Company Updates

Andreas is now full-time!

After many late nights and weekends, Andreas is now full-time on Unkey! Andreas will be taking up the role of CTO and will be responsible for the technical direction of Unkey; and has been instrumental in getting us to where we are today. I'm excited to see what we can achieve together!

Welcome Mike!

Mike joined Unkey at the end of October as our first hire. He will be working on the frontend of Unkey as he sharpens his skills and learns the ropes. Mike is an excellent addition to the team and has already fixed several bugs and added some great features!

Growth

October was a massive month for Unkey in terms of usage; one of our biggest customers had a great end of the month. To put numbers in perspective, in September, we did 150k verifications through the API system. In October, we did 2.3 million verifications! This is a considerable increase, and we are excited to see what November brings.

Github stars

On top of having one of the most insane months in terms of usage, we also had a great month in terms of Github stars. We finally cracked the 1000 star mark, a massive milestone for us. Being an open-source company, we love seeing people starring our repo, and we hope to see this number continue to grow.

Product Updates

Web Improvements

We have made a number of improvements to our website and web application:

  • Custom 404 pages
  • Masked IP addresses in the key usage table
  • Team switcher now truncates long team names and, on hover, shows the full name
  • Added format button to custom metadata on key creation

Unkey Core Improvements

We have done a lot of bug fixes recently, but we have also added two new features:

  • Soft delete expired keys: You can now see expired keys in the dashboard, and you can also update them. This allows you to offer a trial period and then update the key to remove the expiration entirely or set it to a new date when the user pays.
  • Vercel Integration: We now can directly integrate with Vercel, making it super simple to secure your API routes. You can read more about it at: Vercel Integration

Content

Blog Posts

On our blog, we released three new articles that you might have missed:

Video Content

What is next up?

At this point, we talked a lot about bug fixes and minor features; now that we are a company with full-time employees, you probably want to know what we are working on next. The Unkey team will be working on introducing permissions to your API keys, giving you fine-grained control over who can access specific routes and what they can do.

analytics
templates

Analytic Improvements, Templates, and Full-time employees!

Unkey Templates

We now have a Unkey templates section on our site! Both Unkey and the community build the templates, making it easier to start. You can find all our current templates at https://unkey.com/templates

Unkey Templates

If you have created a template or a starter, feel free to create a PR, and we would love to add it to our collection!

Analytics Improvements

We have improved our API analytics. You can now see successful verifications, rate-limited, and usage exceeded for your APIs. Segmentation of successful and unsuccessful requests allows you to have a holistic usage overview and understand your users better than ever!

API analytics image

We will continue to improve our analytical data as time goes on. If you need something for your application, please don't hesitate to contact us!

Root key analytics

We just released root key analytics. The root key is the key to the kingdom, and we want to make sure you can understand where it is being used. You can find the root key analytics by selecting details for the specific key.

Root analytics image

@unkey/hono

We are introducing @unkey/hono which offers a middleware authentication for Unkey. A minimal setup will read from the Authorization header and the result of the verification will be written to the context and can be access with c.get("unkey")

import { Hono } from "hono"
import { UnkeyContext, unkey } from "@unkey/hono";

const app = new Hono<{ Variables: { unkey: UnkeyContext } }>();

app.use("*", unkey());


app.get("/somewhere", (c) => {
  // access the unkey response here to get metadata of the key etc
  const ... = c.get("unkey")

  return c.text("yo")
})

Check out the docs for all the features https://unkey.com/docs/libraries/ts/hono

James is full time

Unkey is growing rapidly, and our usage doubled in August and 6X in September. When Unkey started, we knew its potential and the direction it could go. I am excited to begin working full-time on Unkey's overall direction and position.

If you want to chat about how Unkey can solve your API authentication or the plans for the future, feel free to find some time on my calendar: https://cal.com/james-r-perkins/30min

Content

This week, we released a new template and a blog post showing how to issue and associate your API key with a user.

Check out the blog post: Using Unkey with Authentication.

operations
product

Dashboard UI Overhaul

A new Sidebar experience

You now have a workspace switcher at the top, making tracking which workspace you are currently actively using easier. We also improved the look and feel of the sidebar to make it easier to read and navigate the dashboard.

Key analytics

Our per-key analytics got a significant overhaul, and you can now find details such as when the key was last used, total uses, and usage over the last 30 days. If you use our remaining or expiring features, you can see when it will expire or how many uses are left.

After the chart you are used to, we now have details of each verification attempt, including the resource you requested, User Agent, IP, Region it processed through, and whether it was valid.

Key Analytics Images

You can now update any key directly in the dashboard in the settings section. You can add rate limiting, update metadata, and make a key expire in a few clicks.

Update Key

API Settings

APIs are also updatable. You can update the name. If you are an enterprise customer, you can add your whitelisted IPs

API Settings

Account Settings

We now have an comprehensive account settings section, you can update your personal account, workspace, billing and see your usage.

Workspace Settings

You can now update your workspace name and upload a new workspace avatar

Workspace Settings

Team member management

As a pro-tier subscriber, you can invite and remove your team members as needed. You also have the option to have an admin who can manage accounts and members who can't add or remove other members.

Team Member settings

Usage

We know it is essential to track usage whether you are on the free plan or running a business, so we introduced a new usage section that shows your active keys and verifications for the current billing cycle.

Usage stats

Manage your user account

Finally, you can add a backup or change your primary email address. Upload your avatar and create or update a username.

Manage User Account

Documentation improvements

The documentation has been updated, we shortened the quickstart flow and documented the update key for the Unkey SDK. Look out for our new Next.js wrapper coming soon!