Developers

SeveUp API

Projets, maquettes IFC, révisions, contrôles IDS et exports de SeveUp App.

The API is live at https://api.seve-up.app. The OpenAPI contract below is authoritative. The reference text comes from the contract and is written in French.

API publique de SeveUp App, réservée aux plans PRO, BUSINESS, ENTREPRISE et CUSTOM (TRIAL : lecture seule).

Authentification. Une clé d'organisation sk_…, créée dans la console d'organisation (section « Clés d'API »), envoyée en Authorization: Bearer sk_…. Chaque clé porte des scopes ; une route sans le scope requis répond 403 avec code: SCOPE_MISSING. Aucun secret n'est accepté dans une URL.

Erreurs. Toujours application/problem+json (RFC 9457). Le champ code est stable : le programme s'appuie dessus, jamais sur title ou detail. Le type s'en déduit (SCOPE_MISSING donne https://seve-up.com/problems/scope-missing). Une requête invalide (VALIDATION) détaille chaque champ fautif dans errors. Un identifiant inconnu, mal formé ou d'une autre organisation répond 404 NOT_FOUND.

Pagination. Par curseur opaque : ?limit= (1 à 200, 50 par défaut) et ?cursor= (valeur de next_cursor de la page précédente). Fin de liste : has_more: false et next_cursor: null.

Plans. L'API est ouverte aux plans PRO, BUSINESS, ENTREPRISE et CUSTOM. Le plan d'essai (TRIAL) l'ouvre en lecture seule : toute écriture répond 403 PLAN_READ_ONLY. Les autres plans répondent 403 PLAN_REQUIRED. Un plan payant arrivé à échéance reste lisible ; ses écritures répondent PLAN_READ_ONLY.

Débit. Chaque réponse porte RateLimit-Policy et RateLimit (draft-ietf-httpapi-ratelimit-headers), par clé et par fenêtre d'une minute : 60 requêtes en essai, 600 en PRO, 1 200 en BUSINESS, 3 000 en ENTREPRISE et CUSTOM. Au-delà : 429 RATE_LIMITED avec Retry-After en secondes.

Quotas. Par organisation et par mois calendaire (UTC) : appels, versions déposées, volume déposé, contrôles IDS. Un quota atteint répond 429 QUOTA_EXCEEDED, avec Retry-After jusqu'au 1er du mois suivant. Un quota se consomme avant le lancement du traitement : une requête refusée ne compte pas. Si la vérification est momentanément impossible, l'appel répond 503 BUSY plutôt que de passer sans être compté.

Capacité. Les opérations marquées x-heavy (dépôt, conversion, contrôle IDS, export, synthèses) partagent un nombre limité de places ; une organisation a au plus un nombre fixé de traitements actifs (3 en PRO, 5 en BUSINESS, 10 en ENTREPRISE et CUSTOM). Place indisponible : 503 BUSY avec Retry-After. Trop de traitements en cours : 429 QUOTA_EXCEEDED avec Retry-After.

Idempotence. Tout POST accepte Idempotency-Key (1 à 200 caractères, gardée 24 h par organisation). Rejouer la même clé avec le même corps renvoie la réponse d'origine et Idempotent-Replayed: true ; avec un autre corps, 409 IDEMPOTENCY_KEY_REUSED.

Traitements longs. Conversion d'une maquette, contrôle IDS et export répondent 202 avec une ressource Job ; suivre GET /api/v1/jobs/{job_id} ou s'abonner aux webhooks.

Types. Les nombres et booléens sont de vrais types JSON. Les dates sont en RFC 3339 (UTC).

Servers

  • https://api.seve-up.appProduction

Getting started

From the key to an IDS check result, in seven calls. Examples use curl and jq; every request carries Authorization: Bearer followed by the key.

  1. 1.Create a key

    In SeveUp App, organisation console, "API keys" section (administrators only): "Public API key", tick the scopes you need (projects:read, models:read, models:write, ids:read, ids:write). The sk_… secret is shown once. The same section shows API usage: calls, monthly quotas and errors.

    Shell
    export SEVEUP_API=https://api.seve-up.app
    export SEVEUP_KEY=sk_…   # organisation key
  2. 2.List projects

    Cursor-paginated response: data, has_more, next_cursor.

    Shell
    curl -s "$SEVEUP_API/api/v1/projects" -H "Authorization: Bearer $SEVEUP_KEY" | jq '.data[] | {id, name}'
  3. 3.Open an upload

    The file does not go through the API: the response gives a TUS upload address and its headers, valid for 2 h. Idempotency-Key lets you replay the call without creating a second upload.

    Shell
    FILE=model.ifc
    SIZE=$(wc -c < "$FILE")
    curl -s -X POST "$SEVEUP_API/api/v1/uploads" \
      -H "Authorization: Bearer $SEVEUP_KEY" -H "Content-Type: application/json" \
      -H "Idempotency-Key: upload-$(date +%s)" \
      -d "{\"file_name\": \"$FILE\", \"size_bytes\": $SIZE, \"purpose\": \"model\"}" > upload.json
    UPLOAD=$(jq -r .id upload.json)
  4. 4.Send the file

    TUS 1.0 protocol: create, then send the bytes. For a large file, use a TUS client (tus-js-client, tuspy…) that resumes after a cut, with 6 MB chunks. Then complete checks that the whole file arrived.

    Shell
    URL=$(jq -r .upload_url upload.json)
    AUTH=$(jq -r '.upload_headers.Authorization' upload.json)
    META=$(jq -r '.upload_headers["Upload-Metadata"]' upload.json)
    LOC=$(curl -s -i -X POST "$URL" -H "Authorization: $AUTH" -H "Tus-Resumable: 1.0.0" \
      -H "Upload-Metadata: $META" -H "Upload-Length: $SIZE" \
      | awk 'tolower($1)=="location:" {print $2}' | tr -d '\r')
    curl -s -X PATCH "$LOC" -H "Authorization: $AUTH" -H "Tus-Resumable: 1.0.0" \
      -H "Upload-Offset: 0" -H "Content-Type: application/offset+octet-stream" --data-binary @"$FILE"
    curl -s -X POST "$SEVEUP_API/api/v1/uploads/$UPLOAD/complete" \
      -H "Authorization: Bearer $SEVEUP_KEY" -H "Content-Type: application/json" -d '{}'
  5. 5.Create the model

    Conversion starts right away: 202 response with a job, and its address in Location. For a new version of an existing model: POST /api/v1/models/{model_id}/revisions.

    Shell
    PROJECT=…   # a project id from step 2
    curl -s -X POST "$SEVEUP_API/api/v1/projects/$PROJECT/models" \
      -H "Authorization: Bearer $SEVEUP_KEY" -H "Content-Type: application/json" \
      -d "{\"name\": \"My model\", \"upload_id\": \"$UPLOAD\"}" > job.json
    REVISION=$(jq -r .target.id job.json)
  6. 6.Follow the processing

    Statuses: QUEUED, PROCESSING, then COMPLETE or ERROR (with error.code). Instead of polling, a revision.processing.completed webhook can notify you.

    Shell
    JOB=$(jq -r .id job.json)
    until s=$(curl -s "$SEVEUP_API/api/v1/jobs/$JOB" -H "Authorization: Bearer $SEVEUP_KEY" | jq -r .status); \
      [ "$s" = COMPLETE ] || [ "$s" = ERROR ]; do sleep 20; done; echo "$s"
  7. 7.Check against an IDS and read the result

    Pick an existing requirement set, or upload an .ids (upload with purpose: ids, then POST /api/v1/requirement-sets). The check is a job like the others. In the result, a specification counts in the score when applicable is true.

    Shell
    SET=$(curl -s "$SEVEUP_API/api/v1/requirement-sets" -H "Authorization: Bearer $SEVEUP_KEY" | jq -r '.data[0].id')
    curl -s -X POST "$SEVEUP_API/api/v1/ids-checks" \
      -H "Authorization: Bearer $SEVEUP_KEY" -H "Content-Type: application/json" \
      -d "{\"revision_id\": \"$REVISION\", \"requirement_set_id\": \"$SET\"}"
    # … follow the job as in step 6, then:
    curl -s "$SEVEUP_API/api/v1/revisions/$REVISION/ids-results" -H "Authorization: Bearer $SEVEUP_KEY" \
      | jq '.data[] | {score_percent, specification_count_failed}'

Errors

Every error answers application/problem+json (RFC 9457): a stable code to test in your code, a readable title and, for an invalid request, the list of fields at fault. The list of codes may grow: handle an unknown code by its HTTP status. These responses apply to most operations; each operation only details its own.

  • 400Requête invalide.
  • 401Clé absente, inconnue, expirée ou révoquée.
  • 403Scope manquant (SCOPE_MISSING), plan sans accès à l'API (PLAN_REQUIRED), écriture refusée en plan TRIAL (PLAN_READ_ONLY) ou route non ouverte aux clés (API_KEY_ROUTE_FORBIDDEN).
  • 404Ressource inexistante ou appartenant à une autre organisation (jamais distingué).
  • 429Débit de la clé dépassé (RATE_LIMITED) ou quota mensuel du plan atteint (QUOTA_EXCEEDED).
  • 500Erreur inattendue du serveur, déjà journalisée de notre côté ; réessayer plus tard.
  • 503Capacité de traitement saturée pour l'instant ; réessayer après Retry-After.
Example error response
{
  "type": "https://seve-up.com/problems/validation",
  "title": "Bad Request",
  "status": 400,
  "code": "VALIDATION",
  "detail": "limit : doit être compris entre 1 et 200.",
  "instance": "/api/v1/projects",
  "errors": [
    {
      "field": "limit",
      "message": "doit être compris entre 1 et 200"
    }
  ]
}

Projets

Projets de l'organisation visibles par la clé.

Lister les projets

get/api/v1/projects

Required scope : projects:read

Parameters

  • 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 (contient, sans casse).

Responses

  • 200Une page de projets.Page & object

Common errors :400401403429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/projects" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "data": [
    {
      "id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
      "name": "LNPCA — Section 1",
      "description": "Ligne nouvelle Provence Côte d'Azur",
      "space_id": "0b8a2c47-5a0e-4a7e-8f0d-0c6d2b7e9c31",
      "model_count": 197,
      "requirement_set_count": 4,
      "start_date": "2026-01-05T00:00:00Z",
      "end_date": null,
      "created_at": "2026-01-05T09:12:44Z",
      "updated_at": "2026-10-20T16:02:10Z"
    }
  ],
  "next_cursor": "eyJpZCI6IjViMGYzYzNlIn0",
  "has_more": true
}

Lire un projet

get/api/v1/projects/{project_id}

Required scope : projects:read

Parameters

  • project_id (path)string (uuid)required

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

Responses

  • 200Le projet.Project

Common errors :401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/projects/$PROJECT_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "id": "5b0f3c3e-1d7a-4d0c-9a51-3f2b8f1e7a10",
  "name": "LNPCA — Section 1",
  "description": "Ligne nouvelle Provence Côte d'Azur",
  "space_id": "0b8a2c47-5a0e-4a7e-8f0d-0c6d2b7e9c31",
  "model_count": 197,
  "requirement_set_count": 4,
  "start_date": "2026-01-05T00:00:00Z",
  "end_date": null,
  "created_at": "2026-01-05T09:12:44Z",
  "updated_at": "2026-10-20T16:02:10Z"
}

Maquettes

Maquettes IFC et leurs révisions.

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

Fichiers

Dépôt de fichiers par URL signée, avant création d'une révision ou d'un jeu d'exigences.

Ouvrir un dépôt de fichier

post/api/v1/uploads

Required scope : models:writeids:write

Renvoie un point d'entrée TUS (reprise possible) et les en-têtes à joindre à chaque requête TUS (Authorization, Tus-Resumable, Upload-Metadata). Le jeton de dépôt est valable 2 h (expires_at) : au-delà, ouvrir un nouveau dépôt. Le fichier ne transite pas par l'API. Une fois le fichier envoyé, appeler complete. Taille maximale selon le plan : 413 au-delà. Avec purpose: model, la clé doit porter models:write ; avec purpose: ids, ids:write. Extensions : .ifc pour une maquette, .ids ou .xlsx pour un jeu d'exigences.

Parameters

  • Idempotency-Key (header)string

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

Request bodyUploadCreate

  • file_namestringrequired

  • size_bytesintegerrequired

    Taille du fichier en octets. Au-delà de la limite du plan (3 Gio au plus), réponse 413.

  • purposestringrequired

    model pour une maquette IFC, ids pour un jeu d'exigences.

    Values : model · ids

Responses

  • 201Dépôt ouvert.Upload
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem
  • 413Fichier plus gros que la limite du plan.Problem

Common errors :400401403429500503(details in the Errors section)

curl -sS -X POST "$SEVEUP_API/api/v1/uploads" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
  "size_bytes": 184467200,
  "purpose": "model"
}'
Example (201)
{
  "id": "7a1c2e3f-4b5d-4e6f-8a9b-0c1d2e3f4a5b",
  "status": "PENDING",
  "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
  "size_bytes": 184467200,
  "purpose": "model",
  "upload_url": "https://ooddxuvlammhnltcfqpm.supabase.co/storage/v1/upload/resumable",
  "upload_headers": {
    "Authorization": "Bearer eyJhbGciOi…",
    "Tus-Resumable": "1.0.0",
    "Upload-Metadata": "bucketName YXR0YWNobWVudHM=,objectName …"
  },
  "expires_at": "2026-10-21T10:00:00Z"
}

Clore un dépôt de fichier

post/api/v1/uploads/{upload_id}/complete

Required scope : models:writeids:write

Vérifie que le fichier est arrivé en entier (taille annoncée). L'empreinte MD5 fournie est conservée avec le fichier ; elle n'est pas recalculée. 409 si le fichier n'est pas encore complet ou si le dépôt a expiré. Rappeler complete sur un dépôt déjà clos renvoie le même résultat.

Parameters

  • upload_id (path)string (uuid)required

    Identifiant du dépôt rendu par POST /api/v1/uploads.

  • Idempotency-Key (header)string

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

Request body

  • md5_hexstring

    Empreinte MD5 du fichier envoyé, conservée avec lui (non recalculée).

Responses

  • 200Dépôt clos ; le fichier peut servir à une maquette ou un jeu d'exigences.Upload
  • 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/uploads/$UPLOAD_ID/complete" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "md5_hex": "9e107d9d372bb6826bd81d3542a419d6"
}'
Example (200)
{
  "id": "7a1c2e3f-4b5d-4e6f-8a9b-0c1d2e3f4a5b",
  "status": "COMPLETE",
  "file_name": "LNPCA-S1-OA-PONT-0042_C03.ifc",
  "size_bytes": 184467200,
  "purpose": "model",
  "upload_url": null,
  "upload_headers": null,
  "expires_at": "2026-10-21T10:00:00Z"
}

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

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

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

  • 200Les résultats.object

Common errors :401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/revisions/$REVISION_ID/ids-results" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "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
        }
      ]
    }
  ]
}

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

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

Required scope : ids:read

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

Parameters

  • project_id (path)string (uuid)required

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

Responses

  • 200La synthèse.IdsSummary

Common errors :401403404429500503(details in the Errors section)

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

Lister les jeux d'exigences IDS

get/api/v1/requirement-sets

Required scope : ids:read

Parameters

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

Responses

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

Common errors :400401403404429500503(details in the Errors section)

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

Required scope : ids:write

Parameters

  • Idempotency-Key (header)string

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

Request bodyRequirementSetCreate

  • namestringrequired

  • upload_idstring (uuid)required

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

  • project_idstring (uuid)

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

Responses

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

Common errors :400401403429500503(details in the Errors section)

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

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

post/api/v1/ids-checks

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

Parameters

  • Idempotency-Key (header)string

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

Request bodyIdsCheckCreate

  • revision_idstring (uuid)required

  • requirement_set_idstring (uuid)required

Responses

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

Common errors :400401403429500503(details in the Errors section)

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

Exports

Export des données d'une révision.

Exporter les données d'une révision

post/api/v1/revisions/{revision_id}/exports

Required scope : exports:read

Prépare une archive zip, un fichier par table (CSV par défaut, ou JSON avec format: json). Le jeu de données de la révision doit être terminé (409 sinon). Quand le job est COMPLETE, son result donne une URL de téléchargement signée valable une heure, renouvelée à chaque lecture du job ; l'archive est gardée 48 h. Une table en échec est absente de l'archive et nommée dans error (code EXPORT_PARTIAL).

Parameters

  • revision_id (path)string (uuid)required

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

  • Idempotency-Key (header)string

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

Request bodyExportCreate

  • tablesstring[]

    Tables à inclure ; toutes par défaut.

  • formatstring

    Format des fichiers de l'archive.

    Values : csv · json

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/revisions/$REVISION_ID/exports" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "tables": [
    "assets",
    "properties",
    "qto"
  ]
}'
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
}

Jobs

Suivi des traitements longs.

Suivre un traitement long

get/api/v1/jobs/{job_id}

Required scope : models:readids:readexports:read

Un job de conversion a pour identifiant celui de la révision ; son statut couvre conversion, jeu de données et scène. Scope exigé selon le type : models:read (conversion), ids:read (contrôle IDS), exports:read (export). Codes d'error : PROCESSING_FAILED, IDS_CHECK_FAILED, EXPORT_FAILED, EXPORT_EXPIRED, EXPORT_UNAVAILABLE, et EXPORT_PARTIAL sur un export COMPLETE dont des tables manquent.

Parameters

  • job_id (path)string (uuid)required

    Identifiant du job, rendu par toute opération qui répond 202 (aussi dans l'en-tête Location).

Responses

  • 200Le job.Job

Common errors :401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/jobs/$JOB_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "id": "1f2e3d4c-5b6a-4978-8a1b-2c3d4e5f6a7b",
  "type": "export",
  "status": "COMPLETE",
  "percent_complete": 100,
  "eta_seconds": null,
  "target": {
    "type": "revision",
    "id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b"
  },
  "result": {
    "download_url": "https://ooddxuvlammhnltcfqpm.supabase.co/storage/v1/object/sign/exports/dataset-4f6a1b2c.zip?token=eyJhbGciOi",
    "download_expires_at": "2026-10-21T09:00:00Z",
    "size_bytes": 52428800
  },
  "error": null,
  "created_at": "2026-10-21T07:58:00Z",
  "started_at": "2026-10-21T07:58:02Z",
  "completed_at": "2026-10-21T07:59:40Z"
}

Webhooks

Abonnements aux événements de l'organisation.

Lister les abonnements webhook

get/api/v1/webhooks

Required scope : webhooks:manage

Parameters

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

Responses

  • 200Une page d'abonnements.Page & object

Common errors :400401403429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/webhooks" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "data": [
    {
      "id": "6e7f8a9b-0c1d-4e2f-8a3b-4c5d6e7f8a9b",
      "name": "ERP chantier",
      "url": "https://erp.example.com/hooks/seveup",
      "events": [
        "revision.processing.completed",
        "ids_check.completed"
      ],
      "active": true,
      "last_delivered_at": "2026-10-20T18:00:00Z",
      "last_status": 200,
      "created_at": "2026-09-01T10:00:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Créer un abonnement webhook

post/api/v1/webhooks

Required scope : webhooks:manage

Le secret de signature n'est rendu qu'ici, une seule fois.

Parameters

  • Idempotency-Key (header)string

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

Request bodyWebhookCreate

  • namestringrequired

  • urlstring (uri)required

    HTTPS uniquement, 2000 caractères au plus.

  • eventsWebhookEventType[]required

Responses

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

Common errors :400401403429500503(details in the Errors section)

curl -sS -X POST "$SEVEUP_API/api/v1/webhooks" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "ERP chantier",
  "url": "https://erp.example.com/hooks/seveup",
  "events": [
    "revision.processing.completed",
    "ids_check.completed"
  ]
}'
Example (201)
{
  "id": "6e7f8a9b-0c1d-4e2f-8a3b-4c5d6e7f8a9b",
  "name": "ERP chantier",
  "url": "https://erp.example.com/hooks/seveup",
  "events": [
    "revision.processing.completed",
    "ids_check.completed"
  ],
  "active": true,
  "last_delivered_at": null,
  "last_status": null,
  "created_at": "2026-10-21T08:00:00Z",
  "secret": "whsec_<montré une seule fois>"
}

Supprimer un abonnement webhook

delete/api/v1/webhooks/{webhook_id}

Required scope : webhooks:manage

Parameters

  • webhook_id (path)string (uuid)required

    Identifiant de l'abonnement webhook.

Responses

  • 204Abonnement supprimé, avec son journal ; les livraisons en attente ne partent plus.

Common errors :401403404429500503(details in the Errors section)

curl -sS -X DELETE "$SEVEUP_API/api/v1/webhooks/$WEBHOOK_ID" \
  -H "Authorization: Bearer $SEVEUP_KEY"

Journal de livraison d'un abonnement

get/api/v1/webhooks/{webhook_id}/deliveries

Required scope : webhooks:manage

Les livraisons des 30 derniers jours, les plus récentes d'abord.

Parameters

  • webhook_id (path)string (uuid)required

    Identifiant de l'abonnement webhook.

  • limit (query)integer

    Taille de page.

  • cursor (query)string

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

Responses

  • 200Une page de livraisons.Page & object

Common errors :400401403404429500503(details in the Errors section)

curl -sS "$SEVEUP_API/api/v1/webhooks/$WEBHOOK_ID/deliveries" \
  -H "Authorization: Bearer $SEVEUP_KEY"
Example (200)
{
  "data": [
    {
      "id": "0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
      "event": "ids_check.completed",
      "status": "delivered",
      "attempts": 1,
      "response_code": 200,
      "error": null,
      "created_at": "2026-10-21T09:02:11Z",
      "delivered_at": "2026-10-21T09:02:12Z",
      "next_attempt_at": null
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Rejouer une livraison

post/api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retry

Required scope : webhooks:manage

Remet la livraison en file, avec le même webhook-id : un destinataire qui l'avait déjà traitée la reconnaît. Une livraison encore en attente est rendue telle quelle. 409 si l'abonnement est désactivé ou si le corps de l'événement n'est plus conservé.

Parameters

  • webhook_id (path)string (uuid)required

    Identifiant de l'abonnement webhook.

  • delivery_id (path)string (uuid)required

    Identifiant de la livraison, lu dans le journal de livraison de l'abonnement.

  • Idempotency-Key (header)string

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

Responses

  • 202Livraison remise en file.WebhookDelivery
  • 409Idempotency-Key déjà utilisée avec un autre corps, ou état incompatible.Problem

Common errors :401403404429500503(details in the Errors section)

curl -sS -X POST "$SEVEUP_API/api/v1/webhooks/$WEBHOOK_ID/deliveries/$DELIVERY_ID/retry" \
  -H "Authorization: Bearer $SEVEUP_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Example (202)
{
  "id": "0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
  "event": "ids_check.completed",
  "status": "pending",
  "attempts": 0,
  "response_code": 401,
  "error": "HTTP 401",
  "created_at": "2026-10-21T09:02:11Z",
  "delivered_at": null,
  "next_attempt_at": "2026-10-22T07:20:00Z"
}

Webhook events

Events sent as POST to a subscription URL.

revision.processing.completed

Une révision est entièrement traitée

Livraison au format Standard Webhooks : en-têtes webhook-id (stable entre les essais), webhook-timestamp (secondes Unix) et webhook-signature (v1,<base64 HMAC-SHA256(clé, id.timestamp.corps)>, la clé étant le secret whsec_ décodé du base64). Les bibliothèques Standard Webhooks vérifient tout cela. Refuser un horodatage de plus de 5 minutes. Répondre 2xx en moins de 10 s ; sinon nouvel essai à délai croissant (1 min, 5 min, 30 min, 2 h), 5 essais en tout. Un 4xx autre que 408 et 429 arrête les essais ; une redirection n'est jamais suivie. job_id, quand il est présent, est celui que GET /api/v1/jobs/{job_id} suit.

Example
{
  "type": "revision.processing.completed",
  "timestamp": "2026-10-18T08:55:00Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
    "job_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "status": "COMPLETE"
  }
}

revision.processing.failed

Le traitement d'une révision a échoué

Envoyé quand une étape passe en ERROR, comme le montre GET /api/v1/revisions/{revision_id}. Une relance automatique qui réussit ensuite donne revision.processing.completed.

Example
{
  "type": "revision.processing.failed",
  "timestamp": "2026-10-18T08:55:00Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
    "job_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "status": "ERROR",
    "error_message": "Fichier IFC illisible"
  }
}

ids_check.completed

Un contrôle IDS est terminé

Example
{
  "type": "ids_check.completed",
  "timestamp": "2026-10-18T09:02:11Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
    "requirement_revision_id": "3d4e5f6a-7b8c-4d9e-8f0a-1b2c3d4e5f6a",
    "job_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
    "status": "COMPLETE",
    "score_percent": 87.5
  }
}

ids_check.failed

Un contrôle IDS a échoué

Example
{
  "type": "ids_check.failed",
  "timestamp": "2026-10-18T09:02:11Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
    "requirement_revision_id": "3d4e5f6a-7b8c-4d9e-8f0a-1b2c3d4e5f6a",
    "status": "ERROR",
    "error_message": "Le contrôle n'a pas produit de résultat dans le délai"
  }
}

export.ready

Un export est prêt à télécharger

Example
{
  "type": "export.ready",
  "timestamp": "2026-10-21T07:59:40Z",
  "data": {
    "job_id": "1f2e3d4c-5b6a-4978-8a1b-2c3d4e5f6a7b",
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b"
  }
}

Schemas

Problem object

Erreur RFC 9457.

  • typestring (uri)required

  • titlestringrequired

  • statusintegerrequired

  • codestringrequired

    Code stable, en majuscules. Liste ouverte : un nouveau code peut apparaître dans la v1 ; traiter un code inconnu d'après le statut HTTP.

    Values : VALIDATION · UNAUTHORIZED · INVALID_API_KEY · SCOPE_MISSING · API_KEY_ROUTE_FORBIDDEN · PLAN_REQUIRED · PLAN_READ_ONLY · NOT_FOUND · IDEMPOTENCY_KEY_REUSED · CONFLICT · FILE_TOO_LARGE · RATE_LIMITED · QUOTA_EXCEEDED · BUSY · INTERNAL_ERROR · GONE

  • detailstring

  • instancestring

  • errorsobject[]

    Détail par champ, pour VALIDATION.

Page object

  • dataany[]required

  • next_cursorstring | nullrequired

    À passer en cursor pour la page suivante ; nul en fin de liste.

  • has_morebooleanrequired

ProcessingStatus string

STANDBY en attente d'un déclencheur, READY_FOR_PROCESSING prêt, QUEUED en file, PROCESSING en cours, COMPLETE terminé, ERROR en échec.

Values : STANDBY · READY_FOR_PROCESSING · QUEUED · PROCESSING · COMPLETE · ERROR

Project object

  • idstring (uuid)required

  • namestringrequired

  • descriptionstring | null

  • space_idstring (uuid) | null

    Espace (regroupement de projets) qui contient le projet.

  • model_countinteger

  • requirement_set_countinteger

  • start_datestring (date-time) | null

  • end_datestring (date-time) | null

  • created_atstring (date-time)required

  • updated_atstring (date-time)required

Model object

  • idstring (uuid)required

  • namestringrequired

  • formatstringrequired

    Values : IFC · REVIT

  • revision_countintegerrequired

  • latest_revision_idstring (uuid) | null

  • created_atstring (date-time)required

  • updated_atstring (date-time)required

ModelCreate object

  • namestringrequired

  • upload_idstring (uuid)required

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

StepStatus object

  • statusProcessingStatusrequired

  • percent_completenumber | null

  • eta_secondsnumber | null

  • error_messagestring | null

Revision object

  • idstring (uuid)required

  • model_idstring (uuid)required

  • versionintegerrequired

  • milestonestring | null

    Jalon (APS, APD, PRO, EXE…).

  • file_namestring | null

  • size_bytesinteger | null

  • ifc_schemastring | null

    Ex. IFC2X3, IFC4, IFC4X3_ADD2.

  • authoring_softwarestring | null

  • statusProcessingStatusrequired

    État global, le moins avancé des étapes.

  • processingobjectrequired

  • object_countinteger | null

    Nombre d'objets du jeu de données ; nul tant que dataset n'est pas COMPLETE.

  • created_atstring (date-time)required

RevisionCreate object

  • upload_idstring (uuid)required

  • milestonestring

IdsSpecificationResult object

  • indexintegerrequired

  • namestringrequired

  • statusstringrequired

    NA : sans objet pour cette maquette, non compté dans le score.

    Values : PASS · PARTIAL · FAIL · NA · MISMATCH

  • applicablebooleanrequired

    Compté dans le score. Seul critère d'applicabilité, jamais entity_count_applicable > 0.

  • score_percentnumber | null

  • entity_count_applicableinteger

  • entity_count_validinteger

  • entity_count_invalidinteger

IdsResult object

  • requirement_set_idstring (uuid)required

  • requirement_set_revision_idstring (uuid)required

  • statusProcessingStatusrequired

  • score_percentnumber | null

  • specification_countinteger | null

  • specification_count_applicableinteger | null

  • specification_count_failedinteger | null

  • completed_atstring (date-time) | null

  • specificationsIdsSpecificationResult[]

    Vide tant que status n'est pas COMPLETE.

IdsSummary object

  • project_idstring (uuid)required

  • model_countintegerrequired

  • model_count_checkedinteger

  • model_count_in_progressinteger

  • model_count_errorinteger

  • score_percentnumber | null

    Moyenne des maquettes contrôlées ; nul si aucune.

  • by_requirement_setobject[]

  • computed_atstring (date-time)required

RequirementSet object

  • idstring (uuid)required

  • namestringrequired

  • formatstringrequired

    Values : IDS · SEVEUP

  • scopestringrequired

    Portée du jeu (organisation, espace ou projet).

    Values : ORGANIZATION · SPACE · PROJECT

  • scope_idstring (uuid) | null

  • latest_revision_idstring (uuid) | null

  • specification_countinteger | null

  • created_atstring (date-time)required

  • updated_atstring (date-time)required

RequirementSetCreate object

  • namestringrequired

  • upload_idstring (uuid)required

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

  • project_idstring (uuid)

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

IdsCheckCreate object

  • revision_idstring (uuid)required

  • requirement_set_idstring (uuid)required

ExportCreate object

  • tablesstring[]

    Tables à inclure ; toutes par défaut.

  • formatstring

    Format des fichiers de l'archive.

    Values : csv · json

UploadCreate object

  • file_namestringrequired

  • size_bytesintegerrequired

    Taille du fichier en octets. Au-delà de la limite du plan (3 Gio au plus), réponse 413.

  • purposestringrequired

    model pour une maquette IFC, ids pour un jeu d'exigences.

    Values : model · ids

Upload object

  • idstring (uuid)required

  • statusstringrequired

    Values : PENDING · COMPLETE

  • file_namestringrequired

  • size_bytesintegerrequired

  • purposestringrequired

    Values : model · ids

  • upload_urlstring (uri) | null

    Point d'entrée TUS ; nul une fois le dépôt clos.

  • upload_headersobject | null

    En-têtes à joindre aux requêtes TUS.

  • expires_atstring (date-time)required

Job object

  • idstring (uuid)required

  • typestringrequired

    Values : conversion · ids_check · export

  • statusProcessingStatusrequired

  • percent_completenumber | null

  • eta_secondsnumber | null

  • targetobjectrequired

  • resultobject | null

    Export : URL signée et taille. Conversion et contrôle IDS : nul, lire la révision ou ses résultats IDS.

  • errorobject | null

  • created_atstring (date-time)required

  • started_atstring (date-time) | null

  • completed_atstring (date-time) | null

WebhookEventType string

Values : revision.processing.completed · revision.processing.failed · ids_check.completed · ids_check.failed · export.ready

Webhook object

  • idstring (uuid)required

  • namestringrequired

  • urlstring (uri)required

  • eventsWebhookEventType[]required

  • activebooleanrequired

  • last_delivered_atstring (date-time) | null

  • last_statusinteger | null

  • created_atstring (date-time)required

WebhookCreate object

  • namestringrequired

  • urlstring (uri)required

    HTTPS uniquement, 2000 caractères au plus.

  • eventsWebhookEventType[]required

WebhookDelivery object

  • idstring (uuid)required

    Valeur de l'en-tête webhook-id.

  • eventstringrequired

  • statusstringrequired

    pending en file ou en attente d'un nouvel essai ; delivered reçu en 2xx ; failed refusé par le destinataire (4xx) ; abandoned essais épuisés ou abonnement supprimé ; refused URL non publique.

    Values : pending · delivered · failed · abandoned · refused

  • attemptsintegerrequired

  • response_codeinteger | null

  • errorstring | null

  • created_atstring (date-time)required

  • delivered_atstring (date-time) | null

  • next_attempt_atstring (date-time) | null

WebhookEvent object

  • typeWebhookEventTyperequired

  • timestampstring (date-time)required

  • dataobjectrequired

Versioning and deprecation

  • The major version is in the path: /api/v1. Within a version, only compatible changes are released: new operations, new response fields, new optional parameters. Your code must ignore fields it does not know and handle an unknown error code by its HTTP status: the list of codes may grow.

  • An incompatible change (removed or renamed field, changed type, parameter made required) goes into a new version, /api/v2. The previous version stays available for at least 12 months after the next one ships.

  • In v1, a field is never removed. An operation due to disappear is announced at least 6 months before removal: changelog entry (also as an Atom feed), e-mail to administrators of organisations whose key called it in the last 90 days, 6 months then 1 month before removal, and Deprecation (RFC 9745), Sunset (RFC 8594) and Link (rel="deprecation", to the changelog) headers on its responses. It works normally until the removal date, then answers 410 with the code GONE.

  • Only exception: a security fix may apply without notice. It is then described in the changelog the same day.

Changelog

JSON versionAtom feedThis page as Markdown (for AI agents)

  1. · v1.3.0

    New documented error status: GET /api/v1/requirement-sets.

    1 change(s) in detail
    • GET /api/v1/requirement-setsNew documented error status `404`
  2. · v1.2.0

    Error codes: the `code` list becomes open (`x-extensible-enum`); handle an unknown code by its HTTP status. New `GONE` code and `410` response for an operation removed at its `x-sunset` date, announced at least 6 months before with `Deprecation` and `Sunset` headers.

    2 change(s) in detail
    • Open list of `code` error codes
    • New possible response value `GONE`
  3. · v1.1.0

    New documented response header (22 operations); Response header format specified (22 operations); New documented error status (22 operations); Response field format specified (22 operations).

    312 change(s) in detail
    • POST /api/v1/ids-checksNew documented response header `ratelimit`
    • POST /api/v1/ids-checksNew documented response header `ratelimit`
    • POST /api/v1/ids-checksNew documented response header `ratelimit-policy`
    • POST /api/v1/ids-checksNew documented response header `ratelimit-policy`
    • POST /api/v1/ids-checksResponse header format specified `retry-after`
    • POST /api/v1/ids-checksResponse header format specified `retry-after`
    • POST /api/v1/ids-checksNew documented error status `500`
    • POST /api/v1/ids-checksResponse field format specified `result/size_bytes`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • POST /api/v1/ids-checksResponse field format specified `status`
    • GET /api/v1/jobs/{job_id}New documented response header `ratelimit`
    • GET /api/v1/jobs/{job_id}New documented response header `ratelimit-policy`
    • GET /api/v1/jobs/{job_id}Response header format specified `retry-after`
    • GET /api/v1/jobs/{job_id}Response header format specified `retry-after`
    • GET /api/v1/jobs/{job_id}New documented error status `500`
    • GET /api/v1/jobs/{job_id}Response field format specified `result/size_bytes`
    • GET /api/v1/jobs/{job_id}Response field format specified `status`
    • GET /api/v1/jobs/{job_id}Response field format specified `status`
    • GET /api/v1/jobs/{job_id}Response field format specified `status`
    • GET /api/v1/jobs/{job_id}Response field format specified `status`
    • GET /api/v1/jobs/{job_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}New documented response header `ratelimit`
    • GET /api/v1/models/{model_id}New documented response header `ratelimit-policy`
    • GET /api/v1/models/{model_id}Response header format specified `retry-after`
    • GET /api/v1/models/{model_id}Response header format specified `retry-after`
    • GET /api/v1/models/{model_id}New documented error status `500`
    • GET /api/v1/models/{model_id}Response field format specified `revision_count`
    • GET /api/v1/models/{model_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}Response field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit`
    • GET /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit`
    • GET /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit-policy`
    • GET /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit-policy`
    • GET /api/v1/models/{model_id}/revisionsResponse header format specified `retry-after`
    • GET /api/v1/models/{model_id}/revisionsResponse header format specified `retry-after`
    • GET /api/v1/models/{model_id}/revisionsNew documented error status `500`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `data/items/object_count`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `data/items/size_bytes`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `data/items/version`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit-policy`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit-policy`
    • POST /api/v1/models/{model_id}/revisionsNew documented response header `ratelimit-policy`
    • POST /api/v1/models/{model_id}/revisionsResponse header format specified `retry-after`
    • POST /api/v1/models/{model_id}/revisionsResponse header format specified `retry-after`
    • POST /api/v1/models/{model_id}/revisionsNew documented error status `500`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `result/size_bytes`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • POST /api/v1/models/{model_id}/revisionsResponse field format specified `status`
    • GET /api/v1/projectsNew documented response header `ratelimit`
    • GET /api/v1/projectsNew documented response header `ratelimit-policy`
    • GET /api/v1/projectsResponse header format specified `retry-after`
    • GET /api/v1/projectsResponse header format specified `retry-after`
    • GET /api/v1/projectsNew documented error status `500`
    • GET /api/v1/projectsResponse field format specified `data/items/model_count`
    • GET /api/v1/projectsResponse field format specified `data/items/requirement_set_count`
    • GET /api/v1/projectsResponse field format specified `status`
    • GET /api/v1/projectsResponse field format specified `status`
    • GET /api/v1/projectsResponse field format specified `status`
    • GET /api/v1/projectsResponse field format specified `status`
    • GET /api/v1/projectsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}New documented response header `ratelimit`
    • GET /api/v1/projects/{project_id}New documented response header `ratelimit-policy`
    • GET /api/v1/projects/{project_id}Response header format specified `retry-after`
    • GET /api/v1/projects/{project_id}Response header format specified `retry-after`
    • GET /api/v1/projects/{project_id}New documented error status `500`
    • GET /api/v1/projects/{project_id}Response field format specified `model_count`
    • GET /api/v1/projects/{project_id}Response field format specified `requirement_set_count`
    • GET /api/v1/projects/{project_id}Response field format specified `status`
    • GET /api/v1/projects/{project_id}Response field format specified `status`
    • GET /api/v1/projects/{project_id}Response field format specified `status`
    • GET /api/v1/projects/{project_id}Response field format specified `status`
    • GET /api/v1/projects/{project_id}Response field format specified `status`
    • GET /api/v1/projects/{project_id}/ids-summaryNew documented response header `ratelimit`
    • GET /api/v1/projects/{project_id}/ids-summaryNew documented response header `ratelimit-policy`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse header format specified `retry-after`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse header format specified `retry-after`
    • GET /api/v1/projects/{project_id}/ids-summaryNew documented error status `500`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `by_requirement_set/items/model_count_checked`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `model_count`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `model_count_checked`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `model_count_error`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `model_count_in_progress`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/ids-summaryResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit`
    • GET /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit`
    • GET /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit-policy`
    • GET /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit-policy`
    • GET /api/v1/projects/{project_id}/modelsResponse header format specified `retry-after`
    • GET /api/v1/projects/{project_id}/modelsResponse header format specified `retry-after`
    • GET /api/v1/projects/{project_id}/modelsNew documented error status `500`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `data/items/revision_count`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit-policy`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit-policy`
    • POST /api/v1/projects/{project_id}/modelsNew documented response header `ratelimit-policy`
    • POST /api/v1/projects/{project_id}/modelsResponse header format specified `retry-after`
    • POST /api/v1/projects/{project_id}/modelsResponse header format specified `retry-after`
    • POST /api/v1/projects/{project_id}/modelsNew documented error status `500`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `result/size_bytes`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • POST /api/v1/projects/{project_id}/modelsResponse field format specified `status`
    • GET /api/v1/requirement-setsNew documented response header `ratelimit`
    • GET /api/v1/requirement-setsNew documented response header `ratelimit-policy`
    • GET /api/v1/requirement-setsResponse header format specified `retry-after`
    • GET /api/v1/requirement-setsResponse header format specified `retry-after`
    • GET /api/v1/requirement-setsNew documented error status `500`
    • GET /api/v1/requirement-setsResponse field format specified `data/items/specification_count`
    • GET /api/v1/requirement-setsResponse field format specified `status`
    • GET /api/v1/requirement-setsResponse field format specified `status`
    • GET /api/v1/requirement-setsResponse field format specified `status`
    • GET /api/v1/requirement-setsResponse field format specified `status`
    • GET /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsNew documented response header `ratelimit`
    • POST /api/v1/requirement-setsNew documented response header `ratelimit`
    • POST /api/v1/requirement-setsNew documented response header `ratelimit-policy`
    • POST /api/v1/requirement-setsNew documented response header `ratelimit-policy`
    • POST /api/v1/requirement-setsResponse header format specified `retry-after`
    • POST /api/v1/requirement-setsResponse header format specified `retry-after`
    • POST /api/v1/requirement-setsNew documented error status `500`
    • POST /api/v1/requirement-setsResponse field format specified `specification_count`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • POST /api/v1/requirement-setsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}New documented response header `ratelimit`
    • GET /api/v1/revisions/{revision_id}New documented response header `ratelimit-policy`
    • GET /api/v1/revisions/{revision_id}Response header format specified `retry-after`
    • GET /api/v1/revisions/{revision_id}Response header format specified `retry-after`
    • GET /api/v1/revisions/{revision_id}New documented error status `500`
    • GET /api/v1/revisions/{revision_id}Response field format specified `object_count`
    • GET /api/v1/revisions/{revision_id}Response field format specified `size_bytes`
    • GET /api/v1/revisions/{revision_id}Response field format specified `status`
    • GET /api/v1/revisions/{revision_id}Response field format specified `status`
    • GET /api/v1/revisions/{revision_id}Response field format specified `status`
    • GET /api/v1/revisions/{revision_id}Response field format specified `status`
    • GET /api/v1/revisions/{revision_id}Response field format specified `status`
    • GET /api/v1/revisions/{revision_id}Response field format specified `version`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit-policy`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit-policy`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented response header `ratelimit-policy`
    • POST /api/v1/revisions/{revision_id}/exportsResponse header format specified `retry-after`
    • POST /api/v1/revisions/{revision_id}/exportsResponse header format specified `retry-after`
    • POST /api/v1/revisions/{revision_id}/exportsNew documented error status `500`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `result/size_bytes`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • POST /api/v1/revisions/{revision_id}/exportsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}/ids-resultsNew documented response header `ratelimit`
    • GET /api/v1/revisions/{revision_id}/ids-resultsNew documented response header `ratelimit-policy`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse header format specified `retry-after`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse header format specified `retry-after`
    • GET /api/v1/revisions/{revision_id}/ids-resultsNew documented error status `500`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specification_count`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specification_count_applicable`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specification_count_failed`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specifications/items/entity_count_applicable`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specifications/items/entity_count_invalid`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specifications/items/entity_count_valid`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `data/items/specifications/items/index`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `status`
    • GET /api/v1/revisions/{revision_id}/ids-resultsResponse field format specified `status`
    • POST /api/v1/uploadsNew documented response header `ratelimit`
    • POST /api/v1/uploadsNew documented response header `ratelimit`
    • POST /api/v1/uploadsNew documented response header `ratelimit`
    • POST /api/v1/uploadsNew documented response header `ratelimit-policy`
    • POST /api/v1/uploadsNew documented response header `ratelimit-policy`
    • POST /api/v1/uploadsNew documented response header `ratelimit-policy`
    • POST /api/v1/uploadsResponse header format specified `retry-after`
    • POST /api/v1/uploadsResponse header format specified `retry-after`
    • POST /api/v1/uploadsNew documented error status `500`
    • POST /api/v1/uploadsResponse field format specified `size_bytes`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploadsResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit-policy`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit-policy`
    • POST /api/v1/uploads/{upload_id}/completeNew documented response header `ratelimit-policy`
    • POST /api/v1/uploads/{upload_id}/completeResponse header format specified `retry-after`
    • POST /api/v1/uploads/{upload_id}/completeResponse header format specified `retry-after`
    • POST /api/v1/uploads/{upload_id}/completeNew documented error status `500`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `size_bytes`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • POST /api/v1/uploads/{upload_id}/completeResponse field format specified `status`
    • GET /api/v1/webhooksNew documented response header `ratelimit`
    • GET /api/v1/webhooksNew documented response header `ratelimit-policy`
    • GET /api/v1/webhooksResponse header format specified `retry-after`
    • GET /api/v1/webhooksResponse header format specified `retry-after`
    • GET /api/v1/webhooksNew documented error status `500`
    • GET /api/v1/webhooksResponse field format specified `data/items/last_status`
    • GET /api/v1/webhooksResponse field format specified `status`
    • GET /api/v1/webhooksResponse field format specified `status`
    • GET /api/v1/webhooksResponse field format specified `status`
    • GET /api/v1/webhooksResponse field format specified `status`
    • GET /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksNew documented response header `ratelimit`
    • POST /api/v1/webhooksNew documented response header `ratelimit`
    • POST /api/v1/webhooksNew documented response header `ratelimit-policy`
    • POST /api/v1/webhooksNew documented response header `ratelimit-policy`
    • POST /api/v1/webhooksResponse header format specified `retry-after`
    • POST /api/v1/webhooksResponse header format specified `retry-after`
    • POST /api/v1/webhooksNew documented error status `500`
    • POST /api/v1/webhooksResponse field format specified `allOf[#/components/schemas/Webhook]/last_status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • POST /api/v1/webhooksResponse field format specified `status`
    • DELETE /api/v1/webhooks/{webhook_id}New documented response header `ratelimit`
    • DELETE /api/v1/webhooks/{webhook_id}New documented response header `ratelimit`
    • DELETE /api/v1/webhooks/{webhook_id}New documented response header `ratelimit-policy`
    • DELETE /api/v1/webhooks/{webhook_id}New documented response header `ratelimit-policy`
    • DELETE /api/v1/webhooks/{webhook_id}Response header format specified `retry-after`
    • DELETE /api/v1/webhooks/{webhook_id}Response header format specified `retry-after`
    • DELETE /api/v1/webhooks/{webhook_id}New documented error status `500`
    • DELETE /api/v1/webhooks/{webhook_id}Response field format specified `status`
    • DELETE /api/v1/webhooks/{webhook_id}Response field format specified `status`
    • DELETE /api/v1/webhooks/{webhook_id}Response field format specified `status`
    • DELETE /api/v1/webhooks/{webhook_id}Response field format specified `status`
    • DELETE /api/v1/webhooks/{webhook_id}Response field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesNew documented response header `ratelimit`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesNew documented response header `ratelimit`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesNew documented response header `ratelimit-policy`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesNew documented response header `ratelimit-policy`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse header format specified `retry-after`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse header format specified `retry-after`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesNew documented error status `500`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `data/items/attempts`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `data/items/response_code`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • GET /api/v1/webhooks/{webhook_id}/deliveriesResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryNew documented response header `ratelimit`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryNew documented response header `ratelimit`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryNew documented response header `ratelimit-policy`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryNew documented response header `ratelimit-policy`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse header format specified `retry-after`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse header format specified `retry-after`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryNew documented error status `500`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `attempts`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `response_code`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
    • POST /api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryResponse field format specified `status`
  4. · v1.0.1

    Official API address: https://api.seve-up.app. The https://seveup-gateway.onrender.com address still answers but is no longer part of the contract.

  5. · v1.0.0

    First public version: projects, models, revisions, file uploads (TUS), requirement sets, IDS checks, jobs, exports and webhooks (Standard Webhooks).