Project API
Интегрируйте Card, комментарии и Markdown Documents одного Project через ограниченный Bearer token. API доступен на каноническом домене Organization.
Аутентификация
Owner выпускает token в разделе Project API. Секрет показывается один раз, передаётся в заголовке Authorization и никогда не используется в browser URL.
Authorization: Bearer PMLY_PROJECT_TOKENМинимальные права. Выдавайте только scopes, необходимые конкретной интеграции, задавайте срок действия и отзывайте token после использования.
Карточки
Создание, настройка, порядок, архив и восстановление Board текущего Project.
Пример запроса
curl --request GET \
--url 'https://example-tenant.pmly.ru/api/v1/project-api/cards?limit=50' \
--header 'Authorization: Bearer PMLY_PROJECT_TOKEN'Пример ответа
{
"cards": [
{
"id": "01900000-0000-7000-8000-000000000001",
"boardId": "01900000-0000-7000-8000-000000000010",
"columnId": "01900000-0000-7000-8000-000000000011",
"title": "Тестовые данные",
"description": "",
"version": 3,
"updatedAt": "2026-07-29T12:00:00Z",
"archivedAt": null
}
],
"nextCursor": null
}/boardsПолучить Board и Columnboards:read/boardsСоздать Boardboards:write/boards/archivedПолучить архив Boardboards:read/boards/{boardId}Изменить Boardboards:write/boards/{boardId}/moveПереместить Boardboards:write/boards/{boardId}/archiveАрхивировать Board (также требуется cards:write)boards:write/boards/{boardId}/restoreВосстановить Board (также требуется cards:write)boards:writeJSON для изменяющих запросов
Создание Board
Создаёт Board с четырьмя стартовыми Column в Project токена.
/boardsnamestringДаНазвание от 1 до 200 символов.colorKeyBoardColorKeyДаЦвет из опубликованного каталога.Idempotency-Key{
"name": "Запуск продукта",
"colorKey": "cyan"
}Изменение Board
Заменяет имя и цвет Board целиком.
/boards/{boardId}namestringДаПолное новое название.colorKeyBoardColorKeyДаПолное новое значение цвета.If-Match{
"name": "Запуск v2",
"colorKey": "green"
}Порядок Board
Ставит Board между соседними anchors; без anchors перемещает в конец.
/boards/{boardId}/movepreviousBoardIdUUID | nullДаПредыдущая Board или null.nextBoardIdUUID | nullДаСледующая Board или null.If-MatchIdempotency-Key{
"previousBoardId": null,
"nextBoardId": null
}Архивирование Board
Архивирует Board вместе с активными Card или переносит их в другую Board.
/boards/{boardId}/archivecardDispositionarchive_cards | transferДаСпособ обработки активных Card.targetBoardIdUUID | nullНетОбязателен только для transfer.If-MatchIdempotency-Key{
"cardDisposition": "archive_cards",
"targetBoardId": null
}Документы
Чтение обсуждения Card и публикация agent-authored комментариев.
/cards/{cardId}/commentsПолучить комментарииcomments:read/cards/{cardId}/commentsДобавить комментарийcomments:writeJSON для изменяющих запросов
Создание комментария
Публикует комментарий от имени интеграции. Для обычного комментария достаточно поля text.
/cards/{cardId}/commentstextstringДаТекст комментария: от 1 до 5 000 символов.parentCommentIdUUID | nullНетРодительский комментарий для ответа; иначе null или поле можно не передавать.mentionedUserIdsUUID[]НетУникальные ID упомянутых пользователей; по умолчанию пустой массив.Idempotency-Key{
"text": "Описание проверено, можно публиковать.",
"parentCommentId": null,
"mentionedUserIds": []
}Scopes
boards:readboards:writecards:readcards:writecomments:readcomments:writedocuments:readdocuments:writeНедостающий scope возвращает 403 PROJECT_API_SCOPE_REQUIRED.
Pagination
Списки используют cursor pagination. Передавайте opaque nextCursor как cursor; limit принимает от 1 до 100 и по умолчанию равен 50.
Idempotency и версии
Создающие и архивирующие команды принимают уникальный Idempotency-Key. Изменения существующего ресурса требуют canonical If-Match; устаревшая версия возвращает 409.
Ошибки
400Некорректный запрос или Idempotency-Key.401Token отсутствует, неизвестен, истёк или отозван.403Token не имеет необходимого scope.404Ресурс не существует или находится в другом Project/Tenant.409Конфликт версии или повтор команды с другим payload.429Превышен rate limit; учитывайте retry metadata.
Комментарии
Discovery workflow и Label, создание, чтение, изменение и архивирование Card текущего Project.
/labelsПолучить каталог Labelcards:read/labelsСоздать Labelcards:write/cardsПолучить активные Cardcards:read/cardsСоздать Cardcards:write/cards/{cardId}Получить Cardcards:read/cards/{cardId}Изменить Cardcards:write/cards/{cardId}/moveПереместить Cardcards:write/cards/{cardId}/labelsЗаменить Label Cardcards:write/cards/{cardId}/archiveАрхивировать Cardcards:writeJSON для изменяющих запросов
Создание Label
Создаёт Organization-wide Label. Требует cards:write и active owner Membership владельца token.
/labelsnamestringДаУникальное название от 1 до 80 символов после trim.colorLabelColorДаОдин из gray, blue, green, yellow, orange, red, purple.Idempotency-KeyСоздание Card
Создаёт Card в конкретной Column. Board и Column должны принадлежать Project, для которого выпущен token.
/cardsboardIdUUIDДаИдентификатор Board внутри Project.columnIdUUIDДаИдентификатор начальной Column внутри Board.titlestringДаНазвание: от 1 до 500 символов после trim.descriptionstringДаPlain text до 20 000 символов; пустая строка допустима.Idempotency-KeyИзменение Card
Заменяет название и описание Card. Оба поля передаются целиком; частичное изменение одного поля не поддерживается.
/cards/{cardId}titlestringДаПолное новое название: от 1 до 500 символов.descriptionstringДаПолное новое plain-text описание до 20 000 символов.If-MatchПеремещение Card
Перемещает Card в другую Column или меняет порядок. Без anchors Card добавляется в конец целевой Column.
/cards/{cardId}/movetargetColumnIdUUIDДаЦелевая Column того же Board и Project.previousCardIdUUID | nullНетCard, после которой нужно поставить перемещаемую Card.nextCardIdUUID | nullНетCard, перед которой нужно поставить перемещаемую Card.If-MatchIdempotency-KeyМетки Card
Заменяет полный набор Label Card. UUID доступны через каталог Label; пустой массив снимает все метки.
/cards/{cardId}/labelslabelIdsUUID[]ДаДо 20 уникальных Label текущего Tenant.If-Match