{
  "format": "tetiva.collection-snapshot",
  "version": 1,
  "generator": "Tetiva Playground 0.1.0",
  "locale": "en",
  "collection": {
    "id": "6d89c76024af",
    "name": "Tetiva Playground",
    "description": "One host, four protocols, 20 requests. Tetiva Playground at `playground.tetiva.app` answers with what you sent, any status you ask for, as slowly as you like. No key, nothing stored, not a proxy. The two streaming gRPC calls are in the gRPC folder as grpcurl commands.",
    "auth": {
      "type": "none",
      "fields": {},
      "redacted": []
    },
    "scripts": null,
    "grpcMetadata": [],
    "items": [
      {
        "kind": "folder",
        "id": "3d93b2c44060",
        "name": "REST · Echo",
        "description": "Every echo answers with the method, URL, query (as `args`), headers and body it received, plus a `request_id`. A JSON body comes back raw in `data` and parsed in `json`; forms and multipart uploads come back in `form` and `files`.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "e41b6d46d5ed",
            "name": "Echo a GET",
            "description": "Returns your request as JSON: query parameters in `args`, headers in `headers`, your IP in `origin`.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/get?source=docs&page=2",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "395a1ce820a8",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "314",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"GET\",\n  \"url\": \"https://playground.tetiva.app/get?source=docs&page=2\",\n  \"args\": {\n    \"page\": \"2\",\n    \"source\": \"docs\"\n  },\n  \"headers\": {\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "4f4abc9c71ed",
            "name": "Echo my POST body",
            "description": "Send a JSON body and get it back: raw in `data`, parsed in `json`. Bodies go up to 1 MB; forms and multipart files come back in `form` and `files`.",
            "protocol": "http",
            "http": {
              "method": "POST",
              "url": "https://playground.tetiva.app/post",
              "headers": [
                {
                  "key": "Content-Type",
                  "value": "application/json",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "json",
                "raw": "{\"hello\":\"world\"}",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "a7ed7a636fcb",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "397",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"POST\",\n  \"url\": \"https://playground.tetiva.app/post\",\n  \"args\": {},\n  \"headers\": {\n    \"Content-Length\": \"17\",\n    \"Content-Type\": \"application/json\",\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"data\": \"{\\\"hello\\\":\\\"world\\\"}\",\n  \"json\": {\n    \"hello\": \"world\"\n  },\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "0320bb9e5cb2",
            "name": "Echo a PUT",
            "description": "The same echo for PUT: the body comes back in `data` and `json`.",
            "protocol": "http",
            "http": {
              "method": "PUT",
              "url": "https://playground.tetiva.app/put",
              "headers": [
                {
                  "key": "Content-Type",
                  "value": "application/json",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "json",
                "raw": "{\n  \"id\": 42,\n  \"name\": \"Ada Lovelace\",\n  \"role\": \"admin\"\n}",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "2be4a62621dd",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "488",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"PUT\",\n  \"url\": \"https://playground.tetiva.app/put\",\n  \"args\": {},\n  \"headers\": {\n    \"Content-Length\": \"59\",\n    \"Content-Type\": \"application/json\",\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"data\": \"{\\n  \\\"id\\\": 42,\\n  \\\"name\\\": \\\"Ada Lovelace\\\",\\n  \\\"role\\\": \\\"admin\\\"\\n}\",\n  \"json\": {\n    \"id\": 42,\n    \"name\": \"Ada Lovelace\",\n    \"role\": \"admin\"\n  },\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "1546456dbf9e",
            "name": "Echo a PATCH",
            "description": "The same echo for PATCH, handy for partial updates.",
            "protocol": "http",
            "http": {
              "method": "PATCH",
              "url": "https://playground.tetiva.app/patch",
              "headers": [
                {
                  "key": "Content-Type",
                  "value": "application/json",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "json",
                "raw": "{\n  \"role\": \"viewer\"\n}",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "8e497be79d87",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "406",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"PATCH\",\n  \"url\": \"https://playground.tetiva.app/patch\",\n  \"args\": {},\n  \"headers\": {\n    \"Content-Length\": \"22\",\n    \"Content-Type\": \"application/json\",\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"data\": \"{\\n  \\\"role\\\": \\\"viewer\\\"\\n}\",\n  \"json\": {\n    \"role\": \"viewer\"\n  },\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "19e388485c82",
            "name": "Echo a DELETE",
            "description": "The same echo for DELETE. A body is allowed and comes back too.",
            "protocol": "http",
            "http": {
              "method": "DELETE",
              "url": "https://playground.tetiva.app/delete?id=42",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "50e410973d76",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "314",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"DELETE\",\n  \"url\": \"https://playground.tetiva.app/delete?id=42\",\n  \"args\": {\n    \"id\": \"42\"\n  },\n  \"headers\": {\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"data\": \"\",\n  \"json\": null,\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "81b9f4e2bc32",
            "name": "Any method, any path",
            "description": "`/anything` and every path under it echo any method, custom ones included, so you can stand in for a route that doesn't exist yet.",
            "protocol": "http",
            "http": {
              "method": "POST",
              "url": "https://playground.tetiva.app/anything/orders/42?dry_run=true",
              "headers": [
                {
                  "key": "Content-Type",
                  "value": "application/json",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "json",
                "raw": "{\n  \"status\": \"shipped\"\n}",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "1073e398068e",
                "name": "Echo",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "462",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"POST\",\n  \"url\": \"https://playground.tetiva.app/anything/orders/42?dry_run=true\",\n  \"args\": {\n    \"dry_run\": \"true\"\n  },\n  \"headers\": {\n    \"Content-Length\": \"25\",\n    \"Content-Type\": \"application/json\",\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\"\n  },\n  \"data\": \"{\\n  \\\"status\\\": \\\"shipped\\\"\\n}\",\n  \"json\": {\n    \"status\": \"shipped\"\n  },\n  \"origin\": \"203.0.113.42\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "4485c8733429",
            "name": "See my headers",
            "description": "Returns only the headers the server received. Useful to check what your client, proxy or SDK adds.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/headers",
              "headers": [
                {
                  "key": "X-Debug",
                  "value": "1",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "075f8e50f76b",
                "name": "Your headers",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "167",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"headers\": {\n    \"Host\": \"playground.tetiva.app\",\n    \"User-Agent\": \"curl/8.7.1\",\n    \"X-Debug\": \"1\"\n  },\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "05deda4a790a",
        "name": "REST · Status codes and delays",
        "description": "Make the server fail or stall on purpose: any status from 200 to 599, or a wait of up to 10 seconds.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "6eed745cd7b6",
            "name": "Any status code",
            "description": "Answers with the status in the path, from 200 to 599. Redirects point to `/get`, 401 adds `WWW-Authenticate`, 429 and 503 add `Retry-After`.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/status/418",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "fa6d2c6abcab",
                "name": "I'm a teapot",
                "status": 418,
                "statusText": "I'm a teapot",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "104",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"status\": 418,\n  \"reason\": \"I'm a teapot\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              },
              {
                "id": "8c3e0eaa45ef",
                "name": "Service unavailable",
                "status": 503,
                "statusText": "Service Unavailable",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "111",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "retry-after",
                    "value": "5",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"status\": 503,\n  \"reason\": \"Service Unavailable\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "c22ddfcb076e",
            "name": "Slow response",
            "description": "Waits the number of seconds in the path, up to 10, then answers; fractions work too, as in `/delay/0.5`. Good for testing timeouts and loading states.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/delay/2",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "38a93af060ea",
                "name": "After 2 seconds",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "237",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"method\": \"GET\",\n  \"url\": \"https://playground.tetiva.app/delay/2\",\n  \"args\": {},\n  \"delay\": 2,\n  \"started_at\": \"2026-10-17T09:30:00Z\",\n  \"finished_at\": \"2026-10-17T09:30:02Z\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "2b72234b7b60",
        "name": "REST · Auth",
        "description": "Check that your client sends credentials, and that it copes with the 401 when it doesn't.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "01c69d34a0f0",
            "name": "Bearer auth",
            "description": "Any non-empty token passes and comes back in `token`. Without `Authorization: Bearer …` you get 401 with `WWW-Authenticate: Bearer`.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/bearer",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "bearer",
              "fields": {
                "prefix": "Bearer",
                "token": "test-token"
              },
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "25952146966e",
                "name": "With a token",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "109",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"authenticated\": true,\n  \"token\": \"test-token\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              },
              {
                "id": "1870d8200a65",
                "name": "No Authorization header",
                "status": 401,
                "statusText": "Unauthorized",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "128",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "www-authenticate",
                    "value": "Bearer realm=\"playground\"",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"authenticated\": false,\n  \"error\": \"missing Authorization header\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "3ff6e6d2776a",
            "name": "Basic auth",
            "description": "Passes when the Basic credentials match the user and password in the path, here `tetiva` / `playground`. Anything else gets 401.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/basic-auth/tetiva/playground",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "basic",
              "fields": {
                "password": "playground",
                "username": "tetiva"
              },
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "45e06d9018b2",
                "name": "Matching credentials",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "104",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"authenticated\": true,\n  \"user\": \"tetiva\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              },
              {
                "id": "dbd1e258489a",
                "name": "Wrong password",
                "status": 401,
                "statusText": "Unauthorized",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "122",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "www-authenticate",
                    "value": "Basic realm=\"playground\"",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"authenticated\": false,\n  \"error\": \"wrong user or password\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "dcfc55f55bdc",
        "name": "REST · Fake data",
        "description": "Five fake users for lists, tables and pagination. The data is the same every time, and `POST /users` answers as if it worked but stores nothing.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "f444dd775825",
            "name": "Fake users",
            "description": "A page of fake users. `limit` takes 1 to 5, and `next` links to the following page until it is `null`.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/users?limit=3",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "908aadeec91b",
                "name": "First page",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "576",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"Mila Novak\",\n      \"email\": \"mila.novak@example.com\",\n      \"role\": \"admin\",\n      \"created_at\": \"2026-03-02T09:14:00Z\"\n    },\n    {\n      \"id\": 2,\n      \"name\": \"Jonas Berg\",\n      \"email\": \"jonas.berg@example.com\",\n      \"role\": \"editor\",\n      \"created_at\": \"2026-04-18T16:40:00Z\"\n    },\n    {\n      \"id\": 3,\n      \"name\": \"Priya Raman\",\n      \"email\": \"priya.raman@example.com\",\n      \"role\": \"viewer\",\n      \"created_at\": \"2026-05-27T11:05:00Z\"\n    }\n  ],\n  \"total\": 5,\n  \"limit\": 3,\n  \"next\": \"/users?limit=3&after=3\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "f84cdf4b3573",
            "name": "One fake user",
            "description": "One user by id, from 1 to 5. Any other id gets 404 with a hint.",
            "protocol": "http",
            "http": {
              "method": "GET",
              "url": "https://playground.tetiva.app/users/2",
              "headers": [],
              "body": {
                "type": "none",
                "raw": "",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "301e08824216",
                "name": "Found",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "135",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"id\": 2,\n  \"name\": \"Jonas Berg\",\n  \"email\": \"jonas.berg@example.com\",\n  \"role\": \"editor\",\n  \"created_at\": \"2026-04-18T16:40:00Z\"\n}\n",
                "contentType": "application/json"
              },
              {
                "id": "925312c857f3",
                "name": "Unknown id",
                "status": 404,
                "statusText": "Not Found",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "138",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"error\": \"not_found\",\n  \"message\": \"No user with id 9. Ids go from 1 to 5.\",\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\"\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "4dee95ceceb3",
            "name": "Create a user",
            "description": "Checks `name` and `email` and answers 201 with the new user and a `Location` header. Nothing is stored: `stored` is `false`.",
            "protocol": "http",
            "http": {
              "method": "POST",
              "url": "https://playground.tetiva.app/users",
              "headers": [
                {
                  "key": "Content-Type",
                  "value": "application/json",
                  "enabled": true,
                  "redacted": false
                }
              ],
              "body": {
                "type": "json",
                "raw": "{\n  \"name\": \"Grace Hopper\",\n  \"email\": \"grace@example.com\",\n  \"role\": \"editor\"\n}",
                "fields": [],
                "fileName": ""
              }
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "18d3eb5ec63f",
                "name": "Created, not stored",
                "status": 201,
                "statusText": "Created",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "151",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "location",
                    "value": "https://playground.tetiva.app/users/6",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"id\": 6,\n  \"name\": \"Grace Hopper\",\n  \"email\": \"grace@example.com\",\n  \"role\": \"editor\",\n  \"created_at\": \"2026-10-17T09:30:00Z\",\n  \"stored\": false\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "844c717bb035",
        "name": "GraphQL",
        "description": "A small library at `https://playground.tetiva.app/graphql`: books, authors and one mutation. Introspection is on, so any GraphQL client can load the schema.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "4b52b98cc2b5",
            "name": "Run a GraphQL query",
            "description": "Lists books with their authors. `first` takes 1 to 50; a field that doesn't exist gets an error that lists the real ones.",
            "protocol": "graphql",
            "graphql": {
              "url": "https://playground.tetiva.app/graphql",
              "headers": [],
              "query": "query Books($first: Int) {\n  books(first: $first) {\n    id\n    title\n    author {\n      name\n    }\n  }\n}",
              "variables": "{\n  \"first\": 2\n}",
              "operationName": "Books"
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "9f6635100651",
                "name": "Two books",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "304",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"data\": {\n    \"books\": [\n      {\n        \"id\": \"1\",\n        \"title\": \"Frankenstein\",\n        \"author\": {\n          \"name\": \"Mary Shelley\"\n        }\n      },\n      {\n        \"id\": \"2\",\n        \"title\": \"Moby-Dick\",\n        \"author\": {\n          \"name\": \"Herman Melville\"\n        }\n      }\n    ]\n  }\n}\n",
                "contentType": "application/json"
              },
              {
                "id": "241c67c22aa8",
                "name": "Unknown field",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "233",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"errors\": [\n    {\n      \"message\": \"Cannot query field \\\"isbn\\\" on type \\\"Book\\\". Fields on Book: id, title, year, author.\",\n      \"locations\": [\n        {\n          \"line\": 5,\n          \"column\": 5\n        }\n      ]\n    }\n  ]\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "939a88ee5b50",
            "name": "One book by id",
            "description": "Fetches one book. An unknown id returns `\"book\": null`, not an error.",
            "protocol": "graphql",
            "graphql": {
              "url": "https://playground.tetiva.app/graphql",
              "headers": [],
              "query": "query Book($id: ID!) {\n  book(id: $id) {\n    title\n    year\n    author {\n      name\n    }\n  }\n}",
              "variables": "{\n  \"id\": \"3\"\n}",
              "operationName": "Book"
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "25af910ef43d",
                "name": "One book",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "151",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"data\": {\n    \"book\": {\n      \"title\": \"The Time Machine\",\n      \"year\": 1895,\n      \"author\": {\n        \"name\": \"H. G. Wells\"\n      }\n    }\n  }\n}\n",
                "contentType": "application/json"
              }
            ]
          },
          {
            "kind": "request",
            "id": "615ba54572c4",
            "name": "Add a book",
            "description": "A mutation that returns the new book with id `6`. Nothing is stored: `extensions.stored` is `false`.",
            "protocol": "graphql",
            "graphql": {
              "url": "https://playground.tetiva.app/graphql",
              "headers": [],
              "query": "mutation AddBook($title: String!, $authorId: ID!) {\n  addBook(title: $title, authorId: $authorId) {\n    id\n    title\n    author {\n      name\n    }\n  }\n}",
              "variables": "{\n  \"title\": \"Carmilla\",\n  \"authorId\": \"a5\"\n}",
              "operationName": "AddBook"
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "d51f573719e9",
                "name": "Added, not stored",
                "status": 200,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "content-type",
                    "value": "application/json; charset=utf-8",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "content-length",
                    "value": "191",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"data\": {\n    \"addBook\": {\n      \"id\": \"6\",\n      \"title\": \"Carmilla\",\n      \"author\": {\n        \"name\": \"Sheridan Le Fanu\"\n      }\n    }\n  },\n  \"extensions\": {\n    \"stored\": false\n  }\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "05a5c1037d6d",
        "name": "gRPC",
        "description": "`echo.v1.EchoService` on `playground.tetiva.app:443` with TLS and server reflection, so clients find the methods without a `.proto` file.\n\n**Reflection**\n\n```bash\ngrpcurl playground.tetiva.app:443 list\ngrpcurl playground.tetiva.app:443 describe echo.v1.EchoService\n```\n\n**Streams.** `ServerStream` and `Chat` stream, so they are not in this collection. Run them with grpcurl:\n\n```bash\ngrpcurl -d '{\"text\":\"ping\",\"count\":3,\"interval_ms\":500}' playground.tetiva.app:443 echo.v1.EchoService/ServerStream\ngrpcurl -d @ playground.tetiva.app:443 echo.v1.EchoService/Chat <<'EOF'\n{\"text\":\"hello\"}\n{\"text\":\"still there?\"}\nEOF\n```",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "be6569057be8",
            "name": "Echo (unary)",
            "description": "Returns your `text` with `seq`, `server_time` and the request metadata as the server saw it.",
            "protocol": "grpc",
            "grpc": {
              "target": "grpcs://playground.tetiva.app",
              "service": "echo.v1.EchoService",
              "method": "Echo",
              "message": "{\n  \"text\": \"ping\"\n}",
              "metadata": []
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": [
              {
                "id": "03021992c106",
                "name": "Reply",
                "status": 0,
                "statusText": "OK",
                "headers": [
                  {
                    "key": "x-request-id",
                    "value": "00000000-0000-4000-8000-000000000001",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "access-control-allow-origin",
                    "value": "*",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-limit",
                    "value": "60",
                    "enabled": true,
                    "redacted": false
                  },
                  {
                    "key": "ratelimit-remaining",
                    "value": "59",
                    "enabled": true,
                    "redacted": false
                  }
                ],
                "body": "{\n  \"text\": \"ping\",\n  \"seq\": 1,\n  \"serverTime\": \"2026-10-17T09:30:00Z\",\n  \"metadata\": {\n    \"host\": \"playground.tetiva.app\",\n    \"user-agent\": \"grpcurl/1.9.3 grpc-go/1.73.0\"\n  }\n}\n",
                "contentType": "application/json"
              }
            ]
          }
        ]
      },
      {
        "kind": "folder",
        "id": "89c5cc5915e5",
        "name": "WebSocket",
        "description": "Text and binary frames up to 64 KB. `/ws` closes after 60 seconds without a message, with `1000 Normal Closure`; every session ends after 10 minutes.",
        "auth": null,
        "scripts": null,
        "items": [
          {
            "kind": "request",
            "id": "a97521599d44",
            "name": "Echo over WebSocket",
            "description": "Every frame you send comes straight back, text or binary, up to 64 KB a frame.",
            "protocol": "websocket",
            "websocket": {
              "url": "wss://playground.tetiva.app/ws",
              "headers": [],
              "subprotocols": [],
              "messages": [
                {
                  "name": "hello",
                  "format": "text",
                  "data": "hello"
                }
              ]
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": []
          },
          {
            "kind": "request",
            "id": "2934685ab4a2",
            "name": "Ticker",
            "description": "Pushes `{\"tick\": n, \"at\": …}` every second until you disconnect. Nothing to send.",
            "protocol": "websocket",
            "websocket": {
              "url": "wss://playground.tetiva.app/ws/ticker",
              "headers": [],
              "subprotocols": [],
              "messages": []
            },
            "auth": {
              "type": "inherit",
              "fields": {},
              "redacted": []
            },
            "scripts": null,
            "examples": []
          }
        ]
      }
    ]
  },
  "environment": null
}
