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

> ## Agent Instructions
> Document only operations in the linked OpenAPI contract: the source-data ingestion operations and the source-scoped outbound webhook management operations.
> Treat the generated OpenAPI document as authoritative for request fields. Never invent compatibility fields, alternate endpoints, or additional source models.
> Preserve explicit nulls, decimal strings, timestamps, source identifiers, immutable version identifiers, and document-version links exactly as defined.

# Replay missed webhook events

> Queues deliveries to an ACTIVE endpoint for recorded events of its subscribed types, created at or after since, that it never received (for example while it was pending verification or disabled). since is clamped to the delivery-history window, webhook.test events are excluded, and each call queues at most 500 events oldest first; call again when capped is true. Each replayed delivery carries the original event ID and body and is signed at replay time with the endpoint's current active key. Repeating a call never queues an event twice.



## OpenAPI

````yaml /openapi/ingestion.openapi.yaml post /api/ingestion/webhook-endpoints/{endpointId}/replay-missing
openapi: 3.1.0
info:
  title: Karsa Data Ingestion API
  version: current
  description: >-
    Source-bound writes for documents, business onboardings, customers,
    kyb-dossiers, accounts, transactions, outcomes, screening observations,
    screening dispositions, monitoring controls, monitoring control executions,
    historical RFI events, source checkpoints, native SEON screening
    observations, native AiPrise screening observations, and native Chainalysis
    screening observations.
servers:
  - url: https://api.sandbox.useasterisk.com
    description: Karsa sandbox API (synthetic test data)
  - url: https://api.useasterisk.com
    description: Karsa production API
security: []
tags:
  - name: Customers
    description: >-
      Create and version individual or business customer records, including
      atomic business onboarding where every beneficial owner is an individual
      Customer.
  - name: Verifications
    description: >-
      Submit immutable customer evidence snapshots for KYC or KYB evaluation, or
      start a KYB run for a business customer and poll its status.
  - name: Accounts
    description: >-
      Create and version customer-linked bank accounts, virtual accounts, and
      wallets without coupling the contract to a provider.
  - name: Documents
    description: Submit immutable document bytes or URL references and metadata.
  - name: Transactions
    description: Create and version money-movement records.
  - name: Sources
    description: >-
      Record source-attested, append-only completeness checkpoints used to
      qualify downstream evidence windows.
  - name: Outcomes
    description: >-
      Record source outcomes against customers, accounts, transactions, or
      documents.
  - name: Screening
    description: >-
      Submit provider-neutral verification, screening, alert, and
      reviewer-disposition evidence for Routine 6 qualification.
  - name: Controls
    description: >-
      Submit the source-owned monitoring control catalog and immutable execution
      evidence used to assess control coverage.
  - name: Requests
    description: >-
      Submit immutable historical request-for-information lifecycle events used
      to measure repeat requests and expiry.
  - name: Webhooks
    description: >-
      Manage source-scoped outbound destinations, receive later KYB evaluation
      lifecycle changes, and list recorded events to catch up on missed
      deliveries.
paths:
  /api/ingestion/webhook-endpoints/{endpointId}/replay-missing:
    post:
      tags:
        - Webhooks
      summary: Replay missed webhook events
      description: >-
        Queues deliveries to an ACTIVE endpoint for recorded events of its
        subscribed types, created at or after since, that it never received (for
        example while it was pending verification or disabled). since is clamped
        to the delivery-history window, webhook.test events are excluded, and
        each call queues at most 500 events oldest first; call again when capped
        is true. Each replayed delivery carries the original event ID and body
        and is signed at replay time with the endpoint's current active key.
        Repeating a call never queues an event twice.
      operationId: replayMissedWebhookEvents
      parameters:
        - schema:
            type: string
            minLength: 1
          required: true
          name: endpointId
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                since:
                  type: string
                  format: date-time
                  description: >-
                    Replay events created at or after this time; clamped to the
                    delivery-history window
              required:
                - since
              additionalProperties: false
            examples:
              lastDay:
                value:
                  since: '2026-09-27T12:00:00.000Z'
      responses:
        '200':
          description: How many events were queued and how many the endpoint already had
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookReplayMissingResponse'
              examples:
                replayed:
                  value:
                    replayed: 3
                    skippedAlreadyDelivered: 12
                    capped: false
        '400':
          description: 'INVALID_REQUEST: The request did not match the ingestion schema'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                INVALID_REQUEST:
                  value:
                    type: https://karsa.app/problems/invalid-request
                    title: Ingestion Rejected
                    status: 400
                    detail: The request did not match the ingestion schema
                    code: INVALID_REQUEST
                    requestId: req_example_01
        '401':
          description: >-
            AUTHENTICATION_REQUIRED: A source-bound bearer credential is
            required
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                AUTHENTICATION_REQUIRED:
                  value:
                    type: https://karsa.app/problems/authentication-required
                    title: Ingestion Rejected
                    status: 401
                    detail: A source-bound bearer credential is required
                    code: AUTHENTICATION_REQUIRED
                    requestId: req_example_01
        '403':
          description: >-
            WEBHOOK_MANAGEMENT_SCOPE_REQUIRED: The karsa:webhooks:manage scope
            is required
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                WEBHOOK_MANAGEMENT_SCOPE_REQUIRED:
                  value:
                    type: >-
                      https://karsa.app/problems/webhook-management-scope-required
                    title: Ingestion Rejected
                    status: 403
                    detail: The karsa:webhooks:manage scope is required
                    code: WEBHOOK_MANAGEMENT_SCOPE_REQUIRED
                    requestId: req_example_01
        '404':
          description: 'WEBHOOK_ENDPOINT_NOT_FOUND: Webhook endpoint was not found'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                WEBHOOK_ENDPOINT_NOT_FOUND:
                  value:
                    type: https://karsa.app/problems/webhook-endpoint-not-found
                    title: Ingestion Rejected
                    status: 404
                    detail: Webhook endpoint was not found
                    code: WEBHOOK_ENDPOINT_NOT_FOUND
                    requestId: req_example_01
        '409':
          description: 'WEBHOOK_NOT_ACTIVE: Verify and enable the webhook endpoint first'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                WEBHOOK_NOT_ACTIVE:
                  value:
                    type: https://karsa.app/problems/webhook-not-active
                    title: Ingestion Rejected
                    status: 409
                    detail: Verify and enable the webhook endpoint first
                    code: WEBHOOK_NOT_ACTIVE
                    requestId: req_example_01
        '429':
          description: 'RATE_LIMITED: The ingestion source exceeded its configured rate'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                RATE_LIMITED:
                  value:
                    type: https://karsa.app/problems/rate-limited
                    title: Ingestion Rejected
                    status: 429
                    detail: The ingestion source exceeded its configured rate
                    code: RATE_LIMITED
                    requestId: req_example_01
        '500':
          description: >-
            INGESTION_INTERNAL_ERROR: The ingestion request could not be
            completed
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                INGESTION_INTERNAL_ERROR:
                  value:
                    type: https://karsa.app/problems/ingestion-internal-error
                    title: Ingestion Unavailable
                    status: 500
                    detail: The ingestion request could not be completed
                    code: INGESTION_INTERNAL_ERROR
                    requestId: req_example_01
      security:
        - ingestionBearer: []
components:
  schemas:
    WebhookReplayMissingResponse:
      type: object
      properties:
        replayed:
          type: integer
          minimum: 0
        skippedAlreadyDelivered:
          type: integer
          minimum: 0
        capped:
          type: boolean
      required:
        - replayed
        - skippedAlreadyDelivered
        - capped
      additionalProperties: false
    Problem:
      type: object
      properties:
        type:
          type: string
          minLength: 1
        title:
          type: string
          minLength: 1
        status:
          type: integer
        detail:
          type: string
          minLength: 1
        code:
          type: string
          minLength: 1
        requestId:
          type: string
          minLength: 1
        existingRunId:
          type: string
          minLength: 1
        issues:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
              message:
                type: string
            required:
              - path
              - message
            additionalProperties: false
          maxItems: 20
      required:
        - type
        - title
        - status
        - detail
        - code
        - requestId
      additionalProperties: false
  securitySchemes:
    ingestionBearer:
      type: http
      scheme: bearer
      description: >-
        Source-bound WorkOS API key or configured machine OIDC token. OIDC
        webhook management requires karsa:webhooks:manage.

````

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