Docs / reference
API d’administration
Points de terminaison authentifiés qui modifient le contenu du site via des commits git validés.
Tous les endpoints d’administration nécessitent un agent service token : Authorization: Bearer jgx_agt_… (la CLI lit l’env JENKSGUO_ADMIN_TOKEN). Jenks crée des tokens dans la console sur https://admin.jenksguo.xyz/admin → Accès après connexion avec Google (Cloudflare Access) ; chacun a un nom, un périmètre (content, media, publish ; tous les tokens peuvent lire), une expiration et peut être révoqué. Écrire sur la branche main requiert aussi publish. Chaque écriture et chaque tentative refusée vont dans le journal d’audit. Voir Donner l’accès à un agent IA.
Les écritures sont validées avec le même schéma que le build, puis commit dans GitHub. Le CI traduit les entrées modifiées dans chaque langue, reconstruit et déploie : main → jenksguo.pages.dev et jenksguo.xyz, dev → dev.jenksguo.xyz.
| Méthode | Chemin | Outil |
|---|---|---|
| GET · POST | /api/admin/tokens |
— (réservé aux personnes : lister ou créer des agent tokens ; SSO) |
| DELETE | /api/admin/tokens/{id} |
— (réservé aux personnes : révoquer ; SSO) |
| POST | /api/admin/login · /api/admin/logout |
— (développement local uniquement) |
| GET | /api/admin/whoami |
admin_whoami |
| GET | /api/admin/audit |
admin_audit_log |
| GET | /api/admin/schema |
admin_schema |
| GET | /api/admin/files |
admin_list_files |
| GET | /api/admin/file |
admin_read_file |
| POST | /api/admin/validate |
admin_validate |
| PUT | /api/admin/file |
admin_write_file |
| DELETE | /api/admin/file |
admin_delete_file |
| POST | /api/admin/changes |
admin_commit_changes |
| POST | /api/admin/ai-edit |
admin_ai_edit |
| GET | /api/admin/translation |
admin_read_translation |
| PUT | /api/admin/translation |
admin_write_translation |
| GET | /api/admin/copy |
admin_read_copy |
| PUT | /api/admin/copy |
admin_write_copy |
| GET | /api/admin/deploys |
admin_deploy_status |
| POST | /api/admin/promote |
admin_promote |
| POST | /api/admin/cv |
admin_publish_cv |
| GET | /api/admin/media |
admin_list_media |
| POST | /api/admin/media |
admin_upload_media |
| PATCH | /api/admin/media |
admin_update_media |
| DELETE | /api/admin/media |
admin_delete_media |
Erreurs : 401 unauthorized · unknown_token · token_expired · token_revoked, 403 missing_scope (avec needs[]) · sso_required · forbidden_path (seuls les fichiers de contenu sont inscriptibles), 422 invalid avec errors[], 409/502 github_error, 503 github_not_configured.
admin_whoami — Qui suis-je
Vérifiez votre justificatif : qui vous êtes (email SSO ou nom du agent token), vos périmètres, quand votre token expire et si la publication (GitHub) est configurée.
- MCP :
admin_whoamisurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/whoami(agent token) - Scope :
read - CLI :
jenks admin whoami
Aucun argument.
curl -s "https://jenksguo.pages.dev/api/admin/whoami" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_audit_log — Journal d’audit
Actions d’administration récentes, les plus récentes en premier : qui (email SSO ou agent token), quoi, quels fichiers, branche, hôte et résultat. Un agent token ne voit que ses propres actions.
- MCP :
admin_audit_logsurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/audit?limit=&token=(agent token) - Scope :
read - CLI :
jenks admin audit [--limit 50]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
limit |
integer | non | |
token |
string | non | Uniquement cet id d’agent token (réservé aux personnes) |
curl -s "https://jenksguo.pages.dev/api/admin/audit" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_schema — Schéma de contenu
Le modèle de contenu : champs et règles des entrées, tags, lentilles, types, chemins inscriptibles, documents et conventions d’édition. À lire avant d’écrire.
- MCP :
admin_schemasurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/schema(agent token) - Scope :
read - CLI :
jenks admin schema
Aucun argument.
curl -s "https://jenksguo.pages.dev/api/admin/schema" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_list_files — Lister les fichiers de contenu
Lister les fichiers de contenu modifiables sur une branche (chemin, taille, sha), éventuellement dans un dossier tel que content/corpus/experiences.
- MCP :
admin_list_filessurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/files?dir=&branch=(agent token) - Scope :
read - CLI :
jenks admin ls [dir]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
dir |
string | non | par ex. content/corpus/projects (par défaut : tout le contenu) |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s "https://jenksguo.pages.dev/api/admin/files" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_read_file — Lire un fichier de contenu
Lire la source Markdown/JSON brute d’un fichier de contenu (avec son sha). Passer path, ou slug pour une entrée, une lentille ou une compétence.
- MCP :
admin_read_filesurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/file?path=&slug=&branch=(agent token) - Scope :
read - CLI :
jenks admin get <slug|path>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | non | |
slug |
string | non | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s "https://jenksguo.pages.dev/api/admin/file" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_validate — Valider une modification
Valider le contenu d’un fichier par rapport au schéma de contenu sans commit. Renvoie une liste de problèmes (vide = valide).
- MCP :
admin_validatesurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/validate(agent token) - Scope :
read - CLI :
jenks admin validate <path> <file>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | oui | |
content |
string | oui |
curl -s -X POST https://jenksguo.pages.dev/api/admin/validate \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"path":"content/corpus/projects/example.md","content":"<content>"}'
admin_write_file — Créer ou mettre à jour un fichier de contenu
Valider et commit un fichier de contenu (création ou remplacement). La publication est automatique : le CI retraduit les entrées modifiées dans toutes les langues, reconstruit et déploie (main → jenksguo.pages.dev et jenksguo.xyz, dev → dev.jenksguo.xyz) en quelques minutes.
- MCP :
admin_write_filesurhttps://jenksguo.pages.dev/mcp/admin - REST :
PUT /api/admin/file(agent token) - Scope :
content(+publishpour la branchemain) - CLI :
jenks admin put <path> <file> -m <message>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | oui | |
content |
string | oui | |
message |
string | oui | Message de commit |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X PUT https://jenksguo.pages.dev/api/admin/file \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"path":"content/corpus/projects/example.md","content":"<content>","message":"<message>"}'
admin_delete_file — Supprimer un fichier de contenu
Supprimer un fichier de contenu (p. ex. retirer une entrée) avec un message de commit. L’historique Git le garde récupérable.
- MCP :
admin_delete_filesurhttps://jenksguo.pages.dev/mcp/admin - REST :
DELETE /api/admin/file?path=&message=&branch=(agent token) - Scope :
content(+publishpour la branchemain) - CLI :
jenks admin rm <path> -m <message>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | oui | |
message |
string | oui | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X DELETE https://jenksguo.pages.dev/api/admin/file \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"path":"content/corpus/projects/example.md","message":"<message>"}'
admin_commit_changes — Committer plusieurs fichiers en une fois
Valider et commit plusieurs modifications de fichiers en UN seul commit. Chaque modification est {path, content} ou {path, delete: true}.
- MCP :
admin_commit_changessurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/changes(agent token) - Scope :
content(+publishpour la branchemain) - CLI :
jenks admin commit <changes.json> -m <message>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
changes |
array | oui | |
message |
string | oui | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X POST https://jenksguo.pages.dev/api/admin/changes \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"changes":"<changes>","message":"<message>"}'
admin_ai_edit — Proposer une modification avec l’IA
Demander au modèle du site de réécrire un fichier de contenu à partir d’une instruction en anglais simple. Renvoie le contenu proposé, un diff et les problèmes de validation. Ne commit PAS — relisez, puis appelez admin_write_file.
- MCP :
admin_ai_editsurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/ai-edit(agent token) - Scope :
content - CLI :
jenks admin ai-edit <slug|path> "<instruction>" [--apply]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | non | |
slug |
string | non | |
instruction |
string | oui | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
content |
string | non | Texte de fichier non enregistré facultatif pour servir de base (par défaut : le fichier enregistré). |
curl -s -X POST https://jenksguo.pages.dev/api/admin/ai-edit \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"instruction":"<instruction>"}'
admin_read_translation — Lire une traduction
Un fichier de contenu dans une autre langue : les champs source en anglais, la traduction actuelle et son statut (à jour, obsolète, modifiée à la main, manquante). Fonctionne pour les entrées, lentilles, CV, arguments, pages point de vue, titres, talks et la doc. Langues : zh, zh-hant, ja, fr, es, eo.
- MCP :
admin_read_translationsurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/translation?path=&slug=&locale=&branch=(agent token) - Scope :
read - CLI :
jenks admin tr get <slug|path> <locale>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | non | |
slug |
string | non | |
locale |
zh · zh-hant · ja · fr · es · eo |
oui | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s "https://jenksguo.pages.dev/api/admin/translation" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_write_translation — Modifier une traduction
Écrire le texte d’un fichier de contenu dans une autre langue (zh, zh-hant, ja, fr, es, eo) — par exemple une meilleure synthèse en chinois. Donnez uniquement les champs à changer ; lisez d’abord admin_read_translation pour les noms de champs. Le Markdown doit conserver les titres, blocs de code et liens en anglais. La modification est conservée jusqu’à ce que l’anglais change ; ensuite cette langue est retraduite automatiquement. L’anglais est la source : modifiez-le avec admin_write_file.
- MCP :
admin_write_translationsurhttps://jenksguo.pages.dev/mcp/admin - REST :
PUT /api/admin/translation(agent token) - Scope :
content(+publishpour la branchemain) - CLI :
jenks admin tr put <slug|path> <locale> <fields.json> -m <message>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
path |
string | non | |
slug |
string | non | |
locale |
zh · zh-hant · ja · fr · es · eo |
oui | |
fields |
object | oui | p. ex. {"summary": "…", "body": "## …"} |
message |
string | non | Message de commit |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X PUT https://jenksguo.pages.dev/api/admin/translation \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"locale":"<locale>","fields":"<fields>"}'
admin_read_copy — Lire les textes d’interface du site
Les textes d’interface du site dans une langue — menus, titres de page, intros en une ligne, accroche du hero, boutons, descriptions SEO — sous forme clé → texte, avec l’anglais (et le chinois pour zh-hant) à côté. Filtrer avec un préfixe, p. ex. hero ou career.
- MCP :
admin_read_copysurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/copy?locale=&prefix=&branch=(agent token) - Scope :
read - CLI :
jenks admin copy get <locale> [prefix]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
locale |
en · zh · zh-hant · ja · fr · es · eo |
oui | |
prefix |
string | non | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s "https://jenksguo.pages.dev/api/admin/copy" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_write_copy — Modifier les textes d’interface du site
Modifier les textes d’interface dans une langue : values est clé → texte ("" supprime votre modification). en et zh sont les sources rédigées à la main : un changement en anglais est traduit en ja, fr, es et eo automatiquement — réglez aussi zh. Une modification dans une autre langue est conservée jusqu’à ce que son texte source change. Conservez exactement les {placeholders}.
- MCP :
admin_write_copysurhttps://jenksguo.pages.dev/mcp/admin - REST :
PUT /api/admin/copy(agent token) - Scope :
content(+publishpour la branchemain) - CLI :
jenks admin copy set <locale> <key> "<text>" -m <message>
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
locale |
en · zh · zh-hant · ja · fr · es · eo |
oui | |
values |
object | oui | p. ex. {"hero.sub": "…"} |
message |
string | non | |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X PUT https://jenksguo.pages.dev/api/admin/copy \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"locale":"<locale>","values":"<values>"}'
admin_deploy_status — État des déploiements
Exécutions CI récentes (traduire → build → déployer) avec statut, branche, commit et liens.
- MCP :
admin_deploy_statussurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/deploys?branch=(agent token) - Scope :
read - CLI :
jenks admin deploys
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s "https://jenksguo.pages.dev/api/admin/deploys" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_promote — Promouvoir dev en production
Fusionner la branche dev dans main, publiant tout ce qui a été prévisualisé sur dev.jenksguo.xyz vers le site en ligne (jenksguo.pages.dev et jenksguo.xyz).
- MCP :
admin_promotesurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/promote(agent token) - Scope :
publish - CLI :
jenks admin promote
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
message |
string | non |
curl -s -X POST https://jenksguo.pages.dev/api/admin/promote \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{}'
admin_publish_cv — Publier une nouvelle version de CV
Téléverser un nouveau PDF pour un CV (ai, web3 ou un nouveau slug) et en faire la version actuelle en une étape : le PDF va dans la médiathèque, la version précédente passe dans l’historique du CV (toujours téléchargeable), et la modification est commit (le CI la publie). Image d’aperçu et nouveau titre/synthèse facultatifs. L’URL stable /cv/
- MCP :
admin_publish_cvsurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/cv(agent token) - Scope :
content+media(+publishpour la branchemain) - CLI :
jenks admin cv publish <slug> <file.pdf> --cv-version 2026.10 [--preview /media/…]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
slug |
string | oui | ai, web3, ou un nouvel identifiant en kebab-case |
version |
string | oui | p. ex. 2026.10 |
filename |
string | non | |
data |
string | non | Octets du PDF, base64 |
url |
string | non | Alternative à data : URL https du PDF |
preview |
string | non | Facultatif : une image /media/… déjà téléversée de la page 1 |
title |
string | non | |
summary |
string | non | |
message |
string | non | Message de commit |
branch |
main · dev |
non | main publie le site en ligne (jenksguo.pages.dev et son miroir jenksguo.xyz) ; dev prévisualise sur dev.jenksguo.xyz (par défaut main). |
curl -s -X POST https://jenksguo.pages.dev/api/admin/cv \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"slug":"<slug>","version":"<version>"}'
admin_list_media — Lister les médias
Lister les images, vidéos et PDF téléversés (les plus récents en premier) : url, type, taille, dimensions, texte alternatif, Markdown prêt à coller et quelles entrées utilisent chaque fichier.
- MCP :
admin_list_mediasurhttps://jenksguo.pages.dev/mcp/admin - REST :
GET /api/admin/media?prefix=&cursor=&limit=(agent token) - Scope :
read - CLI :
jenks admin media ls [prefix]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
prefix |
string | non | Préfixe de clé tel que 2026/10 |
cursor |
string | non | |
limit |
integer | non |
curl -s "https://jenksguo.pages.dev/api/admin/media" \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN"
admin_upload_media — Téléverser des médias
Stocker une image (webp, jpg, png, gif, avif, svg), une vidéo (mp4, webm) ou un PDF, jusqu’à 25 Mo, dans Cloudflare R2 et obtenir son url publique /media/… et son Markdown. Envoyer data en base64 avec un filename, ou une url https publique à importer. Les fichiers sont publics par URL immédiatement ; référencez-les depuis le contenu avec admin_write_file. L’endpoint REST accepte aussi multipart/form-data (champ file).
- MCP :
admin_upload_mediasurhttps://jenksguo.pages.dev/mcp/admin - REST :
POST /api/admin/media(agent token) - Scope :
media - CLI :
jenks admin media upload <file|https-url> [--alt "…"]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
filename |
string | non | Nom de fichier original ; devient la partie lisible de l’url. |
data |
string | non | Octets du fichier, base64 (un préfixe data: URL est autorisé). |
url |
string | non | Alternative à data : une URL https que le serveur télécharge. |
alt |
string | non | Texte alternatif : ce que montre l’image, pour les lecteurs d’écran et le bot. |
width |
integer | non | |
height |
integer | non |
curl -s -X POST https://jenksguo.pages.dev/api/admin/media \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{}'
admin_update_media — Mettre à jour le texte alternatif
Modifier le texte alternatif stocké d’un fichier téléversé (l’alt par défaut quand il est inséré dans le contenu).
- MCP :
admin_update_mediasurhttps://jenksguo.pages.dev/mcp/admin - REST :
PATCH /api/admin/media(agent token) - Scope :
media - CLI :
jenks admin media alt <key> "<alt text>"
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
key |
string | oui | Clé ou url du média, p. ex. 2026/10/xero-talk-1a2b3c4d5e.webp |
alt |
string | oui |
curl -s -X PATCH https://jenksguo.pages.dev/api/admin/media \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"key":"<key>","alt":"<alt>"}'
admin_delete_media — Supprimer un média
Supprimer définitivement un fichier téléversé. Refusé tant que du contenu publié l’utilise, sauf si force est vrai. Non récupérable — contrairement aux fichiers de contenu, il n’y a pas d’historique git.
- MCP :
admin_delete_mediasurhttps://jenksguo.pages.dev/mcp/admin - REST :
DELETE /api/admin/media?key=&force=(agent token) - Scope :
media - CLI :
jenks admin media rm <key> [--force]
| Argument | Type | Obligatoire | Remarques |
|---|---|---|---|
key |
string | oui | |
force |
boolean | non |
curl -s -X DELETE https://jenksguo.pages.dev/api/admin/media \
-H "Authorization: Bearer $JENKSGUO_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"key":"<key>"}'
.mdCette page est traduite avec l’aide de l’IA ; les titres officiels restent en anglais.