Développeurs

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

Scope requis : 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.

Paramètres

  • Idempotency-Key (header)string

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

Corps de la requêteUploadCreate

  • file_namestringrequis

  • size_bytesintegerrequis

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

  • purposestringrequis

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

    Valeurs : model · ids

Réponses

  • 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

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

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

Scope requis : 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.

Paramètres

  • upload_id (path)string (uuid)requis

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

  • Idempotency-Key (header)string

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

Corps de la requête

  • md5_hexstring

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

Réponses

  • 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

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

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