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

# Deliver a webhook event to an endpoint again

> Sends the event to the given endpoint now. A retry that is scheduled for later is sent at once instead of waiting; otherwise one more attempt is created, for example after the retry schedule was exhausted. Refused while an attempt is being sent at this moment, and, when the event never reached the endpoint, unless the endpoint subscribes to its type.



## OpenAPI

````yaml /openapi.json post /v1/webhooks/events/{event_id}/redeliver
openapi: 3.1.0
info:
  title: Endstate API
  version: 0.1.0
  description: Endstate developer API for chip verification and ownership workflows.
servers:
  - url: https://api2.endstate.io
    description: Production
  - url: https://api-staging.endstate.io
    description: Staging
security: []
paths:
  /v1/webhooks/events/{event_id}/redeliver:
    post:
      tags:
        - Webhooks
      summary: Deliver a webhook event to an endpoint again
      description: >-
        Sends the event to the given endpoint now. A retry that is scheduled for
        later is sent at once instead of waiting; otherwise one more attempt is
        created, for example after the retry schedule was exhausted. Refused
        while an attempt is being sent at this moment, and, when the event never
        reached the endpoint, unless the endpoint subscribes to its type.
      operationId: redeliverWebhookEvent
      parameters:
        - schema:
            type: string
            format: uuid
            example: 3f1c9a2b-7d4e-4f10-9a8b-2c6d5e4f3a21
          required: true
          name: event_id
          in: path
        - schema:
            type: string
            minLength: 1
            maxLength: 255
            description: >-
              Unique key that makes this request safe to retry. Replaying the
              key with the same body returns the original response with
              `Idempotent-Replayed: true`; replaying it with a different body
              returns 409 `idempotency.key_conflict`.
            example: a1b2c3d4-0000-4000-8000-000000000000
          required: false
          name: Idempotency-Key
          in: header
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeliverWebhookEventRequest'
            example:
              endpoint_id: 8e1a7f50-90ab-4cde-8012-3456789abcde
      responses:
        '202':
          description: The new delivery attempt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDeliveryAttempt'
              example:
                attempt: 1
                status: pending
                response_status_code: null
                duration_ms: null
                error: null
                next_attempt_at: '2026-09-22T12:00:00.000Z'
                created_at: '2026-09-22T12:00:00.000Z'
                endpoint:
                  id: 8e1a7f50-90ab-4cde-8012-3456789abcde
                  url: https://hooks.example.com/endstate
                  deleted: false
        '400':
          description: >-
            The request was malformed or failed validation.


            | Error code | When |

            | --- | --- |

            | `validation.failed` | The request failed schema validation. See
            `error.details` for per-field issues. |
          x-error-codes:
            - validation.failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                validation.failed:
                  summary: >-
                    The request failed schema validation. See `error.details`
                    for per-field issues.
                  value:
                    error:
                      code: validation.failed
                      message: >-
                        The request failed schema validation. See
                        `error.details` for per-field issues.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/validation-failed
        '401':
          description: |-
            Authentication failed.

            | Error code | When |
            | --- | --- |
            | `auth.unauthorized` | Credential is missing or malformed. |
          x-error-codes:
            - auth.unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                auth.unauthorized:
                  summary: Credential is missing or malformed.
                  value:
                    error:
                      code: auth.unauthorized
                      message: Credential is missing or malformed.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/auth-unauthorized
        '403':
          description: >-
            Authenticated, but not permitted.


            | Error code | When |

            | --- | --- |

            | `auth.forbidden` | Credential is valid but does not have access to
            the requested resource or action. |
          x-error-codes:
            - auth.forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                auth.forbidden:
                  summary: >-
                    Credential is valid but does not have access to the
                    requested resource or action.
                  value:
                    error:
                      code: auth.forbidden
                      message: >-
                        Credential is valid but does not have access to the
                        requested resource or action.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/auth-forbidden
        '404':
          description: >-
            The resource does not exist within your organization.


            | Error code | When |

            | --- | --- |

            | `webhook_endpoint.not_found` | The webhook endpoint does not exist
            in your organization. |

            | `webhook_event.not_found` | The webhook event does not exist in
            your organization. |
          x-error-codes:
            - webhook_endpoint.not_found
            - webhook_event.not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                webhook_endpoint.not_found:
                  summary: The webhook endpoint does not exist in your organization.
                  value:
                    error:
                      code: webhook_endpoint.not_found
                      message: >-
                        The webhook endpoint does not exist in your
                        organization.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: >-
                        https://docs.endstate.io/errors/webhook-endpoint-not-found
                webhook_event.not_found:
                  summary: The webhook event does not exist in your organization.
                  value:
                    error:
                      code: webhook_event.not_found
                      message: The webhook event does not exist in your organization.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/webhook-event-not-found
        '409':
          description: >-
            The request conflicts with the resource's current state.


            | Error code | When |

            | --- | --- |

            | `idempotency.in_progress` | A request with this `Idempotency-Key`
            is already in progress. |

            | `idempotency.key_conflict` | The `Idempotency-Key` was previously
            used with a different request body. |

            | `webhook_delivery.in_progress` | A delivery attempt for this event
            and endpoint is still in progress. |

            | `webhook_endpoint.disabled` | The webhook endpoint is disabled.
            Re-enable it with PATCH first. |

            | `webhook_endpoint.not_subscribed` | The endpoint does not
            subscribe to this event's type and has never received it. |
          x-error-codes:
            - idempotency.in_progress
            - idempotency.key_conflict
            - webhook_delivery.in_progress
            - webhook_endpoint.disabled
            - webhook_endpoint.not_subscribed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                idempotency.in_progress:
                  summary: >-
                    A request with this `Idempotency-Key` is already in
                    progress.
                  value:
                    error:
                      code: idempotency.in_progress
                      message: >-
                        A request with this `Idempotency-Key` is already in
                        progress.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/idempotency-in-progress
                idempotency.key_conflict:
                  summary: >-
                    The `Idempotency-Key` was previously used with a different
                    request body.
                  value:
                    error:
                      code: idempotency.key_conflict
                      message: >-
                        The `Idempotency-Key` was previously used with a
                        different request body.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/idempotency-key-conflict
                webhook_delivery.in_progress:
                  summary: >-
                    A delivery attempt for this event and endpoint is still in
                    progress.
                  value:
                    error:
                      code: webhook_delivery.in_progress
                      message: >-
                        A delivery attempt for this event and endpoint is still
                        in progress.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: >-
                        https://docs.endstate.io/errors/webhook-delivery-in-progress
                webhook_endpoint.disabled:
                  summary: >-
                    The webhook endpoint is disabled. Re-enable it with PATCH
                    first.
                  value:
                    error:
                      code: webhook_endpoint.disabled
                      message: >-
                        The webhook endpoint is disabled. Re-enable it with
                        PATCH first.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: >-
                        https://docs.endstate.io/errors/webhook-endpoint-disabled
                webhook_endpoint.not_subscribed:
                  summary: >-
                    The endpoint does not subscribe to this event's type and has
                    never received it.
                  value:
                    error:
                      code: webhook_endpoint.not_subscribed
                      message: >-
                        The endpoint does not subscribe to this event's type and
                        has never received it.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: >-
                        https://docs.endstate.io/errors/webhook-endpoint-not-subscribed
        '410':
          description: >-
            The resource is gone: a consumed credential or a deleted endpoint.
            See the error code.


            | Error code | When |

            | --- | --- |

            | `webhook_endpoint.deleted` | The webhook endpoint was deleted and
            cannot be used for this operation. |
          x-error-codes:
            - webhook_endpoint.deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                webhook_endpoint.deleted:
                  summary: >-
                    The webhook endpoint was deleted and cannot be used for this
                    operation.
                  value:
                    error:
                      code: webhook_endpoint.deleted
                      message: >-
                        The webhook endpoint was deleted and cannot be used for
                        this operation.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/webhook-endpoint-deleted
        '429':
          description: |-
            Too many requests.

            | Error code | When |
            | --- | --- |
            | `rate_limit.exceeded` | Per-key rate limit exceeded. |
          x-error-codes:
            - rate_limit.exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                rate_limit.exceeded:
                  summary: Per-key rate limit exceeded.
                  value:
                    error:
                      code: rate_limit.exceeded
                      message: Per-key rate limit exceeded.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/rate-limit-exceeded
        '500':
          description: >-
            Something went wrong on our end.


            | Error code | When |

            | --- | --- |

            | `internal.error` | An unexpected server error occurred. Retry with
            exponential backoff and include `request_id` in any support request.
            |
          x-error-codes:
            - internal.error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                internal.error:
                  summary: >-
                    An unexpected server error occurred. Retry with exponential
                    backoff and include `request_id` in any support request.
                  value:
                    error:
                      code: internal.error
                      message: >-
                        An unexpected server error occurred. Retry with
                        exponential backoff and include `request_id` in any
                        support request.
                      request_id: req_8e1a7f50-90ab-4cde-f012-3456789abcde
                      doc_url: https://docs.endstate.io/errors/internal-error
      security:
        - ApiKeyBearer: []
components:
  schemas:
    RedeliverWebhookEventRequest:
      type: object
      properties:
        endpoint_id:
          type: string
          format: uuid
          description: The endpoint to deliver to again.
          example: 8e1a7f50-90ab-4cde-8012-3456789abcde
      required:
        - endpoint_id
    WebhookDeliveryAttempt:
      type: object
      properties:
        attempt:
          type: integer
          example: 1
        status:
          type: string
          enum:
            - pending
            - succeeded
            - failed
        response_status_code:
          type:
            - integer
            - 'null'
          example: 200
        duration_ms:
          type:
            - integer
            - 'null'
          example: 143
        error:
          type:
            - string
            - 'null'
        next_attempt_at:
          type:
            - string
            - 'null'
          format: date-time
        created_at:
          type: string
          format: date-time
        endpoint:
          type: object
          properties:
            id:
              type: string
              format: uuid
            url:
              type: string
            deleted:
              type: boolean
              description: True when the endpoint has since been deleted.
          required:
            - id
            - url
            - deleted
      required:
        - attempt
        - status
        - response_status_code
        - duration_ms
        - error
        - next_attempt_at
        - created_at
        - endpoint
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              anyOf:
                - $ref: '#/components/schemas/ErrorCode'
                - type: string
              description: >-
                Stable, namespaced error code. The `ErrorCode` catalogue lists
                every code defined today; handle an unrecognized value as a
                generic failure rather than throwing, since codes are added over
                time.
              example: chip.not_found
            message:
              type: string
              description: >-
                Human-readable description, for logs and debugging. Wording may
                change without notice - never parse or match against it.
              example: Chip not found
            request_id:
              type: string
              description: >-
                Identifier for this request, matching the `X-Request-Id`
                response header. Log it and include it in any support request.
              example: req_8e1a7f50-90ab-4cde-f012-3456789abcde
            doc_url:
              type: string
              description: Documentation page for this error code.
              example: https://docs.endstate.io/errors/chip-not-found
            details:
              $ref: '#/components/schemas/ValidationErrorDetails'
          required:
            - code
            - message
            - request_id
            - doc_url
      required:
        - error
      description: >-
        Every error response, regardless of endpoint or HTTP status, uses this
        envelope.
    ErrorCode:
      type: string
      enum:
        - environment.conflict
        - environment.invalid_configuration
        - organization.changed
        - validation.failed
        - auth.unauthorized
        - auth.forbidden
        - session_token.invalid_or_expired
        - session_token.wrong_chip
        - wallet_session.invalid_or_expired
        - not_found.resource
        - rate_limit.exceeded
        - chip.not_found
        - chip.invalid_e_value
        - chip.already_scanned
        - quota.exceeded
        - chip.not_a_test_chip
        - unit.not_found
        - unit.already_exists
        - unit.not_minted
        - collection.not_found
        - collection.already_exists
        - collection.not_active
        - collection_backfill.blocked
        - organization.not_found
        - chip.already_paired
        - chip.key_unusable
        - chip.mac_required
        - chip.bulk_mixed_collections
        - chip.bulk_pending
        - unit.issuance_pending
        - claim.owner_unknown
        - claim.already_to_recipient
        - claim.in_progress
        - claim.not_found
        - chip_replacement.locked
        - chip_replacement.in_progress
        - chip_replacement.not_found
        - transfer.owner_unknown
        - transfer.already_to_recipient
        - transfer.in_progress
        - transfer.not_found
        - submission.not_executable
        - vault.not_found
        - vault.already_exists
        - vault.provisioning_failed
        - vault.not_permitted
        - vault.unavailable
        - vault.challenge_invalid
        - vault.address_in_use
        - vault.key_conflict
        - vault.signer_unauthorized
        - vault_connection.not_found
        - vault_connection.not_active
        - vault_connection.already_exists
        - vault_connection.conflict
        - idempotency.key_conflict
        - idempotency.in_progress
        - internal.error
        - webhook_endpoint.not_found
        - webhook_endpoint.deleted
        - webhook_endpoint.limit_reached
        - webhook_endpoint.url_refused
        - webhook_endpoint.signing_unavailable
        - webhook_event_type.unknown
        - webhook_event.not_found
        - webhook_endpoint.disabled
        - webhook_delivery.in_progress
        - webhook_endpoint.not_subscribed
      description: >-
        Stable, namespaced error code in `<resource>.<reason>` form. Branch on
        this rather than on `message` or the HTTP status. This is the catalogue
        as of this spec revision, not a closed set - see
        `ErrorResponse.error.code`.
      example: chip.not_found
    ValidationErrorDetails:
      type: object
      properties:
        formErrors:
          type: array
          items:
            type: string
          description: Issues that apply to the request as a whole rather than one field.
          example: []
        fieldErrors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Validation issues keyed by the field that failed.
          example:
            name:
              - Required
      required:
        - formErrors
        - fieldErrors
      description: Per-field validation detail. Present only on `validation.failed`.
  securitySchemes:
    ApiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: end_sk
      description: >-
        Use `Authorization: Bearer end_sk_*` for partner API keys (e.g.
        `end_sk_AbCd_example_api_key`).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.