The same logs as the **Logs** page of your [dashboard](https://dash.dumgum.ai/logs), for your own monitoring. `projectGid` is your [Project ID](/basics/projects); an access key can only read the logs of the project it belongs to.

## Log types

Each log carries a `type`, so you can react to one kind of event without parsing `message`. The main ones:

| Type | Severity | When |
| --- | --- | --- |
| `conversation.enqueued` | `INFO` | A conversation was accepted for processing. |
| `conversation.enqueue.error` | `WARN` | An enqueue request was accepted but part of it could not be applied, for example an unknown instruction name. |
| `content_creation.get_profile.error` | `ERROR` | Your [Profile Endpoint](/api-reference/content-creation/webhooks/profile-endpoint) could not be reached or returned an error. |
| `content_creation.conversation.profile_not_found` | `ERROR` | Your Profile Endpoint did not return the requested profile. |
| `content_creation.get_chat_history.error` | `ERROR` | Your [Chat History Endpoint](/api-reference/content-creation/webhooks/chat-history-endpoint) could not be reached or returned an error. |
| `content_creation.chat_model.refusal` | `WARN` | The conversation was rejected and no reply was generated. |
| `project.content_creation.configuration.error` | `ERROR` | The project has no content creation configuration. |
| `content_creation.error` | `ERROR` | The conversation could not be processed for another reason. |
| `webhook.delivered` | `INFO` | An event was delivered to your [Incoming Content Endpoint](/api-reference/content-creation/webhooks/incoming-content-endpoint). |
| `webhook.failed` | `ERROR` | An event could not be delivered to your endpoint. |

New types may be added: ignore the ones you don't handle rather than failing on them.

## Reading every error

Pass `severity=ERROR` and keep the `startTime`, `endTime` and `sortOrder` of your first request. While the response's `nextToken` is not `null`, send it back on the next request to get the following page:

```bash
curl "https://api.dumgum.com/cs/v1/projects/proj_zqRs5XdUtmI0oypAPzKQ3/logs?severity=ERROR&startTime=2026-09-30T00:00:00Z&limit=100" \
  -H "Authorization: Bearer $ACCESS_KEY"
```

A `nextToken` is valid for one hour. After that, the request fails with a `400` and you have to start the pagination again without it.

## OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "DumGum",
    "version": "2.0"
  },
  "servers": [
    {
      "url": "https://api.dumgum.com"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/cs/v1/projects/{projectGid}/logs": {
      "get": {
        "tags": [
          "projects"
        ],
        "summary": "List project logs",
        "description": "\nEvents recorded for a project — webhook deliveries and failures, conversations that could not be processed, and so on — over a time range, newest first by default.\n\nUse `severity=ERROR` to only retrieve errors.\n\nResults are paginated: when `nextToken` is not null, pass it back to get the next page. A `nextToken` keeps the time range, `severity` and `sortOrder` of the request that started the pagination, so you can keep paging with the defaults (the last hour) without the window moving. A `nextToken` is valid for one hour; after that the request fails with a 400 and the pagination has to start again. One pagination reaches at most the 100,000 logs nearest its start: narrow the time range to read further.\n\nLogs are kept for 30 days. Each log is dated when its event happened, but only becomes readable a couple of minutes later. If you poll, make each time range overlap the previous one by a few minutes and skip the `id`s you have already seen.\n",
        "operationId": "project-logs",
        "parameters": [
          {
            "name": "projectGid",
            "in": "path",
            "description": "The project to read. When you authenticate with an access key, this must be the project that key belongs to.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "proj_V1StGXR8Z5jdHi6B"
          },
          {
            "name": "startTime",
            "in": "query",
            "description": "Start of the time range, as an ISO 8601 date-time (e.g. `2026-09-24T09:00:00Z`). Defaults to one hour before `endTime`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2026-09-24T09:00:00Z"
          },
          {
            "name": "endTime",
            "in": "query",
            "description": "End of the time range, as an ISO 8601 date-time. Defaults to now.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2026-09-24T10:00:00Z"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of logs per page, from 1 to 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "severity",
            "in": "query",
            "description": "Only return logs of this severity.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "nextToken",
            "in": "query",
            "description": "Opaque cursor from a previous response's `nextToken`, to fetch the following page. Valid for one hour.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "`desc` returns the newest logs first, `asc` the oldest first.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "desc",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectLogs"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ProjectLogs": {
        "type": "object",
        "description": "A page of project logs.",
        "properties": {
          "logs": {
            "type": "array",
            "description": "The logs of this page, in the requested order.",
            "items": {
              "$ref": "#/components/schemas/ProjectLog"
            }
          },
          "nextToken": {
            "type": "string",
            "description": "Pass it back as `nextToken` to get the following page; null on the last page."
          }
        },
        "required": [
          "logs"
        ]
      },
      "ProjectLog": {
        "type": "object",
        "description": "One event recorded for a project.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the log.",
            "example": "plog_01J8Z3Q4X5Y6Z7A8B9C0D1E2F3"
          },
          "severity": {
            "type": "string",
            "description": "Severity of the event.",
            "enum": [
              "INFO",
              "WARN",
              "ERROR"
            ]
          },
          "type": {
            "type": "string",
            "description": "What kind of event this is, as a stable dotted name, so you can react to one kind without parsing `message`.",
            "example": "webhook.failed"
          },
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "When the event happened (UTC).",
            "example": "2026-09-24T10:15:30.123Z"
          },
          "message": {
            "type": "string",
            "description": "Human-readable description of the event."
          },
          "data": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Structured details about the event; the keys depend on `type`."
          }
        },
        "required": [
          "data",
          "date",
          "id",
          "message",
          "severity",
          "type"
        ]
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "description": "Bearer authentication header of the form `Bearer <token>`, where `<token>` is an access key.\n\nExample: `Authorization: Bearer sk-proj-XXXXXXXXX`",
        "scheme": "bearer",
        "bearerFormat": "JWT | Access Key"
      }
    }
  }
}
```
