Bewary Webhooks API

The Webhooks API from Bewary — 4 operation(s) for webhooks.

Operations 6

POST /v1/webhooks Register a webhook endpoint #
GET /v1/webhooks List webhook endpoints #
GET /v1/webhooks/{webhook_id} One webhook endpoint and its last deliveries #
DELETE /v1/webhooks/{webhook_id} Delete a webhook endpoint #
POST /v1/webhooks/{webhook_id}/rotate Rotate a webhook endpoint's secret #
POST /v1/webhooks/{webhook_id}/enable Turn a disabled webhook endpoint back on #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bewary:bewary-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

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 Specification

bewary-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bewary Webhooks API
  description: 'Scam intelligence for apps and AI agents: links, domains, IPs, phone numbers, SMS short codes, emails, wallets, bank accounts (IBAN), mobile apps and payment handles, each with a typed verdict, facts and reason codes. Contract: https://bewary.app/docs. Pricing: https://bewary.app/pricing.'
  version: 1.9.0
servers:
- url: https://api.bewary.app
security:
- bearer: []
- apiKey: []
- {}
tags:
- name: Webhooks
paths:
  /v1/webhooks:
    post:
      tags:
      - Webhooks
      summary: Register a webhook endpoint
      description: 'Every event of the account''s watches (or the types named) is POSTed to the URL, signed per Standard

        Webhooks with the secret returned here, and retried with backoff for about a day. At most 5 endpoints. Free.'
      operationId: createWebhook
      parameters:
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookIn'
      responses:
        '200':
          description: The endpoint and its signing secret, shown once.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreated'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    get:
      tags:
      - Webhooks
      summary: List webhook endpoints
      operationId: listWebhooks
      parameters:
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Every endpoint, without secrets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookList'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/webhooks/{webhook_id}:
    get:
      tags:
      - Webhooks
      summary: One webhook endpoint and its last deliveries
      operationId: getWebhook
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: string
          maxLength: 40
          title: Webhook Id
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: The endpoint and its last 50 deliveries.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDetail'
        '404':
          description: not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      tags:
      - Webhooks
      summary: Delete a webhook endpoint
      operationId: deleteWebhook
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: string
          maxLength: 40
          title: Webhook Id
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Deleted; its pending deliveries are cancelled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deleted'
        '404':
          description: not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/webhooks/{webhook_id}/rotate:
    post:
      tags:
      - Webhooks
      summary: Rotate a webhook endpoint's secret
      description: 'A new signing secret. For 24 hours every delivery carries two signatures, the new secret''s and the old

        one''s, so the receiver can switch without dropping one.'
      operationId: rotateWebhookSecret
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: string
          maxLength: 40
          title: Webhook Id
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: The new secret, shown once. The old one also signs for 24 hours.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreated'
        '404':
          description: not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/webhooks/{webhook_id}/enable:
    post:
      tags:
      - Webhooks
      summary: Turn a disabled webhook endpoint back on
      operationId: enableWebhook
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: string
          maxLength: 40
          title: Webhook Id
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Enabled. Events produced while it was disabled are in GET /v1/events.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '404':
          description: not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '400':
          description: invalid_input or unsupported_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: 'unauthorized: missing, revoked or wrong key, or an option that needs a key'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: 'rate_limited: wait for Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: 'degraded_unavailable: a needed source is down; retry later'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    WebhookIn:
      properties:
        url:
          type: string
          maxLength: 2000
          title: Url
          description: https only, port 443 or 1024 and up; the host must resolve to public addresses only.
        event_types:
          anyOf:
          - items:
              type: string
              enum:
              - domain.ip_changed
              - domain.ns_changed
              - domain.down
              - domain.up
              - domain.parked
              - domain.listed
              - domain.delisted
              - domain.reregistered
              - domain.expiring
              - domain.expired
              - domain.held
              - phone.listed
              - phone.delisted
              - wallet.listed
              - wallet.delisted
              - wallet.sanctioned
              - brand.lookalike_registered
              - brand.lookalike_cert
              - brand.lookalike_live
            type: array
          - type: 'null'
          title: Event Types
          description: 'Deliver only these; omitted or empty: every event of the account''s watches.'
      type: object
      required:
      - url
      title: WebhookIn
    Delivery:
      properties:
        event_id:
          type: string
          title: Event Id
        event_type:
          type: string
          enum:
          - domain.ip_changed
          - domain.ns_changed
          - domain.down
          - domain.up
          - domain.parked
          - domain.listed
          - domain.delisted
          - domain.reregistered
          - domain.expiring
          - domain.expired
          - domain.held
          - phone.listed
          - phone.delisted
          - wallet.listed
          - wallet.delisted
          - wallet.sanctioned
          - brand.lookalike_registered
          - brand.lookalike_cert
          - brand.lookalike_live
          title: Event Type
        status:
          type: string
          enum:
          - pending
          - delivering
          - succeeded
          - dead
          - cancelled
          title: Status
          description: 'pending: waiting for its next attempt; dead: every retry failed; cancelled: the endpoint was deleted or disabled first.'
        attempts:
          type: integer
          title: Attempts
        last_status:
          anyOf:
          - type: integer
          - type: 'null'
          title: Last Status
          description: The HTTP status of the last attempt.
        error:
          anyOf:
          - type: string
            enum:
            - http_status
            - timeout
            - network
            - blocked
            - secret_unavailable
            - endpoint_removed
            - internal
          - type: 'null'
          title: Error
          description: 'Why the last attempt failed. blocked: the URL no longer resolves to public addresses only.'
        next_attempt_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Next Attempt At
        delivered_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Delivered At
        created_at:
          type: string
          title: Created At
      type: object
      required:
      - event_id
      - event_type
      - status
      - attempts
      - created_at
      title: Delivery
    ErrorDetail:
      properties:
        code:
          type: string
          enum:
          - invalid_input
          - unsupported_type
          - unauthorized
          - forbidden
          - quota_exceeded
          - rate_limited
          - not_found
          - input_too_large
          - internal
          - degraded_unavailable
          - gone
          title: Code
        message:
          type: string
          title: Message
        request_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Request Id
      type: object
      required:
      - code
      - message
      title: ErrorDetail
    WebhookDetail:
      properties:
        id:
          type: string
          title: Id
          description: whk_ + a ULID.
        url:
          type: string
          title: Url
        event_types:
          items:
            type: string
            enum:
            - domain.ip_changed
            - domain.ns_changed
            - domain.down
            - domain.up
            - domain.parked
            - domain.listed
            - domain.delisted
            - domain.reregistered
            - domain.expiring
            - domain.expired
            - domain.held
            - phone.listed
            - phone.delisted
            - wallet.listed
            - wallet.delisted
            - wallet.sanctioned
            - brand.lookalike_registered
            - brand.lookalike_cert
            - brand.lookalike_live
          type: array
          title: Event Types
          description: 'Empty: every event.'
        status:
          type: string
          enum:
          - enabled
          - disabled
          title: Status
        disabled_reason:
          anyOf:
          - type: string
            enum:
            - failing
            - app_disconnected
          - type: 'null'
          title: Disabled Reason
          description: 'failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on.'
        created_at:
          type: string
          title: Created At
        last_success_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Success At
        last_failure_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Failure At
        failing_since:
          anyOf:
          - type: string
          - type: 'null'
          title: Failing Since
          description: The first failed attempt since the last success.
        deliveries:
          items:
            $ref: '#/components/schemas/Delivery'
          type: array
          title: Deliveries
          description: The last 50, newest first.
      type: object
      required:
      - id
      - url
      - event_types
      - status
      - created_at
      - deliveries
      title: WebhookDetail
    WebhookCreated:
      properties:
        id:
          type: string
          title: Id
          description: whk_ + a ULID.
        url:
          type: string
          title: Url
        event_types:
          items:
            type: string
            enum:
            - domain.ip_changed
            - domain.ns_changed
            - domain.down
            - domain.up
            - domain.parked
            - domain.listed
            - domain.delisted
            - domain.reregistered
            - domain.expiring
            - domain.expired
            - domain.held
            - phone.listed
            - phone.delisted
            - wallet.listed
            - wallet.delisted
            - wallet.sanctioned
            - brand.lookalike_registered
            - brand.lookalike_cert
            - brand.lookalike_live
          type: array
          title: Event Types
          description: 'Empty: every event.'
        status:
          type: string
          enum:
          - enabled
          - disabled
          title: Status
        disabled_reason:
          anyOf:
          - type: string
            enum:
            - failing
            - app_disconnected
          - type: 'null'
          title: Disabled Reason
          description: 'failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on.'
        created_at:
          type: string
          title: Created At
        last_success_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Success At
        last_failure_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Failure At
        failing_since:
          anyOf:
          - type: string
          - type: 'null'
          title: Failing Since
          description: The first failed attempt since the last success.
        secret:
          type: string
          title: Secret
          description: 'whsec_...: signs every delivery (EVENTS.md). Shown once.'
      type: object
      required:
      - id
      - url
      - event_types
      - status
      - created_at
      - secret
      title: WebhookCreated
    ErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      type: object
      required:
      - error
      title: ErrorResponse
    Deleted:
      properties:
        id:
          type: string
          title: Id
        deleted:
          type: boolean
          title: Deleted
      type: object
      required:
      - id
      - deleted
      title: Deleted
    WebhookList:
      properties:
        webhooks:
          items:
            $ref: '#/components/schemas/Webhook'
          type: array
          title: Webhooks
      type: object
      required:
      - webhooks
      title: WebhookList
    Webhook:
      properties:
        id:
          type: string
          title: Id
          description: whk_ + a ULID.
        url:
          type: string
          title: Url
        event_types:
          items:
            type: string
            enum:
            - domain.ip_changed
            - domain.ns_changed
            - domain.down
            - domain.up
            - domain.parked
            - domain.listed
            - domain.delisted
            - domain.reregistered
            - domain.expiring
            - domain.expired
            - domain.held
            - phone.listed
            - phone.delisted
            - wallet.listed
            - wallet.delisted
            - wallet.sanctioned
            - brand.lookalike_registered
            - brand.lookalike_cert
            - brand.lookalike_live
          type: array
          title: Event Types
          description: 'Empty: every event.'
        status:
          type: string
          enum:
          - enabled
          - disabled
          title: Status
        disabled_reason:
          anyOf:
          - type: string
            enum:
            - failing
            - app_disconnected
          - type: 'null'
          title: Disabled Reason
          description: 'failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on.'
        created_at:
          type: string
          title: Created At
        last_success_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Success At
        last_failure_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Failure At
        failing_since:
          anyOf:
          - type: string
          - type: 'null'
          title: Failing Since
          description: The first failed attempt since the last success.
      type: object
      required:
      - id
      - url
      - event_types
      - status
      - created_at
      title: Webhook
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: An API key, bw_…
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key