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

# Send an event

> Send an event to a webhook or WhatsApp source. No API key is needed. The body can be up to 4 MiB and is stored byte for byte.




## OpenAPI

````yaml api-reference/openapi.yaml POST /p/{sourceId}
openapi: 3.1.0
info:
  title: hooksnode API
  version: '1.0'
  description: |
    Send events to a source, and read and retry events with a workspace API key.
servers:
  - url: https://hooksnode.com
security:
  - bearerAuth: []
tags:
  - name: Ingest
  - name: Projects
  - name: Events
paths:
  /p/{sourceId}:
    post:
      tags:
        - Ingest
      summary: Send an event
      description: >
        Send an event to a webhook or WhatsApp source. No API key is needed. The
        body can be up to 4 MiB and is stored byte for byte.
      operationId: ingestEvent
      parameters:
        - name: sourceId
          in: path
          required: true
          description: The source ID. The default source of a project has the project ID.
          schema:
            type: string
            example: 2mJ8kQ4vXw9aB3cD5eF7gH1iK0L
        - name: X-Idempotency-Key
          in: header
          required: false
          description: >-
            A unique key for this event. A second event with the same key in the
            same project is not stored.
          schema:
            type: string
            maxLength: 255
            example: order_9311_paid
        - name: X-Webhook-Signature
          in: header
          required: false
          description: >-
            Required when signing is on for the source. `sha256=` and the hex
            HMAC-SHA256 of the raw body.
          schema:
            type: string
            example: sha256=5d41402abc4b2a76b9719d911017c592
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
            example:
              event: order.paid
              order_id: '9311'
      responses:
        '200':
          description: Accepted, buffered or duplicate.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/IngestAccepted'
                  - $ref: '#/components/schemas/IngestBuffered'
                  - $ref: '#/components/schemas/IngestDuplicate'
              examples:
                accepted:
                  value:
                    status: accepted
                    callback_id: 1042
                    enqueued: 2
                buffered:
                  value:
                    status: buffered
                    callback_id: 1043
                duplicate:
                  value:
                    status: duplicate — already accepted
        '400':
          description: A Free project with no destination.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: no destinations configured
        '401':
          description: The signature is missing or wrong.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: invalid signature
        '402':
          description: No credits, an unpaid plan, or a source over the plan limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such source, or the source has no URL.
        '423':
          description: The source is paused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: source paused
        '429':
          description: Over the source rate limit. Wait for `Retry-After`.
        '503':
          description: A short outage. Retry after `Retry-After`.
      security: []
components:
  schemas:
    IngestAccepted:
      type: object
      properties:
        status:
          type: string
          const: accepted
        callback_id:
          type: integer
          description: The event ID.
        enqueued:
          type: integer
          description: Destinations that got a delivery.
    IngestBuffered:
      type: object
      properties:
        status:
          type: string
          const: buffered
        callback_id:
          type: integer
    IngestDuplicate:
      type: object
      properties:
        status:
          type: string
          const: duplicate — already accepted
    Error:
      type: object
      properties:
        error:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A workspace API key. You can also send it in the `X-API-Key` header.

````