---
title: "Tail a dataset's logs"
description: "Live tail, served on the live host obs-live.ezghcloud.com with the API host's credentials: newly accepted records as server-sent events, before they're searchable. Read it with fetch and a streamed body (not EventSource). Events: records (id: the newest accepted_at in the batch, in Unix milliseconds; data {\"records\":[LogRecord…],\"keptRatio\":r}); sampled (data {\"keptRatio\",\"matchedPerSecond\",\"sentPerSecond\"}) whenever the kept ratio changes; gap (data {\"since\",\"until\",\"reason\":\"replayLimit\"}) when a resume can't be replayed in full; end (data {\"reason\"}: maxDuration, revoked, datasetDeleting, slowConsumer, draining or unavailable); and a heartbeat comment every 15 seconds. A stream lasts at most 15 minutes. Resume with lastEventId, the last records event's id: records accepted since then (up to 5 minutes back) are replayed beside the live ones, may repeat or arrive out of order, and are de-duplicated by recordId. Above maxRate records per second the stream samples, the same records on every server. 429 too_many_requests: all of the organization's live tails are open. 503 unavailable: retry after Retry-After. Not idempotent: each request is a new stream."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.ezghcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Observability API

`POST /v1/organizations/{orgId}/projects/{projectId}/obs/datasets/{datasetId}/logs/tail`

Live tail, served on the live host obs-live.ezghcloud.com with the API host's credentials: newly accepted records as server-sent events, before they're searchable. Read it with fetch and a streamed body (not EventSource). Events: records (id: the newest accepted_at in the batch, in Unix milliseconds; data {"records":[LogRecord…],"keptRatio":r}); sampled (data {"keptRatio","matchedPerSecond","sentPerSecond"}) whenever the kept ratio changes; gap (data {"since","until","reason":"replayLimit"}) when a resume can't be replayed in full; end (data {"reason"}: maxDuration, revoked, datasetDeleting, slowConsumer, draining or unavailable); and a heartbeat comment every 15 seconds. A stream lasts at most 15 minutes. Resume with lastEventId, the last records event's id: records accepted since then (up to 5 minutes back) are replayed beside the live ones, may repeat or arrive out of order, and are de-duplicated by recordId. Above maxRate records per second the stream samples, the same records on every server. 429 too_many_requests: all of the organization's live tails are open. 503 unavailable: retry after Retry-After. Not idempotent: each request is a new stream.

## Authentication

Requires one of the following:

- `apiKey`, http, header `Authorization`
- `oauth`, http, header `Authorization`
- `sessionCookie`, apiKey, in cookie

## Path parameters

- `TailLogs.path.orgId` (string, required)
  - format `uuid`
- `TailLogs.path.projectId` (string, required)
  - format `uuid`
- `TailLogs.path.datasetId` (string, required)
  - format `uuid`

## Request body

_Optional._

- `TailLogs.filters` (object, optional)
  - `TailLogs.filters.applications` (array<string>, optional)
    - pattern `^[a-z0-9][a-z0-9._-]{0,62}$`
  - `TailLogs.filters.attributes` (array<object>, optional)
    - `TailLogs.filters.attributes.key` (string, required)
      - minLength 1; maxLength 256
    - `TailLogs.filters.attributes.op` (unknown, required) — notEquals: the key is absent, or holds another value. in: the key is present and holds one of values. notEquals and in are accepted once console reads are on (otherwise 400).
      - one of `"equals"`, `"notEquals"`, `"in"`, `"exists"`
    - `TailLogs.filters.attributes.scope` (unknown, optional)
      - one of `"record"`, `"resource"`; default `"record"`
    - `TailLogs.filters.attributes.value` (string, optional) — Required with equals and notEquals.
      - maxLength 1024
    - `TailLogs.filters.attributes.values` (array<string>, optional) — Required with in, and only with it.
      - maxLength 1024
  - `TailLogs.filters.body` (object, optional)
    - `TailLogs.filters.body.contains` (string, optional)
      - minLength 1; maxLength 1024
    - `TailLogs.filters.body.matches` (string, optional) — An RE2 regular expression.
      - minLength 1; maxLength 256
  - `TailLogs.filters.environments` (array<string>, optional)
    - pattern `^[a-z0-9][a-z0-9._-]{0,62}$`
  - `TailLogs.filters.minSeverityNumber` (integer, optional)
    - min 1; max 24
  - `TailLogs.filters.serviceNames` (array<string>, optional)
    - maxLength 256
  - `TailLogs.filters.severityTexts` (array<string>, optional)
    - maxLength 64
  - `TailLogs.filters.spanId` (string, optional)
    - pattern `^[0-9a-f]{16}$`
  - `TailLogs.filters.traceId` (string, optional)
    - pattern `^[0-9a-f]{32}$`
- `TailLogs.lastEventId` (string, optional) — The resume point: the id of the last records event received (Unix milliseconds). Without it the stream starts live.
  - pattern `^[0-9]{1,13}$`
- `TailLogs.maxRate` (integer, optional) — Records sent per second at most; above it the stream samples.
  - min 1; max 500; default `200`

## Example request

```json
{
  "filters": {
    "applications": [
      "string"
    ],
    "attributes": [
      {
        "key": "string",
        "op": "equals",
        "scope": "record",
        "value": "string",
        "values": [
          "string"
        ]
      }
    ],
    "body": {
      "contains": "string"
    },
    "environments": [
      "string"
    ],
    "minSeverityNumber": 1,
    "serviceNames": [
      "string"
    ],
    "severityTexts": [
      "string"
    ],
    "spanId": "string",
    "traceId": "string"
  },
  "lastEventId": "string",
  "maxRate": 200
}
```

## Code samples

### cURL

```curl
curl --request POST \
  --url https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/datasets/497f6eca-6276-4993-bfeb-53cbbbba6f08/logs/tail \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "filters": {
    "applications": [
      "string"
    ],
    "attributes": [
      {
        "key": "string",
        "op": "equals",
        "scope": "record",
        "value": "string",
        "values": [
          "string"
        ]
      }
    ],
    "body": {
      "contains": "string"
    },
    "environments": [
      "string"
    ],
    "minSeverityNumber": 1,
    "serviceNames": [
      "string"
    ],
    "severityTexts": [
      "string"
    ],
    "spanId": "string",
    "traceId": "string"
  },
  "lastEventId": "string",
  "maxRate": 200
}
'
```

### TypeScript

```typescript
const url = 'https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/datasets/497f6eca-6276-4993-bfeb-53cbbbba6f08/logs/tail';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json', Authorization: 'Bearer <token>'},
  body: JSON.stringify({
    filters: {
      applications: ['string'],
      attributes: [
        {
          key: 'string',
          op: 'equals',
          scope: 'record',
          value: 'string',
          values: ['string']
        }
      ],
      body: JSON.stringify({contains: 'string'}),
      environments: ['string'],
      minSeverityNumber: 1,
      serviceNames: ['string'],
      severityTexts: ['string'],
      spanId: 'string',
      traceId: 'string'
    },
    lastEventId: 'string',
    maxRate: 200
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/datasets/497f6eca-6276-4993-bfeb-53cbbbba6f08/logs/tail"

payload = {
    "filters": {
        "applications": ["string"],
        "attributes": [
            {
                "key": "string",
                "op": "equals",
                "scope": "record",
                "value": "string",
                "values": ["string"]
            }
        ],
        "body": { "contains": "string" },
        "environments": ["string"],
        "minSeverityNumber": 1,
        "serviceNames": ["string"],
        "severityTexts": ["string"],
        "spanId": "string",
        "traceId": "string"
    },
    "lastEventId": "string",
    "maxRate": 200
}
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 200

A stream of server-sent events: records, sampled, gap and end, and heartbeat comments.

#### Example

```text
string
```

### 400

invalid_request (with issues), invalid_cursor, or the endpoint's own 400 codes.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.400.error` (object, required)
  - `TailLogs.response.400.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.400.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.400.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.400.error.issues.message` (string, required)
    - `TailLogs.response.400.error.issues.path` (string, required)
  - `TailLogs.response.400.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.400.error.quota.id` (string, required)
    - `TailLogs.response.400.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.400.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.400.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.400.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.400.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.400.error.quota.region` (string, optional)
    - `TailLogs.response.400.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.400.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.400.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.400.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 401

unauthenticated: no credential, or one that doesn't check out.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.401.error` (object, required)
  - `TailLogs.response.401.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.401.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.401.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.401.error.issues.message` (string, required)
    - `TailLogs.response.401.error.issues.path` (string, required)
  - `TailLogs.response.401.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.401.error.quota.id` (string, required)
    - `TailLogs.response.401.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.401.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.401.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.401.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.401.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.401.error.quota.region` (string, optional)
    - `TailLogs.response.401.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.401.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.401.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.401.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 403

access_denied: the caller's policies don't allow the action; forbidden_origin: a cookie-authenticated write from an origin that isn't allowed; spend_limit_reached.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.403.error` (object, required)
  - `TailLogs.response.403.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.403.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.403.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.403.error.issues.message` (string, required)
    - `TailLogs.response.403.error.issues.path` (string, required)
  - `TailLogs.response.403.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.403.error.quota.id` (string, required)
    - `TailLogs.response.403.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.403.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.403.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.403.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.403.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.403.error.quota.region` (string, optional)
    - `TailLogs.response.403.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.403.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.403.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.403.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 404

not_found: unknown, malformed, or in an organization the caller isn't in.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.404.error` (object, required)
  - `TailLogs.response.404.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.404.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.404.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.404.error.issues.message` (string, required)
    - `TailLogs.response.404.error.issues.path` (string, required)
  - `TailLogs.response.404.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.404.error.quota.id` (string, required)
    - `TailLogs.response.404.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.404.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.404.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.404.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.404.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.404.error.quota.region` (string, optional)
    - `TailLogs.response.404.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.404.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.404.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.404.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 409

quota_exceeded (an allocation quota, with quota), idempotency_conflict, idempotency_in_progress (with Retry-After), organization_deletion_pending, operation_in_progress, or the endpoint's own 409 codes.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.409.error` (object, required)
  - `TailLogs.response.409.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.409.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.409.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.409.error.issues.message` (string, required)
    - `TailLogs.response.409.error.issues.path` (string, required)
  - `TailLogs.response.409.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.409.error.quota.id` (string, required)
    - `TailLogs.response.409.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.409.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.409.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.409.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.409.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.409.error.quota.region` (string, optional)
    - `TailLogs.response.409.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.409.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.409.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.409.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 413

payload_too_large: the body is over the endpoint's limit (1 MiB unless it says otherwise).

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.413.error` (object, required)
  - `TailLogs.response.413.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.413.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.413.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.413.error.issues.message` (string, required)
    - `TailLogs.response.413.error.issues.path` (string, required)
  - `TailLogs.response.413.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.413.error.quota.id` (string, required)
    - `TailLogs.response.413.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.413.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.413.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.413.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.413.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.413.error.quota.region` (string, optional)
    - `TailLogs.response.413.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.413.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.413.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.413.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 429

too_many_requests, with Retry-After; or quota_exceeded (a rate, usage or concurrency quota, with quota), never with Retry-After.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.429.error` (object, required)
  - `TailLogs.response.429.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.429.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.429.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.429.error.issues.message` (string, required)
    - `TailLogs.response.429.error.issues.path` (string, required)
  - `TailLogs.response.429.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.429.error.quota.id` (string, required)
    - `TailLogs.response.429.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.429.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.429.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.429.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.429.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.429.error.quota.region` (string, optional)
    - `TailLogs.response.429.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.429.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.429.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.429.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 500

internal_error: a bug; the details are in the logs, under the request ID.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.500.error` (object, required)
  - `TailLogs.response.500.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.500.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.500.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.500.error.issues.message` (string, required)
    - `TailLogs.response.500.error.issues.path` (string, required)
  - `TailLogs.response.500.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.500.error.quota.id` (string, required)
    - `TailLogs.response.500.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.500.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.500.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.500.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.500.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.500.error.quota.region` (string, optional)
    - `TailLogs.response.500.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.500.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.500.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.500.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 503

unavailable: a dependency the request needs is down. Retry after Retry-After.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `TailLogs.response.503.error` (object, required)
  - `TailLogs.response.503.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `TailLogs.response.503.error.message` (string, required)
    - maxLength 1024
  - `TailLogs.response.503.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `TailLogs.response.503.error.issues.message` (string, required)
    - `TailLogs.response.503.error.issues.path` (string, required)
  - `TailLogs.response.503.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `TailLogs.response.503.error.quota.id` (string, required)
    - `TailLogs.response.503.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `TailLogs.response.503.error.quota.limit` (integer, required)
      - min 0
    - `TailLogs.response.503.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `TailLogs.response.503.error.quota.inFlight` (integer, optional)
      - min 0
    - `TailLogs.response.503.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `TailLogs.response.503.error.quota.region` (string, optional)
    - `TailLogs.response.503.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `TailLogs.response.503.error.quota.scopeResourceName` (string, optional)
    - `TailLogs.response.503.error.quota.used` (integer, optional)
      - min 0
    - `TailLogs.response.503.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.


Source: https://docs.ezghcloud.com/obs-api/TailLogs/index.md
