Aller au contenu

Serveur d’API locale ​

Mindwtr comprend un serveur d’API REST locale facultatif pour les scripts et les intégrations. Sur ordinateur, il s’exécute dans le binaire de l’application et utilise les mêmes chemins de stockage local que celle-ci. Le dépôt comprend également un utilitaire Bun pour le développement et les scripts avancés.


Activation sur ordinateur ​

Les versions de bureau peuvent démarrer l’API REST locale sans exécuter le code source :

  • Ouvrez Réglages -> Avancé.
  • Activez Serveur d’API locale.
  • Conservez le port par défaut 3456 ou choisissez un autre port localhost.
  • Copiez le jeton porteur généré depuis la même carte de réglages.

L’application se lie uniquement à 127.0.0.1 et exige Authorization: Bearer <token> pour chaque requête. Les binaires mobiles n’exposent pas d’API REST locale.

Utilitaire de développement ​

L’utilitaire du dépôt reste disponible lorsque vous souhaitez exécuter l’API en dehors de l’application de bureau ou lui indiquer des fichiers précis.


Démarrage rapide ​

Depuis l’application de bureau :

text
Settings -> Advanced -> Enable local API server

URL par défaut :

text
http://127.0.0.1:3456

Depuis la racine du dépôt avec Bun :

bash
bun install
MINDWTR_API_TOKEN=replace-with-a-strong-token bun run mindwtr:api -- --port 4317 --host 127.0.0.1

Options ​

OptionValeur par défautDescription
--port <n>4317Port du serveur
--host <host>127.0.0.1Adresse d’écoute
--data <path>Valeur de la plateformeRemplacer l’emplacement de data.json
--db <path>Valeur de la plateformeRemplacer l’emplacement de mindwtr.db
--dangerously-disable-authdésactivéDémarrer sans aucun jeton — non sécurisé, et pas sûr pour un navigateur même en loopback

Variables d’environnement ​

VariableDescription
MINDWTR_DATARemplacer l’emplacement de data.json (si --data est omis)
MINDWTR_DB_PATHRemplacer l’emplacement de mindwtr.db (si --db est omis)
MINDWTR_API_TOKENObligatoire. Jeton porteur exigé à chaque requête ; l’utilitaire ne démarre pas sans lui, sauf si vous passez --dangerously-disable-auth
MINDWTR_API_CORS_ORIGINFacultatif. Une seule origine http(s) exacte autorisée à appeler l’API ; aucun en-tête CORS n’est envoyé si la variable est absente

Par défaut, l’API résout data.json et mindwtr.db à l’aide des chemins de plateforme de Mindwtr (en privilégiant les données XDG sous Linux).


Authentification ​

Les requêtes à l’API locale de l’application de bureau exigent toujours le jeton porteur affiché sous Réglages -> Avancé :

Authorization: Bearer <token>

L’utilitaire Bun exige lui aussi un jeton : il s’arrête immédiatement si MINDWTR_API_TOKEN n’est pas défini, sauf si vous passez explicitement --dangerously-disable-auth (réservé aux tests de compatibilité isolés).


Points de terminaison ​

MéthodePoint de terminaisonDescription
GET/healthContrôle d’intégrité → { ok: true }
GET/tasksRépertorier les tâches
GET/tasks?status=nextFiltrer par statut
GET/tasks?query=@workRechercher des tâches
GET/tasks?isFocusedToday=trueOrdinateur : filtrer les tâches étoilées, y compris celles en attente
GET/tasks?all=1Inclure les tâches terminées/archivées
GET/tasks?deleted=1Inclure les suppressions logiques
POST/tasksCréer une tâche
GET/tasks/:idObtenir une tâche
PATCH/tasks/:idMettre à jour une tâche
DELETE/tasks/:idSupprimer logiquement une tâche
POST/tasks/:id/completeMarquer comme terminée
POST/tasks/:id/archiveMarquer comme archivée
POST/tasks/:id/restoreRestaurer une tâche supprimée logiquement
GET/projectsRépertorier les projets
POST/projectsOrdinateur : créer un projet
GET/projects/:idOrdinateur : obtenir un projet
PATCH/projects/:idOrdinateur : modifier un projet
DELETE/projects/:idOrdinateur : supprimer logiquement un projet
POST/projects/:id/restoreOrdinateur : restaurer un projet
GET/areasRépertorier les domaines
GET/areas/:idBureau : lire un domaine
PATCH/areas/:idBureau : modifier un domaine
GET/v1/areasAlias de compatibilité pour les domaines
GET/sectionsUtilitaire : répertorier les sections, éventuellement ?projectId=
POST/sectionsUtilitaire : créer une section
GET/sections/:idUtilitaire : obtenir une section
PATCH/sections/:idUtilitaire : mettre à jour une section
DELETE/sections/:idUtilitaire : supprimer une section
GET/search?query=...Rechercher des tâches et des projets

L’API locale de bureau renvoie 409 (recurrence_requires_app) lorsque terminer une tâche à échéancier fixe, avec une date de début mais sans date d’échéance, nécessite de sauter des occurrences passées. La tâche reste inchangée ; terminez-la dans l’application. Les tâches avec seulement une date de début restent prises en charge si la prochaine occurrence est encore actuelle ou future.

Les lignes marquées Bureau n’existent que dans l’API locale de l’application de bureau. Les lignes marquées Utilitaire n’existent que dans l’utilitaire Bun, qui y répond aussi sous le préfixe /v1/ (/v1/sections).

L’API locale de l’application de bureau accepte isFocusedToday=true/1 et isFocusedToday=false/0. Avec true ou 1, elle renvoie les tâches étoilées, y compris les actions suivantes à début futur en attente de Focus. Avec false ou 0, elle renvoie les tâches non marquées, y compris les anciens enregistrements dépourvus de ce champ. Sans le paramètre, elle ne filtre pas la liste selon ce champ. Pour toute autre valeur, elle répond avec 400.

Ici, query est une recherche en texte brut : la valeur est mise en minuscules et testée comme sous-chaîne sur le titre, la description, le statut, les tags, les contextes, les identifiants de projet et de domaine et les notes de suivi de la tâche. Ce n’est pas le langage d’opérateurs. status:, context:, tag:, due:<=7d, les expressions entre guillemets et la -négation appartiennent au champ de recherche de l’application, au --query de la CLI et à la liste de tâches du serveur MCP ; envoyés ici, ils sont comparés comme des caractères littéraux et ne renvoient généralement rien.

Formes des réponses ​

Tâche (partielle)

json
{
  "id": "uuid",
  "title": "Task title",
  "status": "inbox",
  "projectId": "uuid",
  "dueDate": "2026-01-25T12:00:00.000Z",
  "tags": ["#work"],
  "contexts": ["@email"],
  "createdAt": "2026-01-25T10:00:00.000Z",
  "updatedAt": "2026-01-25T10:00:00.000Z",
  "deletedAt": null
}

Projet (partiel)

json
{
  "id": "uuid",
  "title": "Project name",
  "status": "active",
  "color": "#94a3b8",
  "createdAt": "2026-01-25T10:00:00.000Z",
  "updatedAt": "2026-01-25T10:00:00.000Z",
  "deletedAt": null
}

Domaine

json
{
  "id": "uuid",
  "name": "Area name",
  "color": "#94a3b8",
  "icon": "briefcase",
  "order": 0,
  "createdAt": "2026-01-25T10:00:00.000Z",
  "updatedAt": "2026-01-25T10:00:00.000Z"
}

Corps de création d’une tâche ​

json
{
  "input": "Call Alice",
  "title": "Alternative title",
  "props": {
    "status": "next",
    "contexts": ["@phone"],
    "tags": ["#errands"]
  }
}

L’application de bureau utilise title lorsqu’il est présent, sinon input, et applique les props explicites. L’utilitaire Bun exécute en plus parseQuickAdd pour input.

Écriture des projets sur ordinateur ​

L’API intégrée à l’application de bureau permet de créer, obtenir, modifier, supprimer logiquement et restaurer des projets. La création exige title ; areaId, color, status, isSequential et order sont facultatifs. Les mises à jour acceptent les mêmes champs modifiables. La création, la lecture, la modification et la restauration renvoient le projet enregistré sous la forme { "project": { ... } } ; la suppression renvoie { "ok": true }.

Placez les options de création dans props, par exemple { "title": "Plan the move", "props": { "isSequential": true } } ; les champs PATCH vont directement dans le corps. sequentialScope accepte project ou section. Le status du projet accepte active, someday, waiting ou archived. Utilisez areaId: null pour retirer le domaine. L’archivage et la réactivation suivent les règles de l’application pour les tâches et sections du projet. Pour PATCH, un projet absent renvoie 404 ; un projet supprimé ou purgé renvoie 409.

GET /projects/:id renvoie également un projet conservé après suppression logique, afin qu’un script puisse l’examiner avant de le restaurer. DELETE /projects/:id supprime logiquement le projet et ses sections actives, puis dissocie les tâches actives au lieu de les supprimer ou de modifier leur état. POST /projects/:id/restore restaure le projet et les enfants supprimés par la même ancienne cascade, mais ne réassocie pas les tâches dissociées par une suppression actuelle. Répéter la suppression ou la restauration est sans danger et conserve l’état actuel. Les changements de cycle de vie d’un projet purgé renvoient 409.

Créer un projet séquentiel:

bash
curl -s -X POST "http://127.0.0.1:3456/projects" \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"title":"Plan the move","props":{"isSequential":true}}' | jq .

Passer un projet existant en mode parallèle:

bash
curl -s -X PATCH "http://127.0.0.1:3456/projects/$PROJECT_ID" \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"isSequential":false}' | jq .

Modifier les domaines sur ordinateur ​

GET /areas/:id et PATCH /areas/:id renvoient { "area": { ... } }. Les deux renvoient 404 pour les domaines inconnus ou supprimés. Ces endpoints appartiennent à l’API intégrée de bureau, pas à l’assistant Bun.

PATCH accepte un objet non vide contenant uniquement name, color, icon et order. name doit être une chaîne non vide ; les espaces aux extrémités sont supprimés. color et icon acceptent des chaînes ou null pour effacer le champ. order doit être un nombre fini ; les valeurs négatives et fractionnaires sont acceptées. Les champs inconnus, types incorrects, noms vides et objets vides renvoient 400.

Un nom identique à celui d’un autre domaine non supprimé, après suppression des espaces aux extrémités et comparaison insensible à la casse, renvoie 409 sans aucune modification. L’API ne fusionne jamais implicitement les domaines. Les changements de nom et de couleur conservent le comportement de l’app pour les métadonnées des projets associés et sont enregistrés ensemble. Effacer la couleur d’un domaine rétablit aussi la couleur par défaut (#94a3b8) de ses projets associés. order modifie la position numérique de ce domaine ; ce n’est pas un réordonnancement par lots. La création et la suppression de domaines ne sont pas incluses.

bash
curl -s -X PATCH "http://127.0.0.1:3456/areas/$AREA_ID" \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Work","color":"#94a3b8","order":2}' | jq .

Classement des tâches sur ordinateur ​

Utilisez PATCH /tasks/:id avec status pour déplacer une tâche active entre inbox, next, waiting, someday et reference. Continuez à utiliser les actions dédiées /complete, /archive et /restore pour ces opérations. PATCH n’accepte pas les états terminaux.

PATCH ne peut pas rouvrir une tâche terminée ou archivée (409) ; rouvrez-la d’abord dans l’application. Restaurez une tâche supprimée avec /restore avant de la classer. Les tâches purgées ne peuvent pas être classées.

Déplacer une tâche vers inbox, next, waiting ou someday dans un projet archivé renvoie 409. Réactivez d’abord le projet avec PATCH /projects/:id et {"status":"active"}, ou déplacez la tâche hors de ce projet dans le même PATCH de tâche.

Déplacer une tâche de la boîte de réception vers les prochaines actions:

bash
curl -s -X PATCH "http://127.0.0.1:3456/tasks/$TASK_ID" \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"status":"next"}' | jq .

Exemples ​

Répertorier les prochaines actions :

bash
curl -s 'http://127.0.0.1:3456/tasks?status=next' \
  -H 'Authorization: Bearer <token>' | jq .

Créer avec des propriétés explicites :

bash
curl -s -X POST 'http://127.0.0.1:3456/tasks' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"title":"Call Alice","props":{"status":"next","contexts":["@phone"],"tags":["#errands"]}}' | jq .

Terminer une tâche :

bash
curl -s -X POST "http://127.0.0.1:3456/tasks/$TASK_ID/complete" \
  -H 'Authorization: Bearer <token>' | jq .

Outil en ligne de commande ​

Une interface en ligne de commande plus simple est également disponible :

bash
# Add a task
bun mindwtr:cli -- add "Call mom @phone #family"

# List active tasks
bun mindwtr:cli -- list

# List with filters
bun mindwtr:cli -- list --status next --query "due:<=7d"

# Read or update a task
bun mindwtr:cli -- get <taskId>
bun mindwtr:cli -- update <taskId> '{"status":"next"}'

# Complete a task
bun mindwtr:cli -- complete <taskId>

# Archive, delete, or restore
bun mindwtr:cli -- archive <taskId>
bun mindwtr:cli -- delete <taskId>
bun mindwtr:cli -- restore <taskId>

# Search
bun mindwtr:cli -- search "@work"

# List projects
bun mindwtr:cli -- projects

Référence de la CLI ​

CommandeExempleRemarques
addmindwtr:cli -- add "Call mom @phone"Utilise l’analyse de l’ajout rapide
listmindwtr:cli -- list --status nextPrend en charge --all, --deleted, --query
getmindwtr:cli -- get <taskId>Affiche le JSON complet de la tâche
updatemindwtr:cli -- update <taskId> '{"status":"next"}'Applique un correctif JSON
searchmindwtr:cli -- search "@work due:<=7d"Recherche des tâches/projets
completemindwtr:cli -- complete <taskId>Marque la tâche comme terminée
archivemindwtr:cli -- archive <taskId>Marque la tâche comme archivée
deletemindwtr:cli -- delete <taskId>Supprime logiquement la tâche
restoremindwtr:cli -- restore <taskId>Restaure une tâche supprimée
projectsmindwtr:cli -- projectsRépertorie les projets actifs

Notes de sécurité ​

  • Le serveur est conçu pour s’exécuter sur 127.0.0.1 (localhost). Ne l’exposez pas publiquement à moins d’en comprendre les risques.
  • L’accès à l’API de bureau exige le jeton porteur généré dans les réglages. Gardez ce jeton privé.
  • Si vous avez besoin d’un accès distant à l’utilitaire Bun, définissez MINDWTR_API_TOKEN et placez le serveur derrière un proxy inverse authentifié.

Voir aussi ​

Mindwtr est gratuit, open source et local.
Getting Things Done et GTD sont des marques déposées de David Allen Company. Mindwtr n’est ni affilié à David Allen Company, ni approuvé ou parrainé par celle-ci.