Skip to main content
POST
/
v2
/
payout
/
notifications
/
resend
Resend Payout Webhooks (Bulk)
curl --request POST \
  --url https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "merchant_id": 123,
  "start_time": "<string>",
  "end_time": "<string>",
  "status_ids": [
    {}
  ],
  "dry_run": true
}
'
import requests

url = "https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend"

payload = {
    "merchant_id": 123,
    "start_time": "<string>",
    "end_time": "<string>",
    "status_ids": [{}],
    "dry_run": True
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    merchant_id: 123,
    start_time: '<string>',
    end_time: '<string>',
    status_ids: [{}],
    dry_run: true
  })
};

fetch('https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'merchant_id' => 123,
    'start_time' => '<string>',
    'end_time' => '<string>',
    'status_ids' => [
        [
                
        ]
    ],
    'dry_run' => true
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend"

	payload := strings.NewReader("{\n  \"merchant_id\": 123,\n  \"start_time\": \"<string>\",\n  \"end_time\": \"<string>\",\n  \"status_ids\": [\n    {}\n  ],\n  \"dry_run\": true\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"merchant_id\": 123,\n  \"start_time\": \"<string>\",\n  \"end_time\": \"<string>\",\n  \"status_ids\": [\n    {}\n  ],\n  \"dry_run\": true\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.sandbox.wepayout.com.br/v2/payout/notifications/resend")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"merchant_id\": 123,\n  \"start_time\": \"<string>\",\n  \"end_time\": \"<string>\",\n  \"status_ids\": [\n    {}\n  ],\n  \"dry_run\": true\n}"

response = http.request(request)
puts response.read_body
{
  "job_id": "a3f1bc2e4d8f0a1b2c3d4e5f6a7b8c9d",
  "total": 87
}
{
  "total": 87
}
{
  "message": "A resend job is already running for this merchant and time range."
}
{
  "message": "Validation error.",
  "errors": {
    "end_time": [
      "The time range must not exceed 3 hours."
    ]
  }
}

Overview

This endpoint allows you to resend webhook notifications in bulk for payout transactions within a specified time window. It dispatches an asynchronous job and returns a job_id that can be used to track progress via the Job Status endpoint.
The time range is limited to a maximum of 3 hours between start_time and end_time.
Only one resend job can run at a time per merchant and start time. If a job is already running for the same merchant and start time, the request will return 409 Conflict.

Request Body

merchant_id
integer
required
The ID of the merchant whose payout notifications will be resent.Must be one of the merchant IDs associated with your account.
start_time
string
required
Start of the time range for filtering payout transactions.Format: YYYY-MM-DD HH:MM:SSExample: "2026-03-24 08:00:00"
end_time
string
required
End of the time range for filtering payout transactions. Must be after start_time.Maximum range: 3 hours from start_time.Format: YYYY-MM-DD HH:MM:SSExample: "2026-03-24 11:00:00"
status_ids
array
Optional list of status IDs to filter which payout transactions will have notifications resent.If omitted, all notifiable statuses are included.Notifiable status IDs:
IDStatus
1Received
3Paid
4Rejected
5In Review
6Canceled
10Expired
11Invalid Data
Example: [3, 6]
dry_run
boolean
When true, the job is not dispatched. Instead, only the count of matching transactions is returned.Useful for estimating volume before triggering the actual resend.Default: false

Response

job_id
string
Unique identifier for the dispatched job. Use this to query the job status.Example: "a3f1bc2e4d8f0a1b2c3d4e5f6a7b8c9d"
total
integer
Total number of payout transactions matched and queued for webhook resend.Example: 87
{
  "job_id": "a3f1bc2e4d8f0a1b2c3d4e5f6a7b8c9d",
  "total": 87
}
{
  "total": 87
}
{
  "message": "A resend job is already running for this merchant and time range."
}
{
  "message": "Validation error.",
  "errors": {
    "end_time": [
      "The time range must not exceed 3 hours."
    ]
  }
}

Code Examples

curl -X POST "https://api.wepayments.com/v2/payout/notifications/resend" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "merchant_id": 303,
    "start_time": "2026-03-24 08:00:00",
    "end_time": "2026-03-24 11:00:00",
    "status_ids": [3, 6],
    "dry_run": false
  }'
const response = await fetch('https://api.wepayments.com/v2/payout/notifications/resend', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    merchant_id: 303,
    start_time: '2026-03-24 08:00:00',
    end_time: '2026-03-24 11:00:00',
    status_ids: [3, 6],
    dry_run: false
  })
});

const { job_id, total } = await response.json();
console.log(`Job dispatched: ${job_id} (${total} transactions)`);
import requests

response = requests.post(
    'https://api.wepayments.com/v2/payout/notifications/resend',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'merchant_id': 303,
        'start_time': '2026-03-24 08:00:00',
        'end_time': '2026-03-24 11:00:00',
        'status_ids': [3, 6],
        'dry_run': False
    }
)

data = response.json()
print(f"Job dispatched: {data['job_id']} ({data['total']} transactions)")
<?php
$ch = curl_init('https://api.wepayments.com/v2/payout/notifications/resend');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer YOUR_API_KEY',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'merchant_id' => 303,
    'start_time'  => '2026-03-24 08:00:00',
    'end_time'    => '2026-03-24 11:00:00',
    'status_ids'  => [3, 6],
    'dry_run'     => false
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

echo "Job dispatched: {$response['job_id']} ({$response['total']} transactions)";
?>

Job Status

Track the progress of a dispatched resend job

Payout Webhook

Understand the webhook payload structure

Status Flow

Understand payout status lifecycle