Paths and Content Types

To use the Events API, you provide a base URL hosted by a server in your system. Paths are relative to that URL.

As mentioned in the overview, events are grouped into categories, and posted to the webhook for that category:

  • Account Events: /AccountEvent
  • Authorization Events: /Authorization
  • Settlement Events: /Settlement
  • Transaction Events: /Transaction

SoFi Tech Solutions sends event messages receives and expects responses as JSON payloads.

Webhook headers

SoFi Tech Solutions includes the following standard HTTP headers in every webhook POST request across all four event categories.

HeaderTypeRequiredDescription
X-Request-IDstringYesA unique identifier(UUID) for the request, used for tracking and logging.
Encryption-TypestringYesSignature algorithm. Always "JWT-HS256".
User-IDstringYesIdentifies request as coming from SoFi Tech Solutions. Hard-coded to "galileo".
DatestringYesUTC timestamp when request is sent. Format: "<timestamp><timezone>" where timestamp = YYYYMMDD:HHMMSS and timezone = UTC. Example: 20170504:141752UTC
acceptstringNoGenerated from available response content types. Allowed: application/json

Fields

The fields with each event are defined by a template. All available fields listed in the Fields table on every event are automatically included in this template. All fields are sent as strings. For example, $500 is sent as "500.00".

Common fields

All events include the following fields.

FieldDescription
event_tsTimestamp for when this event was created in system time. Legacy field: timestamp. Example: "2027-11-22 11:24:02 MST"
msg_event_idUnique system-generated identifier for this message. Example: "243693"
msg_idThe four-letter code to identify this event. Example: "AAAU"
typeString that identifies the specific event subtype. Example: "auth"

Empty fields

When there is no data to return for a field, the key is still returned in the response with an empty value. For example, if you receive a BADJ: adj event message for a non-ACH transaction, then "ach_trans_id" is returned in the webhook payload.

Delivery attempts

If a delivery fails, SoFi Tech Solutions resends the event message using the standard exponential backoff. We will retry up to 5 total attempts. After 5 attempts, the event will be marked as undeliverable.

Event handling

When your endpoint receives a webhook, it must validate the request, return a status code, and process the payload according to the following requirements.

Timeouts

You must respond to webhook messages within 5 seconds; otherwise, the request will time out and automatically trigger a retry attempt.

Asynchronous processing

We recommend separating the receipt of the event from your downstream business logic. Return a 200 OK response immediately after validating the webhook request and queuing the event for processing.

Responses

HTTP status codes that your endpoint should return:

HTTP status codeDescriptionScenario
200 OKSuccessfully received and acceptedEvent received, validated, and queued/processed
400 Bad RequestInvalid request formatMalformed JSON or validation errors
422 Unprocessable ContentLogic or validation failureIncorrect or missing data
401 UnauthorizedAuthentication failureJWT validation failed or invalid token
429 Too Many RequestsRate limiting triggeredSystem cannot process more requests at this time
500 Internal Server ErrorServer errorUnexpected error while processing
503 Service UnavailableService unavailableService down for maintenance or experiencing issues

Map to legacy response codes

Below are the valid legacy status codes for success_code mapped to the HTTP status code:

CodeDescriptionHTTP status code
0Success200
1Parameters do not pass validation (parsing error)422
2Cardholder account not in system422
3General system failure500
4Authentication failed401
5Not ready to accept messages. Retransmit429

Note: If you are migrating from the legacy event to the new standard template for the event, keep in mind that returning success_code=3 is now mapped to an HTTP 500 Internal Server Error. For legacy events, 3 was a terminal failure. Now, returning a 500 triggers a retry.

Retry triggers

Retries are automatically triggered if your endpoint times out or returns HTTP status codes (500–599) or rate limiting (429). We do not retry delivery for other HTTP status codes.


© SoFi Technology Solutions, LLC 2026    Privacy Disclosure

All documentation, including but not limited to text, graphics, images, and any other content, are the exclusive property of SoFi Technology Solutions, LLC and are protected by copyright laws. These materials may not be reproduced, distributed, transmitted, displayed, or otherwise used without the prior written permission of SoFi Technology Solutions, LLC. Any unauthorized use or reproduction of these materials are expressly prohibited.