Aller au contenu

Développeurs

Maquettes

Maquettes IFC et leurs révisions.

Lister les maquettes d'un projet

get/api/v1/projects/{project_id}/models

Scope requis : models:read

Paramètres

  • project_id (path)string (uuid)requis

    Identifiant du projet (id rendu par GET /api/v1/projects).

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

Réponses

  • 200Une page de maquettes.Page & object

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

curl -sS "$SEVEUP_API/api/v1/projects/$PROJECT_ID/models" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
      "name": "LNPCA-S1-OA-PONT-0042",
      "format": "IFC",
      "revision_count": 3,
      "latest_revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
      "created_at": "2026-03-02T10:00:00Z",
      "updated_at": "2026-10-18T08:41:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Créer une maquette depuis un fichier déposé

post/api/v1/projects/{project_id}/models

Scope requis : models:write

Crée la maquette et sa première révision à partir d'un fichier déposé (POST /api/v1/uploads puis complete). La conversion démarre aussitôt : la réponse est le job de conversion.

Paramètres

  • project_id (path)string (uuid)requis

    Identifiant du projet (id rendu par GET /api/v1/projects).

  • Idempotency-Key (header)string

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

Corps de la requêteModelCreate

  • namestringrequis

  • upload_idstring (uuid)requis

    Dépôt clos (purpose: model).

Réponses

  • 202Traitement accepté ; suivre le job.Job
  • 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/projects/$PROJECT_ID/models" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "LNPCA-S1-OA-PONT-0042",
  "upload_id": "7a1c2e3f-4b5d-4e6f-8a9b-0c1d2e3f4a5b"
}'
Exemple (202)
{
  "id": "1f2e3d4c-5b6a-4978-8a1b-2c3d4e5f6a7b",
  "type": "conversion",
  "status": "QUEUED",
  "percent_complete": 0,
  "eta_seconds": null,
  "target": {
    "type": "revision",
    "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b"
  },
  "result": null,
  "error": null,
  "created_at": "2026-10-21T07:58:00Z",
  "started_at": null,
  "completed_at": null
}

Rechercher les maquettes de l'organisation

get/api/v1/models

Scope requis : models:read

Cherche une maquette par son nom dans toute l'organisation, sans parcourir les projets un à un. q filtre sur le nom (contient, sans casse) ; sans q, la liste rend toutes les maquettes de l'organisation, y compris celles rangées dans aucun projet. Chaque maquette porte les projets qui la contiennent (projects, trié par nom) : une maquette peut appartenir à plusieurs projets, et deux projets de même nom se distinguent par space_path.

Paramètres

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

  • q (query)string

    Filtre sur le nom de la maquette (contient, sans casse). Absent, toutes les maquettes.

  • project_id (query)string (uuid)

    Maquettes de ce projet seulement ; projet inconnu ou d'une autre organisation, 404.

Réponses

  • 200Une page de maquettes, avec leurs projets.Page & object

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

curl -sS "$SEVEUP_API/api/v1/models" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
      "name": "LNPCA-S1-OA-PONT-0042",
      "format": "IFC",
      "revision_count": 3,
      "latest_revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
      "created_at": "2026-03-02T10:00:00Z",
      "updated_at": "2026-10-18T08:41:00Z",
      "projects": [
        {
          "id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
          "name": "LNPCA — Section 1",
          "space_path": "~/SNCF"
        }
      ]
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Lire une maquette

get/api/v1/models/{model_id}

Scope requis : models:read

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

Réponses

  • 200La maquette.Model

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

curl -sS "$SEVEUP_API/api/v1/models/$MODEL_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
  "name": "LNPCA-S1-OA-PONT-0042",
  "format": "IFC",
  "revision_count": 3,
  "latest_revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "created_at": "2026-03-02T10:00:00Z",
  "updated_at": "2026-10-18T08:41:00Z"
}

Renommer une maquette

patch/api/v1/models/{model_id}

Scope requis : models:write

Seul name se modifie. Une maquette synchronisée depuis Trimble Connect se renomme dans Trimble (409).

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

Corps de la requêteModelUpdate

  • namestringrequis

Réponses

  • 200La maquette renommée.Model
  • 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/models/$MODEL_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "LNPCA_OA-MN-130_STR"
}'
Exemple (200)
{
  "id": "7d1e2f3a-4b5c-4d6e-8f70-8192a3b4c5d6",
  "name": "LNPCA_OA-MN-130_STR",
  "format": "IFC",
  "revision_count": 3,
  "latest_revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "created_at": "2026-03-02T10:00:00Z",
  "updated_at": "2026-11-04T09:00:00Z"
}

Archiver une maquette

delete/api/v1/models/{model_id}

Scope requis : models:write

Comme « Archiver » dans l'App : la maquette et ses révisions sortent des listes et se restaurent depuis la section « Archivés » de la bibliothèque. Ses liens aux projets sont retirés et ne reviennent pas à la restauration. Refusé (409) tant qu'une de ses révisions est en traitement. Une maquette déjà archivée répond 404.

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

Réponses

  • 204Maquette archivée.
  • 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 DELETE "$SEVEUP_API/api/v1/models/$MODEL_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"

Contrôler le nom de fichier d'une maquette

get/api/v1/models/{model_id}/naming-check

Scope requis : models:read

Le nom du fichier de la dernière révision, contrôlé par la convention de nommage de la maquette (même résultat que POST /api/v1/naming-conventions/{naming_convention_id}/check). compliant est nul quand rien n'a été contrôlé : maquette sans convention (naming_convention_id nul), convention archivée, ou sans révision.

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

Réponses

  • 200Le contrôle du nom.ModelNameCheck

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

curl -sS "$SEVEUP_API/api/v1/models/$MODEL_ID/naming-check" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "model_id": "7c2e9f10-3b4a-4d5e-8f6a-1b2c3d4e5f60",
  "naming_convention_id": "4d5e6f70-8192-4a3b-9c4d-5e6f708192a3",
  "revision_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
  "file_name": "OA12-XYZ.ifc",
  "compliant": false,
  "problems": [
    {
      "code": "not_in_list",
      "part": "Discipline",
      "expected": "STR, ARC"
    }
  ],
  "values": {}
}

Lister les révisions d'une maquette

get/api/v1/models/{model_id}/revisions

Scope requis : models:read

Révisions de la plus récente à la plus ancienne.

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

Réponses

  • 200Une page de révisions.Page & object

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

curl -sS "$SEVEUP_API/api/v1/models/$MODEL_ID/revisions" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
      "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
      "version": 3,
      "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
      "size_bytes": 184467200,
      "ifc_schema": "IFC4X3_ADD2",
      "authoring_software": "Revit 2025",
      "status": "COMPLETE",
      "processing": {
        "conversion": {
          "status": "COMPLETE",
          "percent_complete": 100,
          "eta_seconds": null,
          "error_message": null
        },
        "dataset": {
          "status": "COMPLETE",
          "percent_complete": 100,
          "eta_seconds": null,
          "error_message": null
        },
        "scene": {
          "status": "COMPLETE",
          "percent_complete": 100,
          "eta_seconds": null,
          "error_message": null
        }
      },
      "object_count": 44213,
      "created_at": "2026-10-18T08:41:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Ajouter une révision depuis un fichier déposé

post/api/v1/models/{model_id}/revisions

Scope requis : models:write

Nouvelle version de la maquette. La conversion démarre aussitôt ; la réponse est le job.

Paramètres

  • model_id (path)string (uuid)requis

    Identifiant de la maquette (id rendu par la liste des maquettes du projet).

  • Idempotency-Key (header)string

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

Corps de la requêteRevisionCreate

  • upload_idstring (uuid)requis

  • milestonestring

Réponses

  • 202Traitement accepté ; suivre le job.Job
  • 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/models/$MODEL_ID/revisions" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "upload_id": "7a1c2e3f-4b5d-4e6f-8a9b-0c1d2e3f4a5b",
  "milestone": "APD"
}'
Exemple (202)
{
  "id": "1f2e3d4c-5b6a-4978-8a1b-2c3d4e5f6a7b",
  "type": "conversion",
  "status": "QUEUED",
  "percent_complete": 0,
  "eta_seconds": null,
  "target": {
    "type": "revision",
    "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b"
  },
  "result": null,
  "error": null,
  "created_at": "2026-10-21T07:58:00Z",
  "started_at": null,
  "completed_at": null
}

Lire une révision et son état de traitement

get/api/v1/revisions/{revision_id}

Scope requis : models:read

Paramètres

  • revision_id (path)string (uuid)requis

    Identifiant de la révision (latest_revision_id d'une maquette, ou id d'une révision).

Réponses

  • 200La révision.Revision

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

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
  "version": 3,
  "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
  "size_bytes": 184467200,
  "ifc_schema": "IFC4X3_ADD2",
  "authoring_software": "Revit 2025",
  "status": "PROCESSING",
  "processing": {
    "conversion": {
      "status": "COMPLETE",
      "percent_complete": 100,
      "eta_seconds": null,
      "error_message": null
    },
    "dataset": {
      "status": "PROCESSING",
      "percent_complete": 42,
      "eta_seconds": 180,
      "error_message": null
    },
    "scene": {
      "status": "QUEUED",
      "percent_complete": 0,
      "eta_seconds": null,
      "error_message": null
    }
  },
  "object_count": null,
  "created_at": "2026-10-18T08:41:00Z"
}

Changer le jalon d'une révision

patch/api/v1/revisions/{revision_id}

Scope requis : models:write

Seul milestone se modifie (null le retire). Une révision n'a pas d'autre nom : elle se désigne par sa maquette et son numéro de version.

Paramètres

  • revision_id (path)string (uuid)requis

    Identifiant de la révision (latest_revision_id d'une maquette, ou id d'une révision).

Corps de la requêteRevisionUpdate

  • milestonestring | nullrequis

    Jalon (APS, APD, PRO, EXE…) ; null le retire.

Réponses

  • 200La révision modifiée.Revision
  • 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/revisions/$REVISION_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "milestone": "APD"
}'
Exemple (200)
{
  "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
  "version": 3,
  "milestone": "APD",
  "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
  "size_bytes": 184467200,
  "ifc_schema": "IFC4X3_ADD2",
  "authoring_software": "Revit 2025",
  "status": "COMPLETE",
  "processing": {
    "conversion": {
      "status": "COMPLETE",
      "percent_complete": 100,
      "eta_seconds": null,
      "error_message": null
    },
    "dataset": {
      "status": "COMPLETE",
      "percent_complete": 100,
      "eta_seconds": null,
      "error_message": null
    },
    "scene": {
      "status": "COMPLETE",
      "percent_complete": 100,
      "eta_seconds": null,
      "error_message": null
    }
  },
  "object_count": 44213,
  "created_at": "2026-10-18T08:41:00Z"
}

Chercher des objets d'une révision (classe, propriété, valeur)

get/api/v1/revisions/{revision_id}/objects

Scope requis : models:read

Lecture ciblée du jeu de données, au plus 50 objets par page, par exemple « les IfcWall dont Pset_WallCommon.FireRating est absente ou vide ». Une propriété se lit sur l'objet, sinon sur son type (l'objet l'emporte). La classe se compare sans tenir compte de la casse et sans sous-classes ; sans classe, seuls les objets de la maquette sont lus (ni types ni définitions). Les valeurs sortent en texte. total n'est calculé que pour la première page (nul si le compte est trop long). count_values=true compte en plus les valeurs de la propriété ou de l'attribut sur toute la sélection (value_counts, les 50 plus fréquentes, et distinct_value_count), sur la première page seulement. Jeu de données pas terminé ou plus disponible : 409.

Paramètres

  • revision_id (path)string (uuid)requis

    Identifiant de la révision (latest_revision_id d'une maquette, ou id d'une révision).

  • ifc_class (query)string

    Classe IFC, par exemple IfcWall.

  • property_set (query)string

    Jeu de propriétés ; va avec property.

  • property (query)string

    Nom de la propriété ; va avec property_set.

  • attribute (query)string

    Attribut IFC lu à la place d'une propriété.

  • condition (query)string

    Filtre sur la propriété ou l'attribut : any (aucun filtre, valeur rendue), missing (absente), empty (présente sans valeur), missing_or_empty, present (renseignée), equals, not_equals (renseignée et différente), contains (sans tenir compte de la casse).

  • value (query)string

    Valeur comparée, obligatoire pour equals, not_equals et contains.

  • limit (query)integer

    Taille de page.

  • count_values (query)boolean

    Compter les valeurs sur toute la sélection, avec property ou attribute. Nul si le comptage est trop long ; la page d'objets reste servie. Passer limit=1 pour ne lire que les comptes.

  • cursor (query)string

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

Réponses

  • 200Une page d'objets.ObjectPage
  • 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 "$SEVEUP_API/api/v1/revisions/$REVISION_ID/objects" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "data": [
    {
      "object_id": 470981,
      "global_id": "1EveRUJ9f8ABmwj$jhNe5l",
      "name": "Mur M12",
      "ifc_class": "IfcWall",
      "state": "MISSING",
      "value": null,
      "value_source": null
    }
  ],
  "next_cursor": null,
  "has_more": false,
  "total": 1
}

Lister les conventions de nommage

get/api/v1/naming-conventions

Scope requis : models:read

Conventions de nommage des fichiers de l'organisation (archivées exclues), des plus anciennes aux plus récentes. project_id limite aux conventions rattachées à un projet. La liste donne le nombre de parties du nom ; leurs règles se lisent avec GET /api/v1/naming-conventions/{naming_convention_id}.

Paramètres

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

  • project_id (query)string (uuid)

    Projet auquel la convention est rattachée.

Réponses

  • 200Une page de conventions.Page & object

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

curl -sS "$SEVEUP_API/api/v1/naming-conventions" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "4d5e6f70-8192-4a3b-9c4d-5e6f708192a3",
      "name": "LNPCA — maquettes",
      "delimiter": "-",
      "part_count": 5,
      "project_ids": [
        "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10"
      ],
      "created_at": "2026-02-10T08:00:00Z",
      "updated_at": "2026-09-14T15:30:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Lire une convention de nommage

get/api/v1/naming-conventions/{naming_convention_id}

Scope requis : models:read

La convention et ses parties dans l'ordre du nom : type (text, number, version calculée), caractère obligatoire, bornes d'un nombre, longueur maximale, motif (expression régulière) et valeurs permises. Pour une partie à liste, allowed_values[].value est ce qui doit figurer dans le nom.

Paramètres

  • naming_convention_id (path)string (uuid)requis

    Identifiant de la convention (id rendu par GET /api/v1/naming-conventions).

Réponses

  • 200La convention.NamingConvention

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

curl -sS "$SEVEUP_API/api/v1/naming-conventions/$NAMING_CONVENTION_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "id": "4d5e6f70-8192-4a3b-9c4d-5e6f708192a3",
  "name": "LNPCA — maquettes",
  "delimiter": "-",
  "part_count": 2,
  "project_ids": [
    "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10"
  ],
  "created_at": "2026-02-10T08:00:00Z",
  "updated_at": "2026-09-14T15:30:00Z",
  "parts": [
    {
      "position": 0,
      "name": "Ouvrage",
      "description": "Code de l'ouvrage d'art.",
      "type": "text",
      "required": true,
      "min_value": null,
      "max_value": null,
      "max_length": 6,
      "pattern": "^OA[0-9]+$",
      "allowed_values": []
    },
    {
      "position": 1,
      "name": "Discipline",
      "description": null,
      "type": "text",
      "required": true,
      "min_value": null,
      "max_value": null,
      "max_length": null,
      "pattern": null,
      "allowed_values": [
        {
          "value": "STR",
          "label": "Structure",
          "group": null
        },
        {
          "value": "ARC",
          "label": "Architecture",
          "group": null
        }
      ]
    }
  ]
}

Contrôler des noms de fichiers

post/api/v1/naming-conventions/{naming_convention_id}/check

Scope requis : models:read

Même contrôle que l'App à l'import d'un fichier, sans rien déposer ni écrire. L'extension est ignorée (.ifc, et la seconde d'un .ifc.zip). Chaque nom rend compliant, ses problèmes et, s'il est conforme, la valeur lue pour chaque partie. Codes : no_rule (convention sans partie), part_count (nombre de parties attendu dans expected), required, not_a_number, out_of_range, too_long, not_in_list, pattern. Un motif invalide ou trop coûteux à évaluer refuse le nom. 500 noms au plus par appel ; un nom répété n'est contrôlé qu'une fois.

Paramètres

  • naming_convention_id (path)string (uuid)requis

    Identifiant de la convention (id rendu par GET /api/v1/naming-conventions).

Corps de la requêteFileNameCheckRequest

  • file_namesstring[]requis

Réponses

  • 200Le résultat de chaque nom, dans l'ordre reçu.FileNameCheck

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

curl -sS -X POST "$SEVEUP_API/api/v1/naming-conventions/$NAMING_CONVENTION_ID/check" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "file_names": [
    "OA12-STR.ifc",
    "OA12-XYZ.ifc"
  ]
}'
Exemple (200)
{
  "naming_convention_id": "4d5e6f70-8192-4a3b-9c4d-5e6f708192a3",
  "compliant_count": 1,
  "results": [
    {
      "file_name": "OA12-STR.ifc",
      "compliant": true,
      "problems": [],
      "values": {
        "Ouvrage": "OA12",
        "Discipline": "STR"
      }
    },
    {
      "file_name": "OA12-XYZ.ifc",
      "compliant": false,
      "problems": [
        {
          "code": "not_in_list",
          "part": "Discipline",
          "expected": "STR, ARC"
        }
      ],
      "values": {}
    }
  ]
}