---
title: "ReportErrors"
method: POST
path: "/gitpod.v1.ErrorsService/ReportErrors"
tags: ["gitpod.v1.ErrorsService"]
---

# ReportErrors

`POST /gitpod.v1.ErrorsService/ReportErrors`

ReportErrors allows clients to report batches of errors that will be sent to error reporting systems.
 The structure is fully compatible with Sentry's event payload format.

 Use this method to:
 - Report client-side errors and exceptions
 - Track application crashes and panics
 - Send error context and metadata for debugging

 ### Examples

 - Report a JavaScript error with Sentry-compatible structure:
   The service accepts events with comprehensive error information
   including stack traces, identity context, breadcrumbs, and metadata
   that align with Sentry's event payload format.

## Request body

- GitpodV1ReportErrorsRequest — ReportErrorsRequest contains the error information to be reported
  - `events` GitpodV1ErrorEvent[] — Error events to be reported (batch) - now using Sentry-compatible structure
    - `breadcrumbs` GitpodV1Breadcrumb[] — Breadcrumbs leading up to the error
      - `category` string — Breadcrumb category
      - `data` object — Additional breadcrumb data
      - `level` 'ERROR_LEVEL_UNSPECIFIED' | 'ERROR_LEVEL_DEBUG' | 'ERROR_LEVEL_INFO' | 'ERROR_LEVEL_WARNING' | 'ERROR_LEVEL_ERROR' | 'ERROR_LEVEL_FATAL' — Error severity levels (aligned with Sentry levels)
      - `message` string — Breadcrumb message
      - `timestamp` string, date-time — A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() ) to obtain a formatter capable of generating timestamps in this format.
      - `type` string — Breadcrumb type (e.g., "navigation", "http", "user", "error")
    - `environment` string — Environment (e.g., "production", "staging", "development")
    - `eventId` string — Unique event identifier (required by Sentry)
    - `exceptions` GitpodV1ExceptionInfo[] — Exception information (primary error data)
      - `mechanism` GitpodV1ExceptionMechanism — Exception mechanism information (Sentry-compatible)
        - `data` object — Additional mechanism-specific data
        - `description` string — Human-readable description of the mechanism
        - `handled` boolean — Whether the exception was handled by user code
        - `synthetic` boolean — Whether this is a synthetic exception (created by SDK)
        - `type` string — Type of mechanism (e.g., "generic", "promise", "onerror")
      - `module` string — Module or package where the exception type is defined
      - `stacktrace` GitpodV1StackFrame[] — Stack trace frames
        - `colno` integer — Column number in the line
        - `contextLine` string
        - `filename` string — File name or path
        - `function` string — Function name
        - `inApp` boolean — Whether this frame is in application code (vs library/framework code)
        - `lineno` integer — Line number in the file
        - `module` string — Module or package name
        - `postContext` string[]
        - `preContext` string[] — Source code context around the error line
        - `vars` object — Additional frame-specific variables/locals
      - `threadId` string — Thread ID if applicable
      - `type` string — Exception type/class name
      - `value` string — Exception message/value
    - `extra` object — Additional arbitrary metadata
    - `fingerprint` string[] — Custom fingerprint for grouping
    - `identityId` string — Identity ID of the user (UUID)
    - `level` 'ERROR_LEVEL_UNSPECIFIED' | 'ERROR_LEVEL_DEBUG' | 'ERROR_LEVEL_INFO' | 'ERROR_LEVEL_WARNING' | 'ERROR_LEVEL_ERROR' | 'ERROR_LEVEL_FATAL' — Error severity levels (aligned with Sentry levels)
    - `logger` string — Logger name
    - `modules` object — Modules/dependencies information
    - `platform` string — Platform identifier (required by Sentry)
    - `release` string — Release version
    - `request` GitpodV1RequestInfo — Request information (Sentry-compatible)
      - `data` string — Request body (truncated if large)
      - `headers` object — Request headers
      - `method` string — HTTP method
      - `queryString` object — Query parameters
      - `url` string — Request URL
    - `sdk` object — SDK information
    - `serverName` string — Server/host name
    - `tags` object — Tags for filtering and grouping
    - `timestamp` string, date-time — A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() ) to obtain a formatter capable of generating timestamps in this format.
    - `transaction` string — Transaction name (e.g., route name, function name)

## Response `200`

Success

- GitpodV1ReportErrorsResponse — ReportErrorsResponse confirms that the errors were successfully received Success is indicated by HTTP 200 status code, failures by other status codes

## Other responses

- `default` — Error

---

[API](https://skmtc.net/gitpod-io/apis/gitpod-v1.md) · [All operations](https://skmtc.net/gitpod-io/apis/gitpod-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/gitpod-io/gitpod-v1/revisions/44d50c2ac284/schema)
