openapi: 3.2.0 info: title: Hookbase Routes API version: 1.0.0 description: Official OpenAPI 3.0 specification for the Hookbase webhook relay platform. Generated from the maintained Postman collection. Authenticate with an API key (whr_ prefix) as a Bearer token. contact: name: Hookbase url: https://www.hookbase.app servers: - url: https://api.hookbase.app description: Production security: - bearerAuth: [] tags: - name: Routes paths: /api/routes: post: tags: - Routes summary: Create route operationId: routes_create_route responses: '200': description: Successful response description: Create a route wiring a source to a destination, with optional filter, transform, schema validation, failover, and circuit-breaker config. requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Required. Route name. sourceId: type: string description: Required. Source this route listens to. destinationId: type: string description: Required. Primary destination id. filterId: type: string description: Optional. Existing filter id (mutually exclusive with filterConditions). filterConditions: type: array items: type: object description: 'Optional. Inline conditions [{field, operator, value}] (mutually exclusive with filterId). operator: equals, not_equals, contains, starts_with, ends_with, exists, not_exists, greater_than, less_than, regex.' filterLogic: type: string description: Optional. AND | OR — combine inline conditions (default AND). transformId: type: string description: Optional. Transform applied before delivery. schemaId: type: string description: Optional. Schema validated against before delivery. priority: type: integer description: Optional. Routing priority (higher runs first, default 0). isActive: type: boolean description: Optional. Whether the route is active (default true). notifyOnFailure: type: boolean description: Optional. Notify on delivery failure. notifyOnSuccess: type: boolean description: Optional. Notify on delivery success. notifyOnRecovery: type: boolean description: Optional. Notify when deliveries recover. notifyEmails: type: string description: Optional. Comma-separated notification emails. failureThreshold: type: integer description: Optional. Consecutive failures before alerting (default 3). failoverDestinationIds: type: array items: {} description: Optional. Up to 3 backup destination ids (plan-gated feature). failoverAfterAttempts: type: integer description: Optional. Attempts before failing over (1–5, default 5). expectedResponse: type: object description: Optional. Expected response matcher for success detection. circuitCooldownSeconds: type: integer description: Optional. Circuit breaker cooldown seconds (30–3600). circuitProbeSuccessThreshold: type: integer description: Optional. Successful probes to close the circuit (1–10). circuitFailureThreshold: type: integer description: Optional. Failures to open the circuit (1–50). required: - name - sourceId - destinationId example: name: GitHub to Production sourceId: '{{sourceId}}' destinationId: '{{destinationId}}' filterId: '{{filterId}}' filterConditions: - field: action operator: equals value: opened filterLogic: AND transformId: '{{transformId}}' schemaId: '{{schemaId}}' priority: 0 isActive: true notifyOnFailure: false notifyOnSuccess: false notifyOnRecovery: false notifyEmails: ops@example.com failureThreshold: 3 failoverDestinationIds: [] failoverAfterAttempts: 5 expectedResponse: status: 200 circuitCooldownSeconds: 60 circuitProbeSuccessThreshold: 2 circuitFailureThreshold: 5 get: tags: - Routes summary: List routes operationId: routes_list_routes parameters: - name: page in: query required: false schema: type: string example: '1' - name: pageSize in: query required: false schema: type: string example: '20' responses: '200': description: Successful response description: List routes for the org (paginated). /api/routes/{routeId}: get: tags: - Routes summary: Get route by id operationId: routes_get_route_by_id parameters: - name: routeId in: path required: true schema: type: string responses: '200': description: Successful response description: Fetch a single route by id. patch: tags: - Routes summary: Update route operationId: routes_update_route parameters: - name: routeId in: path required: true schema: type: string responses: '200': description: Successful response description: Update a route. All fields optional; same shape as create. requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Optional. Route name. sourceId: type: string description: Optional. Source this route listens to. destinationId: type: string description: Optional. Primary destination id. filterId: type: string description: Optional. Existing filter id (mutually exclusive with filterConditions). filterConditions: type: array items: type: object description: 'Optional. Inline conditions [{field, operator, value}] (mutually exclusive with filterId). operator: equals, not_equals, contains, starts_with, ends_with, exists, not_exists, greater_than, less_than, regex.' filterLogic: type: string description: Optional. AND | OR — combine inline conditions (default AND). transformId: type: string description: Optional. Transform applied before delivery. schemaId: type: string description: Optional. Schema validated against before delivery. priority: type: integer description: Optional. Routing priority (higher runs first, default 0). isActive: type: boolean description: Optional. Whether the route is active (default true). notifyOnFailure: type: boolean description: Optional. Notify on delivery failure. notifyOnSuccess: type: boolean description: Optional. Notify on delivery success. notifyOnRecovery: type: boolean description: Optional. Notify when deliveries recover. notifyEmails: type: string description: Optional. Comma-separated notification emails. failureThreshold: type: integer description: Optional. Consecutive failures before alerting (default 3). failoverDestinationIds: type: array items: {} description: Optional. Up to 3 backup destination ids (plan-gated feature). failoverAfterAttempts: type: integer description: Optional. Attempts before failing over (1–5, default 5). expectedResponse: type: object description: Optional. Expected response matcher for success detection. circuitCooldownSeconds: type: integer description: Optional. Circuit breaker cooldown seconds (30–3600). circuitProbeSuccessThreshold: type: integer description: Optional. Successful probes to close the circuit (1–10). circuitFailureThreshold: type: integer description: Optional. Failures to open the circuit (1–50). example: name: GitHub to Production sourceId: '{{sourceId}}' destinationId: '{{destinationId}}' filterId: '{{filterId}}' filterConditions: - field: action operator: equals value: opened filterLogic: AND transformId: '{{transformId}}' schemaId: '{{schemaId}}' priority: 0 isActive: true notifyOnFailure: false notifyOnSuccess: false notifyOnRecovery: false notifyEmails: ops@example.com failureThreshold: 3 failoverDestinationIds: [] failoverAfterAttempts: 5 expectedResponse: status: 200 circuitCooldownSeconds: 60 circuitProbeSuccessThreshold: 2 circuitFailureThreshold: 5 /api/routes/bulk: patch: tags: - Routes summary: Bulk toggle routes operationId: routes_bulk_toggle_routes responses: '200': description: Successful response description: Enable or disable multiple routes at once (max 100). requestBody: required: true content: application/json: schema: type: object properties: ids: type: array items: type: string description: Required. Route ids to toggle (max 100). isActive: type: boolean description: Required. Target active state for all listed routes. required: - ids - isActive example: ids: - '{{routeId}}' isActive: true delete: tags: - Routes summary: Bulk delete routes operationId: routes_bulk_delete_routes responses: '200': description: Successful response description: Delete multiple routes by id (max 100). requestBody: required: true content: application/json: schema: type: object properties: ids: type: array items: type: string description: Required. Route ids to delete (max 100). required: - ids example: ids: - '{{routeId}}' /api/routes/export: get: tags: - Routes summary: Export routes operationId: routes_export_routes responses: '200': description: Successful response description: Export all routes (or ?ids=) as a portable JSON config document. /api/routes/import: post: tags: - Routes summary: Import routes operationId: routes_import_routes responses: '200': description: Successful response description: Import routes from the export format. requestBody: required: true content: application/json: schema: type: object properties: routes: type: array items: type: object description: Required. Array of route configs in the /export shape. conflictStrategy: type: string description: Required. skip | rename | overwrite. validateOnly: type: boolean description: Optional. Validate without persisting. required: - routes - conflictStrategy example: routes: - name: GitHub to Production sourceSlug: github-webhooks destinationSlug: production-api conflictStrategy: skip validateOnly: false /api/routes/{routeId}/circuit-status: get: tags: - Routes summary: Get circuit breaker status operationId: routes_get_circuit_breaker_status parameters: - name: routeId in: path required: true schema: type: string responses: '200': description: Successful response description: Return the current circuit-breaker state (closed/open/half-open) for the route. /api/routes/{routeId}/reset-circuit: post: tags: - Routes summary: Reset circuit breaker operationId: routes_reset_circuit_breaker parameters: - name: routeId in: path required: true schema: type: string responses: '200': description: Successful response description: Force the route's circuit breaker back to closed. /api/routes/{routeId}/circuit-config: patch: tags: - Routes summary: Update circuit breaker config operationId: routes_update_circuit_breaker_config parameters: - name: routeId in: path required: true schema: type: string responses: '200': description: Successful response description: Tune the route's circuit-breaker thresholds. All fields optional. requestBody: required: false content: application/json: schema: type: object properties: circuitCooldownSeconds: type: integer description: Optional. Cooldown before probing after opening (30–3600). circuitFailureThreshold: type: integer description: Optional. Failures before opening the circuit (1–50). circuitProbeSuccessThreshold: type: integer description: Optional. Successful probes before closing (1–10). example: circuitCooldownSeconds: 60 circuitFailureThreshold: 5 circuitProbeSuccessThreshold: 2 /api/routes/{routeId}/failed-event-samples: get: tags: - Routes summary: List failed event samples operationId: routes_list_failed_event_samples parameters: - name: routeId in: path required: true schema: type: string - name: limit in: query required: false schema: type: string example: '5' responses: '200': description: Successful response description: Return sample recent failed events for the route to aid debugging. components: securitySchemes: bearerAuth: type: http scheme: bearer description: Hookbase API key with the whr_ prefix.