Developers

Maquettes

Maquettes IFC et leurs révisions.

The reference text comes from the contract and is written in French.

Lister les maquettes d'un projet

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

Required scope : models:read

Parameters

  • project_id (path)string (uuid)required

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

Responses

  • 200Une page de maquettes.Page & object

Common errors :400401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/projects/$PROJECT_ID/models" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (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

Required scope : 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.

Parameters

  • project_id (path)string (uuid)required

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

  • Idempotency-Key (header)string

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

Request bodyModelCreate

  • namestringrequired

  • upload_idstring (uuid)required

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

Responses

  • 202Traitement accepté ; suivre le job.Job
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Common errors :400401403404429500503(details in the Errors section)

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"
}'
Example (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}

Required scope : models:read

Parameters

  • model_id (path)string (uuid)required

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

Responses

  • 200La maquette.Model

Common errors :401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/models/$MODEL_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (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

Required scope : models:read

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

Parameters

  • model_id (path)string (uuid)required

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

Responses

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

Common errors :400401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/models/$MODEL_ID/revisions" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (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

Required scope : models:write

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

Parameters

  • model_id (path)string (uuid)required

    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.

Request bodyRevisionCreate

  • upload_idstring (uuid)required

  • milestonestring

Responses

  • 202Traitement accepté ; suivre le job.Job
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Common errors :400401403404429500503(details in the Errors section)

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"
}'
Example (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}

Required scope : models:read

Parameters

  • revision_id (path)string (uuid)required

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

Responses

  • 200La révision.Revision

Common errors :401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (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

Required scope : 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.

Parameters

  • revision_id (path)string (uuid)required

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

Responses

  • 200Une page d'objets.ObjectPage
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Common errors :400401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID/objects" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (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
}