POST
Create a card
Create a card at the end of a list. The listId sets the board and organization, so you don't pass those separately. Get a listId and any label IDs from Get one board first.
Request
POST /api/v1/cards
Send a JSON body with Content-Type: application/json.
Body
| Field | Type | Required | Description |
|---|---|---|---|
listId | string | Yes | Target list. Get it from Get one board. |
title | string, up to 255 characters | Yes | Card title. |
description | string, up to 10000 characters | No | Markdown supported. |
priority | NONE, LOW, MEDIUM, HIGH, or URGENT | No | Defaults to NONE. |
dueDate | ISO 8601 string, for example 2026-07-20 | No | Due date for the card. |
labelIds | string array, up to 50 items | No | Labels must already exist in the list's project. |
Example
curl -X POST https://projavo.com/api/v1/cards \
-H "Authorization: Bearer $PROJAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"listId": "<list-id>",
"title": "[Bug] Vehicle spawns underground near Legion",
"description": "**Reporter:** @player123\n\nWhen spawning the Adder at Legion Square, the vehicle clips through the map.\n\n**Repro:** /car adder near the fountain.",
"priority": "HIGH",
"labelIds": ["<label-id>"]
}'
const res = await fetch("https://projavo.com/api/v1/cards", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PROJAVO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
listId: "<list-id>",
title: "Example card",
priority: "MEDIUM",
}),
});
const { card } = await res.json();
Response
Response 201
{
"card": {
"id": "<card-id>",
"title": "[Bug] Vehicle spawns underground near Legion",
"description": "**Reporter:** @player123\n\n…",
"priority": "HIGH",
"position": 2,
"dueDate": null,
"listId": "<list-id>",
"createdAt": "2026-07-08T00:17:36.857Z",
"labels": [ { "id": "<label-id>", "name": "Bug", "color": "#6B7280" } ]
}
}
Note
The card is created as the key owner and broadcasts in real time. It appears instantly for anyone viewing the board.
Important
Labels must belong to the same project as the list. If any labelIds entry belongs to another project, the request fails with 422 and invalid_label, and no card is created.
Errors
| Status | Code | Meaning |
|---|---|---|
400 | invalid_body | The request body is not valid JSON. |
401 | missing_key | No API key was sent. |
403 | insufficient_scope | The key lacks the create permission. |
403 | organization_not_allowed | The key's grants exclude the list's organization. |
403 | forbidden | The key owner is not a member of the organization, or their role cannot create cards (guests). |
404 | not_found | The list does not exist. |
422 | validation_error | A field is missing or invalid, such as a title over 255 characters. |
422 | invalid_label | One or more labelIds do not belong to the list's project. |
429 | Rate limit | The key passed 60 requests per minute. |