> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gdeltcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a test webhook

> Tests every delivery channel this Monitor actually uses and reports each one under `channels`. A configured webhook receives the first attempt of a signed `monitor.test` event, synchronously; a retryable failure persists `retry_at` for the retry worker. Configured email receives a real test message at the same address a triggered run would use, from the same sender — so a suppressed or bouncing address is diagnosed in seconds instead of after a full cadence. Email tests are rate-limited per organization and answer `channels.email.retry_after_seconds` when refused. The test creates NO Monitor run: nothing is evaluated, no matches are marked as seen, and nothing appears in `GET /api/v2/monitors/{id}/runs`. The top-level `delivered`, `reason`, `error`, `status` and `retry_at` describe the webhook when one is configured and the email otherwise, so an email-only Monitor reports its real delivery rather than `not_configured`. Not refused on a plan without webhook entitlement when the Monitor has no webhook. Takes no query parameters and no body.



## OpenAPI

````yaml /api-reference/openapi-v2.json post /api/v2/monitors/{id}/test-delivery
openapi: 3.0.3
info:
  title: GDELT Cloud API v2
  version: 2.0.0
  description: >-
    Clean v2 REST API for generated GDELT Cloud structured Events, clustered
    Stories, linked Entities, summaries, admin1 discovery, significance ranking,
    and paginated article evidence.


    Event significance is a family-scoped weighted blend, renormalized so every
    event family spans a true 0-1: each event's raw total is divided by the
    maximum its own family can reach (Conflict 1.00, CAMEO+ POLITICAL 0.90,
    other CAMEO+ domains 0.65). All events: Goldstein severity 0.25, article
    evidence 0.05, confidence 0.05. Conflict only: fatalities 0.55 (log-scaled
    by body count) and civilian targeting 0.10. CAMEO+ only: magnitude 0.20,
    systemic importance 0.15, propagation potential 0.10, market sensitivity
    0.10. When magnitude is unmeasured its term AND its 0.20 weight are both
    dropped. The four CAMEO+ metrics are rubric scores produced by published
    formulas - ordinal ranking signals, not measurements, probabilities, or
    predicted price moves. goldstein_scale is one canonical public metric,
    populated for Conflict Events and CAMEO+ POLITICAL Events where meaningful.
    Story linked_event_count is a Story-to-Event link aggregate, not a distinct
    Event total.
servers:
  - url: https://gdeltcloud.com
    description: Production
  - url: http://localhost:3000
    description: Local development
security:
  - ApiKeyAuth: []
tags:
  - name: Events
    description: Coded CAMEO+ / conflict events — search, fetch, and summarize.
  - name: Stories
    description: Clustered narratives (stories) and their articles.
  - name: Entities
    description: >-
      People & organizations — resolve a name to an entity, then fetch its
      profile and tone.
  - name: Unified Search
    description: >-
      One fuzzy lookup across every id-space — start here with a name, take the
      entity id, then reuse it on every other surface. This is the resolver the
      rest of the API assumes you called first.
  - name: Media Intelligence
    description: >-
      Press-coverage tone over time and share of voice against a peer set.
      Requires the `can_use_tone` / `can_use_share_of_voice` entitlement; social
      signal is an admin-only preview.
  - name: Facilities
    description: >-
      Unified physical-asset directory — GEM energy assets, World Port Index
      ports and Epoch AI data centers on one keyed surface, resolved to spine
      owners. Requires the `can_use_facilities` entitlement.
  - name: Monitors
    description: >-
      Organization-shared scheduled checks over the Core API, with email and
      signed-webhook delivery. Monitor execution does not consume query units.
  - name: Geography
    description: Admin-1 geography lookups.
  - name: Government
    description: >-
      US federal awards (USAspending) and foreign-influence registrations (DOJ
      NSD FARA), resolved onto the entity spine. Requires the `can_use_gov`
      entitlement.
  - name: Filings
    description: >-
      SEC EDGAR filings, XBRL financials, and relations extracted from filing
      text. Requires the `can_use_filings` entitlement.
  - name: Reference Data
    description: >-
      The GLEIF Global LEI Index — legal-entity reference data, consolidation
      relationships, and LEI↔ISIN mappings. Requires the `can_use_gleif`
      entitlement.
  - name: Energy
    description: Global Energy Monitor assets + ownership registry.
  - name: AI Compute
    description: >-
      Epoch AI datasets — models, hardware, data centers, companies and chip
      sales. Requires the `can_use_epoch_ai` entitlement.
  - name: Macro Finance
    description: >-
      FRED economic time series — catalog, point-in-time observations and
      releases. Requires the `can_use_macro` entitlement.
  - name: Screening and Reference
    description: >-
      Restricted-party lists, name screening and ownership-chain exposure.
      Requires the `can_use_screening` / `can_use_exposure` entitlement.
      Analytical coverage, not an audit-grade compliance control.
  - name: China
    description: >-
      China overseas development finance (AidData GCDF). Requires the
      `can_use_china` entitlement.
  - name: Maritime
    description: >-
      AIS-derived vessel flow — chokepoint transits, last-known vessel
      positions, carriers, dwell and AIS-dark gaps. Terrestrial AIS only, so
      coverage thins in open ocean. Requires the `can_use_maritime` entitlement.
  - name: Atlas Intelligence
    description: >-
      Geopolitical-risk and posture indices computed from GDELT Cloud’s own
      coded events, normalized to each place’s own frozen baseline.
  - name: Briefs
    description: Source-backed monitoring briefs.
  - name: Meta
    description: >-
      Machine-readable discovery: the value vocabularies, the endpoint
      contracts, and the query-unit cost model. Unmetered, so a client can check
      before it spends.
paths:
  /api/v2/monitors/{id}/test-delivery:
    post:
      tags:
        - Monitors
      summary: Send a test webhook
      description: >-
        Tests every delivery channel this Monitor actually uses and reports each
        one under `channels`. A configured webhook receives the first attempt of
        a signed `monitor.test` event, synchronously; a retryable failure
        persists `retry_at` for the retry worker. Configured email receives a
        real test message at the same address a triggered run would use, from
        the same sender — so a suppressed or bouncing address is diagnosed in
        seconds instead of after a full cadence. Email tests are rate-limited
        per organization and answer `channels.email.retry_after_seconds` when
        refused. The test creates NO Monitor run: nothing is evaluated, no
        matches are marked as seen, and nothing appears in `GET
        /api/v2/monitors/{id}/runs`. The top-level `delivered`, `reason`,
        `error`, `status` and `retry_at` describe the webhook when one is
        configured and the email otherwise, so an email-only Monitor reports its
        real delivery rather than `not_configured`. Not refused on a plan
        without webhook entitlement when the Monitor has no webhook. Takes no
        query parameters and no body.
      operationId: test-monitor-delivery-v2
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorDeliveryTestResponse'
              examples:
                delivered:
                  summary: Signed test accepted by the receiver
                  value:
                    success: true
                    delivery:
                      delivered: true
                      status: 204
                      retry_at: null
                      error: null
                      channels:
                        email:
                          configured: false
                          tested: false
                          delivered: false
                          reason: null
                          error: null
                          sent_to: null
                          retry_after_seconds: null
                          note: Email delivery is not enabled on this Monitor.
                        webhook:
                          configured: true
                          tested: true
                          delivered: true
                          error: null
                emailDelivered:
                  summary: 'Email-only Monitor: a real test message was sent'
                  value:
                    success: true
                    delivery:
                      delivered: true
                      reason: null
                      error: null
                      channels:
                        email:
                          configured: true
                          tested: true
                          delivered: true
                          reason: null
                          error: null
                          sent_to: analyst@example.com
                          retry_after_seconds: null
                          note: >-
                            A test email was sent to analyst@example.com. It is
                            not a Monitor run and does not appear in the run
                            history.
                        webhook:
                          configured: false
                          tested: false
                          delivered: false
                          error: null
                emailSuppressed:
                  summary: >-
                    The delivery address is suppressed, so scheduled mail is not
                    arriving either
                  value:
                    success: true
                    delivery:
                      delivered: false
                      reason: email_suppressed
                      error: >-
                        This address is on the delivery suppression list, so
                        Monitor email is not being sent to it. Contact support
                        to have it reinstated.
                      channels:
                        email:
                          configured: true
                          tested: true
                          delivered: false
                          reason: email_suppressed
                          error: >-
                            This address is on the delivery suppression list, so
                            Monitor email is not being sent to it. Contact
                            support to have it reinstated.
                          sent_to: analyst@example.com
                          retry_after_seconds: null
                          note: >-
                            This address is on the delivery suppression list, so
                            Monitor email is not being sent to it. Contact
                            support to have it reinstated.
                        webhook:
                          configured: false
                          tested: false
                          delivered: false
                          error: null
                retryableFailure:
                  summary: Receiver asked the sender to retry
                  value:
                    success: true
                    delivery:
                      delivered: false
                      status: 429
                      retry_at: '2026-08-24T14:02:00.000Z'
                      error: Webhook receiver returned HTTP 429.
                      channels:
                        email:
                          configured: false
                          tested: false
                          delivered: false
                          reason: null
                          error: null
                          sent_to: null
                          retry_after_seconds: null
                          note: Email delivery is not enabled on this Monitor.
                        webhook:
                          configured: true
                          tested: true
                          delivered: false
                          error: Webhook receiver returned HTTP 429.
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Plan or organization role does not permit this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Monitor not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    MonitorDeliveryTestResponse:
      type: object
      required:
        - success
        - delivery
      properties:
        success:
          type: boolean
          enum:
            - true
        delivery:
          type: object
          required:
            - delivered
            - error
            - channels
          properties:
            delivered:
              type: boolean
              description: >-
                The leading channel's outcome: the webhook when one is
                configured, the email otherwise.
            status:
              type: integer
              nullable: true
              description: Webhook receiver HTTP status. Null for an email-only Monitor.
            retry_at:
              type: string
              nullable: true
              format: date-time
            error:
              type: string
              nullable: true
            reason:
              type: string
              enum:
                - not_configured
                - already_queued
                - email_no_recipient
                - email_suppressed
                - email_rate_limited
                - email_send_failed
                - email_delivery_disabled
              nullable: true
              description: >-
                Why the leading channel did not deliver. Null on success. The
                `email_*` values are the same strings `channels.email.reason`
                carries.
            channels:
              type: object
              required:
                - email
                - webhook
              description: >-
                Per-channel outcome. Every channel this Monitor has configured
                is really test-fired.
              properties:
                email:
                  type: object
                  required:
                    - configured
                    - tested
                    - delivered
                  properties:
                    configured:
                      type: boolean
                    tested:
                      type: boolean
                      description: True whenever email is configured; a test was attempted.
                    delivered:
                      type: boolean
                    reason:
                      type: string
                      enum:
                        - email_no_recipient
                        - email_suppressed
                        - email_rate_limited
                        - email_send_failed
                        - email_delivery_disabled
                      nullable: true
                    error:
                      type: string
                      nullable: true
                    sent_to:
                      type: string
                      nullable: true
                      description: The address a triggered run would use.
                    retry_after_seconds:
                      type: integer
                      nullable: true
                      description: >-
                        Seconds until the organization's email-test allowance
                        frees a slot. Set only with reason `email_rate_limited`.
                    note:
                      type: string
                webhook:
                  type: object
                  required:
                    - configured
                    - tested
                    - delivered
                  properties:
                    configured:
                      type: boolean
                    tested:
                      type: boolean
                    delivered:
                      type: boolean
                    error:
                      type: string
                      nullable: true
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: string
        code:
          type: string
        details:
          type: object
          description: >-
            Recoverable validation context when available, such as param,
            invalid_value, accepted_values, nearest_values, and a corrected
            example.
          additionalProperties: true
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: gdelt_sk_...
      description: 'GDELT Cloud API key. Send as `Authorization: Bearer gdelt_sk_...`.'

````