Retry API
Jack Henry Modern Eventing
>
API Reference
>
Retry API
openapi: 3.0.3
info:
title: JH-Events Retry API
version: 1.0.0
description: Retry API for re-processing and republishing events.
contact:
name: Team Icarus
url: https://www.jackhenry.com/
email: jh-gcp-gbl-icarus-engineering@jackhenry.com
servers:
- url: https://banno.com
description: Production environment
- url: https://platform.banno-staging.com
description: Staging environment
- url: https://platform.banno-development.com
description: Development environment
tags:
- name: Retries
description: Event retry and replay operations
paths:
/a/api/enterprise-event/v1/{institutionId}/retries/subscriptions/{subscriptionId}/events/{eventId}:
post:
summary: Retry Single Subscription Event
description: |
Retries a single event for a specific subscription. The event is
republished with refreshed subscription configuration.
operationId: retrySingleSubscriptionEvent
tags:
- Retries
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/InstitutionIdPathParam'
- $ref: '#/components/parameters/SubscriptionIdPathParam'
- $ref: '#/components/parameters/EventIdPathParam'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/SingleEventRetryRequest'
example:
bypassSubscriptionFilter: false
responses:
'200':
$ref: '#/components/responses/RetrySuccessResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/UnexpectedError'
/a/api/enterprise-event/v1/{institutionId}/retries/subscriptions/{subscriptionId}:
post:
summary: Retry Bulk Subscription Events
description: |
Retries multiple events for a subscription based on filter criteria.
Runs asynchronously and can handle large volumes of events.
operationId: retryBulkSubscriptionEvents
tags:
- Retries
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/InstitutionIdPathParam'
- $ref: '#/components/parameters/SubscriptionIdPathParam'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/BulkSubscriptionEventRetryRequest'
examples:
retryFailed:
summary: Retry all failed events
value:
dispatchStatus:
- failed
retryStuckPending:
summary: Retry pending events stuck for over 30 minutes
value:
dispatchStatus:
- pending
pendingLongerThan: 30m
retryByTimeRange:
summary: Retry events from a specific time period
value:
fromTime: '2024-01-01T00:00:00Z'
toTime: '2024-01-31T23:59:59Z'
retrySpecificEvents:
summary: Retry specific event IDs
value:
eventId:
- 550e8400-e29b-41d4-a716-446655440000
responses:
'202':
$ref: '#/components/responses/RetryAcceptedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/UnexpectedError'
/a/api/enterprise-event/v1/{institutionId}/retries/events/{eventId}:
post:
summary: Retry Single Raw Event
description: |
Retries a single raw event. The event is republished to the raw events topic.
By default, goes through fresh subscription matching. Use `replayMatchedSubscriptions`
to replay to previously matched subscriptions instead.
operationId: retrySingleRawEvent
tags:
- Retries
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/InstitutionIdPathParam'
- $ref: '#/components/parameters/EventIdPathParam'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/SingleRawEventRetryRequest'
examples:
defaultRetry:
summary: Standard retry with fresh subscription matching
value: {}
replayToMatchedSubscriptions:
summary: Replay to previously matched subscriptions
value:
replayMatchedSubscriptions: true
responses:
'200':
$ref: '#/components/responses/RetrySuccessResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/UnexpectedError'
/a/api/enterprise-event/v1/{institutionId}/retries/events:
post:
summary: Retry Bulk Raw Events
description: |
Retries multiple raw events for an institution based on filter criteria.
By default, events go through fresh subscription matching. Use `replayMatchedSubscriptions`
to replay to previously matched subscriptions instead.
operationId: retryBulkRawEvents
tags:
- Retries
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/InstitutionIdPathParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkRawEventRetryRequest'
examples:
retryBySource:
summary: Retry events from a specific source
value:
eventSource: core-banking-system
retryByTimeRange:
summary: Retry events from a specific time period
value:
fromTime: '2024-01-01T00:00:00Z'
toTime: '2024-01-31T23:59:59Z'
retryByBatch:
summary: Retry events from a specific ingestion batch
value:
ingestionBatchId:
- ingestion-batch-001
replayToMatchedSubscriptions:
summary: Replay events to previously matched subscriptions
value:
eventSource: core-banking-system
replayMatchedSubscriptions: true
responses:
'200':
$ref: '#/components/responses/RetrySuccessResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/UnexpectedError'
/a/api/enterprise-event/v1/retries/events:
post:
summary: Admin Retry Bulk Raw Events (Multi-Institution)
description: |
Admin endpoint for retrying raw events across all institutions.
By default, events go through fresh subscription matching. Use `replayMatchedSubscriptions`
to replay to previously matched subscriptions instead.
operationId: adminRetryBulkRawEvents
tags:
- Retries
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AdminBulkRetryRequest'
examples:
retryBySource:
summary: Retry all events from a specific source across institutions
value:
eventSource: core-banking-system
retryByTimeRange:
summary: Retry all events from a specific time period
value:
fromTime: '2024-01-01T00:00:00Z'
toTime: '2024-01-31T23:59:59Z'
replayToMatchedSubscriptions:
summary: Replay events to previously matched subscriptions
value:
fromTime: '2024-01-01T00:00:00Z'
toTime: '2024-01-31T23:59:59Z'
replayMatchedSubscriptions: true
responses:
'200':
$ref: '#/components/responses/RetrySuccessResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/UnexpectedError'
components:
securitySchemes:
bearerAuth:
description: OpenIDConnect JWT Token
type: http
scheme: bearer
bearerFormat: JWT
parameters:
InstitutionIdPathParam:
name: institutionId
in: path
description: Institution unique identifier
required: true
schema:
type: string
format: uuid
example: 12345678-1234-1234-1234-123456789012
SubscriptionIdPathParam:
name: subscriptionId
in: path
description: Subscription unique identifier
required: true
schema:
type: string
format: uuid
example: 87654321-4321-4321-4321-210987654321
EventIdPathParam:
name: eventId
in: path
description: Event unique identifier
required: true
schema:
type: string
format: uuid
example: 11111111-2222-3333-4444-555555555555
schemas:
SingleEventRetryRequest:
type: object
description: Optional request body for single subscription event retry
properties:
bypassSubscriptionFilter:
type: boolean
description: When true, forces the event to be replayed regardless of subscription filters
default: false
example: false
RetryResponse:
type: object
description: Standard response for retry operations
required:
- status
- retryId
properties:
status:
type: string
description: Status of the retry operation
enum:
- success
- accepted
example: success
retryId:
type: string
format: uuid
description: Unique identifier for tracking this retry operation
example: 550e8400-e29b-41d4-a716-446655440000
StandardErrorType:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
StandardErrorTitle:
description: A end-user readable string title of the error type.
nullable: false
type: string
StandardErrorDetails:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
StandardErrorData:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
StandardError:
type: object
required:
- type
- title
- details
properties:
type:
$ref: '#/components/schemas/StandardErrorType'
title:
$ref: '#/components/schemas/StandardErrorTitle'
details:
$ref: '#/components/schemas/StandardErrorDetails'
data:
$ref: '#/components/schemas/StandardErrorData'
BulkSubscriptionEventRetryRequest:
type: object
description: Request body for bulk subscription event retry with filtering options
properties:
eventId:
type: array
description: Filter by specific event IDs
items:
type: string
example:
- 550e8400-e29b-41d4-a716-446655440000
- 550e8400-e29b-41d4-a716-446655440001
eventNum:
type: array
description: Filter by event numbers
items:
type: string
example:
- '1001'
- '1002'
- '2000'
dispatchBatchId:
type: array
description: Filter by dispatch batch IDs
items:
type: string
example:
- batch-001
- batch-002
dispatchStatus:
type: array
description: Filter by dispatch status
items:
type: string
enum:
- succeeded
- failed
- pending
example:
- failed
- pending
pendingLongerThan:
type: string
description: |
Duration threshold for pending events. Requires dispatchStatus to include 'pending',
otherwise returns a 400 error. Supports formats like "30m", "2h", "1d".
example: 30m
fromTime:
type: string
format: date-time
description: Start of time range filter (inclusive)
example: '2024-01-01T00:00:00Z'
toTime:
type: string
format: date-time
description: End of time range filter (inclusive)
example: '2024-01-31T23:59:59Z'
bypassSubscriptionFilter:
type: boolean
description: When true, forces the event to be replayed regardless of subscription filters
default: false
example: false
SingleRawEventRetryRequest:
type: object
description: Optional request body for single raw event retry
properties:
replayMatchedSubscriptions:
type: boolean
description: |
When true, the event will be replayed to its already-matched subscriptions.
This may result in subscribers receiving duplicate events if the original
dispatch was successful.
default: false
example: false
BulkRawEventRetryRequest:
type: object
description: Request body for bulk raw event retry with filtering options
properties:
eventId:
type: array
description: Filter by specific event IDs
items:
type: string
example:
- 550e8400-e29b-41d4-a716-446655440000
- 550e8400-e29b-41d4-a716-446655440001
eventNum:
type: array
description: Filter by event numbers
items:
type: string
example:
- '1001'
- '1002'
- '2000'
ingestionBatchId:
type: array
description: Filter by ingestion batch IDs
items:
type: string
example:
- ingestion-batch-001
- ingestion-batch-002
eventSource:
type: string
description: Filter by event source
example: core-banking-system
fromTime:
type: string
format: date-time
description: Start of time range filter (inclusive)
example: '2024-01-01T00:00:00Z'
toTime:
type: string
format: date-time
description: End of time range filter (inclusive)
example: '2024-01-31T23:59:59Z'
replayMatchedSubscriptions:
type: boolean
description: |
When true, events will be replayed to their already-matched subscriptions.
This may result in subscribers receiving duplicate events if the original
dispatch was successful.
default: false
example: false
AdminBulkRetryRequest:
type: object
description: Request body for admin bulk raw event retry with filtering options
properties:
institutionIds:
type: array
description: Filter by specific institution IDs
items:
type: string
example:
- 550e8400-e29b-41d4-a716-446655440000
- 550e8400-e29b-41d4-a716-446655440001
eventId:
type: array
description: Filter by specific event IDs
items:
type: string
example:
- 550e8400-e29b-41d4-a716-446655440000
- 550e8400-e29b-41d4-a716-446655440001
eventNum:
type: array
description: Filter by event numbers
items:
type: string
example:
- '1001'
- '1002'
- '2000'
ingestionBatchId:
type: array
description: Filter by ingestion batch IDs
items:
type: string
example:
- ingestion-batch-001
- ingestion-batch-002
eventSource:
type: string
description: Filter by event source
example: core-banking-system
fromTime:
type: string
format: date-time
description: Start of time range filter (inclusive)
example: '2024-01-01T00:00:00Z'
toTime:
type: string
format: date-time
description: End of time range filter (inclusive)
example: '2024-01-31T23:59:59Z'
replayMatchedSubscriptions:
type: boolean
description: |
When true, events will be replayed to their already-matched subscriptions.
This may result in subscribers receiving duplicate events if the original
dispatch was successful.
default: false
example: false
responses:
RetrySuccessResponse:
description: Retry operation completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RetryResponse'
example:
status: success
retryId: 550e8400-e29b-41d4-a716-446655440000
BadRequest:
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/StandardError'
Unauthorized:
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
Forbidden:
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
NotFound:
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
UnexpectedError:
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/StandardError'
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
RetryAcceptedResponse:
description: Bulk retry operation accepted and processing asynchronously
content:
application/json:
schema:
$ref: '#/components/schemas/RetryResponse'
example:
status: accepted
retryId: 550e8400-e29b-41d4-a716-446655440000
Have a Question?
- Have a how-to question? Seeing a weird error? Get help on StackOverflow.
- Register for the Developer Office Hours where we answer technical Q&A from the audience.
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Wed Aug 7 2024