Skip to content
view raw .md

Plan · Notifications & reports

The notification catalogue, each person's switches and daily briefing, the organization's channel routes and scheduled reports, and the channels they post to. Part of the Dailybot Plan API (Beta).

On this page

Beta

Plan is in beta. Everything under /plan in the web app, the CLI and agent skill commands for projects, goals, boards and tasks, and the /v1/plan/ public API may change before general availability. Want to try it with your team? Write to [email protected].

GET/v1/plan/notifications/catalog/BetaAPI keyCLI Auth

The notification catalogue

Every notification kind, personal and organization: the one catalogue the web settings, the CLI and the agent skill render from. scope is personal (a switch a person sets for themselves, by DM and/or email) or org (a kind a channel route can post). key values are stable lowercase identifiers; default is what a person gets before touching the switch; immediate kinds are never held by the burst window.

NotificationKind object

NameTypeRequiredDescription
keystringRequiredStable lowercase identifier: what items[].kind and a route's kinds take.
scopeenumRequiredpersonal (a switch a person sets for themselves, DM and/or email) or org (a kind a route can post to a channel).
groupstringRequiredThe groups[].key it belongs to, for rendering.
titlestringRequired—
descriptionstringRequired—
eventsarray<string>RequiredThe task event types that produce it.
targetingenumRequiredWho it reaches: me, watched, content_author, project_members, scheduled or org.
supportsarray<string>RequiredThe channels it can use: chat, email.
defaultobjectRequired{chat, email}: what a person gets before touching the switch.
immediatebooleanRequiredAn immediate kind is never held by the burst window.

Response

NameTypeRequiredDescription
groupsarray<object>Required{key, title} rows, in display order.
kindsarray<NotificationKind>RequiredThe NotificationKind objects.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
curl -sS "https://api.dailybot.com/v1/plan/notifications/catalog/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
GET/v1/plan/me/notifications/BetaCLI Auth

My notification switches

The caller's effective switches, one item per personal kind, with chat / email values: the stored switch when there is one (stored: true), otherwise the catalogue default (stored: false). destination says where chat notifications go: a direct message by default, or a public channel the person chose. A person is never notified about their own actions, whatever these say.

NotificationDestination object

NameTypeRequiredDescription
typeenumRequireddm (the default) or channel.
channelChatChannel | nullRequiredThe public channel when type is channel. See ChatChannel.

ChatChannel object

NameTypeRequiredDescription
external_idstringRequiredThe platform's channel id: the same value dailybot chat send --channel takes.
namestringRequiredChannel name.
typeenumRequiredOne of channel (public), private_channel, group_chat.

NotificationPreferenceItem object

NameTypeRequiredDescription
kindstringRequiredThe catalogue key.
groupstringRequired—
titlestringRequired—
supportsarray<string>Requiredchat, email.
defaultobjectRequired{chat, email} from the catalogue.
storedbooleanRequiredtrue when the person set this switch; false when the value is the catalogue default.
chatbooleanRequiredEffective value.
emailbooleanRequiredEffective value.

Response

NameTypeRequiredDescription
destinationNotificationDestinationRequiredA NotificationDestination object.
itemsarray<NotificationPreferenceItem>RequiredOne row per personal kind: NotificationPreferenceItem objects.
paused_untildatetime | nullRequiredReserved; always null in this version.

Errors

StatusWhen
400The credential is an agent or organization key (`actor_required`); this endpoint needs a person.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS "https://api.dailybot.com/v1/plan/me/notifications/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.
PUT/v1/plan/me/notifications/BetaCLI Auth

Change my notification switches

Partial: only the kinds and channels you name are written; everything else keeps its effective value. Answers the full effective body, the same as GET. An unknown kind is 400 unknown_notification_kind and an unknown field is 400 unknown_field (extra.parameter names it). A destination channel must be public (type: channel on GET /v1/plan/channels/); a private one is 400 channel_not_found, and notifications about members-only work still come by DM. paused_until is reserved: sending a value is 501 not_implemented.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
destinationobjectOptional{type: "dm"} or {type: "channel", channel: {external_id}}.
itemsarray<object>Optional{kind, chat?, email?} rows: the catalogue key and the channels to set. Omit a channel to leave it as is.
paused_untildatetime | nullOptionalReserved. Only null is accepted; a datetime is 501 not_implemented.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
destinationNotificationDestinationRequiredA NotificationDestination object.
itemsarray<NotificationPreferenceItem>RequiredOne row per personal kind: NotificationPreferenceItem objects.
paused_untildatetime | nullRequiredReserved; always null in this version.

Errors

StatusWhen
400An unknown kind (`unknown_notification_kind`), an unknown field (`unknown_field`), a channel that is not public or not known (`channel_not_found`), an agent or organization key (`actor_required`), or an invalid agent name (`invalid_agent_attribution`).
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS -X PUT "https://api.dailybot.com/v1/plan/me/notifications/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "kind": "task_assigned",
      "email": true
    },
    {
      "kind": "comment_added",
      "chat": false
    }
  ]
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:write`.
  • Rate limit: 60 writes per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.
GET/v1/plan/notification-routes/BetaAPI keyCLI AuthPage-number pagination

List the organization's channel routes

Every route: a chat channel, the organization notification kinds it receives, and its scope (the whole workspace, some boards or some projects). viewer.can_manage says whether the caller may create or change routes. Any member, and any key, may read.

Query parameters

NameTypeRequiredDescription
pageintegerOptional1-based page number.
page_sizeintegerOptionalRows per page. Default 50, maximum 100. Out-of-range values are clamped, never rejected: asking for 500 returns 100.

NotificationRoute object

NameTypeRequiredDescription
uuiduuidRequiredStable public identifier.
namestringRequiredRoute name.
enabledbooleanRequiredA disabled route keeps its settings and posts nothing.
channelChatChannelRequiredWhere it posts. See ChatChannel.
kindsarray<string>RequiredThe organization notification kinds it receives (key values from the catalogue).
scopeRouteScopeRequiredWhich work it covers. See RouteScope.
created_byUserRef | nullRequiredWho created it. See UserRef.
created_atdatetime | nullRequired—
updated_atdatetime | nullRequired—

RouteScope object

NameTypeRequiredDescription
typeenumRequiredall (the whole workspace), boards or projects.
uuidsarray<uuid>RequiredThe board or project uuids when type is not all. Only boards and projects the whole workspace can see are accepted.

RoutesViewer object

NameTypeRequiredDescription
can_managebooleanRequiredWhether the caller may create, change or delete routes and report schedules: an organization administrator with a credential that may write.

UserRef object

NameTypeRequiredDescription
uuiduuidRequiredStable public identifier.
namestringOptionalDisplay name.
avatar_urlstring | nullOptional—
has_photobooleanOptional—

Response

NameTypeRequiredDescription
countintegerRequiredTotal number of rows.
nexturiRequiredURL of the next page, or null.
previousuriRequiredURL of the previous page, or null.
resultsarray<NotificationRoute>RequiredThe page of NotificationRoute objects.
viewerRoutesViewerRequiredA RoutesViewer object.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
curl -sS "https://api.dailybot.com/v1/plan/notification-routes/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
POST/v1/plan/notification-routes/BetaCLI Auth

Create a channel route

Organization administrators only. A route posts the organization notification kinds you pick (a task completed, a project update, a lead change…) to one chat channel, for the whole workspace or for some boards or projects. At most 10 routes per organization. Accepts Idempotency-Key.

Headers

NameTypeRequiredDescription
Idempotency-KeystringOptionalA key you generate for this intent. A replay with the same key and body returns the first response without a second side effect and carries Idempotency-Replayed: true. Keys are kept for 24 hours. The same key with a different body is 409 idempotency_key_payload_mismatch; a repeat while the first call is still running gets 409 idempotency_in_progress for up to 120 seconds.
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
namestringOptionalRoute name.
enabledbooleanOptionalDefault true.
channelobjectOptional{external_id}: the platform channel id, as GET /v1/plan/channels/ lists it. Unknown ids are 400 channel_not_found.
kindsarray<string>OptionalOrganization kinds from the catalogue (scope: org). Anything else is 400 unknown_notification_kind.
scopeRouteScopeOptional{type, uuids}. A members-only board or project is 400 route_scope_not_org_visible with extra.uuids: channels only ever receive what the whole workspace can see.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
(body)NotificationRouteRequiredA NotificationRoute object.

Errors

StatusWhen
400A field failed validation: `channel_not_found`, `unknown_notification_kind`, `route_scope_not_org_visible` (`extra.uuids`), `unknown_field`, or `notification_routes_limit_reached` (`extra.limit`, 10 routes). `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
curl -sS -X POST "https://api.dailybot.com/v1/plan/notification-routes/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Engineering channel",
  "channel": {
    "external_id": "C0123ABC"
  },
  "kinds": [
    "task_completed",
    "project_update_posted",
    "project_lead_changed"
  ],
  "scope": {
    "type": "boards",
    "uuids": [
      "00000000-0000-4000-8000-000000000002"
    ]
  }
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
GET/v1/plan/notification-routes/{route_id}/BetaAPI keyCLI Auth

Retrieve a channel route

One route. A route in another organization is 404.

Path parameters

NameTypeRequiredDescription
route_iduuidRequiredThe route's uuid.

Response

NameTypeRequiredDescription
(body)NotificationRouteRequiredA NotificationRoute object.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
404The route does not exist in your organization (`not_found`), never a 403.
curl -sS "https://api.dailybot.com/v1/plan/notification-routes/00000000-0000-4000-8000-000000000021/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
PATCH/v1/plan/notification-routes/{route_id}/BetaCLI Auth

Change a channel route

Organization administrators only. Partial: only the fields you send are written, with the same validation as create.

Path parameters

NameTypeRequiredDescription
route_iduuidRequiredThe route's uuid.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
namestringOptionalRoute name.
enabledbooleanOptionalDefault true.
channelobjectOptional{external_id}: the platform channel id, as GET /v1/plan/channels/ lists it. Unknown ids are 400 channel_not_found.
kindsarray<string>OptionalOrganization kinds from the catalogue (scope: org). Anything else is 400 unknown_notification_kind.
scopeRouteScopeOptional{type, uuids}. A members-only board or project is 400 route_scope_not_org_visible with extra.uuids: channels only ever receive what the whole workspace can see.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
(body)NotificationRouteRequiredA NotificationRoute object.

Errors

StatusWhen
400A field failed validation: `channel_not_found`, `unknown_notification_kind`, `route_scope_not_org_visible` (`extra.uuids`), `unknown_field`, or `notification_routes_limit_reached` (`extra.limit`, 10 routes). `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The route does not exist in your organization (`not_found`), never a 403.
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/notification-routes/00000000-0000-4000-8000-000000000021/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": false
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
DELETE/v1/plan/notification-routes/{route_id}/BetaCLI Auth

Delete a channel route

Organization administrators only. The channel stops receiving at once. Answers 204.

Path parameters

NameTypeRequiredDescription
route_iduuidRequiredThe route's uuid.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Errors

StatusWhen
400Validation failed; the response `code` says which field. `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The route does not exist in your organization (`not_found`), never a 403.
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/notification-routes/00000000-0000-4000-8000-000000000021/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
POST/v1/plan/notification-routes/{route_id}/send-test/BetaCLI Auth

Post a test message to a route's channel, or preview it

Organization administrators only. With ?dry_run=true the sample is rendered and the channel resolved, and nothing is sent or logged. Without it, one message is posted and logged like any route post.

Path parameters

NameTypeRequiredDescription
route_iduuidRequiredThe route's uuid.

Query parameters

NameTypeRequiredDescription
dry_runbooleanOptionaltrue renders and resolves only; nothing is sent or logged. Fails closed: any value other than 0, false, no or off is a dry run.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Response

NameTypeRequiredDescription
dry_runbooleanRequiredEchoes the request: true when nothing was sent.
channelChatChannelRequiredA ChatChannel object.
textstringRequiredThe rendered sample message.
sentbooleanRequiredfalse on a dry run.
statusstringOptionalThe delivery status when sent.
delivery_uuiduuid | nullOptionalThe delivery record when sent; see the deliveries endpoint.

Errors

StatusWhen
400Validation failed; the response `code` says which field. `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The route does not exist in your organization (`not_found`), never a 403.
curl -sS -X POST "https://api.dailybot.com/v1/plan/notification-routes/00000000-0000-4000-8000-000000000021/send-test/?dry_run=true" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
GET/v1/plan/notification-routes/{route_id}/deliveries/BetaAPI keyCLI AuthPage-number pagination

A route's last deliveries

The newest 20 delivery rows, newest first: sent, failed (with a reason code) or skipped (not_org_visible, rate_limited). Never message text.

Path parameters

NameTypeRequiredDescription
route_iduuidRequiredThe route's uuid.

DeliveryRecord object

NameTypeRequiredDescription
uuiduuidRequired—
statusenumRequiredsent, failed (see error) or skipped (not_org_visible, rate_limited).
channelenumRequiredchat or email.
errorstring | nullRequiredA reason code when the delivery failed or was skipped. Never message text.
message_idstring | nullRequiredThe platform's message id when it was posted.
created_atdatetimeRequired—

Response

NameTypeRequiredDescription
countintegerRequiredTotal number of rows.
nexturiRequiredURL of the next page, or null.
previousuriRequiredURL of the previous page, or null.
resultsarray<DeliveryRecord>RequiredThe DeliveryRecord objects.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
404The route does not exist in your organization (`not_found`), never a 403.
curl -sS "https://api.dailybot.com/v1/plan/notification-routes/00000000-0000-4000-8000-000000000021/deliveries/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
GET/v1/plan/channels/BetaAPI keyCLI AuthPage-number pagination

Search the chat channels routes and reports can post to

The connected platform's channels, sorted by name, as a page. search is a case-insensitive substring of the name. platform names the platform (slack, msteams, discord, google_chat); with no chat platform connected the answer is 400 platform_not_connected. Organization administrators see private channels the bot is in; everyone else sees public channels only (a private channel is absent, not forbidden). type=channel answers public channels only, for everyone: what a personal notification destination must be.

Query parameters

NameTypeRequiredDescription
searchstringOptionalCase-insensitive substring of the channel name.
typestringOptionalchannel answers public channels only, for everyone. Without it, organization administrators also see private channels the bot is in.
pageintegerOptional1-based page number.
page_sizeintegerOptionalRows per page. Default 50, maximum 100. Out-of-range values are clamped, never rejected: asking for 500 returns 100.

Response

NameTypeRequiredDescription
countintegerRequiredTotal number of rows.
nexturiRequiredURL of the next page, or null.
previousuriRequiredURL of the previous page, or null.
resultsarray<ChatChannel>RequiredThe page of ChatChannel objects.
platformstringRequiredslack, msteams, discord or google_chat.

Errors

StatusWhen
400No chat platform is connected (`platform_not_connected`), or `type` or a paging value is not valid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
curl -sS "https://api.dailybot.com/v1/plan/channels/?search=eng&type=channel" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
GET/v1/plan/reports/BetaAPI keyCLI AuthPage-number pagination

List the organization's scheduled reports

Every schedule with its kind (daily, week_start, week_end), ISO weekdays (Monday = 1), local time in its IANA timezone, channel, email recipients, scope and last run. viewer.can_manage says whether the caller may change them (an organization administrator).

Query parameters

NameTypeRequiredDescription
pageintegerOptional1-based page number.
page_sizeintegerOptionalRows per page. Default 50, maximum 100. Out-of-range values are clamped, never rejected: asking for 500 returns 100.

ReportSchedule object

NameTypeRequiredDescription
uuiduuidRequired—
namestringRequired—
kindenumRequireddaily, week_start or week_end.
enabledbooleanRequired—
weekdaysarray<integer>RequiredISO weekdays, Monday = 1. A week_start or week_end report has exactly one.
timestringRequiredHH:MM, 24-hour, in timezone.
timezonestringRequiredIANA name.
channelChatChannel | nullRequiredWhere it posts, or null for email only. See ChatChannel.
email_recipientsarray<UserRef>RequiredSee UserRef.
scopeRouteScopeRequiredSee RouteScope.
created_byUserRef | nullRequired—
last_runReportRun | nullRequiredSee ReportRun.
created_atdatetime | nullRequired—
updated_atdatetime | nullRequired—

ReportRun object

NameTypeRequiredDescription
uuiduuidRequired—
period_keystringRequiredThe period the run covered, for example a date or an ISO week.
scheduled_fordatetimeRequired—
sent_atdatetime | nullRequired—
statusenumRequiredsent, failed (see error) or skipped_empty.
errorstring | nullRequiredA reason code when it failed.
channel_message_idstring | nullRequired—
email_countintegerRequiredHow many emails went out.
is_testbooleanRequiredtrue for a send-test; it does not count as the period's run.

Response

NameTypeRequiredDescription
countintegerRequiredTotal number of rows.
nexturiRequiredURL of the next page, or null.
previousuriRequiredURL of the previous page, or null.
resultsarray<ReportSchedule>RequiredThe page of ReportSchedule objects.
viewerRoutesViewerRequiredA RoutesViewer object.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
curl -sS "https://api.dailybot.com/v1/plan/reports/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
POST/v1/plan/reports/BetaCLI Auth

Schedule a report

Organization administrators only. A daily report says what is expected today and who owns it; a week-start report looks at the week ahead; a week-end report says what closed, what is at risk and what did not close. It posts to a channel, goes by email to the people you name, or both, on the weekdays and local time you choose. At most 10 schedules per organization. Accepts Idempotency-Key.

Headers

NameTypeRequiredDescription
Idempotency-KeystringOptionalA key you generate for this intent. A replay with the same key and body returns the first response without a second side effect and carries Idempotency-Replayed: true. Keys are kept for 24 hours. The same key with a different body is 409 idempotency_key_payload_mismatch; a repeat while the first call is still running gets 409 idempotency_in_progress for up to 120 seconds.
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
namestringOptionalSchedule name.
kindenumOptionaldaily (what is expected today, with owners), week_start (the week ahead) or week_end (what closed, what is at risk, what did not close).
enabledbooleanOptionalDefault true.
weekdaysarray<integer>OptionalISO weekdays, Monday = 1 … Sunday = 7. A daily report takes any set (for example [1,2,3,4,5]); week_start and week_end take exactly one.
timestringOptionalHH:MM, 24-hour, in timezone.
timezonestringOptionalIANA name. Defaults to the organization's.
channelobject | nullOptional{external_id} of the channel to post to, or null for email only. A schedule needs a channel, email recipients, or both.
email_recipientsarray<uuid>OptionalUser uuids that receive it by email. [] clears them.
scopeRouteScopeOptional{type, uuids}: the whole workspace, some boards or some projects. Members-only work is refused with 400 route_scope_not_org_visible.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
(body)ReportScheduleRequiredA ReportSchedule object.

Errors

StatusWhen
400A schedule field is invalid (`invalid_schedule`, `extra.parameter` is `weekdays`, `time`, `timezone`, `channel` or `kind`), the channel is unknown (`channel_not_found`), the scope names members-only work (`route_scope_not_org_visible`), a field is unknown (`unknown_field`), or the organization already has 10 schedules (`report_schedules_limit_reached`, `extra.limit`). `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
curl -sS -X POST "https://api.dailybot.com/v1/plan/reports/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Friday wrap-up",
  "kind": "week_end",
  "weekdays": [
    5
  ],
  "time": "16:00",
  "timezone": "America/Bogota",
  "channel": {
    "external_id": "C0123ABC"
  },
  "scope": {
    "type": "all",
    "uuids": []
  }
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
GET/v1/plan/reports/{report_id}/BetaAPI keyCLI Auth

Retrieve a scheduled report

One schedule. A schedule in another organization is 404.

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

Response

NameTypeRequiredDescription
(body)ReportScheduleRequiredA ReportSchedule object.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
PATCH/v1/plan/reports/{report_id}/BetaCLI Auth

Change a scheduled report

Organization administrators only. Partial, with the same validation as create. channel: null clears the channel and email_recipients: [] clears the recipients; clearing both is 400 invalid_schedule (extra.parameter: "channel").

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
namestringOptionalSchedule name.
kindenumOptionaldaily (what is expected today, with owners), week_start (the week ahead) or week_end (what closed, what is at risk, what did not close).
enabledbooleanOptionalDefault true.
weekdaysarray<integer>OptionalISO weekdays, Monday = 1 … Sunday = 7. A daily report takes any set (for example [1,2,3,4,5]); week_start and week_end take exactly one.
timestringOptionalHH:MM, 24-hour, in timezone.
timezonestringOptionalIANA name. Defaults to the organization's.
channelobject | nullOptional{external_id} of the channel to post to, or null for email only. A schedule needs a channel, email recipients, or both.
email_recipientsarray<uuid>OptionalUser uuids that receive it by email. [] clears them.
scopeRouteScopeOptional{type, uuids}: the whole workspace, some boards or some projects. Members-only work is refused with 400 route_scope_not_org_visible.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
(body)ReportScheduleRequiredA ReportSchedule object.

Errors

StatusWhen
400A schedule field is invalid (`invalid_schedule`, `extra.parameter` is `weekdays`, `time`, `timezone`, `channel` or `kind`), the channel is unknown (`channel_not_found`), the scope names members-only work (`route_scope_not_org_visible`), a field is unknown (`unknown_field`), or the organization already has 10 schedules (`report_schedules_limit_reached`, `extra.limit`). `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "weekdays": [
    1
  ],
  "kind": "week_start",
  "time": "09:00"
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
DELETE/v1/plan/reports/{report_id}/BetaCLI Auth

Delete a scheduled report

Organization administrators only. Its runs go with it. Answers 204.

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Errors

StatusWhen
400Validation failed; the response `code` says which field. `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
GET/v1/plan/reports/{report_id}/preview/BetaAPI keyCLI Auth

Preview a scheduled report with real data

The report as it would be sent now: the same ReportDocument the chat message and the email are rendered from. Organization reports only ever include boards and projects the whole workspace can see.

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

ReportDocument object

NameTypeRequiredDescription
kindenumRequireddaily, week_start, week_end or personal_daily.
localestringRequired—
headerobjectRequired{title, period_key, period_label, scope}.
sectionsarray<ReportSection>RequiredSee ReportSection.
emptybooleanRequiredtrue when no section has items.
narrativestringOptionalAn optional short summary paragraph.

ReportSection object

NameTypeRequiredDescription
keystringRequiredStable section key, for example closed, at_risk, due_today.
titlestringRequired—
countintegerRequired—
emptybooleanRequired—
itemsarray<ReportItem>RequiredSee ReportItem.

ReportItem object

NameTypeRequiredDescription
typeenumRequiredtask, project, milestone, goal or text.
uuidstringRequired—
keystringOptionalThe task key, such as ENG-142, when the item is a task.
titlestringRequired—
urlstringRequiredDeep link into the web app.
ownerUserRefOptional—
due_datedateOptional—
statestringOptional—
categorystringOptional—
healthstringOptional—
badgesarray<string>RequiredShort flags such as overdue or blocked.

UserRef object

NameTypeRequiredDescription
uuiduuidRequiredStable public identifier.
namestringOptionalDisplay name.
avatar_urlstring | nullOptional—
has_photobooleanOptional—

Response

NameTypeRequiredDescription
(body)ReportDocumentRequiredA ReportDocument object.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/preview/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
POST/v1/plan/reports/{report_id}/send-test/BetaCLI Auth

Send a scheduled report now as a test, or preview what would be sent

Organization administrators only. With ?dry_run=true the document, the channel and the recipients are answered and nothing is sent. Without it the report is sent now and recorded as a test run (is_test: true); it does not count as the period's run.

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

Query parameters

NameTypeRequiredDescription
dry_runbooleanOptionaltrue renders and resolves only; nothing is sent or logged. Fails closed: any value other than 0, false, no or off is a dry run.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Response

NameTypeRequiredDescription
dry_runbooleanRequiredEchoes the request: true when nothing was sent.
documentReportDocumentRequiredA ReportDocument object.
channelChatChannel | nullRequiredA ChatChannel object.
email_recipientsarray<UserRef>RequiredThe UserRef objects.
sentbooleanRequiredfalse on a dry run.
runReportRunOptionalThe test run when sent. See ReportRun.

Errors

StatusWhen
400Validation failed; the response `code` says which field. `invalid_agent_attribution` means the agent name is invalid.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403You are not an organization administrator (`insufficient_scope`), or you are a guest (`guest_not_allowed`). An agent or organization key is refused here too.
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS -X POST "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/send-test/?dry_run=true" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:admin` — container writes. A non-guest member can call it with a login session or a personal API key (a key with explicit Plan scopes needs `tasks:write`, which covers it); an agent or organization key gets `403 insufficient_scope`.
  • Rate limit: 60 writes per minute per actor.
  • Organization administrators only, with a login session, a CLI user token or a personal API key. Any member and any key may read.
GET/v1/plan/reports/{report_id}/runs/BetaAPI keyCLI AuthPage-number pagination

A scheduled report's last runs

The newest 20 runs, newest first: sent, failed (with a reason code) or skipped_empty. Test sends carry is_test: true.

Path parameters

NameTypeRequiredDescription
report_iduuidRequiredThe scheduled report's uuid.

Response

NameTypeRequiredDescription
countintegerRequiredTotal number of rows.
nexturiRequiredURL of the next page, or null.
previousuriRequiredURL of the previous page, or null.
resultsarray<ReportRun>RequiredThe ReportRun objects.

Errors

StatusWhen
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
404The schedule does not exist in your organization (`not_found`), never a 403.
curl -sS "https://api.dailybot.com/v1/plan/reports/00000000-0000-4000-8000-000000000022/runs/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Works with a login session, a CLI user token, a personal API key, or an agent or organization key. A personal key sees what its person sees; an agent or organization key acts as a system actor and sees organization-visible boards only.
GET/v1/plan/me/briefing/BetaCLI Auth

My daily briefing settings

The caller's daily briefing settings, effective values. With nothing stored the answer is the default: the person's work days (Monday–Friday when they never changed them), 09:00 in their own timezone (timezone_is_default: true), chat on, email off, enabled: false. The chat leg is always a direct message, never the person's notification channel: the briefing holds their members-only work too.

Response

NameTypeRequiredDescription
enabledbooleanRequiredWhether the briefing is sent at all.
weekdaysarray<integer>RequiredISO weekdays, Monday = 1.
timestringRequiredHH:MM, 24-hour, in timezone.
timezonestringRequiredIANA name.
timezone_is_defaultbooleanRequiredtrue when the timezone is the person's own rather than one they set here.
chatbooleanRequiredDeliver by direct message.
emailbooleanRequiredDeliver by email.
skip_when_emptybooleanRequiredSkip the briefing on a day with nothing to say.
effectivebooleanRequiredtrue when the weekdays are the person's default work days rather than a set stored here.
last_sent_atdatetime | nullRequiredWhen the briefing last went out, or null.

Errors

StatusWhen
400The credential is an agent or organization key (`actor_required`); this endpoint needs a person.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS "https://api.dailybot.com/v1/plan/me/briefing/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.
PUT/v1/plan/me/briefing/BetaCLI Auth

Change my daily briefing

Partial: only the fields you send are written. weekdays are ISO 1..7, time is HH:MM, timezone is an IANA name (optional: the first write stores the person's own). At least one of chat and email must stay on. Refusals are 400 invalid_schedule (extra.parameter) and 400 unknown_field. Answers the full effective body.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Request body

NameTypeRequiredDescription
enabledbooleanOptionalWhether the briefing is sent at all.
weekdaysarray<integer>OptionalISO weekdays, Monday = 1 … Sunday = 7.
timestringOptionalHH:MM, 24-hour.
timezonestringOptionalIANA name.
chatbooleanOptionalDeliver by direct message.
emailbooleanOptionalDeliver by email.
skip_when_emptybooleanOptionalSkip the briefing on a day with nothing to say.
agent_namestringOptionalThe name of the agent that executed this write on the person's behalf (max 128 characters, blank means no agent). Takes priority over the X-Dailybot-Agent-Name header. See Agent attribution.

Response

NameTypeRequiredDescription
enabledbooleanRequiredWhether the briefing is sent at all.
weekdaysarray<integer>RequiredISO weekdays, Monday = 1.
timestringRequiredHH:MM, 24-hour, in timezone.
timezonestringRequiredIANA name.
timezone_is_defaultbooleanRequiredtrue when the timezone is the person's own rather than one they set here.
chatbooleanRequiredDeliver by direct message.
emailbooleanRequiredDeliver by email.
skip_when_emptybooleanRequiredSkip the briefing on a day with nothing to say.
effectivebooleanRequiredtrue when the weekdays are the person's default work days rather than a set stored here.
last_sent_atdatetime | nullRequiredWhen the briefing last went out, or null.

Errors

StatusWhen
400A field is invalid (`invalid_schedule`, `extra.parameter` names it), unknown (`unknown_field`), both channels are off, the credential is an agent or organization key (`actor_required`), or the agent name is invalid (`invalid_agent_attribution`).
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS -X PUT "https://api.dailybot.com/v1/plan/me/briefing/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": true,
  "weekdays": [
    1,
    2,
    3,
    4,
    5
  ],
  "time": "08:30",
  "email": true
}'

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:write`.
  • Rate limit: 60 writes per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.
GET/v1/plan/me/briefing/preview/BetaCLI Auth

Preview today's briefing

Today's briefing for the caller, rendered now: the personal_daily ReportDocument with what is overdue, due today, in progress, blocked and next up, unread mentions and the projects the caller leads.

Response

NameTypeRequiredDescription
(body)ReportDocumentRequiredA ReportDocument object.

Errors

StatusWhen
400The credential is an agent or organization key (`actor_required`); this endpoint needs a person.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS "https://api.dailybot.com/v1/plan/me/briefing/preview/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:read`.
  • Rate limit: 120 reads per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.
POST/v1/plan/me/briefing/send-test/BetaCLI Auth

Send today's briefing to me now, or preview it

With ?dry_run=true nothing is sent. Without it, today's briefing goes to the caller by direct message and/or email, per their settings.

Query parameters

NameTypeRequiredDescription
dry_runbooleanOptionaltrue renders and resolves only; nothing is sent or logged. Fails closed: any value other than 0, false, no or off is a dry run.

Headers

NameTypeRequiredDescription
X-Dailybot-Agent-NamestringOptionalThe name of the agent that executed this write on the person's behalf. Use it on multipart and body-less writes (DELETE, archive, restore); on JSON writes send the body field agent_name instead, which wins if both are present. Percent-encode the value as UTF-8. Control characters are stripped; a blank value means no agent. More than 128 characters, or a value that cannot be decoded, is 400 invalid_agent_attribution (never truncated). An agent-type key, which is not bound to a person, gets 400 invalid_agent_attribution if it sends it. The stamp never changes a permission answer. See Agent attribution.

Response

NameTypeRequiredDescription
dry_runbooleanRequiredEchoes the request: true when nothing was sent.
documentReportDocumentRequiredA ReportDocument object.
sentbooleanRequiredfalse on a dry run.

Errors

StatusWhen
400The credential is an agent or organization key (`actor_required`); this endpoint needs a person.
401Missing, expired or malformed credential (`credential_absent`, `credential_expired`, `credential_malformed`).
402Plan is not enabled for your organization yet (`plan_upgrade_required`). Expected during the Beta: write to [email protected].
403Guest accounts cannot use Plan (`guest_not_allowed`).
curl -sS -X POST "https://api.dailybot.com/v1/plan/me/briefing/send-test/?dry_run=true" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"

Try it

This is a copy-only helper — the request is not sent from your browser. Paste the command into your terminal to execute it.

  • Scope: `tasks:write`.
  • Rate limit: 60 writes per minute per actor.
  • Needs a person: call it with a login session, a CLI user token or a personal API key, which acts as its person. An agent or organization key gets `400 actor_required`.

This page is the reference for Plan · Notifications & reports. Every endpoint lives under https://api.dailybot.com/v1/plan/ and answers JSON.

Authenticate with a login session or a CLI user token (Authorization: Bearer …), or with an API key (X-API-KEY). A personal API key acts as its person and can do everything that person can do in Dailybot; an agent or organization key never acts as a person and is refused on the endpoints that need one. On an endpoint, the API key badge means an agent or organization key is accepted too. See Authentication for Plan, Authentication and Errors for the rules shared by every Dailybot API.

New to Plan? Read the overview for the model: projects, boards, workflow states, keys, ordering, versions and archive.

Personal doors (me/notifications, me/briefing) need a person: a login session, a CLI user token or a personal API key; an agent or organization key gets 400 actor_required. Routes, scheduled reports and their send-test are for organization administrators. Every send-test takes ?dry_run=true, which renders and resolves without sending. A person’s briefing always arrives by direct message and/or email, never in a channel.