Date de fin des projets et des tâches
Point de terminaison des projets
Gérez les projets et les tâches de xoCRM via l'API JSON : exportez, créez, mettez à jour et supprimez — y compris les descriptions multilingues, les chefs de projet, les affectations aux collaborateurs et l'historique des statuts.
Points de terminaison
| Méthode | Point de terminaison | Portée | Description |
|---|---|---|---|
GET | /Export/JSON/projects | projects:read | Tous les projets (optionnel : ?include_tasks=1) |
GET | /Export/JSON/project/{id} | projects:read | Projet individuel |
POST | /Import/JSON/projects | projects:write | Créer de nouveaux projets |
PUT | /Import/JSON/projects | projects:write | Mettre à jour des projets (project_id obligatoire) |
DELETE | /Delete/JSON/project/{id} | projects:delete | Supprimer un projet (suppression en cascade, y compris les tâches) |
GET | /Export/JSON/project_tasks | project_tasks:read | Toutes les tâches (filtres ci-dessous) |
GET | /Export/JSON/project_task/{id} | project_tasks:read | Tâche individuelle |
POST | /Import/JSON/project_tasks | project_tasks:write | Créer de nouvelles tâches (project_id obligatoire) |
PUT | /Import/JSON/project_tasks | project_tasks:write | Mettre à jour des tâches (task_id obligatoire) |
DELETE | /Delete/JSON/project_task/{id} | project_tasks:delete | Supprimer une tâche (le projet est conservé) |
Filtre (exportation)
Projets
?status={id}— Statut du projet?customer_id={id}— client associé?category_id={id}— Catégorie du projet?leader_admin_id={id}— chef de projet?is_private=0|1— projets privés?date_from / ?date_to— Date de création?last_modified={ts}— modifié depuis?include_tasks=1— tâches intégrées
Tâches
?project_id={id}— Tâches d'un projet?status={id}— Statut des tâches?priority=1-5— Priorité?admin_id={id}— responsable attribué?customer_id={id}/?category_id={id}?due_from / ?due_to— Plage de dates d'échéance?progress_min / ?progress_max— Progression (0-100)?last_modified={ts}— modifié depuis
?language=de|en détermine la langue des noms de statuts/catégories. Les méta-blocs project_statuses[] et task_statuses[] fournissent toutes les valeurs de statut disponibles.
Structure de la charge utile (projet)
{
"type": "projects",
"data": [
{
"name": "Website-Relaunch",
"description": "<p>Beschreibung (Default-Sprache)</p>",
"descriptions": [
{ "language_id": 1, "project_name": "Website Relaunch", "project_description": "<p>EN</p>" }
],
"customer_scope": "specific",
"customer_ids": [4711],
"date_start": "2026-07-01",
"date_end": "2026-09-30",
"is_private": false,
"leader_admin_ids": [1],
"category_ids": [2],
"relationships": [ { "target_type": "orders_id", "target_id": 12345 }, { "target_type": "contracts_id", "target_id": 318 } ],
"admin_id": 1,
"status_comment": "Projekt via API angelegt"
}
]
}Structure de la charge utile (tâche)
{
"type": "project_tasks",
"data": [
{
"project_id": 126,
"name": "Konzept erstellen",
"priority": 4,
"progress_percent": 0,
"date_start": "2026-07-01",
"due_date": "2026-07-15",
"hours_planned": 8.5,
"hours_actual": null,
"status_id": 60,
"assigned_admin_ids": [1],
"admin_id": 1,
"status_comment": "Aufgabe via API angelegt"
}
]
}Liens vers les commandes, les tickets et les contrats v2.122.11
relationships[] associe un projet à des commandes (orders_id), des tickets (ticket_id) et, depuis la v2.122.11, également à des contrats (contracts_id), comme dans le backend. Si la clé est présente dans l'enregistrement, PUT remplace tous les liens du projet.
{
"type": "projects",
"data": [{
"project_id": 126,
"relationships": [
{"target_type": "orders_id", "target_id": 12345},
{"target_type": "ticket_id", "target_id": 8812},
{"target_type": "contracts_id", "target_id": 318}
],
"admin_id": 1
}]
}| Cas | jusqu’à la v2.122.10 | à partir de la v2.122.11 |
|---|---|---|
La clé est manquante ou null | les liens restent inchangés | comme auparavant |
[] | PUT supprime tous les liens du projet | comme auparavant |
L'entrée avec contracts_id | l'enregistrement échoue (« Relations non valides ») | La relation est enregistrée |
target_type inconnu, target_id ≤ 0 ou l'entrée n'est pas un objet | L'enregistrement échoue | L'enregistrement échoue, le message mentionne orders_id|ticket_id|contracts_id; aucune partie de cet enregistrement n'est écrite |
relationships Ce n'est pas une liste, mais par exemple un texte | POST crée le projet sans relations, PUT supprime silencieusement toutes les entrées | L'enregistrement échoue (« Invalid relationships (must be a list …) »), rien n'est modifié |
| La commande, le ticket ou le contrat n’existe pas | La relation est tout de même enregistrée | cette relation n’est pas créée, mais le reste de l’enregistrement l’est ; warnings[] signale PROJECT_RELATIONSHIP |
| l’exportation | signale également les entrées sans type, qui ont entraîné l’échec d’une exportation renvoyée | uniquement les entrées des trois types |
"warnings": [{"type": "PROJECT_RELATIONSHIP", "field": "relationships", "entity": "projects",
"message": "relationships: not found: contracts_id 999 — these links were not written.", "first_occurrence": "record 1"}]PUT remplace tous les liens et que l’importation n’écrit que les cibles existantes, une exportation renvoyée perd ses liens vers les commandes, tickets et contrats supprimés. Ils ne renvoyaient de toute façon vers rien ; l’avertissement les mentionne.Remarques
- NOUVEAU v2.36.0 : les projets et les tâches contiennent dans l’exportation
status_history[]— toutes les entrées de statut, y comprisles commentaires(comptes-rendus de réunion),progress_percent,status_nameetuser_name. admin_id= administrateur responsable (enregistré commecreated_by/modified_byet dans l’historique des statuts commeuser_id; si non spécifié = 0/système).status_idest validé par rapport à la gestion des statuts (type« projects »ou «tasks») ; s’il n’est pas spécifié, le statut par défaut est utilisé. Un changement de statut via PUT génère automatiquement une entrée dans l’historique des statuts avecstatus_comment— depuis la v2.40.0,status_commentcrée également une entrée même sans changement de statut (notes de travail/comptes-rendus) ; pour les tâches,progress_percentest intégré à l’entrée en tant que pourcentage d’avancement.descriptions[]est multilingue ; lors d’une requête PUT, la sémantique de fusion s’applique — seules les langues/champs fournis sont remplacés.leader_admin_ids,relationships(projets) etassigned_admin_ids(tâches) ne sont remplacés que si la clé est présente dans la charge utile (replace-on-present).- Une requête POST avec un ID déjà attribué renvoie «
Already exists» — dans ce cas, utilisez PUT (et inversement, «Not found» lors d’une requête PUT sur des ID inconnus). - Attention :
la commande DELETE /project/{id}supprime en cascade toutes les tâches du projet. Les commandes, tickets et contrats associés sont uniquement dissociés, et non supprimés. La réponse contientdeleted_tasks.