Aller au contenu

Développeurs

IDS

Jeux d'exigences IDS et contrôles de conformité.

Résultats IDS d'une révision

get/api/v1/revisions/{revision_id}/ids-results

Scope requis : ids:read

Un résultat par jeu d'exigences lié à la révision, avec le détail par spécification. Une spécification est comptée dans le score si applicable est vrai. Une exigence de présence non satisfaite a applicable: true et entity_count_applicable: 0 : elle échoue, elle n'est pas « sans objet ».

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

  • 200Les résultats.object

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

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID/ids-results" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "reason": null,
  "data": [
    {
      "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
      "requirement_set_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
      "status": "COMPLETE",
      "score_percent": 87.5,
      "specification_count": 8,
      "specification_count_applicable": 8,
      "specification_count_failed": 1,
      "completed_at": "2026-10-18T09:02:11Z",
      "specifications": [
        {
          "index": 0,
          "name": "Classification des ouvrages d'art",
          "status": "PARTIAL",
          "applicable": true,
          "score_percent": 91.2,
          "entity_count_applicable": 1250,
          "entity_count_valid": 1140,
          "entity_count_invalid": 110
        },
        {
          "index": 1,
          "name": "Présence d'un IfcSite géoréférencé",
          "status": "FAIL",
          "applicable": true,
          "score_percent": 0,
          "entity_count_applicable": 0,
          "entity_count_valid": 0,
          "entity_count_invalid": 0
        }
      ]
    }
  ]
}

Échecs IDS détaillés d'une révision pour un jeu d'exigences

get/api/v1/revisions/{revision_id}/ids-failures

Scope requis : ids:read

Pour chaque spécification en échec (applicable, FAIL, PARTIAL ou MISMATCH) : ce que l'IDS demande (applicability, requirements), le genre d'échec (failure) et un échantillon d'objets fautifs avec, exigence par exigence, ce que l'objet porte (checks). Le verdict reste celui du contrôle ; checks montre seulement les valeurs lues dans la maquette (une propriété se lit sur l'objet, sinon sur son type).

Une source manquante est dite, jamais remplacée par un vide : definitions_available faux si le fichier IDS n'a pas pu être lu, details_available faux si le contrôle n'a pas écrit la liste des objets en échec (contrôle ancien : le relancer), object_data_available faux si le jeu de données de la révision n'existe plus. Tant que status n'est pas COMPLETE, data est vide.

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

  • requirement_set_id (query)string (uuid)requis

    Jeu d'exigences (requirement_set_id d'un résultat IDS de la révision).

  • requirement_set_revision_id (query)string (uuid)

    Version du jeu ; la plus récente contrôlée sur cette révision par défaut.

  • specification_index (query)integer

    Une seule spécification (index du résultat), en échec ou non.

  • limit (query)integer

    Spécifications par page.

  • object_limit (query)integer

    Objets fautifs montrés par spécification ; 0 pour les facettes seules.

  • cursor (query)string

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

Réponses

  • 200Les échecs détaillés.IdsFailures

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

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID/ids-failures" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "requirement_set_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "status": "COMPLETE",
  "completed_at": "2026-10-18T09:02:11Z",
  "definitions_available": true,
  "details_available": true,
  "object_data_available": true,
  "data": [
    {
      "index": 3,
      "name": "Annotation/Beam/Building",
      "description": null,
      "instructions": null,
      "identifier": "r-0e6a1d4ef924",
      "status": "PARTIAL",
      "applicable": true,
      "cardinality": "optional",
      "failure": "INVALID_OBJECTS",
      "score_percent": 41.2,
      "entity_count_applicable": 120,
      "entity_count_invalid": 71,
      "applicability": [
        {
          "type": "ENTITY",
          "entity": "one of IFCBEAM | IFCBUILDING"
        }
      ],
      "requirements": [
        {
          "type": "PROPERTY",
          "cardinality": "required",
          "property_set": "DONNEES_SNCF_RESEAU",
          "name": "ID_LIGNE",
          "value": "pattern L[0-9]{3}",
          "data_type": "IFCTEXT"
        }
      ],
      "invalid_objects": [
        {
          "object_id": 80740,
          "global_id": "1EveRUJ9f8ABmwj$jhNe5l",
          "name": "Poutre P12",
          "ifc_class": "IfcBeam",
          "checks": [
            {
              "requirement": 0,
              "state": "PRESENT",
              "value": "830",
              "value_matches": false,
              "source": "object"
            }
          ]
        }
      ],
      "invalid_objects_total": 71
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Non-conformités IDS d'une révision en fichier BCF

get/api/v1/revisions/{revision_id}/ids-failures/bcf

Scope requis : ids:read

Paquet BCF 2.1 (.bcfzip) des échecs d'un jeu d'exigences sur la révision : un topic par spécification en échec, ses objets sélectionnés par GlobalId (2 000 par topic au plus, le reste est compté dans la description). Une exigence de présence non satisfaite donne un topic sans point de vue. Le fichier ouvre dans Solibri, BIMcollab, Revit ou Navisworks, et un même export réimporté met à jour ses topics au lieu de les dupliquer.

La réponse est un petit JSON ; le fichier se télécharge par download_url, lien signé valable une heure. topic_count à 0 et download_url nul : aucune spécification en échec. details_available faux : le contrôle n'a pas écrit la liste des objets testés (contrôle ancien : le relancer). Tant que status n'est pas COMPLETE, aucun fichier n'est produit.

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

  • requirement_set_id (query)string (uuid)requis

    Jeu d'exigences (requirement_set_id d'un résultat IDS de la révision).

  • requirement_set_revision_id (query)string (uuid)

    Version du jeu ; la plus récente contrôlée sur cette révision par défaut.

  • specification_index (query)integer

    Une seule spécification (index du résultat) ; toutes celles en échec par défaut.

Réponses

  • 200Le fichier prêt, ou la raison de son absence.IdsFailuresBcf
  • 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/ids-failures/bcf" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "requirement_set_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "status": "COMPLETE",
  "completed_at": "2026-10-18T09:02:11Z",
  "details_available": true,
  "topic_count": 12,
  "file_name": "non-conformites-ids-LNPCA_New.bcfzip",
  "size_bytes": 48213,
  "download_url": "https://storage.example.com/object/sign/attachments/cache/rev/validity/set/api-failures-all.bcfzip?token=...",
  "download_expires_at": "2026-10-18T10:05:00Z"
}

Synthèse IDS d'un projet (dernière révision de chaque maquette)

get/api/v1/projects/{project_id}/ids-summary

Scope requis : ids:read

Agrégé côté serveur ; une seule requête, quel que soit le nombre de maquettes.

Paramètres

  • project_id (path)string (uuid)requis

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

Réponses

  • 200La synthèse.IdsSummary

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

curl -sS "$SEVEUP_API/api/v1/projects/$PROJECT_ID/ids-summary" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "project_id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
  "model_count": 197,
  "model_count_checked": 190,
  "model_count_in_progress": 5,
  "model_count_error": 2,
  "score_percent": 82.4,
  "by_requirement_set": [
    {
      "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
      "name": "Exigences BIM LNPCA v3",
      "model_count_checked": 190,
      "score_percent": 82.4
    }
  ],
  "computed_at": "2026-10-21T07:00:00Z"
}

Ranger un jeu d'exigences existant dans un espace

post/api/v1/spaces/{space_id}/requirement-sets

Scope requis : ids:write

Un jeu d'exigences vit à un seul niveau (organisation, espace ou projet) : cette opération le range dans l'espace, comme « Promouvoir » dans l'App. Le jeu n'est pas copié : ses versions, ses liens aux projets et ses résultats restent les mêmes. Déjà rangé dans cet espace : rendu tel quel. Un jeu de portée organisation est déjà visible dans tous les espaces ; le ranger dans un seul le retirerait des autres, l'opération répond donc 409. Pour créer directement un jeu dans un espace, passer space_id à POST /api/v1/requirement-sets.

Paramètres

  • space_id (path)string (uuid)requis

    Identifiant de l'espace (id rendu par GET /api/v1/spaces, space_id d'un projet).

  • Idempotency-Key (header)string

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

Corps de la requêteSpaceRequirementSet

  • requirement_set_idstring (uuid)requis

Réponses

  • 200Le jeu, rangé dans l'espace.RequirementSet
  • 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/spaces/$SPACE_ID/requirement-sets" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f"
}'
Exemple (200)
{
  "id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "name": "Exigences BIM LNPCA v3",
  "format": "IDS",
  "scope": "SPACE",
  "scope_id": "bd52f342-c3ec-43f8-a3d0-90a7a7c0c269",
  "latest_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "specification_count": 8,
  "created_at": "2026-02-10T14:00:00Z",
  "updated_at": "2026-11-12T09:00:00Z"
}

Lister les jeux d'exigences IDS

get/api/v1/requirement-sets

Scope requis : ids:read

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)

    Jeux liés à ce projet seulement ; projet inconnu ou d'une autre organisation, 404.

  • space_id (query)string (uuid)

    Jeux rangés dans cet espace seulement (les jeux de portée organisation, visibles partout, n'y sont pas répétés) ; espace inconnu ou d'une autre organisation, 404.

Réponses

  • 200Une page de jeux d'exigences.Page & object

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

curl -sS "$SEVEUP_API/api/v1/requirement-sets" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "data": [
    {
      "id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
      "name": "Exigences BIM LNPCA v3",
      "format": "IDS",
      "scope": "PROJECT",
      "scope_id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
      "latest_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
      "specification_count": 8,
      "created_at": "2026-02-10T14:00:00Z",
      "updated_at": "2026-09-30T11:20:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Créer un jeu d'exigences depuis un fichier IDS déposé

post/api/v1/requirement-sets

Scope requis : ids:write

Portée du jeu : le projet project_id (et lié à lui), l'espace space_id, ou l'organisation sans l'un ni l'autre (le créateur de la clé doit alors être administrateur de l'organisation). project_id et space_id ensemble : 400. Projet ou espace inconnu ou d'une autre organisation : 404.

Paramètres

  • Idempotency-Key (header)string

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

Corps de la requêteRequirementSetCreate

  • namestringrequis

  • upload_idstring (uuid)requis

    Dépôt clos (purpose: ids), fichier .ids ou .xlsx.

  • project_idstring (uuid)

    Lie le jeu à ce projet ; sinon portée organisation.

  • space_idstring (uuid)

    Range le jeu dans cet espace (portée espace) ; exclusif de project_id.

Réponses

  • 201Jeu créé.RequirementSet
  • 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/requirement-sets" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Exigences BIM LNPCA v3",
  "upload_id": "8b2d3f4a-5c6e-4f7a-9b0c-1d2e3f4a5b6c",
  "project_id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10"
}'
Exemple (201)
{
  "id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "name": "Exigences BIM LNPCA v3",
  "format": "IDS",
  "scope": "PROJECT",
  "scope_id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
  "latest_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "specification_count": 8,
  "created_at": "2026-10-21T08:00:00Z",
  "updated_at": "2026-10-21T08:00:00Z"
}

Lire un jeu d'exigences

get/api/v1/requirement-sets/{requirement_set_id}

Scope requis : ids:read

Paramètres

  • requirement_set_id (path)string (uuid)requis

    Identifiant du jeu d'exigences (id rendu par GET /api/v1/requirement-sets).

Réponses

  • 200Le jeu d'exigences.RequirementSet

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

curl -sS "$SEVEUP_API/api/v1/requirement-sets/$REQUIREMENT_SET_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "name": "Exigences BIM LNPCA v3",
  "format": "IDS",
  "scope": "PROJECT",
  "scope_id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
  "latest_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "specification_count": 8,
  "created_at": "2026-02-10T14:00:00Z",
  "updated_at": "2026-09-30T11:20:00Z"
}

Supprimer un jeu d'exigences

delete/api/v1/requirement-sets/{requirement_set_id}

Scope requis : ids:write

Définitif, comme la suppression dans l'App : le jeu, toutes ses versions, ses liens aux projets et maquettes et tous les résultats IDS obtenus avec lui sont effacés, sans restauration possible. Exige confirm=true. Refusé (409) tant qu'un contrôle de ce jeu est en cours.

Paramètres

  • requirement_set_id (path)string (uuid)requis

    Identifiant du jeu d'exigences (id rendu par GET /api/v1/requirement-sets).

  • confirm (query)stringrequis

    true : confirme la suppression définitive.

Réponses

  • 204Jeu supprimé.
  • 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/requirement-sets/$REQUIREMENT_SET_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"

Lire ce que demande un jeu d'exigences

get/api/v1/requirement-sets/{requirement_set_id}/specifications

Scope requis : ids:read

Spécifications du fichier IDS, dans l'ordre du contrôle (index = position des résultats IDS) : applicabilité (quels objets sont visés) et exigences (propriétés, attributs, classifications, matériaux attendus, avec leur valeur ou leur contrainte). Ne demande ni maquette ni contrôle.

specifications_available faux : le fichier de cette version n'est pas un IDS lisible (data vide), à ne pas confondre avec un jeu sans spécification.

Paramètres

  • requirement_set_id (path)string (uuid)requis

    Identifiant du jeu d'exigences (id rendu par GET /api/v1/requirement-sets).

  • requirement_set_revision_id (query)string (uuid)

    Version du jeu (requirement_set_revision_id d'un résultat IDS) ; la plus récente par défaut.

  • 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 spécifications.RequirementSetSpecifications

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

curl -sS "$SEVEUP_API/api/v1/requirement-sets/$REQUIREMENT_SET_ID/specifications" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Exemple (200)
{
  "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "requirement_set_revision_id": "3d4e5f6a-7b8c-4d9e-8f1a-2b3c4d5e6f70",
  "version": 3,
  "name": "Exigences BIM LNPCA v3",
  "format": "IDS",
  "specifications_available": true,
  "specification_count": 8,
  "data": [
    {
      "index": 0,
      "name": "Murs - résistance au feu",
      "description": "Chaque mur porte sa résistance au feu.",
      "instructions": null,
      "identifier": "EX-012",
      "cardinality": "required",
      "applicability": [
        {
          "type": "ENTITY",
          "entity": "IFCWALL"
        }
      ],
      "requirements": [
        {
          "type": "PROPERTY",
          "cardinality": "required",
          "property_set": "Pset_WallCommon",
          "name": "FireRating",
          "value": "one of REI30 | REI60 | REI120",
          "data_type": "IFCLABEL"
        }
      ]
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Contrôler une révision avec un jeu d'exigences

post/api/v1/ids-checks

Scope requis : ids:write

Lance le contrôle (ou le relance si la paire a déjà un résultat). Si le jeu n'est rattaché ni à la maquette ni à un projet qui la contient, il est rattaché à la maquette, comme depuis l'application : ses autres révisions seront contrôlées aussi. Le jeu contrôlé est la version épinglée par le rattachement, sinon la dernière. Le résultat se lit ensuite dans GET /api/v1/revisions/{revision_id}/ids-results. Compte dans le quota mensuel de contrôles du plan. 400 si la révision ou le jeu est inconnu dans l'organisation, 409 si le jeu n'a aucune révision ou si la conversion de la révision a échoué.

Paramètres

  • Idempotency-Key (header)string

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

Corps de la requêteIdsCheckCreate

  • revision_idstring (uuid)requis

  • requirement_set_idstring (uuid)requis

Réponses

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

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

curl -sS -X POST "$SEVEUP_API/api/v1/ids-checks" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
  "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f"
}'
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
}