router metadata API

router metadata

Lightweight endpoints for reading and writing router metadata without touching full router configs.

GET /v1/projects/:project_id/routers/metadata

List metadata for all routers in a project

Auth: Project API key

Parameters

Name In Type Required Description
project_id path uuid Yes Project ID

Responses

200 Router metadata list. Response includes a weak ETag header for conditional requests.
project_id
- Project ID
routers
- Array of {id, name, metadata} objects
304 Not Modified (when If-None-Match matches current ETag)

Example

Request
curl https://api.tripswitch.dev/v1/projects/PROJECT_ID/routers/metadata \
  -H "Authorization: Bearer YOUR_PROJECT_API_KEY"
Response
{
  "project_id": "1234-432...",
  "routers": [
    {
      "id": "98765-5gf...",
      "name": "api-gateway",
      "metadata": {"env": "production", "team": "platform"}
    }
  ]
}
PATCH /v1/projects/:project_id/routers/:router_id/metadata

Merge keys into router metadata

Auth: Admin API key

Parameters

Name In Type Required Description
project_id path uuid Yes Project ID
router_id path uuid Yes Router ID

Request Body

metadata *
object Key/value pairs to merge. String keys and string values; set value to null to delete a key. Max 20 keys after merge; key max 64 chars; value max 255 chars.

Responses

200 Updated router metadata
id
- Router ID
metadata
- Updated metadata object
name
- Router name
404 Router not found
422 Validation failed

Example

Request
curl -X PATCH https://api.tripswitch.dev/v1/projects/PROJECT_ID/routers/ROUTER_ID/metadata \
  -H "Authorization: Bearer YOUR_USER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"metadata": {"env": "staging", "old_key": null}}'
Response
{
  "id": "98765-5gf...",
  "name": "api-gateway",
  "metadata": {"env": "staging", "team": "platform"}
}