OpenRelay Webhooks API
Subscribe to platform events with signed HTTP callbacks.
Subscribe to platform events with signed HTTP callbacks.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/openrelay-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: 'The OpenRelay control-plane REST API. Deploy GPU VMs and inference clusters, manage organizations and billing, and automate your infrastructure. All requests are authenticated with an API key (`vl_…`) unless noted otherwise.
'
title: OpenRelay Account Webhooks API
version: 0.1.0
servers:
- description: Production
url: https://api.openrelay.inc
- description: Beta
url: https://api.beta.openrelay.inc
- description: Local development
url: http://localhost:8083
tags:
- description: Subscribe to platform events with signed HTTP callbacks.
name: Webhooks
paths:
/v1/orgs/{orgId}/webhooks:
get:
operationId: listOrgWebhooks
parameters:
- in: path
name: orgId
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/WebhookSummary'
type: array
description: Webhooks
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
security:
- apiKey: []
summary: List an org's webhooks (no secrets)
tags:
- Webhooks
/v1/orgs/{orgId}/webhooks/create:
post:
operationId: createOrgWebhook
parameters:
- in: path
name: orgId
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
events:
- vm.running
- vm.stopped
- cluster.degraded
name: deploy-events
url: https://example.com/hooks/openrelay
schema:
$ref: '#/components/schemas/CreateWebhookRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookWithSecret'
description: Created
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
security:
- apiKey: []
summary: Create a webhook (returns the signing secret once)
tags:
- Webhooks
/v1/orgs/{orgId}/webhooks/{id}:
delete:
operationId: deleteOrgWebhook
parameters:
- in: path
name: orgId
required: true
schema:
type: string
- in: path
name: id
required: true
schema:
type: string
responses:
'204':
description: Deleted
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
security:
- apiKey: []
summary: Delete a webhook
tags:
- Webhooks
x-openrelay-mcp:
destructiveHint: true
patch:
operationId: updateOrgWebhook
parameters:
- in: path
name: orgId
required: true
schema:
type: string
- in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateWebhookRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookUpdateResult'
description: Updated
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- apiKey: []
summary: Update a webhook (name/url/events)
tags:
- Webhooks
/v1/orgs/{orgId}/webhooks/{id}/deliveries:
get:
operationId: listOrgWebhookDeliveries
parameters:
- in: path
name: orgId
required: true
schema:
type: string
- in: path
name: id
required: true
schema:
type: string
- in: query
name: limit
required: false
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/WebhookDeliveryItem'
type: array
description: Deliveries
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- apiKey: []
summary: Recent delivery attempts for a webhook
tags:
- Webhooks
/v1/orgs/{orgId}/webhooks/{id}/regenerate-secret:
post:
operationId: regenerateOrgWebhookSecret
parameters:
- in: path
name: orgId
required: true
schema:
type: string
- in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookSecret'
description: Regenerated
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- apiKey: []
summary: Regenerate a webhook's signing secret (returned once)
tags:
- Webhooks
/v1/orgs/{orgId}/webhooks/{id}/toggle:
post:
operationId: toggleOrgWebhook
parameters:
- in: path
name: orgId
required: true
schema:
type: string
- in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ToggleWebhookRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookToggleResult'
description: Toggled
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- apiKey: []
summary: Enable/disable a webhook
tags:
- Webhooks
components:
schemas:
Error:
properties:
code:
type: string
error:
type: string
required:
- error
type: object
WebhookSecret:
properties:
id:
type: string
secret:
type: string
secretPrefix:
type: string
required:
- id
- secret
- secretPrefix
type: object
UpdateWebhookRequest:
properties:
events:
items:
type: string
type: array
name:
type: string
url:
type: string
type: object
WebhookSummary:
properties:
createdAt:
type: string
enabled:
type: boolean
events:
items:
type: string
type: array
id:
type: string
name:
type: string
secretPrefix:
type: string
updatedAt:
type: string
url:
type: string
required:
- id
- name
- url
- secretPrefix
- events
- enabled
- createdAt
- updatedAt
type: object
WebhookWithSecret:
properties:
createdAt:
type: string
enabled:
type: boolean
events:
items:
type: string
type: array
id:
type: string
name:
type: string
secret:
type: string
secretPrefix:
type: string
url:
type: string
required:
- id
- name
- url
- secretPrefix
- events
- enabled
- createdAt
- secret
type: object
WebhookDeliveryItem:
properties:
attemptNumber:
type: integer
createdAt:
type: string
deliveredAt:
type: string
errorMessage:
type: string
eventId:
type: string
eventType:
type: string
id:
type: string
status:
type: string
statusCode:
type: integer
required:
- id
- eventType
- eventId
- attemptNumber
- status
- createdAt
type: object
CreateWebhookRequest:
properties:
events:
items:
type: string
type: array
name:
type: string
url:
type: string
required:
- name
- url
type: object
ToggleWebhookRequest:
properties:
enabled:
type: boolean
required:
- enabled
type: object
WebhookToggleResult:
properties:
enabled:
type: boolean
id:
type: string
required:
- id
- enabled
type: object
WebhookUpdateResult:
properties:
events:
items:
type: string
type: array
id:
type: string
name:
type: string
url:
type: string
required:
- id
- name
- url
- events
type: object
responses:
NotFound:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Resource not found
Forbidden:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: API key lacks the required scope
BadRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: The request is invalid
Unauthorized:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Missing or invalid API key
securitySchemes:
apiKey:
description: 'OpenRelay API key. Send it as `Authorization: Bearer vl_…`.'
scheme: bearer
type: http