Développeurs

Issues

Points à traiter sur les maquettes (issues BCF de l'App) et leurs commentaires.

Lister les tableaux d'issues

get/api/v1/issue-boards

Scope requis : issues:read

Un tableau par espace racine de l'organisation (source seveup, modifiable), plus les projets Trimble Connect ou Catenda synchronisés (trimble, catenda), en lecture seule ici comme dans l'App : leurs issues se modifient dans l'outil d'origine. Chaque tableau donne les statuts, types et priorités acceptés par PATCH /api/v1/issues/{issue_id}. Liste complète en une page.

Réponses

  • 200Les tableaux d'issues.Page & object

Erreurs communes :400401403429500503(détail dans la section Erreurs)

curl -sS "$SEVEUP_API/api/v1/issue-boards" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "3e7d1c55-8a2b-4f0e-9c6d-1b2a3c4d5e6f",
      "name": "SNCF",
      "source": "seveup",
      "space_id": "0b8a2c47-5a0e-4a7e-8f0d-0c6d2b7e9c31",
      "editable": true,
      "statuses": [
        {
          "name": "Ouvert",
          "type": "open"
        },
        {
          "name": "En cours",
          "type": "open"
        },
        {
          "name": "Résolu",
          "type": "open"
        },
        {
          "name": "Fermé",
          "type": "closed"
        }
      ],
      "types": [
        "Clash",
        "Question",
        "Remarque"
      ],
      "priorities": [
        "Basse",
        "Normale",
        "Haute",
        "Critique"
      ]
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Lister les issues

get/api/v1/issues

Scope requis : issues:read

Issues non supprimées de l'organisation, des plus anciennes aux plus récentes. board_id limite à un tableau, model_id aux issues posées sur une maquette, status_type aux issues ouvertes (open) ou fermées (closed) quel que soit le nom du statut ; une issue « Résolu », en attente de clôture, est ouverte. La liste ne porte pas les commentaires (comment_count seulement) : les lire avec GET /api/v1/issues/{issue_id}.

Paramètres

  • limit (query)integer

    Taille de page.

  • cursor (query)string

    Curseur opaque rendu par la page précédente (next_cursor).

  • board_id (query)string (uuid)

    Tableau (id rendu par GET /api/v1/issue-boards).

  • model_id (query)string (uuid)

    Maquette sur laquelle l'issue est posée.

  • status_type (query)string

    open (statuts ouverts, en cours et résolus en attente de clôture) ou closed.

Réponses

  • 200Une page d'issues.Page & object

Erreurs communes :400401403404429500503(détail dans la section Erreurs)

curl -sS "$SEVEUP_API/api/v1/issues" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
      "board_id": "3e7d1c55-8a2b-4f0e-9c6d-1b2a3c4d5e6f",
      "ref": "#12",
      "title": "Pset_WallCommon absent sur les murs du niveau R+1",
      "description": "Compléter IsExternal et FireRating.",
      "status": "Ouvert",
      "status_type": "open",
      "type": "Clash",
      "priority": "Haute",
      "assigned_to": "bet-structure@exemple.fr",
      "due_date": "2026-11-20T00:00:00Z",
      "storey": "R+1",
      "models": [
        {
          "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
          "revision_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9"
        }
      ],
      "comment_count": 2,
      "viewpoint_count": 1,
      "editable": true,
      "created_by": "julie.martin@exemple.fr",
      "created_at": "2026-11-02T10:15:00Z",
      "modified_by": "julie.martin@exemple.fr",
      "modified_at": "2026-11-03T08:40:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Créer une issue

post/api/v1/issues

Scope requis : issues:write

Comme « Nouvelle issue » dans le viewer, sans point de vue 3D : l'issue va dans le tableau de l'espace racine de la maquette et pointe la révision revision_id (la dernière sinon). Statut ouvert du tableau ; type et priority prennent ceux du tableau, Remarque et Normale par défaut. Signée du créateur de la clé.

Paramètres

  • Idempotency-Key (header)string

    Clé d'idempotence, gardée 24 h par organisation.

Corps de la requêteIssueCreate

  • model_idstring (uuid)requis

  • revision_idstring (uuid) | null

    Révision de cette maquette ; la dernière si absent.

  • titlestringrequis

  • descriptionstring | null

  • typestring | null

    Nom d'un type du tableau ; Remarque si absent.

  • prioritystring | null

    Valeurs : Basse · Normale · Haute · Critique · null

  • assigned_tostring | null

  • due_datestring (date-time) | null

Réponses

  • 201Issue créée.Issue
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Erreurs communes :400401403404429500503(détail dans la section Erreurs)

curl -sS -X POST "$SEVEUP_API/api/v1/issues" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
  "title": "Pset_WallCommon absent sur les murs du niveau R+1",
  "description": "Compléter IsExternal et FireRating.",
  "type": "Clash",
  "priority": "Haute",
  "assigned_to": "bet-structure@exemple.fr",
  "due_date": "2026-11-20T00:00:00Z"
}'
Exemple (201)
{
  "id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
  "board_id": "3e7d1c55-8a2b-4f0e-9c6d-1b2a3c4d5e6f",
  "ref": "#12",
  "title": "Pset_WallCommon absent sur les murs du niveau R+1",
  "description": "Compléter IsExternal et FireRating.",
  "status": "Ouvert",
  "status_type": "open",
  "type": "Clash",
  "priority": "Haute",
  "assigned_to": "bet-structure@exemple.fr",
  "due_date": "2026-11-20T00:00:00Z",
  "storey": null,
  "models": [
    {
      "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
      "revision_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9"
    }
  ],
  "comment_count": 0,
  "viewpoint_count": 0,
  "editable": true,
  "created_by": "julie.martin@exemple.fr",
  "created_at": "2026-11-04T09:00:00Z",
  "modified_by": "julie.martin@exemple.fr",
  "modified_at": "2026-11-04T09:00:00Z",
  "comments": []
}

Lire une issue

get/api/v1/issues/{issue_id}

Scope requis : issues:read

L'issue avec ses commentaires, du plus ancien au plus récent.

Paramètres

  • issue_id (path)string (uuid)requis

    Identifiant de l'issue (id rendu par GET /api/v1/issues).

Réponses

  • 200L'issue.Issue

Erreurs communes :400401403404429500503(détail dans la section Erreurs)

curl -sS "$SEVEUP_API/api/v1/issues/$ISSUE_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
  "board_id": "3e7d1c55-8a2b-4f0e-9c6d-1b2a3c4d5e6f",
  "ref": "#12",
  "title": "Pset_WallCommon absent sur les murs du niveau R+1",
  "description": "Compléter IsExternal et FireRating.",
  "status": "En cours",
  "status_type": "open",
  "type": "Clash",
  "priority": "Haute",
  "assigned_to": "bet-structure@exemple.fr",
  "due_date": "2026-11-20T00:00:00Z",
  "storey": "R+1",
  "models": [
    {
      "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
      "revision_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9"
    }
  ],
  "comment_count": 1,
  "viewpoint_count": 1,
  "editable": true,
  "created_by": "julie.martin@exemple.fr",
  "created_at": "2026-11-02T10:15:00Z",
  "modified_by": "bet-structure@exemple.fr",
  "modified_at": "2026-11-03T08:40:00Z",
  "comments": [
    {
      "id": "2b3c4d5e-6f70-4812-9a3b-4c5d6e7f8091",
      "text": "Corrigé dans la prochaine révision.",
      "created_by": "bet-structure@exemple.fr",
      "created_at": "2026-11-03T08:40:00Z"
    }
  ]
}

Modifier une issue

patch/api/v1/issues/{issue_id}

Scope requis : issues:write

Seuls les champs présents changent ; null vide description, assigned_to ou due_date. status et type se donnent par leur nom, parmi ceux du tableau (GET /api/v1/issue-boards), sans tenir compte de la casse. Chaque changement entre dans l'historique de l'issue, comme depuis l'App. Une issue d'un projet Trimble ou Catenda synchronisé répond 409. La suppression n'est pas offerte : l'App ne sait pas restaurer une issue.

Paramètres

  • issue_id (path)string (uuid)requis

    Identifiant de l'issue (id rendu par GET /api/v1/issues).

Corps de la requêteIssueUpdate

  • titlestring

  • descriptionstring | null

  • statusstring

    Nom d'un statut du tableau.

  • typestring

    Nom d'un type du tableau.

  • prioritystring

    Valeurs : Basse · Normale · Haute · Critique

  • assigned_tostring | null

  • due_datestring (date-time) | null

Réponses

  • 200L'issue modifiée, avec ses commentaires.Issue
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Erreurs communes :400401403404429500503(détail dans la section Erreurs)

curl -sS -X PATCH "$SEVEUP_API/api/v1/issues/$ISSUE_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "Fermé"
}'
Exemple (200)
{
  "id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
  "board_id": "3e7d1c55-8a2b-4f0e-9c6d-1b2a3c4d5e6f",
  "ref": "#12",
  "title": "Pset_WallCommon absent sur les murs du niveau R+1",
  "description": "Compléter IsExternal et FireRating.",
  "status": "Fermé",
  "status_type": "closed",
  "type": "Clash",
  "priority": "Haute",
  "assigned_to": "bet-structure@exemple.fr",
  "due_date": "2026-11-20T00:00:00Z",
  "storey": "R+1",
  "models": [
    {
      "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
      "revision_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9"
    }
  ],
  "comment_count": 0,
  "viewpoint_count": 1,
  "editable": true,
  "created_by": "julie.martin@exemple.fr",
  "created_at": "2026-11-02T10:15:00Z",
  "modified_by": "julie.martin@exemple.fr",
  "modified_at": "2026-11-04T09:00:00Z",
  "comments": []
}

Commenter une issue

post/api/v1/issues/{issue_id}/comments

Scope requis : issues:write

Commentaire signé du créateur de la clé, ajouté à la fin du fil. Issue synchronisée depuis Trimble ou Catenda 409.

Paramètres

  • issue_id (path)string (uuid)requis

    Identifiant de l'issue (id rendu par GET /api/v1/issues).

  • Idempotency-Key (header)string

    Clé d'idempotence, gardée 24 h par organisation.

Corps de la requêteIssueCommentCreate

  • textstringrequis

Réponses

  • 201Commentaire ajouté.IssueComment
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Erreurs communes :400401403404429500503(détail dans la section Erreurs)

curl -sS -X POST "$SEVEUP_API/api/v1/issues/$ISSUE_ID/comments" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Corrigé dans la prochaine révision."
}'
Exemple (201)
{
  "id": "2b3c4d5e-6f70-4812-9a3b-4c5d6e7f8091",
  "text": "Corrigé dans la prochaine révision.",
  "created_by": "bet-structure@exemple.fr",
  "created_at": "2026-11-03T08:40:00Z"
}