---
title: "Create License (Manual Entry)"
method: POST
path: "/api/v1/admin/licenses"
tags: ["Licenses"]
---

# Create License (Manual Entry)

`POST /api/v1/admin/licenses`

Manually issue a license without an order. Cert number, fingerprint short code and certificate are generated exactly like the paid flow. With sendEmail=true the certificate is rendered and emailed asynchronously (status: issuing); otherwise the license is recorded with status "issued" and the certificate PNG is rendered in the background without sending email.

## Request body

- object
  - `planId` integer, required — Owning plan ID
  - `issueDate` string — Defaults to today
  - `endDate` string — Defaults to issueDate + plan billing cycle
  - `sendEmail` boolean — Send certificate email after creation (requires buyerEmail)
  - `formData` object — Purchase-form field values (company, buyerEmail, buyerName, …)

## Response `201`

Created license

- object — Created license
  - `success` boolean, required
  - `data` object, required

## Other responses

- `400` — Validation failed / plan not found

---

[API](https://skmtc.dev/newapi/apis/qn-platform-api.md) · [All operations](https://skmtc.dev/newapi/apis/qn-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/newapi/qn-platform-api/revisions/d61f11e363ff/schema)
