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
}

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"
}

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"
}

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). 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.

  • 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
}