Handling notifications and responses

Last updated: Apr 24, 2026
DEVELOPER
PRODUCT OWNER
IMPLEMENTATION

A notification is for one-way, event-based data streams where systems either SEND or RECEIVE data asynchronously. Think of these as CRUD-style requests you want to send to or receive from your connection.

How Redox sequences notifications

Redox delivers notifications to the destination using a first-in, first-out (FIFO) method. We work to maintain the order of asynchronous notifications in the order they’re triggered for each subscription.

When Redox pauses the queue

If log failures happen during processing, Redox pauses the queue for the intended destination so that we can maintain FIFO delivery after the issue is resolved.

There are a couple reasons why notifications might fail:

  1. Failed delivery: Redox successfully processes your request, but the destination doesn’t accept it. We automatically retry sending in this case.
  2. Redox processing errors: Redox sometimes encounters errors while processing a notification (e.g., normalizing data from one format to another or applying config modifiers). These errors might require changes to the processing configuration in the Redox dashboard to allow the notification to be processed correctly.

When there are failures for any reason, we alert the source or destination system, depending on where the failure occurred. The alert goes to the Alert Email, which is listed in the Organization Profile of the Redox dashboard. Learn more about checking Redox system alerts. Alternatively, you can preemptively monitor your traffic health by creating a traffic alert rule.

Beta option: Child queues for subscriptions

Worried about the high volume of async traffic you might have? If so, consider using child queues, which allow you to have multiple queues for one subscription so that messages process in parallel. This option speeds up your throughput, so long as the destination can handle that volume of messages.

Learn more about child queues for subscriptions, or talk to your Technical Account Manager for more information.

How to avoid queue pausing

For non-critical errors, you can avoid automatic queue pausing by sending back a 200 OK status:

  • before performing data validation; or
  • after finding a minor error that can be resolved later.

Track these non-critical errors in your system and submit a request to our Help Center if you need help resolving.

This best practice helps to:

  • prevent unnecessarily pausing production traffic;
  • allows your development/staging traffic to proceed with business as usual; and
  • ensures continuity in your data delivery so that your traffic doesn’t get stalled for one troublesome log.

How to initiate queue pausing

If you identify a critical error or you’re experiencing downtime, we recommend sending a 4XX or 5XX status to Redox. We’ll pause your queue so that none of your data is lost while you work to resolve your system.

How to handle notification responses

When handling asynchronous notifications, it’s important to understand two different response scenarios:

  1. Response from Redox (after you SEND): This is the immediate acknowledgement Redox sends to you after you send a notification. It confirms whether Redox successfully received your message for processing.
    Recoverable messages

    Redox uses recoverable messages to guarantee delivery of asynchronous traffic. We save these messages into highly durable queues so that they can survive restarts or other failures. We won’t respond with a 200 OK status unless we successfully saved the message in a highly durable queue first. Read about our business continuity and disaster recovery plan.

  2. Response to Redox (when you RECEIVE): This is the acknowledgment you must send to Redox after receiving a notification from your connection. Your response tells Redox whether you successfully processed the message.

Responses from Redox (after you SEND)

When you send a notification, Redox responds to say whether your notification was accepted for processing and delivery. This would be like the Post Office sending a note to say they received and are ready to deliver a package you sent.

Since notifications are one-way traffic, you won’t get a response from your connection. Any responses to your outgoing asynchronous traffic are specifically from Redox about the processing of the notification.

If your notification went to multiple destinations, you only receive one overall response from Redox.

Success response

If Redox successfully accepts your message, you receive a 200 OK status and a response body with any relevant details.

A success response means that Redox:

  • received the notification;
  • saved the notification to a highly durable queue; and
  • is ready to process and deliver the notification.

Note that this doesn’t mean the notification was delivered to the intended destination yet. Check the status of the related log later on to see whether your notification was successfully processed and delivered. Learn more about logs.

A log is created for every destination you send to. However, if one notification is sent to multiple destinations, you only receive one response from Redox. For example, if you send a notification to 10 destinations, you receive one Redox response with 10 log objects and IDs.

Error response

On occasion, Redox can’t process a notification because of an issue with the request or within Redox. If this happens, we respond with a 4XX or 5XX HTTP status code (review HTTP statuses). The body of the response contains a populated errors array:

  • Meta.Errors[] array (for the Data Model API)
  • issue[] array (for the FHIR® API)

The error or issue array contains an object with the type of failure and corresponding details. At a minimum, a Text field provides the error message details.

In the event of an error, you can initiate a manual retry. We also recommend that you have queuing capability for your outgoing traffic to Redox. That way, your system can queue any additional traffic until the issue is resolved.

Example: Error response for the Data Model API
json
1
{
2
   "Meta": {
3
     …
4
     "Errors": [
5
       {
6
         "Text": "Required field missing - Device.ID in Device:New"
7
         …
8
       }
9
     ]
10
   }
11
   …
12
 }
Example: Error response for the FHIR API
json
1
{
2
"resourceType": "OperationOutcome",
3
"issue": [{
4
"severity": "error",
5
"code": "invalid",
6
"details": {
7
"text": "Unknown search parameter name \"foobar\" for model \"Patient\"",
8
"coding": [
9
{
10
"code": "MSG_PARAM_UNKNOWN",
11
"system": "http://terminology.hl7.org/CodeSystem/operation-outcome",
12
"display": "Parameter \"foobar\" not understood"
13
}
14
]
15
},
16
"diagnostics": "Failed to execute FHIR search"
17
}]
18
}

Responses to Redox (when you RECEIVE)

When you receive a notification, you must respond to Redox to say whether you successfully received it. We wait for your response before deciding what to do next.

Success response

If you successfully receive a notification from Redox, you should respond with a 200 OK status and a response body with any relevant details.

A success response means that your system has processed the most recent notification and is ready for more. We proceed with sending your next notification.

Error response

If there’s a critical error with the request or within your system, you should respond with the relevant 4XX or 5XX HTTP status code (review HTTP statuses). The body of the response should contain a populated errors array:

  • Meta.Errors[] array (for the Redox Data Model API)
  • issue[] array (for the FHIR® API)

The error or issue array should contain an object with the type of failure and corresponding details. At a minimum, a Text field should provide the error message details.

What your connection doesn’t know

The failed response comes to Redox, but we don’t pass it back to your connection. This means your connection won’t know that your system failed to receive their notification.

It’s possible to set up custom notifications as an advanced feature of Redox. Talk to a Redoxer to find out more.

If you respond with a failed HTTP status code, our next action depends on the type of environment your destination is in:

  • Production environment: We wait a few seconds before automatically retrying to send the notification. We also pause the queue until the notification succeeds. Learn more about automatic retries.
  • Staging or development environment: We don’t automatically retry the failed message or pause the queue. Talk with your connection if you need them re-send the notification.

FHIR® is a registered trademark of Health Level Seven International (HL7) and is used with the permission of HL7. Use of this trademark does not constitute an endorsement of products/services by HL7®.