How to Resend a Failed Postback

Key takeaways

  • Open Reports, Postbacks, set Result to Failed, and click Resend at the end of the row.
  • Resend shows only for real events that were never delivered, not for tests and not when a later attempt already got through.
  • A resent postback uses the postback URL and secret key saved now, so fix your URL or server first.

How do I resend a failed postback?

In the sidebar under Reports, click Postbacks, set Result to Failed, fix what made your server fail, and click Resend at the end of the row. The new attempt appears at the top of the list a few seconds later.

Publisher applications open soon. Postbacks start once an approved app has a postback URL.

How retries work before you need Resend

When your server does not answer with a 2xx code within 6 seconds, we try again by ourselves up to 5 times, after about 1 minute, 5 minutes, 30 minutes, 2 hours, and 6 hours. Each try is a new row in the report, marked Attempt 2, Attempt 3, and so on. Resend is for events that still failed after that, or that you want to send now that your server is fixed.

Step by step

  1. In the sidebar under Reports, click Postbacks. You can also click the postback report link in the Postback tab of your app, which opens the failed ones directly.
  2. Set Result to Failed. Use App, From, and To to narrow the list. The Failed total at the top counts the calls that match.
  3. Look at the Event column (Credited, Reversed, Pending, or Rejected) and the Result column, which shows the HTTP code your server sent or No answer.
  4. Click the URL under Details to see the full URL we called and the Response from your server.
  5. Fix the cause on your side. If the postback URL was wrong, correct it in the Postback tab and click Save changes.
  6. Back in the report, click Resend at the end of the row. A message confirms: “Postback sent again. The result appears at the top of this list in a few seconds.”
  7. Check the new row at the top. A 2xx code means your server got it.

Tip: one transaction, one reward

A resent postback has the same {transaction_id} as the original. Store the last status you processed for each transaction ID and skip repeats, so a user is never credited twice. Postback security shows a handler that does this.

When the Resend button shows

  • Only for failed rows of real conversions. Test postbacks, marked Test in the Event column, cannot be resent. Use Send test in the Postback tab instead.
  • Not if the event got through later. If a retry or an earlier resend was delivered, the row says Delivered later instead.
  • Not for an outdated event. If the result changed since then, for example a pending event that was later credited, you see “This result has changed since then, so this older event is not sent again.”
  • Not if the event is no longer sent. If the postback URL is now empty, or the event is a pending one and pending events are off, you see “This event is not sent to your server any more. Check the postback URL and the pending setting of the app.”

Resend uses the postback URL and postback secret key saved for the app now. If you changed your secret key since the first try, your server must check the hash with the new key. See How to rotate your keys and link salt.

Common causes of failed postbacks

  • 403 or 404: your script rejected the call, or the URL is wrong. Open the URL from the report and check your hash code.
  • Timeout: your script takes longer than 6 seconds. Answer with 200 first, or run the slow work in the background.
  • 301 or 302: your URL redirects, for example from http to https. Use the final URL, because we do not follow redirects.
  • No call arrives at all: a firewall or bot protection blocks server requests. Allow our requests to your postback path.
  • Hash mismatch: the values were changed before hashing, or the wrong key is used. Hash transaction ID, user ID, reward, and status exactly as received, with the postback secret key.

Once fixed, a quick round with Send a test postback confirms your handler before you resend real events. If a user wrote in about the reward, Handling missing reward tickets has reply templates. The full table is on the Testing and troubleshooting page, and our IP addresses are on the Postbacks page of our docs.

On a phone

The bottom tab bar has no Postbacks item. Open your app from Apps, go to the Postback tab, and tap the postback report link. Each row shows as a card, with Resend at the bottom.

Need help?

Email support@sharklio.com with the time of the failed postback and the response shown under Details.

Frequently asked questions

Can I resend many failed postbacks at once?

No. Resend works one row at a time, with a short pause between clicks.

Does a resend count as a new conversion?

No. It is the same event with the same transaction ID. Only the event ID is new.

Can I resend a postback that was already delivered?

No. If any attempt of that event was delivered, it is not sent again. To check your records, use the Reporting API or Export CSV in Reports.

Why does a failed row say Delivered later?

One of our automatic retries, or an earlier resend, reached your server after this attempt failed. Nothing is missing.