REST API · v1

Todo4you REST API
Ontwikkelaarsreferentie

Een JSON REST API om tickets te beheren, reacties te plaatsen, tickets te verplaatsen en te archiveren, projectgegevens te lezen en tags op te vragen. Authenticeer met een persoonlijke Bearer token - geen OAuth, geen SDK's nodig.

Postman Collectie downloaden

Authenticatie

Elk verzoek moet je persoonlijke API token bevatten als Bearer token in de Authorization header. Er zijn geen andere authenticatiemethoden.

1 - Je token ophalen

Log in op Todo4you, ga naar Profiel - API-toegang en klik op Token genereren. Je token is een hexadecimale reeks van 64 tekens. Kopieer deze direct - het wordt slechts een keer getoond.

Profiel → API-toegang
2 - Voeg de header toe
Authorization: Bearer YOUR_64_CHAR_TOKEN
3 - Test je token

Plak je token hieronder om te verifieren dat het werkt en bekijk je projectlijst:

API token

            

Fouten

Alle fouten retourneren JSON met een error-veld dat het probleem beschrijft. Succesvolle antwoorden bevatten nooit een error-veld.

// 422 example { "error": "title is required." }
StatusBetekenis
401Missing or invalid API token
403Token valid but role insufficient for this action (viewer trying to create/move)
404Project or ticket not found, or not accessible with your token
422Validation failed - read the error message for the exact field
Projecten

Projecten weergeven

GET /api/v1/projects

Geeft alle projecten terug waar de geauthenticeerde gebruiker eigenaar of lid van is, alfabetisch gesorteerd. Gebruik het id-veld voor alle volgende verzoeken die een project-ID vereisen. Het role-veld is de rol van de aanroepende gebruiker op het project (manager, editor, contributor of viewer) en docs_enabled geeft aan of het documentatie-gedeelte aan staat voor het project.

Antwoord
200 OK200
{ "projects": [ { "id": 12, "name": "My Project", "prefix": "TDL", "description": "Main development board", "role": "manager", "docs_enabled": true } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects \ -H "Authorization: Bearer YOUR_TOKEN"

Project aanmaken

POST /api/v1/projects

Maakt een nieuw project aan. Je wordt automatisch de projecteigenaar met de rol manager.

Request body (JSON)
VeldTypeBeschrijving
name string verplicht Project name (min 2 characters)
prefix string optioneel Ticket prefix, e.g. TDL. Alphanumeric only, auto-uppercased
description string optioneel Short project description
Antwoord
201 Created201
{ "project": { "id": 25, "name": "My New Project", "prefix": "MNP", "description": "A fresh project" } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"My New Project","prefix":"MNP","description":"A fresh project"}'

Projectstatistieken

GET /api/v1/projects/{id}/stats

Geeft het aantal open tickets in een project terug (alle statussen behalve done). Handig voor conditiecontroles en dashboards.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID - from List projects
Antwoord
200 OK200
{ "open_tickets": 14 }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/stats \ -H "Authorization: Bearer YOUR_TOKEN"

Projectstatussen

GET /api/v1/projects/{id}/statuses

Geeft de geldige statuswaarden voor een project terug. Geef een van deze door aan Ticket verplaatsen.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Antwoord
200 OK200
{ "statuses": [ { "slug": "backlog", "label": "Backlog", "color": "#6c757d", "icon": "fa-inbox", "category": "backlog" }, { "slug": "todo", "label": "To Do", "color": "#0dcaf0", "icon": "fa-list-ul", "category": "todo" }, { "slug": "in_progress", "label": "In Progress", "color": "#ffc107", "icon": "fa-tasks", "category": "active" }, { "slug": "review", "label": "Review", "color": "#0d6efd", "icon": "fa-eye", "category": "review" }, { "slug": "done", "label": "Done", "color": "#198754", "icon": "fa-check-circle", "category": "done" } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/statuses \ -H "Authorization: Bearer YOUR_TOKEN"

Leden weergeven

GET /api/v1/projects/{id}/members

Geeft alle leden van een project terug met hun rollen. Gebruik de id-waarden bij het toewijzen van tickets via Lid toewijzen.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Antwoord
200 OK200
{ "members": [ { "id": 3, "name": "Alice", "avatar": null, "role": "manager" }, { "id": 8, "name": "Bob", "avatar": null, "role": "developer" } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/members \ -H "Authorization: Bearer YOUR_TOKEN"
Tickets

Tickets weergeven

GET /api/v1/projects/{id}/tickets

Geeft alle niet-gearchiveerde tickets in een project terug. Optioneel filteren op statuskolom. Elk ticket bevat de tags en een prefix_ref-veld (bijv. TDL-47).

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Queryparameters
ParameterTypeBeschrijving
status string optioneel Filter by status slug (use GET /projects/{id}/statuses to get valid slugs)
Antwoord
200 OK200
{ "tickets": [ { "id": 301, "project_ticket_number": 47, "prefix_ref": "TDL-47", "title": "Fix login bug", "status": "in_progress", "type": "bug", "priority": "high", "deadline": "2026-03-15", "tags": [ { "id": 5, "name": "frontend", "color": "#e74c3c" } ], "created_at": "2026-03-01 14:22:00" } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/tickets?status=in_progress \ -H "Authorization: Bearer YOUR_TOKEN"

Ticket ophalen

GET /api/v1/projects/{id}/tickets/{number}

Geeft volledige ticketdetails terug inclusief reacties, checklist-items, tags, toegewezen personen en maker. Het number is het ticketnummer binnen het project - het numerieke deel van een referentie zoals TDL-47.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project (e.g. 47 for TDL-47)
Antwoord
200 OK200
{ "ticket": { "id": 301, "prefix_ref": "TDL-47", "title": "Fix login bug", "status": "in_progress", "type": "bug", "priority": "high", "deadline": "2026-03-15", "tags": [ { "id": 5, "name": "frontend", "color": "#e74c3c" } ], "comments": [ { "id": 291, "message": "Found the root cause", "user_id": 8, "user_name": "Alice", "created_at": "2026-03-02 09:15:00" } ], "checklist": [ { "id": 10, "text": "Write tests", "done": 0 }, { "id": 11, "text": "Update docs", "done": 1 } ], "assignees": [ { "id": 8, "name": "Alice" } ], "creator": { "id": 3, "name": "Bob" } } }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/tickets/47 \ -H "Authorization: Bearer YOUR_TOKEN"

Tickets zoeken

GET /api/v1/projects/{id}/tickets/search?q={query}

Zoekt niet-gearchiveerde tickets op trefwoord. Vergelijkt met de tickettitel en beschrijving (niet hoofdlettergevoelig). Geeft resultaten terug gesorteerd op meest recent bijgewerkt.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Queryparameters
ParameterTypeBeschrijving
q string verplicht Search keyword(s) to match against title and description
Antwoord
200 OK200
{ "tickets": [ { "id": 301, "project_ticket_number": 47, "prefix_ref": "TDL-47", "title": "Fix login bug", "status": "in_progress", "type": "bug", "tags": [ { "id": 5, "name": "frontend", "color": "#e74c3c" } ] } ] }
Voorbeeld
curl "https://api.todo4you.com/api/v1/projects/12/tickets/search?q=login" \ -H "Authorization: Bearer YOUR_TOKEN"
Tickets

Ticket aanmaken

POST /api/v1/projects/{id}/tickets

Maakt een nieuw ticket aan in een project en retourneert de referentie (bijv. TDL-47). Standaard in de backlog-kolom, tenzij een status is opgegeven. Vereist de rol editor of manager in het project.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Request body (JSON)
VeldTypeBeschrijving
title string verplicht Ticket title
type string optioneel bug - feature - release
Default: feature
priority string optioneel urgent - high - medium - low
Default: none
status string optioneel Status slug (use Project statuses to get valid slugs)
Default: first status in project
deadline string optioneel Date in YYYY-MM-DD format
story_points integer optioneel 0 - 3. Only accepted when the project uses story points estimation
estimated_hours number optioneel Estimated hours (e.g. 4.5). Only accepted when the project uses hours estimation
checklist string[] optioneel Array of checklist item texts, e.g. ["Write tests", "Update docs"]
tags integer[] optioneel Array of tag IDs from List tags
Antwoord
201 Created201
{ "ticket_ref": "TDL-47" }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "title": "Fix login bug", "type": "bug", "priority": "high", "status": "todo", "deadline": "2026-03-15", "checklist": ["Write tests", "Update docs"], "tags": [5, 12] }'

Ticket bijwerken

POST /api/v1/projects/{id}/tickets/{number}/update

Werkt een of meer velden van een ticket bij. Stuur alleen de velden die je wilt wijzigen. Vereist de rol editor of manager. Om de statuskolom te wijzigen, gebruik Ticket verplaatsen in plaats daarvan.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Request body (JSON)
VeldTypeBeschrijving
titlestringoptioneelNew title (cannot be empty)
descriptionstringoptioneelNew description (empty string to clear)
typestringoptioneelbug - feature - release
prioritystring|nulloptioneelurgent - high - medium - low - null to clear
deadlinestring|nulloptioneelYYYY-MM-DD or null to clear
story_pointsinteger|nulloptioneel0-3 or null to clear (story points mode only)
estimated_hoursnumber|nulloptioneelHours or null to clear (hours mode only)
tagsinteger[]optioneelReplace all tags with this list of tag IDs
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/update \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Updated title","priority":"urgent","tags":[5,12]}'

Reactie toevoegen

POST /api/v1/projects/{id}/tickets/{number}/comments

Plaatst een reactie op een ticket. Elk projectlid kan reageren. Het number is het ticketnummer binnen het project - het numerieke deel van een referentie zoals TDL-47.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project (e.g. 47 for TDL-47)
Request body (JSON)
VeldTypeBeschrijving
commentstringverplichtComment text
Antwoord
201 Created201
{ "ok": true, "reaction_id": 291 }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"comment":"Triggered by Homey at 08:32"}'

Ticket verplaatsen

POST /api/v1/projects/{id}/tickets/{number}/move

Verplaatst een ticket naar een andere statuskolom. Triggert een realtime boardupdate voor alle actieve kijkers. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Request body (JSON)
VeldTypeBeschrijving
status string verplicht Status slug (use Project statuses to get valid slugs)
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/move \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"status":"done"}'

Ticket archiveren

POST /api/v1/projects/{id}/tickets/{number}/archive

Archiveert een ticket en verwijdert het van het actieve board. Gearchiveerde tickets kunnen worden hersteld vanaf de projectarchiefpagina. Vereist de rol editor of beheerder.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/archive \ -H "Authorization: Bearer YOUR_TOKEN"

Ticket uit archief halen

POST /api/v1/projects/{id}/tickets/{number}/unarchive

Herstelt een eerder gearchiveerd ticket terug op het bord. Geeft het volledige ticket terug (met aanmaker, toegewezenen, tags en checklisttellingen) zodat de client direct kan vernieuwen. Vereist manager-rol.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Antwoord
200 OK200
{ "ok": true, "ticket": { "id": 312, "project_ticket_number": 47, "prefix_ref": "TDL-47", "title": "Set up CI", "status": "in_progress", "archived_at": null } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/unarchive \ -H "Authorization: Bearer YOUR_TOKEN"

Gearchiveerde tickets opvragen

GET /api/v1/projects/{id}/archived-tickets

Geeft maximaal 100 recent gearchiveerde tickets in een project terug, nieuwste eerst. Optioneel filteren op titel met de q queryparameter (minimaal 2 tekens). Het antwoord bevat ook de role van de aanroepende gebruiker op dit project, zodat een client kan bepalen of Herstellen (managers) en Verwijderen (managers of ticketmaker) zichtbaar zijn. Vereist viewer-rol.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Queryparameters
ParameterTypeBeschrijving
qstringOptionele zoekopdracht op titel, niet hoofdlettergevoelig. Minimaal 2 tekens.
Antwoord
200 OK200
{ "success": true, "role": "manager", "tickets": [ { "id": 312, "project_id": 12, "project_ticket_number": 47, "prefix_ref": "TDL-47", "title": "Set up CI", "type": "feature", "status": "done", "priority": "medium", "deadline": null, "story_points": 2, "estimated_hours": null, "sort_order": 0, "archived_at": "2026-04-19 14:32:11", "created_by": 7 } ] }
Voorbeeld
curl "https://api.todo4you.com/api/v1/projects/12/archived-tickets?q=ci" \ -H "Authorization: Bearer YOUR_TOKEN"

Ticket verwijderen

POST /api/v1/projects/{id}/tickets/{number}/delete

Verwijdert een ticket permanent (soft delete). De maker van het ticket kan eigen tickets verwijderen; anders is de manager-rol vereist.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Lid toewijzen

POST /api/v1/projects/{id}/tickets/{number}/assign

Wijst een projectlid toe aan een ticket. De gebruiker moet lid zijn van het project. Gebruik Leden weergeven om geldige gebruikers-ID's te vinden. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Request body (JSON)
VeldTypeBeschrijving
user_idintegerverplichtThe project member's user ID
Antwoord
201 Created201
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/assign \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"user_id":8}'

Toewijzing lid opheffen

POST /api/v1/projects/{id}/tickets/{number}/unassign

Verwijdert een lid van de toegewezen-lijst. Vereist de rol editor of manager

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
numberintegerTicket number within the project
Request body (JSON)
VeldTypeBeschrijving
user_idintegerverplichtThe user ID to unassign
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/47/unassign \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"user_id":8}'
Board

Boardgegevens

GET /api/v1/projects/{id}/board

Geeft in één keer het volledige kanbanbord voor een project terug: alle kolommen met de bijbehorende tickets, projecttags, leden, snelheid (tickets die in de afgelopen 7 dagen zijn afgehandeld) en de rol van de ingelogde gebruiker. Elk ticket bevat tags, een lijst met toegewezen personen, het aantal reacties, de voortgang van de checklist en informatie over de maker.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Antwoord
200 OK200
{ "project": { "id": 12, "name": "My Project", "prefix": "TDL", "estimation_mode": "story_points", "role": "manager", "docs_enabled": true }, "columns": [ { "status": "backlog", "hidden": false, "tickets": [ { "id": 101, "title": "Fix bug", "prefix_ref": "TDL-1", "tags": [...], "assignees": [...], "creator": {...}, "reaction_count": 3, "checklist_total": 5, "checklist_done": 2 } ] }, ... ], "tags": [...], "members": [...], "velocity": 8 }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/board \ -H "Authorization: Bearer YOUR_TOKEN"

Tickets sorteren

POST /api/v1/projects/{id}/tickets/sort

Herordent tickets binnen een kolom. Geef de status en de volledige geordende lijst van ticket-ID's door. Vereist de contributor-rol of hoger.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Request body (JSON)
VeldTypeBeschrijving
statusstringverplichtColumn status being reordered
ticket_idsinteger[]verplichtOrdered array of ticket IDs
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tickets/sort \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"status":"todo","ticket_ids":[45,12,78]}'
Checklist

Checklist-item toevoegen

POST /api/v1/tickets/{ticketId}/checklist

Voegt een checklist-item toe aan een ticket. Het item begint als niet-aangevinkt en wordt aan het einde toegevoegd. Vereist de rol editor of beheerder.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerTicket ID (not the project ticket number)
Request body (JSON)
VeldTypeBeschrijving
textstringverplichtItem text (max 500 characters)
Antwoord
201 Created201
{ "ok": true, "item": { "id": 42, "ticket_id": 101, "text": "Write tests", "done": 0, "sort_order": 3 } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/101/checklist \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"Write tests"}'

Checklist-item aan/uit zetten

POST /api/v1/checklist/{itemId}/toggle

Schakelt een checklist-item tussen afgerond en niet afgerond. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
itemIdintegerChecklist item ID
Antwoord
200 OK200
{ "ok": true, "done": 1 }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/checklist/42/toggle \ -H "Authorization: Bearer YOUR_TOKEN"

Checklist-item bijwerken

POST /api/v1/checklist/{itemId}/update

Werkt de tekst van een checklist-item bij. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
itemIdintegerChecklist item ID
Request body (JSON)
VeldTypeBeschrijving
textstringverplichtNew item text (max 500 characters)
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/checklist/42/update \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"Write integration tests"}'

Checklist-item verwijderen

POST /api/v1/checklist/{itemId}/delete

Verwijdert een checklist-item van een ticket. Vereist de editor- of manager-rol.

Padparameters
ParameterTypeBeschrijving
itemIdintegerChecklist item ID
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/checklist/42/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Checklist-items sorteren

POST /api/v1/tickets/{ticketId}/checklist/sort

Herordent alle checklist-items voor een ticket. Geef de volledige geordende lijst van item-ID's door. Vereist de editor- of manager-rol.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerTicket ID
Request body (JSON)
VeldTypeBeschrijving
item_idsinteger[]verplichtOrdered array of checklist item IDs
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/101/checklist/sort \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"item_ids":[42,43,41]}'
Blokkades

Blokkade toevoegen

POST /api/v1/tickets/{ticketId}/blockers

Markeert een ander ticket in hetzelfde project als blocker voor dit ticket. Een ticket kan zichzelf niet blokkeren. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerTicket ID of the blocked ticket
Request body (JSON)
VeldTypeBeschrijving
blocker_ticket_idintegerverplichtTicket ID of the blocking ticket (must be in the same project)
Antwoord
201 Created201
{ "ok": true, "blockers": [ { "id": 55, "title": "Setup database", "status": "in_progress", "project_ticket_number": 3 } ] }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/101/blockers \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"blocker_ticket_id":55}'

Blocker verwijderen

POST /api/v1/tickets/{ticketId}/blockers/{blockerTicketId}/delete

Verwijdert een blocker-relatie van een ticket. Geeft de bijgewerkte blockerlijst terug. Vereist de editor- of manager-rol.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerTicket ID of the blocked ticket
blockerTicketIdintegerTicket ID of the blocker to remove
Antwoord
200 OK200
{ "ok": true, "blockers": [] }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/101/blockers/55/delete \ -H "Authorization: Bearer YOUR_TOKEN"
Bijlagen

Bestanden uploaden

POST /api/v1/tickets/{ticketId}/attachments

Uploadt een of meer bestanden naar een ticket. Verstuur als multipart/form-data met bestanden in het files[]-veld. Maximale bestandsgrootte is 10 MB per bestand. Geaccepteerde typen: afbeeldingen, PDF, Office-documenten, CSV, platte tekst en archieven. Vereist de rol editor of manager.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerTicket ID
Request body (multipart/form-data)
VeldTypeBeschrijving
files[]fileverplichtOne or more files to upload
Antwoord
200 OK200
{ "ok": true, "attachments": [ { "id": 7, "ticket_id": 101, "original_name": "screenshot.png", "filesize": 48210, "mime_type": "image/png" } ] }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/101/attachments \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "files[]=@screenshot.png" \ -F "files[]=@report.pdf"

Bestand ophalen

GET /api/v1/attachments/{id}

Downloadt of toont een bijlage. Afbeeldingen en PDF's worden inline weergegeven; andere bestandstypen starten een download. De gebruiker moet minimaal viewer-toegang hebben tot het project.

Padparameters
ParameterTypeBeschrijving
idintegerAttachment ID
Antwoord

Geeft het binaire bestand terug met de juiste Content-Type- en Content-Disposition-headers.

Voorbeeld
curl https://api.todo4you.com/api/v1/attachments/7 \ -H "Authorization: Bearer YOUR_TOKEN" \ --output screenshot.png

Bestand verwijderen

POST /api/v1/attachments/{id}/delete

Verwijdert een bijlage. Je kunt bestanden verwijderen die je hebt ge-upload, bestanden op tickets die je hebt aangemaakt, of elk bestand als je manager bent.

Padparameters
ParameterTypeBeschrijving
idintegerAttachment ID
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/attachments/7/delete \ -H "Authorization: Bearer YOUR_TOKEN"
Opmerkingen

Opmerking bewerken

POST /api/v1/reactions/{id}/update

Werkt de tekst van een reactie bij. Je kunt alleen je eigen reacties bewerken.

Padparameters
ParameterTypeBeschrijving
idintegerReaction (comment) ID
Request body (JSON)
VeldTypeBeschrijving
messagestringverplichtNew comment text
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/reactions/15/update \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message":"Updated comment text"}'

Opmerking verwijderen

POST /api/v1/reactions/{id}/delete

Verwijdert een reactie met soft-delete. Je kunt je eigen reacties verwijderen; managers kunnen elke reactie verwijderen.

Padparameters
ParameterTypeBeschrijving
idintegerReaction (comment) ID
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/reactions/15/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Reactiebestanden uploaden

POST /api/v1/reactions/{id}/attachments

Uploadt bestanden gekoppeld aan een specifieke reactie. Werkt hetzelfde als ticketbijlagen maar de bestanden zijn gekoppeld aan de reactie. Verstuur als multipart/form-data met files[].

Padparameters
ParameterTypeBeschrijving
idintegerReaction (comment) ID
Request body (multipart/form-data)
VeldTypeBeschrijving
files[]fileverplichtOne or more files to upload
Antwoord
200 OK200
{ "ok": true, "attachments": [...] }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/reactions/15/attachments \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "files[]=@image.png"
Tags

Tags weergeven

GET /api/v1/projects/{id}/tags

Geeft alle tags terug die in een project zijn gedefinieerd. Gebruik de id-waarden bij het aanmaken van tickets met het tags-veld.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Antwoord
200 OK200
{ "tags": [ { "id": 5, "name": "frontend", "color": "#e74c3c", "sort_order": 1 }, { "id": 12, "name": "backend", "color": "#3498db", "sort_order": 2 } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/tags \ -H "Authorization: Bearer YOUR_TOKEN"

Tag aanmaken

POST /api/v1/projects/{id}/tags

Maakt een nieuwe tag aan in een project. Vereist de rol manager.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
Request body (JSON)
VeldTypeBeschrijving
namestringverplichtTag name (max 100 characters)
colorstringoptioneelHex color, e.g. #e74c3c
Default: #6c757d
Antwoord
201 Created201
{ "tag": { "id": 18, "name": "frontend", "color": "#e74c3c", "sort_order": 3 } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tags \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"frontend","color":"#e74c3c"}'

Tag verwijderen

POST /api/v1/projects/{id}/tags/{tagId}/delete

Verwijdert een tag uit een project. De tag wordt automatisch verwijderd van alle tickets die deze gebruiken. Vereist de rol manager.

Padparameters
ParameterTypeBeschrijving
idintegerProject ID
tagIdintegerTag ID from List tags
Antwoord
200 OK200
{ "ok": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/tags/5/delete \ -H "Authorization: Bearer YOUR_TOKEN"
Tijdregistratie

Tijdregistraties weergeven

GET /api/v1/tickets/{ticketId}/time-entries

Geeft alle tijdregistraties voor een ticket terug.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerThe ticket ID
Antwoord
200 OK200
{ "success": true, "entries": [ { "id": 1, "ticket_id": 42, "user_id": 3, "project_id": 5, "minutes": 30, "is_running": 0, "started_at": "2025-01-15 09:00:00", "stopped_at": "2025-01-15 09:30:00", "user_name": "Alice", "user_avatar": "avatar.jpg" } ], "total_minutes": 45 }
Voorbeeld
curl https://api.todo4you.com/api/v1/tickets/42/time-entries \ -H "Authorization: Bearer YOUR_TOKEN"

Handmatige registratie toevoegen

POST /api/v1/tickets/{ticketId}/time-entries

Voegt een handmatige tijdsregistratie toe (geen lopende timer).

Padparameters
ParameterTypeBeschrijving
ticketIdintegerThe ticket ID
Request body (JSON)
VeldTypeBeschrijving
minutesintegerverplichtDuration in minutes (min 1)
Antwoord
200 OK200
{ "success": true, "entry": { "id": 2, "ticket_id": 42, "minutes": 30, "is_running": 0, "started_at": null, "stopped_at": null } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/42/time-entries \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"minutes": 30}'

Timer starten

POST /api/v1/tickets/{ticketId}/time-entries/start

Start een lopende timer op een ticket. Er kan maar een timer per gebruiker tegelijk lopen.

Padparameters
ParameterTypeBeschrijving
ticketIdintegerThe ticket ID
Antwoord
200 OK200
{ "success": true, "entry": { "id": 3, "ticket_id": 42, "minutes": 0, "is_running": 1, "started_at": "2025-01-15 09:00:00", "stopped_at": null, "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-42" } }
422 Unprocessable Entity422
{ "error": "You already have a running timer.", "running_ticket_id": 55 }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/tickets/42/time-entries/start \ -H "Authorization: Bearer YOUR_TOKEN"

Timer stoppen

POST /api/v1/time-entries/{entryId}/stop

Stopt een lopende of gepauzeerde timer en berekent de uiteindelijke duur.

Padparameters
ParameterTypeBeschrijving
entryIdintegerThe time entry ID
Antwoord
200 OK200
{ "success": true, "entry": { "id": 3, "ticket_id": 42, "minutes": 45, "is_running": 0, "started_at": "2025-01-15 09:00:00", "stopped_at": "2025-01-15 09:45:00", "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-42" } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/time-entries/3/stop \ -H "Authorization: Bearer YOUR_TOKEN"

Timer pauzeren

POST /api/v1/time-entries/{entryId}/pause

Pauzeert een lopende timer. Opgebouwde tijd wordt bewaard in het minutenveld.

Padparameters
ParameterTypeBeschrijving
entryIdintegerThe time entry ID
Antwoord
200 OK200
{ "success": true, "entry": { "id": 3, "ticket_id": 42, "minutes": 15, "is_running": 2, "started_at": "2025-01-15 09:00:00", "stopped_at": null, "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-42" } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/time-entries/3/pause \ -H "Authorization: Bearer YOUR_TOKEN"

Timer hervatten

POST /api/v1/time-entries/{entryId}/resume

Hervat een gepauzeerde timer. Kan niet hervatten als er al een andere timer loopt.

Padparameters
ParameterTypeBeschrijving
entryIdintegerThe time entry ID
Antwoord
200 OK200
{ "success": true, "entry": { "id": 3, "ticket_id": 42, "minutes": 15, "is_running": 1, "started_at": "2025-01-15 10:00:00", "stopped_at": null, "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-42" } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/time-entries/3/resume \ -H "Authorization: Bearer YOUR_TOKEN"

Invoer bijwerken

POST /api/v1/time-entries/{entryId}/update

Werkt de minuten van een gestopte tijdinvoer bij. Eigenaar of projectmanager kan bijwerken.

Padparameters
ParameterTypeBeschrijving
entryIdintegerThe time entry ID
Request body (JSON)
VeldTypeBeschrijving
minutesintegerverplichtNew duration in minutes (min 1)
Antwoord
200 OK200
{ "success": true, "entry": { "id": 3, "ticket_id": 42, "minutes": 60, "is_running": 0, "started_at": "2025-01-15 09:00:00", "stopped_at": "2025-01-15 09:45:00" } }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/time-entries/3/update \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"minutes": 60}'

Item verwijderen

POST /api/v1/time-entries/{entryId}/delete

Verwijdert een tijdregistratie. De eigenaar of projectmanager kan verwijderen.

Padparameters
ParameterTypeBeschrijving
entryIdintegerThe time entry ID
Antwoord
200 OK200
{ "success": true }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/time-entries/3/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Lopende timer

GET /api/v1/time-entries/running

Geeft de momenteel lopende of gepauzeerde timer terug voor de geauthenticeerde gebruiker, met ticket- en projectdetails.

Antwoord
200 OK200
{ "success": true, "entry": { "id": 1, "ticket_id": 42, "minutes": 15, "is_running": 1, "started_at": "2025-01-15 09:00:00", "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-5" } }

Wanneer er geen timer loopt, is entry null.

Voorbeeld
curl https://api.todo4you.com/api/v1/time-entries/running \ -H "Authorization: Bearer YOUR_TOKEN"

Actieve timers

GET /api/v1/time-entries/active

Geeft alle lopende en gepauzeerde timers terug voor de geauthenticeerde gebruiker, met ticket- en projectdetails. Anders dan /time-entries/running dat slechts een item teruggeeft, geeft dit endpoint alle actieve timers terug.

Antwoord
200 OK200
{ "success": true, "entries": [ { "id": 1, "ticket_id": 42, "minutes": 15, "is_running": 1, "started_at": "2025-01-15 09:00:00", "ticket_title": "Fix login bug", "project_name": "My App", "ticket_ref": "APP-5" }, { "id": 2, "ticket_id": 18, "minutes": 45, "is_running": 2, "started_at": "2025-01-15 08:00:00", "ticket_title": "Update dashboard", "project_name": "My App", "ticket_ref": "APP-18" } ] }

Wanneer er geen timers actief zijn, is entries een lege array. is_running is 1 voor lopend en 2 voor gepauzeerd.

Voorbeeld
curl https://api.todo4you.com/api/v1/time-entries/active \ -H "Authorization: Bearer YOUR_TOKEN"
Notificaties

Notificaties weergeven

GET /api/v1/notifications

Geeft de laatste 20 meldingen terug en markeert alles als gelezen.

Antwoord
200 OK200
{ "notifications": [ { "id": 1, "type": "reaction", "message": "commented on APP-5: Fix login bug", "ticket_id": 42, "project_id": 5, "read_at": null, "created_at": "2025-01-15 10:00:00" } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/notifications \ -H "Authorization: Bearer YOUR_TOKEN"

Aantal ongelezen

GET /api/v1/notifications/unread-count

Geeft het aantal ongelezen meldingen terug.

Antwoord
200 OK200
{ "count": 3 }
Voorbeeld
curl https://api.todo4you.com/api/v1/notifications/unread-count \ -H "Authorization: Bearer YOUR_TOKEN"

Als gelezen markeren voor ticket

POST /api/v1/notifications/mark-read-for-ticket

Markeert alle ongelezen notificaties voor een specifiek ticket als gelezen.

Request body (JSON)
VeldTypeBeschrijving
ticket_idintegerverplichtThe ticket ID to mark notifications as read for
Antwoord
200 OK200
{ "success": true, "unread_count": 3 }
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/notifications/mark-read-for-ticket \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ticket_id": 42}'
Documentatie

Documentatie-hoofdmap opvragen

GET /api/v1/projects/{id}/docs

Geeft mappen en artikelen in de hoofdmap van de documentatie van een project terug. Het antwoord bevat ook de role van de aanroepende gebruiker, zodat de client kan bepalen of schrijfacties zichtbaar zijn. Geeft 404 als documentatie niet aan staat voor het project (docs_enabled is false in de project-payload). Alle documentatie-endpoints gebruiken deze controle.

Antwoord
200 OK200
{ "success": true, "role": "manager", "current_folder": null, "breadcrumbs": [], "folders": [ { "id": 3, "project_id": 12, "parent_id": null, "title": "Onboarding", "slug": "onboarding", "sort_order": 0 } ], "articles": [ { "id": 7, "project_id": 12, "folder_id": null, "title": "Welcome", "slug": "welcome", "content": "# Welcome\n\nGetting started...", "sort_order": 0 } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/docs \ -H "Authorization: Bearer YOUR_TOKEN"

Inhoud van map opvragen

GET /api/v1/projects/{id}/docs/folders/{folder_id}

Zelfde structuur als de root-listing, maar beperkt tot de inhoud van één map. Het antwoord bevat een current_folder-object en de volledige breadcrumbs-keten van de root naar deze map.

Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/docs/folders/3 \ -H "Authorization: Bearer YOUR_TOKEN"

Map aanmaken

POST /api/v1/projects/{id}/docs/folders

Maakt een nieuwe map aan. Vereist contributor-rol of hoger.

Request body (JSON)
VeldTypeBeschrijving
titlestringverplichtFolder name
parent_idintegeroptioneelParent folder id, or null/omitted to create at the root
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/folders \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Onboarding","parent_id":null}'

Map bijwerken

POST /api/v1/projects/{id}/docs/folders/{folder_id}

Hernoemt of verplaatst een map. Stuur alleen de velden die je wilt wijzigen. Vereist contributor-rol of hoger.

Request body (JSON)
VeldTypeBeschrijving
titlestringoptioneelNew title
parent_idinteger | nulloptioneelMove to this parent. Pass null to move to the root. Omit to keep the parent unchanged. A folder cannot be its own parent.
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/folders/3 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Onboarding (renamed)"}'

Map verwijderen

POST /api/v1/projects/{id}/docs/folders/{folder_id}/delete

Verwijdert een map (soft delete). Onderliggende mappen en artikelen worden verplaatst naar de bovenliggende map in plaats van verwijderd, zodat niets verloren gaat. Vereist contributor-rol of hoger. Het antwoord bevat parent_id zodat de client die weergave kan vernieuwen.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/folders/3/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Artikel opvragen

GET /api/v1/projects/{id}/docs/articles/{article_id}

Geeft de markdown-inhoud van het artikel terug, samen met bijlagen, reacties (met auteurinformatie), breadcrumbs, de role van de aanroepende gebruiker en current_user_id, zodat de client weet of "bewerken" / "verwijderen" zichtbaar moet zijn op individuele reacties.

Antwoord
200 OK200
{ "success": true, "role": "manager", "current_user_id": 42, "article": { "id": 7, "project_id": 12, "folder_id": null, "title": "Welcome", "slug": "welcome", "content": "# Welcome\n\nMarkdown body.", "created_by": 42, "updated_by": null }, "breadcrumbs": [], "attachments": [ { "id": 11, "original_name": "diagram.png", "filesize": 12345, "mime_type": "image/png" } ], "comments": [ { "id": 5, "user_id": 42, "user_name": "Jorden", "message": "Looks good" } ] }
Voorbeeld
curl https://api.todo4you.com/api/v1/projects/12/docs/articles/7 \ -H "Authorization: Bearer YOUR_TOKEN"

Artikel aanmaken

POST /api/v1/projects/{id}/docs/articles

Maakt een nieuw artikel aan. Markdown wordt ondersteund in content. Vereist contributor-rol of hoger.

Request body (JSON)
VeldTypeBeschrijving
titlestringverplichtArticle title
contentstringoptioneelMarkdown content. Defaults to empty string
folder_idintegeroptioneelFolder to place the article in. Omit for root
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"How we deploy","content":"## Steps\n1. Push to main","folder_id":3}'

Artikel bijwerken

POST /api/v1/projects/{id}/docs/articles/{article_id}

Bewerkt een artikel. Stuur alleen de velden die je wilt wijzigen. De server zet updated_by op de aanroepende gebruiker. Vereist contributor-rol of hoger.

Request body (JSON)
VeldTypeBeschrijving
titlestringoptioneelNew title
contentstringoptioneelNew markdown content
folder_idinteger | nulloptioneelMove to this folder. Pass null to move to root. Omit to leave unchanged.
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles/7 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content":"Updated body."}'

Artikel verwijderen

POST /api/v1/projects/{id}/docs/articles/{article_id}/delete

Verwijdert een artikel (soft delete). Vereist contributor-rol of hoger.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles/7/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Artikel kopiëren

POST /api/v1/projects/{id}/docs/articles/{article_id}/copy

Dupliceert een artikel in dezelfde map. Het nieuwe artikel krijgt het suffix (copy) in de titel en is eigendom van de aanroepende gebruiker. Vereist contributor-rol of hoger.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles/7/copy \ -H "Authorization: Bearer YOUR_TOKEN"

Reactie op artikel toevoegen

POST /api/v1/projects/{id}/docs/articles/{article_id}/comments

Plaatst een reactie op een artikel. Iedereen met view-toegang tot het project mag reageren.

Request body (JSON)
VeldTypeBeschrijving
messagestringverplichtComment body
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles/7/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message":"Looks good!"}'

Opmerking bewerken

POST /api/v1/projects/{id}/docs/comments/{comment_id}

Bewerkt een reactie. Alleen de auteur van de reactie mag zijn eigen reactie bewerken.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/comments/5 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message":"updated comment"}'

Opmerking verwijderen

POST /api/v1/projects/{id}/docs/comments/{comment_id}/delete

Verwijdert een reactie. De auteur van de reactie mag zijn eigen reactie verwijderen, een manager mag elke reactie verwijderen.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/comments/5/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Bijlagen uploaden

POST /api/v1/projects/{id}/docs/articles/{article_id}/attachments

Uploadt één of meer bestanden naar een documentatie-artikel. Verstuur als multipart/form-data met bestanden in het files[]-veld. Maximaal 10 MB per bestand. Dezelfde toegestane types als ticket-bijlagen (afbeeldingen, PDF, Office-documenten, CSV, platte tekst, archieven). Vereist contributor-rol of hoger.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/articles/7/attachments \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "files[]=@./diagram.png" \ -F "files[]=@./spec.pdf"

Get attachment

GET /api/v1/projects/{id}/docs/attachments/{attachment_id}

Stuurt het bestand terug. Afbeeldingen en PDF's worden inline weergegeven, andere types als download. Het endpoint stelt Content-Type, Content-Disposition en een private Cache-Control-header in.

Voorbeeld
curl -OJ https://api.todo4you.com/api/v1/projects/12/docs/attachments/11 \ -H "Authorization: Bearer YOUR_TOKEN"

Delete attachment

POST /api/v1/projects/{id}/docs/attachments/{attachment_id}/delete

Verwijdert een bijlage van schijf en uit de database. Vereist contributor-rol of hoger.

Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/attachments/11/delete \ -H "Authorization: Bearer YOUR_TOKEN"

Mappen en artikelen sorteren

POST /api/v1/projects/{id}/docs/sort

Stelt de sort_order in voor mappen en/of artikelen op basis van de volgorde in de request-arrays. De positie in elke array wordt de nieuwe sort_order. Vereist contributor-rol of hoger.

Request body (JSON)
VeldTypeBeschrijving
foldersint[]optioneelFolder ids in the desired order
articlesint[]optioneelArticle ids in the desired order
Voorbeeld
curl -X POST https://api.todo4you.com/api/v1/projects/12/docs/sort \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"folders":[3,1,2],"articles":[12,10,11]}'

Binnenkort beschikbaar

Onze native app voor macOS is in ontwikkeling en is binnenkort beschikbaar in de App Store.