---
title: "Upload a browser extension"
method: POST
path: "/extensions"
tags: ["Extensions"]
---

# Upload a browser extension

`POST /extensions`

Upload a zip file containing an unpacked browser extension. Optionally provide a unique name for later reference.

## Response `201`

Extension uploaded successfully

- Extension — A browser extension uploaded to Kernel.
  - `id` string, required — Unique identifier for the extension
  - `name` string, nullable — Optional, easier-to-reference name for the extension. Must be unique within the project.
  - `created_at` string, date-time, required — Timestamp when the extension was created
  - `size_bytes` integer, required — Size of the extension archive in bytes
  - `checksum` string, nullable — SHA-256 checksum, encoded as lowercase hexadecimal, of the exact uploaded extension archive bytes. This is not a normalized checksum of the extension contents; archive metadata, file ordering, and compression can change the checksum for otherwise identical contents. Omitted for legacy rows and server-repackaged Chrome Web Store extensions.
  - `last_used_at` string, date-time, nullable — Timestamp when the extension was last used

## Other responses

- `400` — Bad Request – invalid input
- `401` — Unauthorized – missing or invalid authorization token
- `403` — Forbidden – insufficient permissions or plan
- `409` — Conflict – resource already exists
- `500` — Internal Server Error

---

[API](https://skmtc.net/kernel/apis/kernel-api.md) · [All operations](https://skmtc.net/kernel/apis/kernel-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/kernel/kernel-api/versions/9e8ce9fcf5e1/schema)
