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

# Replay trigger event

> Queues one more delivery attempt, due immediately, and returns the event with its updated
history. It does NOT deliver inline - the delivery sweep picks the attempt up on its next pass, so
the response says "queued", not "received".
            
Attempt numbering CONTINUES rather than restarting, so a replay of a dead-lettered event
gets one further attempt rather than a whole fresh retry ladder.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/triggers/events/{eventId}/replay
openapi: 3.0.0
info:
  title: Engini DeveloperAPI
  version: v1
  description: 'Merged public developer API spec: Identity + WorkflowApi.'
servers:
  - url: https://api.engini.io
security:
  - Bearer: []
  - ApiKey: []
tags:
  - name: Auth
    description: Identify the caller a Developer API request is authenticated as.
  - name: Applications
    description: >-
      Discover the applications (toolkits) available in Engini and their
      connection requirements.
  - name: Tools
    description: Browse and execute the tools exposed by Engini applications.
  - name: Toolsets
    description: Manage toolsets - named groupings of connections and tools.
  - name: McpServers
    description: >-
      Inspect and maintain MCP servers - the account-wide endpoints that expose
      Engini tools and workflows over the Model Context Protocol. Distinct from
      the MCPClient connection kind, which is Engini consuming a third-party MCP
      server.
  - name: Connections
    description: >-
      Manage connections to applications, including OAuth sign-in and
      default-connection selection.
  - name: Triggers
    description: >-
      Create triggers that fire when something changes in a connected app, and
      manage the destinations their events are delivered to.
paths:
  /v1/triggers/events/{eventId}/replay:
    post:
      tags:
        - Triggers
      summary: Replay trigger event
      description: >-
        Queues one more delivery attempt, due immediately, and returns the event
        with its updated

        history. It does NOT deliver inline - the delivery sweep picks the
        attempt up on its next pass, so

        the response says "queued", not "received".
                    
        Attempt numbering CONTINUES rather than restarting, so a replay of a
        dead-lettered event

        gets one further attempt rather than a whole fresh retry ladder.
      operationId: Triggers_ReplayTriggerEvent
      parameters:
        - name: eventId
          in: path
          required: true
          description: The te_ public id of the event.
          schema:
            type: string
          x-position: 1
      responses:
        '202':
          description: The event with the newly queued attempt included.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TriggerEventDetailView'
        '400':
          description: Bad request - malformed body or invalid parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - missing or invalid bearer token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - the caller lacks access to the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            No such event in this account, or the account has no destination to
            replay to.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            The destination is auto-disabled. Re-enable it first - accepting the
            replay would queue an attempt nothing would send.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests - rate limit exceeded.
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error - an unexpected error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - Bearer: []
        - ApiKey: []
components:
  schemas:
    TriggerEventDetailView:
      type: object
      description: >-
        One event with its full delivery history - GET
        /v1/triggers/events/{eventId}.
      additionalProperties: false
      required:
        - event
        - attempts
      properties:
        event:
          $ref: '#/components/schemas/TriggerEventView'
        attempts:
          type: array
          description: Every attempt, oldest first. Empty when the event is still pending.
          items:
            $ref: '#/components/schemas/TriggerDeliveryAttemptView'
    ErrorResponse:
      type: object
      description: >-
        Unified error envelope for every non-200 response from
        /api/DeveloperAPI/v1/*.

        See applications-tools-spec.md §"Error envelope".
      additionalProperties: false
      required:
        - errorCode
        - message
        - requestId
        - timestamp
        - path
      properties:
        errorCode:
          type: string
          description: Machine-readable error code identifying the failure.
        message:
          type: string
          description: Human-readable error message.
        requestId:
          type: string
          description: Identifier of the request, for support/correlation.
        timestamp:
          type: string
          description: Timestamp when the error occurred (ISO 8601).
        path:
          type: string
          description: Request path that produced the error.
        details:
          type: array
          description: Per-field validation details, when applicable.
          nullable: true
          items:
            $ref: '#/components/schemas/ErrorDetail'
    TriggerEventView:
      type: object
      description: >-
        One captured trigger firing, as GET /v1/triggers/{triggerId}/events
        returns it - the
         payload Engini captured plus where its delivery got to.
      additionalProperties: false
      required:
        - delivery
      properties:
        id:
          type: string
          description: te_ + base62 - the only event id the API exposes.
        trigger_id:
          type: string
          description: The ti_ instance this firing belongs to. Survives a re-point.
        occurred_at:
          type: string
          description: When the firing happened, not when the row was written.
          format: date-time
        payload:
          description: >-
            The record, exactly as a delivery would carry it - or the truncation
            envelope, when

            PayloadTruncated is true.
          nullable: true
        payload_truncated:
          type: boolean
          description: >-
            True when the record exceeded the payload cap and Payload is the
            truncation

            envelope rather than the record. Surfaced rather than hidden: a
            caller reconciling against their

            own system needs to know they are looking at a stand-in.
        payload_hash:
          type: string
          description: >-
            SHA-256 of the canonicalised ORIGINAL payload - the same value the
            dedupe guard keys on, so a

            caller can reconcile "did I already see this record" without
            re-deriving our canonical form.
        delivery:
          description: >-
            Where this event's delivery got to. On the live subscribe stream
            this is always
             pending; read GET /v1/triggers/events/{eventId} for the settled state.
          oneOf:
            - $ref: '#/components/schemas/TriggerEventDeliveryStateDTO'
    TriggerDeliveryAttemptView:
      type: object
      description: One delivery ATTEMPT, as GET /v1/triggers/events/{eventId} returns it.
      additionalProperties: false
      required:
        - attempt
        - state
        - destination
      properties:
        attempt:
          type: integer
          description: >-
            1 for the first attempt. Matches the X-Engini-Attempt header that
            attempt carried.
          format: int32
        state:
          $ref: '#/components/schemas/TriggerEventDeliveryStateDTO'
        destination:
          type: string
          description: >-
            The destination's name at read time - not a snapshot of what it was
            when sent.
        status_code:
          type: integer
          description: >-
            The receiver's HTTP status, or null when the request never got a
            response.
          format: int32
          nullable: true
        error:
          type: string
          description: >-
            Sanitised failure reason - a status and reason, never a stack trace
            or internal host.
          nullable: true
        duration_ms:
          type: integer
          format: int32
          nullable: true
        next_attempt_at:
          type: string
          description: When the next attempt is due. Null on a terminal attempt.
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
    ErrorDetail:
      type: object
      description: A single field-level error detail within an ErrorResponse.
      additionalProperties: false
      required:
        - field
        - issue
      properties:
        field:
          type: string
          description: Name of the field the issue relates to.
        issue:
          type: string
          description: Description of the issue with the field.
    TriggerEventDeliveryStateDTO:
      type: string
      description: >-
        Where this event's delivery got to. On the live subscribe stream this is
        always
         pending; read GET /v1/triggers/events/{eventId} for the settled state.
      x-enumNames:
        - Pending
        - Delivered
        - Failed
        - DeadLettered
      enum:
        - pending
        - delivered
        - failed
        - dead_lettered
  securitySchemes:
    Bearer:
      type: http
      description: Enter your JWT token
      scheme: bearer
      bearerFormat: JWT
    ApiKey:
      type: apiKey
      description: >-
        Opaque Developer API key (prefix `eng_`). Authenticates as the key's
        owner and resolves the account automatically.
      name: x-api-key
      in: header

````