---
title: Import issues
description: Import recipients as pending certificate issues
method: POST
path: /api/v1/workspaces/{slug}/certificates/{id}/issues
group: Issues
scopes: certificates:write
---

# Import issues

# Import issues

Enrols recipients against a certificate. Each accepted row becomes a pending issue. Duplicate emails (already enrolled for this certificate) are listed in `rejected` and skipped.

## Authorization

```http
Authorization: Bearer vc_...
```

Requires `certificates:write` (or full access) and an active Pro seat.

## Path parameters

  
- `slug*` string — Workspace slug Example: `acme`.

  
- `id*` UUID — Certificate id Example: `550e8400-e29b-41d4-a716-446655440000`.

## Body parameters

  
- `issues*` array — Recipients to import

Each item in `issues`:

  
- `email*` string — Recipient email (must be a valid email address) Example: `ada@example.com`.

  
- `name?` string — Display name Example: `Ada Lovelace`.

  
- `attributes?` object — Certificate attribute values; keys should be lowercase `snake_case` Example: `{ "course": "Mathematics", "roll_number": "CS-001" }`.

  
- `expires_at?` string — RFC3339 expiry override for this recipient (must be in the future). When omitted, the certificate `validity_days` policy applies Example: `2027-09-03T09:00:00Z`.

## Request

```bash
curl -X POST \
  https://api.verifycate.com/api/v1/workspaces/acme/certificates/550e8400-e29b-41d4-a716-446655440000/issues \
  -H "Authorization: Bearer vc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "issues": [
      {
        "email": "ada@example.com",
        "name": "Ada Lovelace",
        "attributes": {
          "course": "Mathematics",
          "roll_number": "CS-001"
        }
      },
      {
        "email": "alan@example.com",
        "name": "Alan Turing",
        "attributes": {
          "course": "Computer Science",
          "roll_number": "CS-002"
        }
      }
    ]
  }'
```

```javascript
const certificateId = "550e8400-e29b-41d4-a716-446655440000";
const res = await fetch(
  `https://api.verifycate.com/api/v1/workspaces/acme/certificates/${certificateId}/issues`,
  {
    method: "POST",
    headers: {
      Authorization: "Bearer vc_your_api_key",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      issues: [
        {
          email: "ada@example.com",
          name: "Ada Lovelace",
          attributes: { course: "Mathematics", roll_number: "CS-001" },
        },
      ],
    }),
  },
);
const result = await res.json();
```

```go
body := strings.NewReader(`{
  "issues": [
    {
      "email": "ada@example.com",
      "name": "Ada Lovelace",
      "attributes": { "course": "Mathematics", "roll_number": "CS-001" }
    }
  ]
}`)
req, _ := http.NewRequest(
	"POST",
	"https://api.verifycate.com/api/v1/workspaces/acme/certificates/550e8400-e29b-41d4-a716-446655440000/issues",
	body,
)
req.Header.Set("Authorization", "Bearer vc_your_api_key")
req.Header.Set("Content-Type", "application/json")
```

```python
import json
import urllib.request

payload = json.dumps({
    "issues": [{
        "email": "ada@example.com",
        "name": "Ada Lovelace",
        "attributes": {"course": "Mathematics", "roll_number": "CS-001"},
    }],
}).encode()
req = urllib.request.Request(
    "https://api.verifycate.com/api/v1/workspaces/acme/certificates/550e8400-e29b-41d4-a716-446655440000/issues",
    data=payload,
    method="POST",
    headers={
        "Authorization": "Bearer vc_your_api_key",
        "Content-Type": "application/json",
    },
)
with urllib.request.urlopen(req) as res:
    print(res.read().decode())
```

## Response schema

- `items*` array — 
- `rejected*` array — 

## Response

### 200

```json
{
  "items": [
    {
      "id": "9b2c1d4e-5f67-4890-a123-456789abcdef",
      "certificate_id": "550e8400-e29b-41d4-a716-446655440000",
      "public_id": "vc_pub_ada01",
      "recipient_email": "ada@example.com",
      "recipient_name": "Ada Lovelace",
      "attributes": {
        "course": "Mathematics",
        "roll_number": "CS-001"
      },
      "status": "pending",
      "issued_at": null,
      "expires_at": null,
      "created_at": "2026-09-03T08:10:00Z",
      "updated_at": "2026-09-03T08:10:00Z"
    }
  ],
  "rejected": []
}
```

`rejected` is an array of email strings that were skipped.
