Overview
The Todo Lists API allows you to retrieve and manage todo items including:- Agreements - Active payment plans with debtors
- Debtor Requests - Portal submissions requiring human review (disputes, hardship declarations, payment plan proposals)
- AI Detections - Items flagged by AI during calls (disputes, objections)
The legacy type names
blocking_dispute and non_blocking_dispute are still accepted as query parameters and URL path segments for backward compatibility. However, all responses now use the canonical names debtor_request and ai_detection.Todo Types
Agreements (agreement)
Payment plans reached with debtors, including:
- Installment schedules
- Payment tracking
- Plan duration and start dates
- Grouped debts (multiple debts under a single payment plan return extra fields:
is_group,debt_count,total_amount,currency,debts)
Debtor Requests (debtor_request)
Items submitted by debtors through the portal. Collection is paused. Sub-types:
| Sub-type | Description |
|---|---|
portal_dispute | Debtor submitted a formal dispute with optional proof files |
hardship | Debtor declared financial hardship |
payment_plan | Debtor proposed a payment plan |
AI Detections (ai_detection)
Items flagged by AI during automated calls. Collection is not paused. Sub-types:
| Sub-type | Description |
|---|---|
ai_dispute | AI detected a potential dispute during a call |
objection | AI detected a debtor objection during a call |
Dispute Statuses
suggested- Pending reviewvalidated- Dispute has been validatedrejected- Dispute was rejected
Endpoints
List Todos
Query Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
page | integer | Page number | 1 |
limit | integer | Items per page (max 100) | 20 |
type | string | Filter by type: agreement, debtor_request, ai_detection, or all | all |
period | string | Time period: today, since_yesterday, since_last_week, since_last_month, since_last_year, since_beginning | since_last_month |
debt_id | string | Filter by encrypted debt ID | - |
Response
Grouped agreement fields
When an agreement covers multiple debts, the response includes additional fields:| Field | Type | Description |
|---|---|---|
is_group | boolean | true for grouped agreements |
debt_count | integer | Number of debts in the group |
total_amount | float | Combined amount across all debts |
currency | string | Currency code (e.g. EUR) |
debts | array | All debts in the group, each with id, reference, amount, status, status_id |
debt | object | First debt in the group (for backward compatibility) |
Debtor Request sub-type fields
Depending onsub_type, debtor requests include different fields:
portal_dispute: status, severity, title, description, theme, detected_content, ai_confidence, proof_files
hardship: employment_status, is_temporary, expected_recovery_period, check_in_date, check_in_due
payment_plan: monthly_amount, start_date, number_of_installments, first_payment_amount, debtor_message
AI Detection sub-type fields
ai_dispute: status, severity, title, description, theme, detected_content, ai_confidence, source, audio_url, followup_id, call_id
objection: objection_type, detected_content, ai_confidence, severity, theme, audio_url, followup_id, call_id
Get Single Todo
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type | string | Todo type: agreement, debtor_request, or ai_detection |
id | string | Encrypted todo ID (for agreements: debt ID; for disputes: dispute ID) |
Response
When
audio_url or pdf_url are present, they are pre-signed S3 URLs valid for 1 hour. The media_urls_expire_at field indicates when they expire.Update Todo Status
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type | string | Todo type: agreement, debtor_request, or ai_detection |
id | string | Encrypted todo ID |
Request Body (Agreement)
| Field | Type | Required | Description |
|---|---|---|---|
debt_status_id | string | No | Encrypted debt status ID |
plan_months | integer | No | Duration of payment plan in months |
plan_start_date | string | No | Start date of payment plan (ISO 8601) |
first_payment_amount | float | No | Amount of first payment |
Request Body (Dispute)
| Field | Type | Required | Description |
|---|---|---|---|
status | string | No | New status: suggested, validated, or rejected |
admin_notes | string | No | Additional notes about the status change |
Get Todo Statistics
Query Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
period | string | Time period filter | since_last_month |
Response
The
blocking_disputes and non_blocking_disputes keys in the stats response are kept for backward compatibility. Use debtor_requests and ai_detections for new integrations.Error Responses
| Status Code | Description |
|---|---|
| 400 | Bad Request - Invalid parameters or type |
| 401 | Unauthorized - Invalid or missing API token |
| 403 | Forbidden - Company not authorized |
| 404 | Not Found - Todo or debt not found |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Example: Processing Todos
Webhooks
You can configure webhooks to be notified when:- New disputes are detected
- Agreements are created or modified
- Dispute status changes
Authentication & Scopes
All endpoints require a valid Bearer token. Required OAuth scopes:| Endpoint | Scope |
|---|---|
| List Todos | debts:read |
| Get Single Todo | debts:read |
| Get Todo Statistics | debts:read |
| Update Todo Status | debts:write |
Rate Limits
- Read endpoints (list, get, stats): 1,000 requests per hour
- Write endpoints (update status): 500 requests per hour
Best Practices
- Process debtor requests first - These pause collection and need immediate attention
- Use period filters - Focus on recent todos to avoid processing old data
- Monitor agreement installments - Check for overdue payments regularly
- Include admin notes - Always document status changes for audit trail
- Use stats endpoint - Get a quick overview before fetching detailed lists
- Handle media URL expiry - Pre-signed URLs for audio/PDF expire after 1 hour; re-fetch if needed