---
title: "Create a credential"
method: POST
path: "/v1/credentials"
tags: ["Credentials"]
---

# Create a credential

`POST /v1/credentials`

Use this endpoint to create a new credential.
  The credential will be created with status `draft`.

  As the next step, use the [Issue Credential](/docs/api-reference/credentials/issue-a-credential) endpoint to issue a draft credential, making it active and accessible in the digital wallet.

  If you are looking for an all-in-one solution that simultaneously creates, issues, and sends a credential, check the [Create, Issue and Send a Credential](/docs/api-reference/credentials/create-issue-and-send-a-credential) endpoint.

## Headers

- `Certifier-Version` string, required — API version header. Required for all requests.

## Request body

- CreateCredential
  - `groupId` string, required — The group's (credential template's) ID you want to issue the credential to. Check the Group (Credential Template) object.
  - `recipient` object, required — The recipient of the credential
    - `name` string, required — The name of the credential's recipient
    - `email` string, email — The email of the credential's recipient
  - `issueDate` string — The date of your credential's issuance (by default is set to today, only YYYY-MM-DD format is allowed)
  - `expiryDate` string — The date of your credential's expiration (by default uses the settings configured on the group (credential template), only YYYY-MM-DD format is allowed)
  - `customAttributes` object — The key-value object of your custom attributes, where key is your attribute's tag and value is the text value you want to store

## Response `201`

Credential created successfully

- Credential
  - `id` string, required — The unique credential's identifier
  - `publicId` string, uuid, required — The external unique credential's identifier (used in the digital wallet to generate a URL, e.g. https://credsverse.com/credentials/{publicId})
  - `groupId` string, required — The unique identifier of the group (credential template).
  - `status` 'draft' | 'scheduled' | 'issued' | 'expired', required — The status of the credential
  - `recipient` Recipient, nullable, required — The recipient object (if an email was provided)
    - `id` string, required — The credential recipient's unique identifier
    - `name` string, required — The name of the credential's recipient
    - `email` string, email, required — The email of the credential's recipient
  - `issueDate` string, required — The date of your credential's issuance. Formatted as an ISO 8601 date string (YYYY-MM-DD)
  - `expiryDate` string, nullable, required — The date of your credential's expiration. Formatted as an ISO 8601 date string (YYYY-MM-DD)
  - `attributes` object, required — The key-value object of the credential's attributes. Currently this can only be the recipient.name, configured on a per-credential basis
  - `customAttributes` object, required — The key-value object of your custom attributes, where key is your attribute's tag and value is the text value you want to store
  - `createdAt` string, date-time, required — The date and time when this credential was created. Formatted as an ISO 8601 date and time string
  - `updatedAt` string, date-time, required — The date and time when this credential was updated. Formatted as an ISO 8601 date and time string

## Other responses

- `400` — Bad Request - Missing version, invalid version, invalid JSON, or validation error
- `401` — Unauthorized - Invalid or missing authentication token
- `402` — Payment Required - Feature requires premium subscription
- `404` — Not Found - Resource does not exist
- `429` — Rate Limited - Too many requests
- `500` — Internal Server Error - Problem on Certifier's end

---

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