Skip to content
view raw .md

Kudos

Give and read kudos, including organization-wide stats and the wall-of-fame leaderboard. The `by_dailybot` field is stripped for CLI-token callers.

GET/v1/kudos/API keyCLI AuthPage-number pagination

List kudos

Paginated list of kudos the caller can access. Returns the standard envelope ({count, next, previous, results}). Supports sender/receiver filters, date range, and message search.

Query parameters

NameTypeRequiredDescription
filterstringOptionalFilter type: kudos_received or kudos_given (case-insensitive). Invalid values return 400 invalid_kudos_filter.
sender_uuidstring (uuid)OptionalFilter to kudos sent by a specific user.
receiver_uuidstring (uuid)OptionalFilter to kudos received by a specific user.
start_datestring (YYYY-MM-DD)OptionalInclusive start date (caller's timezone). Also accepted: date_start, date_from.
end_datestring (YYYY-MM-DD)OptionalInclusive end date, 23:59:59 in caller's timezone. Also accepted: date_end, date_to.
searchstringOptionalCase-insensitive substring search on the kudos message. Max 256 chars.
pageintegerOptionalPage number (1-indexed). Default: 1.
page_sizeintegerOptionalItems per page. Default: 50, max: 200. Alias: limit.

Response

{
  "count": "integer",
  "next": "string|null",
  "previous": "string|null",
  "results": "array<{ id, sender, receiver, message, created_at, ... }>"
}

Errors

StatusWhen
400Validation error (invalid_kudos_filter, search_query_too_long, invalid_date_range)
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
curl -sS -X GET 'https://api.dailybot.com/v1/kudos/' -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.

POST/v1/kudos/API keyCLI Auth

Give kudos

Body: receivers (array), message; optional kudo_type_uuid, is_public, team_uuid, by_dailybot. Note: by_dailybot is stripped when the caller uses a CLI token.

Errors

StatusWhen
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
400Validation error
curl -sS -X POST 'https://api.dailybot.com/v1/kudos/' -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.

  • by_dailybot is stripped for CLI tokens.
GET/v1/kudos/organization/API keyCLI AuthPage-number pagination

List all kudos in the organization (admin only)

Returns all top-level kudos across the entire organization. Requires organization admin role. Accepts either an organization API key (X-API-KEY) or a CLI Bearer token (Authorization: Bearer <token>). Supports sender/receiver filters, both legacy naive and timezone-aware date ranges, and a filter type (kudos_received / kudos_given). Only top-level kudos are returned (replies excluded).

Query parameters

NameTypeRequiredDescription
filterstringOptionalFilter type: 'kudos_received' or 'kudos_given' (case-insensitive). Invalid values return 400 invalid_kudos_filter.
sender_uuidstring (uuid)OptionalFilter by sender (user who gave the kudo). Must be a valid UUID v4 or the request returns 400 invalid_sender_uuid.
receiver_uuidstring (uuid)OptionalFilter by receiver (user who received the kudo). Must be a valid UUID v4 or the request returns 400 invalid_receiver_uuid.
start_datestring (YYYY-MM-DD)OptionalTimezone-aware inclusive start date (caller's timezone). Preferred over the legacy date_start.
end_datestring (YYYY-MM-DD)OptionalTimezone-aware inclusive end date, 23:59:59 in caller's timezone. Preferred over the legacy date_end.
date_startstring (YYYY-MM-DD)OptionalLegacy naive-day start filter (always available). Stacks with start_date if both are provided.
date_endstring (YYYY-MM-DD)OptionalLegacy naive-day end filter (always available). Stacks with end_date if both are provided.
searchstringOptionalCase-insensitive substring match on kudos content. Max 256 chars.
pageintegerOptionalPage number (1-indexed). Default: 1.
page_sizeintegerOptionalItems per page. Default: 25, max: 100. Alias: limit.
offsetintegerOptionalOffset-based pagination (accepted for backward compatibility).

Response

{
  "count": "integer",
  "next": "string|null",
  "previous": "string|null",
  "results": "array<{ id, user: { uuid, full_name, image }, receivers: array<{ uuid, full_name, image }>, company_value: { id, value, description, emoji, i18n_meta } | null, content, is_anonymous, created_at }>"
}

Errors

StatusWhen
400Validation error (invalid_date_range, invalid_kudos_filter, invalid_sender_uuid, invalid_receiver_uuid, search_query_too_long)
401Missing/invalid/expired credential
403Authenticated but not an organization admin (`org_admin_required`)
429Throttled - Retry-After header set
curl -sS -X GET 'https://api.dailybot.com/v1/kudos/organization/?start_date=2026-06-01&end_date=2026-06-30' -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.

  • Only top-level kudos are returned (replies excluded via parent__isnull=True).
  • If the organization has anonymous kudos disabled (allow_anonymous_messages=false), anonymous kudos are excluded from results.
  • Ordered by created_at DESC with id as tiebreaker for deterministic pagination.
GET/v1/kudos/wall-of-fame/API keyCLI AuthPage-number pagination

Wall of fame leaderboard

Wall of fame leaderboard

Query parameters

NameTypeRequiredDescription
periodenum (week,month,quarter,year,all_time)OptionalDefault: month.
team_uuidstring (uuid)Optional
pageintegerOptionalPage number (1-indexed). Default: 1.
page_sizeintegerOptionalItems per page. Default: 50, max: 200. Alias: limit.

Errors

StatusWhen
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
curl -sS -X GET 'https://api.dailybot.com/v1/kudos/wall-of-fame/' -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.

Kudos

List, send, and manage kudos for team recognition.

Endpoints summary

Method Endpoint Description
GET /v1/kudos/ List kudos for the authenticated user
GET /v1/kudos/organization/ List all kudos in the organization (admin only)
GET /v1/kudos/wall-of-fame/ Top kudos contributors
POST /v1/kudos/ Send kudos
POST /v1/kudos/{id}/boost/ Boost a kudo

GET /v1/kudos/

Returns kudos for the authenticated user. Paginated (default ordering: -id).

Query parameters

Name Type Default Description
page integer 1 Page number (1-indexed). offset accepted as alias.
page_size integer 25 Items per page (max 100). limit accepted as alias.
type string kudos_received Deprecated alias — use filter instead.
filter string kudos_received kudos_received or kudos_given (case-insensitive). Invalid values return 400 invalid_kudos_filter.
user_uuid string (UUID) Filter by user.
start_date string Inclusive start date (YYYY-MM-DD, caller’s timezone). Also accepted: date_start, date_from.
end_date string Inclusive end date (YYYY-MM-DD, caller’s timezone). Also accepted: date_end, date_to.
search string Case-insensitive substring match on the kudos message field. Max 256 chars. Over-length returns 400 search_query_too_long.

Legacy aliases: date_start/date_end and limit/offset continue to work and echo in next/previous URLs.

Validation errors: Inverted date ranges (start_date > end_date) or malformed dates return 400 invalid_date_range.

curl "https://api.dailybot.com/v1/kudos/?type=kudos_received&start_date=2026-07-01&end_date=2026-07-31&page_size=50" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Response (200 OK):

{
  "count": 15,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "kudos-uuid",
      "from_user": { "uuid": "usr_001", "name": "Alice" },
      "to_user": { "uuid": "usr_002", "name": "Bob" },
      "message": "Great work on the release!",
      "points": 1,
      "created_at": "2026-07-05T14:00:00Z"
    }
  ]
}

GET /v1/kudos/organization/

Returns all top-level kudos across the entire organization. Requires organization admin role. Always paginated (standard envelope). Ordered by created_at DESC with id as a deterministic tiebreaker.

Authentication: Accepts both X-API-KEY (organization API key) and Authorization: Bearer <token> (CLI Bearer token or session token). The admin permission requirement applies to whichever credential is used — non-admins receive 403 with code: "org_admin_required".

Query parameters

Name Type Default Description
page integer 1 Page number (1-based).
page_size integer 25 Items per page (max 100). limit accepted as alias.
filter string kudos_received or kudos_given (case-insensitive). Invalid values return 400 invalid_kudos_filter.
search string Case-insensitive substring match on kudos content. Max 256 chars. Over-length returns 400 search_query_too_long.
start_date string (YYYY-MM-DD) Timezone-aware inclusive start (caller’s timezone). Preferred over the legacy date_start.
end_date string (YYYY-MM-DD) Timezone-aware inclusive end (23:59:59 in caller’s timezone). Preferred over the legacy date_end.
date_start string (YYYY-MM-DD) Legacy naive-day start filter (still available). Stacks with start_date if both are provided.
date_end string (YYYY-MM-DD) Legacy naive-day end filter (still available). Stacks with end_date if both are provided.
sender_uuid string (UUID) Filter by the user who sent the kudo. Must be a valid UUID v4 or the API returns 400 invalid_sender_uuid.
receiver_uuid string (UUID) Filter by the user who received the kudo. Must be a valid UUID v4 or the API returns 400 invalid_receiver_uuid.

Date filter guidance: Prefer start_date / end_date for new integrations — they respect the authenticated user’s timezone. date_start / date_end remain available as the naive-day legacy filter and can be combined with the timezone-aware pair (filters stack). If start_date is after end_date, the API returns 400 invalid_date_range.

Examples

# List all organization kudos (default pagination)
curl -sS "https://api.dailybot.com/v1/kudos/organization/" \
  -H "Authorization: Bearer $DAILYBOT_CLI_TOKEN"

# Filter by date range (timezone-aware)
curl -sS "https://api.dailybot.com/v1/kudos/organization/?start_date=2026-06-01&end_date=2026-06-30" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

# Filter by sender
curl -sS "https://api.dailybot.com/v1/kudos/organization/?sender_uuid=f47ac10b-58cc-4372-a567-0e02b2c3d479" \
  -H "Authorization: Bearer $DAILYBOT_CLI_TOKEN"

# Filter by receiver with pagination
curl -sS "https://api.dailybot.com/v1/kudos/organization/?receiver_uuid=7c9e6679-7425-40de-944b-e07fc1f90ae7&page=2&page_size=10" \
  -H "Authorization: Bearer $DAILYBOT_CLI_TOKEN"

# Filter by type (only kudos received across the org)
curl -sS "https://api.dailybot.com/v1/kudos/organization/?filter=kudos_received" \
  -H "Authorization: Bearer $DAILYBOT_CLI_TOKEN"

Response (200 OK)

{
  "count": 156,
  "next": "https://api.dailybot.com/v1/kudos/organization/?page=2",
  "previous": null,
  "results": [
    {
      "id": "a8283c36-8e5f-40cb-92ca-9e483eb6bde2",
      "user": {
        "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "full_name": "Jane Smith",
        "image": "https://avatars.slack-edge.com/..."
      },
      "receivers": [
        {
          "uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
          "full_name": "John Doe",
          "image": "https://avatars.slack-edge.com/..."
        }
      ],
      "company_value": {
        "id": "d4735e3a-265e-16d7-3dca-60b8831c8295",
        "value": "Teamwork",
        "description": "Collaboration and support",
        "emoji": "🤝",
        "i18n_meta": {}
      },
      "content": "Thanks for the incredible help with the product launch!",
      "is_anonymous": false,
      "created_at": "2026-07-08T14:30:00.123456Z"
    }
  ]
}

Response fields

Field Type Description
count integer Total kudos matching the query (across all pages).
next string | null URL to the next page, or null on the last page.
previous string | null URL to the previous page, or null on the first page.
results array Kudo objects for the current page.

Kudo object

Field Type Description
id string (UUID) Unique identifier for the kudo.
user object Sender: { uuid, full_name, image }. When is_anonymous is true, this is anonymized (random display name, no real identity).
receivers array Recipients: [{ uuid, full_name, image }].
company_value object | null Attached company value: { id, value, description, emoji, i18n_meta }. null when no value is attached.
content string The kudo message (HTML-sanitized).
is_anonymous boolean Whether the kudo was sent anonymously.
created_at string (ISO 8601) Creation timestamp.

Error responses

400 invalid_date_rangestart_date > end_date or a malformed date.

{
  "detail": "Invalid 'start_date' value. Expected YYYY-MM-DD.",
  "code": "invalid_date_range"
}

400 invalid_kudos_filterfilter is not one of the accepted values (case-insensitive).

{
  "detail": "Not valid kudos filter. Accepted values: kudos_received, kudos_given.",
  "code": "invalid_kudos_filter"
}

403 org_admin_required — caller is not an organization admin.

{
  "detail": "This endpoint requires organization admin privileges.",
  "code": "org_admin_required"
}

400 invalid_sender_uuidsender_uuid is not a valid UUID.

{
  "detail": "Invalid UUID format for 'sender_uuid'.",
  "code": "invalid_sender_uuid"
}

400 invalid_receiver_uuidreceiver_uuid is not a valid UUID.

{
  "detail": "Invalid UUID format for 'receiver_uuid'.",
  "code": "invalid_receiver_uuid"
}

401 Unauthorized — Missing or invalid credential.

403 Forbidden — Authenticated user is not an organization admin.

Notes

  • Only top-level kudos are returned — replies are excluded (parent__isnull=True).
  • If the organization has anonymous kudos disabled (allow_anonymous_messages = false), anonymous kudos are excluded from results.
  • limit / offset are accepted as backward-compatible aliases for page-size and offset-based pagination.

GET /v1/kudos/wall-of-fame/

Returns top kudos contributors in the organization. Paginated (default ordering: -count).

Accepts the same page, page_size, start_date, and end_date parameters.


POST /v1/kudos/

Sends kudos to a team member.

Body parameters

Name Type Required Description
receivers array of strings Conditional User identifiers (UUIDs, emails, or external IDs). Required if users_receivers and teams_receivers are not provided.
users_receivers array of UUIDs Conditional Explicit user UUIDs to receive the kudo.
teams_receivers array of UUIDs No Team UUIDs. All active members receive the kudo.
content string No Kudo message text (HTML-safe).
is_anonymous boolean No When true, the sender is anonymized. Default: false.
company_value string (UUID) No Company value ID to attach (if organization uses values).
curl -X POST "https://api.dailybot.com/v1/kudos/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "receivers": ["usr_002"],
    "content": "Excellent work on the API redesign!",
    "company_value": "value-uuid"
  }'

Response (201 Created):

{
  "id": "kudos-uuid",
  "user": { "uuid": "usr_001", "full_name": "Alice" },
  "receivers": [{ "uuid": "usr_002", "full_name": "Bob" }],
  "content": "Excellent work on the API redesign!",
  "company_value": { "id": "value-uuid", "name": "Teamwork" },
  "is_anonymous": false,
  "by_dailybot": false,
  "created_at": "2026-07-09T10:00:00Z"
}

POST /v1/kudos/{id}/boost/

Boosts an existing kudo by adding your endorsement.

curl -X POST "https://api.dailybot.com/v1/kudos/kudos-uuid/boost/" \
  -H "X-API-KEY: $DAILYBOT_API_KEY"

Response (200 OK):

{
  "id": "kudos-uuid",
  "boosts": 1,
  "boosted_by": [{ "uuid": "usr_003", "name": "Carol" }]
}