---
title: "Bind a caller-owned license to a caller-owned project"
method: POST
path: "/v1/licenses/{id}/assign-project"
tags: ["Licenses"]
---

# Bind a caller-owned license to a caller-owned project

`POST /v1/licenses/{id}/assign-project`

## Path parameters

- `id` string, required

## Request body

- AssignProjectDto
  - `projectId` string, uuid, required

## Response `200`

- AssignProjectResponseDto
  - `license` LicensePublicDto, required
    - `id` string, uuid, required
    - `key` string, required
    - `customerId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `replacesId` string, uuid, nullable, required
    - `kind` 'PRODUCTION' | 'POC' | 'DEMO' | 'EVAL', required
    - `status` 'ACTIVE' | 'REVOKED' | 'REPLACED', required
    - `startsAt` string, required
    - `expiresAt` string, required
    - `createdAt` string, required
  - `phoneHomeToken` PhoneHomeTokenDto
    - `token` string, required — Signed project phone-home JWT.
    - `expiresAt` string, date-time, required
    - `jti` string, required — JWT id for audit correlation.
    - `issuedAt` string, date-time, required
    - `env` 'production' | 'staging' | 'uat' | 'dev', required — Deployment environment stamped into the JWT `env` claim. Tokens minted before GTM-441 surface as `production`.
  - `outcome` 'minted' | 'revoked' | 'noop', required

## Other responses

- `400` — Validation failed
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `409` — Conflict
- `500` — Internal server error

---

[API](https://skmtc.net/vendure/apis/vendure-io-api-public.md) · [All operations](https://skmtc.net/vendure/apis/vendure-io-api-public/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/vendure/vendure-io-api-public/revisions/5fc4757128af/schema)
