Project sheets. A sheet is persistent and carries NO Dolibarr compatibility: anything dated lives on the article, with its date.
GET
/projects
sans compte
List project sheets
Paramètres de requête
| Champ |
Type |
Requis |
Description |
per_page |
integer |
non |
Items per page. Clamped to the 1-100 range.
Défaut : 25
|
Réponses
200 |
One page of sheets. |
429 |
RATE_LIMITED: too many requests. |
POST
/projects
jeton requis
compte contributeur
limite d'écriture
Create a project sheet
The sheet is persistent and carries no dated information: no Dolibarr compatibility, no version. Those live on the articles, each with its date.
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
editor_id |
integer |
oui |
Editor the sheet belongs to. The account must be a member.
|
name |
string |
oui |
|
summary |
string |
oui |
|
description |
string |
non |
|
license |
string |
non |
|
Réponses
201 |
The created sheet. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
CONTRIBUTOR_REQUIRED: a verified contributor account is needed. A reader account can read and subscribe, never write. |
422 |
VALIDATION_FAILED: invalid payload. detail names the offending fields. |
429 |
RATE_LIMITED: too many requests. |
GET
/projects/{slug}
sans compte
Read one project sheet
Adds the typed links, the translations, the logo and the gallery of the sheet.
A sheet masked by the moderation team answers 404, except to a token of its own editor, which keeps reading it to correct it: `hidden` is then true. The announcements filed under it stay published and carry no project.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Réponses
200 |
The sheet, its links, its translations, its logo and its gallery. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
429 |
RATE_LIMITED: too many requests. |
PATCH
/projects/{slug}
jeton requis
limite d'écriture
Edit the reference fields of a sheet
Rewrites the text of a sheet the calling account publishes for: name, language, summary, description and licence. Only the fields present in the call are touched, so a tool fixing the description alone cannot blank the licence it did not send.
The description is Markdown, rendered through the same whitelist as an article body, and bounded by the instance. A sheet presents a project and never states its current Dolibarr compatibility: what is dated lives in the announcements.
Links, translations and status have their own endpoints.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
name |
string |
non |
|
locale |
string |
non |
Content locale the sheet is written in (fr_FR, es_ES...).
|
summary |
string |
non |
|
description |
string | null |
non |
Markdown, bounded by the instance (8000 characters by default).
|
license |
string | null |
non |
|
Réponses
200 |
The sheet as it now reads. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
FORBIDDEN: the account is not a member of the editor that owns the resource. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
422 |
VALIDATION_FAILED: invalid payload. detail names the offending fields. |
429 |
RATE_LIMITED: too many requests. |
POST
/projects/{slug}/links
jeton requis
limite d'écriture
Add a typed link to a sheet
Outgoing links carry rel="nofollow ugc" without exception. URL shorteners are refused: they mask the destination and can be redirected after validation.
A Dolistore link already claimed by another sheet answers CONFLICT. That is a detection, not a verdict: the conflict is surfaced for human resolution.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
type |
string |
oui |
Valeurs : dolistore, shop, demo, doc, repo, support, other
|
url |
string |
oui |
|
label |
string |
non |
|
Réponses
201 |
The created link. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
FORBIDDEN: the account is not a member of the editor that owns the resource. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
409 |
Destination already claimed by another sheet, or shortener refused. |
422 |
VALIDATION_FAILED: invalid payload. detail names the offending fields. |
429 |
RATE_LIMITED: too many requests. |
PUT
/projects/{slug}/logo
jeton requis
limite d'écriture
Set or clear the logo of a sheet
Deposit the image with POST /media first, then name its id here. The media must belong to the editor of the sheet. A null media_id clears the logo.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
media_id |
integer | null |
oui |
|
Réponses
200 |
The sheet as it now reads. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
Not a member of the sheet's editor, or media of another editor. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
422 |
VALIDATION_FAILED: invalid payload. detail names the offending fields. |
429 |
RATE_LIMITED: too many requests. |
POST
/projects/{slug}/gallery
jeton requis
limite d'écriture
Add an image to the gallery of a sheet
Deposit the image with POST /media first, then name its id here. The media must belong to the editor of the sheet. Naming an image already in the gallery rewrites its caption and, when given, its position: a tool can run again without piling up duplicates.
The gallery is bounded by the instance; the refusal names the maximum. A Dolibarr screenshot routinely holds real personal data: publish screenshots taken on demonstration data only.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
media_id |
integer |
oui |
|
caption |
string | null |
non |
|
position |
integer | null |
non |
Display order. Defaults to after the last image.
|
Réponses
200 |
The image was already in the gallery; its caption and position were rewritten. |
201 |
The image added to the gallery. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
Not a member of the sheet's editor, or media of another editor. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
422 |
Invalid input, or gallery full: detail.gallery_max carries the maximum. |
429 |
RATE_LIMITED: too many requests. |
DELETE
/projects/{slug}/gallery/{mediaId}
jeton requis
limite d'écriture
Take an image out of the gallery of a sheet
The file itself stays deposited; it is purged later if nothing else holds it.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
mediaId |
integer |
oui |
Media identifier of the gallery image.
|
Réponses
200 |
The image left the gallery. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
FORBIDDEN: the account is not a member of the editor that owns the resource. |
404 |
Unknown sheet, or image not in its gallery. |
429 |
RATE_LIMITED: too many requests. |
POST
/projects/{slug}/translations
jeton requis
compte contributeur
limite d'écriture
Translate a project sheet
Sheet translations live on their own, one row per locale. Unlike an article translation, this one does not go through the review.
Paramètres de chemin
| Champ |
Type |
Requis |
Description |
slug |
string |
oui |
Project slug.
|
Corps de la requête
application/json
| Champ |
Type |
Requis |
Description |
locale |
string |
oui |
Content locale, five characters.
Valeurs : fr_FR, en_US, es_ES, de_DE, it_IT, nl_NL, pt_PT
|
name |
string |
oui |
|
summary |
string |
oui |
|
description |
string |
non |
|
Réponses
201 |
The translated sheet. |
401 |
INVALID_TOKEN: missing, revoked or expired token. |
403 |
CONTRIBUTOR_REQUIRED: a verified contributor account is needed. A reader account can read and subscribe, never write. |
404 |
NOT_FOUND: unknown resource, or one the account may not see. |
422 |
VALIDATION_FAILED: invalid payload. detail names the offending fields. |
429 |
RATE_LIMITED: too many requests. |