Skip to content
Select themeSelect language

post_api_reports_schedules

POST
/api/reports/schedules
curl --request POST \
--url https://example.com/api/reports/schedules \
--header 'Content-Type: application/json' \
--cookie supacloud_session=<supacloud_session> \
--data '{ "anchor_day": 1, "cadence": "example", "discord": true, "email": true, "email_to": "example", "in_app": true, "name": "example", "project_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "recipient_mode": "example", "report_kind": "example", "send_times": [ "example" ], "telegram": true, "timezone": "example", "window_days": 1 }'
Media typeapplication/json
object
anchor_day
integer | null format: int32
cadence
required
string
discord
boolean
email
boolean
email_to
string | null
in_app

In-app (user_notifications) delivery channel.

boolean
name
required

Human label for the schedule (required, non-blank).

string
project_id
string | null format: uuid
recipient_mode

#626 §25 — creator (default) or owner.

string
report_kind

#626 §25 — the report kind; defaults to overview when omitted.

string
send_times
required

One or more "HH:MM" wall-clock send times (in timezone).

Array<string>
telegram
boolean
timezone
string | null
window_days

Optional trailing-window override (7/30/90); None = derive from cadence.

integer | null format: int32
Examplegenerated
{
"anchor_day": 1,
"cadence": "example",
"discord": true,
"email": true,
"email_to": "example",
"in_app": true,
"name": "example",
"project_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"recipient_mode": "example",
"report_kind": "example",
"send_times": [
"example"
],
"telegram": true,
"timezone": "example",
"window_days": 1
}
Media typeapplication/json

Wire shape for a report schedule. send_times are "HH:MM" strings (the DB stores TIME[]); times are wall-clock in timezone. next_run_at is server-computed (the next future fire instant) via due::next_run_after.

object
anchor_day
integer | null format: int32
cadence
required
string
created_at
required
string format: date-time
created_by
required
string format: uuid
discord
required
boolean
email
required
boolean
email_to
string | null
enabled
required
boolean
id
required
string format: uuid
in_app
required

In-app (user_notifications) delivery channel.

boolean
last_sent_at
string | null format: date-time
name
required

Human label for the schedule (the “Bericht” column / modal name).

string
next_run_at

Server-computed next future fire instant (UTC), or None (e.g. a weekly schedule with no anchor / an invalid timezone). Not a stored column.

string | null format: date-time
project_id
string | null format: uuid
recipient_mode
required

#626 §25 — creator (default) or owner.

string
report_kind
required

#626 §25 — overview | usage | delivery | audit | operations | engine_digest.

string
send_times
required
Array<string>
telegram
required
boolean
timezone
required
string
updated_at
required
string format: date-time
window_days

Optional trailing-window override (7/30/90); None = derive from cadence.

integer | null format: int32
workspace_id
required
string format: uuid
Examplegenerated
{
"anchor_day": 1,
"cadence": "example",
"created_at": "2026-04-15T12:00:00Z",
"created_by": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"discord": true,
"email": true,
"email_to": "example",
"enabled": true,
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"in_app": true,
"last_sent_at": "2026-04-15T12:00:00Z",
"name": "example",
"next_run_at": "2026-04-15T12:00:00Z",
"project_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"recipient_mode": "example",
"report_kind": "example",
"send_times": [
"example"
],
"telegram": true,
"timezone": "example",
"updated_at": "2026-04-15T12:00:00Z",
"window_days": 1,
"workspace_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}

Structured client error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Authentication required

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Permission denied

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Structured server error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}