---
title: "Demo Web App API"
url: "https://console.staging.9fin.com/apis/demo-webapp-staging/versions/ba551c00-5e8d-4520-ae68-9ae9da9ee5fb"
---

# Demo Web App API

OpenAPI specification document.

```json
{"openapi":"3.0.3","info":{"title":"Demo Web App API","version":"1.1.8","description":"This is a demo-webapp service exposed via Kong under the `/demo` base path.\n"},"servers":[{"url":"https://{host}/demo","description":"Kong proxy base URL + service base path","variables":{"host":{"default":"api.staging.9fin.com","description":"Self-hosted Demo Gateway from infra-tf PR"}}}],"tags":[{"name":"Health"},{"name":"Public"},{"name":"Private"},{"name":"Integrations"}],"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"apikey"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token issued by WorkOS AuthKit. Obtain a token by\nexchanging your DCR-issued `client_id` / `client_secret` at the\ntoken endpoint, then send it here as `Authorization: Bearer <token>`.\n\nToken endpoint (staging):\n`https://imaginative-explorer-58-staging.authkit.app/oauth2/token`\n"}},"schemas":{"StatusMessage":{"type":"object","required":["status","msg"],"properties":{"status":{"type":"string","example":"success"},"msg":{"type":"string"}}},"PrivateAuthResult":{"type":"object","description":"Response is whatever VerifyToken.verify returns.","additionalProperties":true},"GiphyGif":{"type":"object","additionalProperties":true},"GiphySearchResponse":{"type":"object","required":["gifs"],"properties":{"gifs":{"type":"array","items":{"$ref":"#/components/schemas/GiphyGif"}}}}}},"paths":{"/healthz":{"get":{"tags":["Health"],"summary":"Health check","operationId":"getHealthz","security":[{"apiKeyAuth":[]},{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"success","msg":"OK"}}}}}}},"/api/public":{"get":{"tags":["Public"],"summary":"Public endpoint","operationId":"getPublic","security":[{"apiKeyAuth":[]},{"bearerAuth":[]}],"responses":{"200":{"description":"Public response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"}}}}}}},"/api/print-headers":{"get":{"tags":["Public"],"summary":"Print incoming request headers to logs","operationId":"printHeaders","security":[{"apiKeyAuth":[]},{"bearerAuth":[]}],"responses":{"200":{"description":"Echoed headers","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}},"/api/private":{"get":{"tags":["Private"],"summary":"Private endpoint (JWT OR API key)","operationId":"getPrivate","security":[{"apiKeyAuth":[]},{"bearerAuth":[]}],"responses":{"200":{"description":"Auth result from VerifyToken.verify","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateAuthResult"}}}},"401":{"description":"Unauthorized"}}}},"/api/search-gif":{"get":{"tags":["Integrations"],"summary":"Search GIFs (Giphy)","operationId":"searchGif","security":[{"apiKeyAuth":[]},{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search query for GIFs"}],"responses":{"200":{"description":"GIF search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiphySearchResponse"}}}},"4XX":{"description":"Client error"},"5XX":{"description":"Server error"}}}}}}
```
