---
title: "Lister les suivis de chantier"
method: GET
path: "/projects"
tags: ["Projects"]
---

# Lister les suivis de chantier

`GET /projects`

## Request

- Base URL: `https://api.swipify.fr/api/v1`
- URL: `https://api.swipify.fr/api/v1/projects`
- Auth: API key in header `X-API-Key`

Suivis de chantier (un fil par chantier ou prestation, partagé avec le client) de l'organisation, paginés, du plus récemment actif au plus ancien. Lecture seule : ni création ni message par API, le fil est une conversation avec le client. Scope requis : `projects:read`.

## Query parameters

- `page` integer
- `pageSize` integer
- `status` 'active' | 'completed' | 'archived'
- `clientId` integer
- `sortOrder` 'asc' | 'desc'

## Response `200`

Liste paginée de suivis de chantier

- object
  - `data` Project[]
    - `id` integer
    - `title` string
    - `status` 'active' | 'completed' | 'archived'
    - `address` string, nullable: Adresse du chantier
    - `startDate` string, date-time, nullable
    - `endDate` string, date-time, nullable: Fin prévue
    - `completedAt` string, date-time, nullable: Fin effective, null tant que le chantier est en cours
    - `nextStep` string, nullable: Prochaine étape annoncée au client
    - `nextStepDate` string, date-time, nullable
    - `customer` DocumentParty, nullable: Client (destinataire), forme allégée.
      - `id` integer
      - `name` string, nullable
    - `review` object, nullable: Note de fin de chantier laissée par le client, null tant qu'il n'en a pas laissé.
      - `rating` integer
      - `comment` string, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time: Dernière activité (message, document rattaché, fin)
  - `pagination` Pagination
    - `page` integer
    - `pageSize` integer
    - `totalCount` integer
    - `totalPages` integer: Nombre total de pages (ceil(totalCount / pageSize)).
    - `hasMore` boolean: true s'il existe une page suivante (page < totalPages).

## Other responses

- `401`: Échec d'authentification : clé API manquante (`missing_api_key`) ou invalide/révoquée/expirée (`invalid_api_key`). Le client doit présenter une clé valide.
- `403`: Clé authentifiée mais non autorisée : scope insuffisant pour cette route (`scope_required`), ou organisation sans abonnement Pro actif (`pro_required`). `GET /me` reste accessible sans Pro pour diagnostiquer la clé.
- `429`: Trop de requêtes (quota de la clé API, ou de l'organisation pour les analyses de document, dépassé pour la fenêtre courante)

---

[API](https://skmtc.dev/swipify/apis/swipify-api-publique.md) · [All operations](https://skmtc.dev/swipify/apis/swipify-api-publique/llms.txt) · [OpenAPI document](https://skmtc.dev/swipify/apis/swipify-api-publique/revisions/44c17201b479?raw)
