HackMD Team Webhooks API
Operations for managing webhooks in a team workspace.
Operations for managing webhooks in a team workspace.
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/hackmd:hackmd-team-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:
title: HackMD Open Team Webhooks API
version: 1.0.0
description: HackMD OpenAPI
license:
name: UNLICENSED
contact:
name: HackMD Team
email: support@hackmd.io
servers:
- url: /v1
description: API Server
tags:
- name: Team Webhooks
description: Operations for managing webhooks in a team workspace.
paths:
/teams/{teampath}/webhooks:
get:
operationId: ListTeamWebhooks
responses:
'200':
description: Ok
content:
application/json:
schema:
items:
$ref: '#/components/schemas/ApiWebhook'
type: array
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: List webhooks in a team workspace.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
summary: List team webhooks
x-summary-source: derived
post:
operationId: CreateTeamWebhook
responses:
'201':
description: Created
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiWebhook'
- properties:
secret:
type: string
required:
- secret
type: object
'400':
description: Invalid request
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Folder not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ApiValidationError'
'429':
description: Webhook limit reached
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: 'Create a webhook in a team workspace.
The signing secret is returned only once and cannot be retrieved later.'
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateApiWebhookBody'
summary: Create team webhook
x-summary-source: derived
/teams/{teampath}/webhooks/{hookId}:
get:
operationId: GetTeamWebhook
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/ApiWebhook'
'400':
description: Invalid webhook ID
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: Get a webhook in a team workspace.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
summary: Get team webhook
x-summary-source: derived
patch:
operationId: UpdateTeamWebhook
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/ApiWebhook'
'400':
description: Invalid request
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ApiValidationError'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: 'Update a team webhook. At least one of name, url, or active is required.
Scope and event selection cannot be changed.'
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateApiWebhookBody'
summary: Update team webhook
x-summary-source: derived
delete:
operationId: DeleteTeamWebhook
responses:
'204':
description: No content
'400':
description: Invalid webhook ID
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: Delete a team webhook.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
summary: Delete team webhook
x-summary-source: derived
/teams/{teampath}/webhooks/{hookId}/ping:
post:
operationId: PingTeamWebhook
responses:
'204':
description: No content
'400':
description: Invalid webhook ID
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Too many ping requests
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: Send a test delivery for a team webhook.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
summary: Ping team webhook
x-summary-source: derived
/teams/{teampath}/webhooks/{hookId}/deliveries:
get:
operationId: ListTeamWebhookDeliveries
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_ApiWebhookDelivery_'
'400':
description: Invalid request
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: List team webhook deliveries within the plan's retention window.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
- in: query
name: page
required: false
schema:
$ref: '#/components/schemas/ApiWebhookPage'
- in: query
name: limit
required: false
schema:
$ref: '#/components/schemas/ApiWebhookLimit'
summary: List team webhook deliveries
x-summary-source: derived
/teams/{teampath}/webhooks/{hookId}/deliveries/export:
get:
operationId: ExportTeamWebhookDeliveries
responses:
'200':
description: Ok
content:
application/x-ndjson:
schema:
type: string
'400':
description: Invalid webhook ID
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: Download team webhook deliveries as newline-delimited JSON.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
summary: Export team webhook deliveries
x-summary-source: derived
/teams/{teampath}/webhooks/{hookId}/deliveries/{deliveryId}:
get:
operationId: GetTeamWebhookDelivery
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/ApiWebhookDelivery'
'400':
description: Invalid request
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
'404':
description: Delivery not found
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WebhookApiErrorResponse'
- $ref: '#/components/schemas/ApiErrorResponse'
'429':
description: Rate limit or workspace quota exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiRateLimitErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiServerErrorResponse'
description: Get a team webhook delivery within the plan's retention window.
tags:
- Team Webhooks
security:
- token: []
parameters:
- in: path
name: teampath
required: true
schema:
type: string
- in: path
name: hookId
required: true
schema:
type: string
- in: path
name: deliveryId
required: true
schema:
type: string
summary: Get team webhook delivery
x-summary-source: derived
components:
schemas:
ApiValidationError:
properties:
message:
type: string
enum:
- Validation Failed
details:
$ref: '#/components/schemas/Record_string.ApiValidationFieldError_'
required:
- message
- details
type: object
additionalProperties: false
UpdateApiWebhookBody:
$ref: '#/components/schemas/UpdateWebhookData'
PaginatedResponse_ApiWebhookDelivery_:
properties:
data:
items:
$ref: '#/components/schemas/ApiWebhookDelivery'
type: array
meta:
allOf:
- $ref: '#/components/schemas/PaginatedQuery'
- properties:
totalPages:
type: number
format: double
total:
type: number
format: double
type: object
required:
- data
- meta
type: object
additionalProperties: false
ApiErrorResponse:
properties:
error:
type: string
required:
- error
type: object
additionalProperties: false
ApiWebhookLimit:
type: integer
format: int32
default: 20
minimum: 1
maximum: 100
ApiRateLimitErrorResponse:
anyOf:
- $ref: '#/components/schemas/ApiErrorResponse'
- $ref: '#/components/schemas/ApiQuotaErrorResponse'
ApiValidationFieldError:
properties:
message:
type: string
value: {}
required:
- message
type: object
additionalProperties: false
CreateApiWebhookBody:
allOf:
- $ref: '#/components/schemas/CreateWebhookData'
- properties:
active:
type: boolean
type: object
PaginatedQuery:
properties:
limit:
type: number
format: double
page:
type: number
format: double
required:
- limit
- page
type: object
additionalProperties: false
ApiWebhookScope:
anyOf:
- properties:
type:
type: string
enum:
- workspace
required:
- type
type: object
- properties:
folderId:
type: string
type:
type: string
enum:
- folder
required:
- folderId
- type
type: object
WebhookApiErrorResponse:
properties:
error:
properties:
message:
type: string
code:
type: string
required:
- message
- code
type: object
required:
- error
type: object
ApiRequestErrorResponse:
properties:
message:
type: string
required:
- message
type: object
additionalProperties: false
ApiWebhook:
properties:
updatedAt:
type: number
format: double
createdAt:
type: number
format: double
eventDeliveryMode:
type: string
enum:
- all_supported_events
deliveryPolicyReason:
type:
- string
- 'null'
enum:
- unsafe_destination
- suspicious_pattern
- policy_violation
- null
deliveryPolicyStatus:
type: string
enum:
- normal
- suppressed
configuredStatusReason:
type:
- string
- 'null'
enum:
- scope_deleted
- null
configuredStatus:
type: string
enum:
- active
- disabled
scope:
$ref: '#/components/schemas/ApiWebhookScope'
url:
type: string
name:
type: string
id:
type: string
required:
- updatedAt
- createdAt
- eventDeliveryMode
- deliveryPolicyReason
- deliveryPolicyStatus
- configuredStatusReason
- configuredStatus
- scope
- url
- name
- id
type: object
ApiQuotaErrorResponse:
properties:
error:
properties:
upgradeUrl:
type: string
helpUrl:
type: string
message:
type: string
code:
type: string
enum:
- quota_exceeded
required:
- upgradeUrl
- helpUrl
- message
- code
type: object
required:
- error
type: object
additionalProperties: false
ApiWebhookPage:
type: integer
format: int32
default: 1
minimum: 1
Record_string.ApiValidationFieldError_:
properties: {}
additionalProperties:
$ref: '#/components/schemas/ApiValidationFieldError'
type: object
description: Construct a type with a set of properties K of type T
WebhookDeliveryStatusCategory:
type: string
enum:
- delivered
- delivery_issue
- not_delivered
CreateWebhookData:
properties:
scope:
anyOf:
- properties:
type:
type: string
enum:
- workspace
required:
- type
type: object
- properties:
folderId:
type: string
type:
type: string
enum:
- folder
required:
- folderId
- type
type: object
url:
type: string
name:
type:
- string
- 'null'
maxLength: 255
required:
- scope
- url
type: object
ApiWebhookDelivery:
properties:
deliveredAt:
type:
- number
- 'null'
format: double
createdAt:
type: number
format: double
latencyMs:
type:
- number
- 'null'
format: double
errorMessage:
type:
- string
- 'null'
errorCategory:
type:
- string
- 'null'
httpStatus:
type:
- number
- 'null'
format: double
statusCategory:
$ref: '#/components/schemas/WebhookDeliveryStatusCategory'
status:
type: string
enum:
- success
- failed
- skipped
attemptKind:
type: string
enum:
- event
- ping
eventType:
type: string
id:
type: string
required:
- deliveredAt
- createdAt
- latencyMs
- errorMessage
- errorCategory
- httpStatus
- statusCategory
- status
- attemptKind
- eventType
- id
type: object
UpdateWebhookData:
properties:
active:
type: boolean
url:
type: string
name:
type:
- string
- 'null'
maxLength: 255
type: object
ApiServerErrorResponse:
anyOf:
- $ref: '#/components/schemas/ApiErrorResponse'
- $ref: '#/components/schemas/ApiRequestErrorResponse'
securitySchemes:
token:
type: http
scheme: bearer
x-provenance:
method: harvested
publisher: HackMD
source: https://api.hackmd.io/v1/docs/swagger.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)