Overflow Webhooks API
The Webhooks API from Overflow — 3 operation(s) for webhooks.
The Webhooks API from Overflow — 3 operation(s) for webhooks.
openapi: 3.0.0
info:
title: Overflow Open Campaigns Webhooks API
description: '
The documentation for the Overflow Open APIs.
To access the OpenAPI spec in JSON/YAML format, navigate to:
* `/api/docs/openapi.json`
* `/api/docs/openapi.yaml`
'
version: '3.0'
contact: {}
servers:
- url: https://server.stage.overflow.co
description: API server
tags:
- name: Webhooks
paths:
/api/v3/webhooks:
get:
description: Returns webhook subscriptions for the authenticated nonprofit. Results are paginated using limit and page.
operationId: OpenApiWebhooksController_getWebhooks
parameters:
- name: limit
required: false
in: query
description: The number of webhook subscriptions to return.
schema:
minimum: 1
maximum: 100
default: 25
type: number
- name: page
required: false
in: query
description: The page number of webhook subscriptions to return.
schema:
minimum: 1
default: 1
type: number
- name: sortDirection
required: false
in: query
description: Sort direction by webhook subscription created date. Defaults to descending.
schema:
example: DESC
enum:
- ASC
- DESC
type: string
- name: status
required: false
in: query
description: Filter by webhook subscription status.
schema:
example: enabled
enum:
- enabled
- disabled
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhooksResponse'
security:
- ClientId: []
ApiKey: []
summary: Get Webhooks
tags:
- Webhooks
/api/v3/webhooks/{webhookId}:
get:
description: Returns a single webhook subscription by id for the authenticated nonprofit.
operationId: OpenApiWebhooksController_getWebhookById
parameters:
- name: webhookId
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhookResponse'
'404':
description: Webhook subscription not found
security:
- ClientId: []
ApiKey: []
summary: Get Webhook
tags:
- Webhooks
/api/v3/webhooks/{webhookId}/event-logs:
get:
description: Returns webhook delivery logs for a webhook subscription owned by the authenticated nonprofit. Results are cursor paginated.
operationId: OpenApiWebhooksController_getWebhookEventLogs
parameters:
- name: webhookId
required: true
in: path
schema:
type: string
- name: limit
required: false
in: query
description: The number of webhook event logs to return.
schema:
minimum: 1
maximum: 50
type: number
- name: cursor
required: false
in: query
description: Cursor for loading the next page of webhook event logs.
schema:
type: string
- name: sortDirection
required: false
in: query
description: Sort direction by webhook event log attempt order. Defaults to descending.
schema:
example: DESC
enum:
- ASC
- DESC
type: string
- name: status
required: false
in: query
description: Filter by webhook delivery status.
schema:
example: failed
enum:
- delivered
- failed
- pending
type: string
- name: webhookEventName
required: false
in: query
description: Filter by webhook event name.
schema:
example: contribution.approved
enum:
- '*'
- contribution.approved
- contribution.declined
- contribution.paid_out
- contribution.processing
- contribution.chargeback_lost
- contribution.chargeback_pending
- contribution.chargeback_won
- contribution.refund_approved
- contribution.refund_canceled
- contribution.refund_failed
- contribution.refund_requested
- contribution.refund_requires_action
- contribution.refunded
- contribution.voided
- donor.archived
- donor.created
- donor.merged
- donor.updated
- deposit.paid_out
- recurring_gift.active
- recurring_gift.cycle_failed
- recurring_gift.failed
- recurring_gift.inactive
- recurring_gift.paused
- recurring_gift.updated
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhookEventLogsResponse'
'404':
description: Webhook subscription not found
security:
- ClientId: []
ApiKey: []
summary: Get Webhook Event Logs
tags:
- Webhooks
components:
schemas:
GetWebhookResponse:
type: object
properties:
data:
type: object
properties:
id:
type: string
description: Webhook subscription id.
example: 6817cec907243f2d3a1130df
name:
type: string
description: Webhook subscription name.
example: Main webhook endpoint
description:
type: string
nullable: true
description: Webhook subscription description.
example: Receives contribution events for reporting.
destinationUrl:
type: string
format: uri
description: Subscription destination URL.
example: https://example.org/webhooks/overflow
enabledEvents:
type: array
items:
type: string
enum:
- '*'
- contribution.approved
- contribution.declined
- contribution.paid_out
- contribution.processing
- contribution.chargeback_lost
- contribution.chargeback_pending
- contribution.chargeback_won
- contribution.refund_approved
- contribution.refund_canceled
- contribution.refund_failed
- contribution.refund_requested
- contribution.refund_requires_action
- contribution.refunded
- contribution.voided
- donor.archived
- donor.created
- donor.merged
- donor.updated
- deposit.paid_out
- recurring_gift.active
- recurring_gift.cycle_failed
- recurring_gift.failed
- recurring_gift.inactive
- recurring_gift.paused
- recurring_gift.updated
description: Event names that trigger this subscription.
example:
- contribution.approved
status:
type: string
enum:
- enabled
- disabled
description: Subscription status.
example: enabled
createdAt:
type: string
format: date-time
description: Date the subscription was created.
example: '2026-05-19T00:00:00.000Z'
updatedAt:
type: string
format: date-time
description: Date the subscription was last updated.
example: '2026-05-20T00:00:00.000Z'
required:
- id
- name
- description
- destinationUrl
- enabledEvents
- status
- createdAt
- updatedAt
description: Webhook subscription.
required:
- data
GetWebhookEventLogsResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
description: Webhook attempt id.
example: 018f7349-6db2-7d07-9c15-cd7b9f671111
eventId:
type: string
description: Originating domain event id.
example: 018f7349-6db2-7d07-9c15-cd7b9f670000
webhookEventName:
type: string
enum:
- '*'
- contribution.approved
- contribution.declined
- contribution.paid_out
- contribution.processing
- contribution.chargeback_lost
- contribution.chargeback_pending
- contribution.chargeback_won
- contribution.refund_approved
- contribution.refund_canceled
- contribution.refund_failed
- contribution.refund_requested
- contribution.refund_requires_action
- contribution.refunded
- contribution.voided
- donor.archived
- donor.created
- donor.merged
- donor.updated
- deposit.paid_out
- recurring_gift.active
- recurring_gift.cycle_failed
- recurring_gift.failed
- recurring_gift.inactive
- recurring_gift.paused
- recurring_gift.updated
description: Webhook event type.
example: contribution.approved
subscriptionId:
type: string
description: Webhook subscription id.
example: 6817cec907243f2d3a1130df
status:
type: string
enum:
- delivered
- failed
- pending
description: Delivery status.
example: delivered
attemptNumber:
type: number
description: Attempt number for this delivery job.
example: 1
deliverySource:
type: string
enum:
- automated
- manual
description: Whether the delivery was triggered automatically or via a manual dashboard resend.
example: automated
originatedAt:
type: string
format: date-time
description: Date the originating event occurred.
example: '2026-05-19T00:00:00.000Z'
attemptedAt:
type: string
format: date-time
description: Date this webhook delivery attempt was made.
example: '2026-05-19T00:00:01.000Z'
request:
type: object
properties:
url:
type: string
format: uri
description: Request URL.
example: https://example.org/webhooks/overflow
body:
type: string
description: Request body payload.
example: '{"id":"evt_1","type":"contribution.approved"}'
required:
- url
- body
description: Webhook request details.
response:
type: object
properties:
code:
type: number
description: HTTP status code returned by the destination.
example: 200
body:
type: string
description: Response body returned by the destination.
example: ok
durationMs:
type: number
description: Delivery duration in milliseconds.
example: 50
errorMessage:
type: string
description: Transport or HTTP error message when delivery failed.
example: connection timeout
nullable: true
description: Webhook response details.
required:
- id
- eventId
- webhookEventName
- subscriptionId
- status
- attemptNumber
- deliverySource
- originatedAt
- attemptedAt
- request
- response
description: List of webhook event logs.
pageInfo:
type: object
properties:
hasNextPage:
type: boolean
description: Whether more rows are available after this page.
example: true
nextCursor:
type: string
nullable: true
description: Cursor token for the next page, or null when exhausted.
example: eyJwayI6Ik5PTlBST0ZJVCM2ODE3Y2VjOTA3MjQzZjJkM2ExMTMwZGYifQ==
required:
- hasNextPage
- nextCursor
description: Cursor pagination details.
required:
- data
- pageInfo
GetWebhooksResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
description: Webhook subscription id.
example: 6817cec907243f2d3a1130df
name:
type: string
description: Webhook subscription name.
example: Main webhook endpoint
description:
type: string
nullable: true
description: Webhook subscription description.
example: Receives contribution events for reporting.
destinationUrl:
type: string
format: uri
description: Subscription destination URL.
example: https://example.org/webhooks/overflow
enabledEvents:
type: array
items:
type: string
enum:
- '*'
- contribution.approved
- contribution.declined
- contribution.paid_out
- contribution.processing
- contribution.chargeback_lost
- contribution.chargeback_pending
- contribution.chargeback_won
- contribution.refund_approved
- contribution.refund_canceled
- contribution.refund_failed
- contribution.refund_requested
- contribution.refund_requires_action
- contribution.refunded
- contribution.voided
- donor.archived
- donor.created
- donor.merged
- donor.updated
- deposit.paid_out
- recurring_gift.active
- recurring_gift.cycle_failed
- recurring_gift.failed
- recurring_gift.inactive
- recurring_gift.paused
- recurring_gift.updated
description: Event names that trigger this subscription.
example:
- contribution.approved
status:
type: string
enum:
- enabled
- disabled
description: Subscription status.
example: enabled
createdAt:
type: string
format: date-time
description: Date the subscription was created.
example: '2026-05-19T00:00:00.000Z'
updatedAt:
type: string
format: date-time
description: Date the subscription was last updated.
example: '2026-05-20T00:00:00.000Z'
required:
- id
- name
- description
- destinationUrl
- enabledEvents
- status
- createdAt
- updatedAt
description: List of webhook subscriptions.
totalCount:
type: number
description: Total number of webhook subscriptions matching the provided filters.
example: 2
required:
- data
- totalCount
securitySchemes:
ApiKey:
type: apiKey
in: header
name: x-api-key
description: API Key for API authentication
ClientId:
type: apiKey
in: header
name: x-client-id
description: Client ID for API authentication