curl --request POST \
--url https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{}'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test"
payload = {}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test",
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([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}using RestSharp;
var options = new RestClientOptions("https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Idempotency-Key", "<idempotency-key>");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"deliveryId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"delivered": true,
"responseStatus": 200
}{
"error": {
"status": 400,
"message": "La solicitud no es válida.",
"details": [
"items.0.quantity: debe ser un número entero.",
"dueDate: es obligatoria cuando paymentType es credit."
]
}
}{
"error": {
"status": 401,
"message": "Esta llave pertenece a otro ambiente."
}
}{
"error": {
"status": 403,
"message": "La llave no tiene permiso para esta operación."
}
}{
"error": {
"status": 404,
"message": "Documento no encontrado."
}
}{
"error": {
"status": 409,
"message": "Hay una solicitud en curso con esta Idempotency-Key."
}
}{
"error": {
"status": 422,
"message": "Esta Idempotency-Key ya se usó con otra solicitud."
}
}{
"error": {
"status": 429,
"message": "Demasiadas solicitudes. Intenta de nuevo más tarde."
}
}{
"error": {
"status": 502,
"message": "El servicio de facturación electrónica tuvo un error inesperado. Intenta de nuevo más tarde."
}
}{
"error": {
"status": 503,
"message": "El servicio de facturación electrónica no está disponible. Intenta de nuevo en unos minutos."
}
}Enviar un evento de prueba
Envía ahora a la URL del webhook un evento test (data: { "message": "..." }), firmado igual que los reales, y devuelve si tu endpoint respondió 2xx. Úsalo para probar tu verificación de firma. No lleva cuerpo.
curl --request POST \
--url https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{}'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test"
payload = {}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test",
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([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}using RestSharp;
var options = new RestClientOptions("https://e-cf.acpay.do/sandbox/v1/webhooks/{id}/test");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Idempotency-Key", "<idempotency-key>");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"deliveryId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"delivered": true,
"responseStatus": 200
}{
"error": {
"status": 400,
"message": "La solicitud no es válida.",
"details": [
"items.0.quantity: debe ser un número entero.",
"dueDate: es obligatoria cuando paymentType es credit."
]
}
}{
"error": {
"status": 401,
"message": "Esta llave pertenece a otro ambiente."
}
}{
"error": {
"status": 403,
"message": "La llave no tiene permiso para esta operación."
}
}{
"error": {
"status": 404,
"message": "Documento no encontrado."
}
}{
"error": {
"status": 409,
"message": "Hay una solicitud en curso con esta Idempotency-Key."
}
}{
"error": {
"status": 422,
"message": "Esta Idempotency-Key ya se usó con otra solicitud."
}
}{
"error": {
"status": 429,
"message": "Demasiadas solicitudes. Intenta de nuevo más tarde."
}
}{
"error": {
"status": 502,
"message": "El servicio de facturación electrónica tuvo un error inesperado. Intenta de nuevo más tarde."
}
}{
"error": {
"status": 503,
"message": "El servicio de facturación electrónica no está disponible. Intenta de nuevo en unos minutos."
}
}Autorizaciones
Llave de API de AC-PAY del ambiente de esta URL.
Encabezados
Identificador único que generas por operación (p. ej. un UUID), de 1 a 255 caracteres ASCII imprimibles. Si repites la solicitud con la misma llave en las siguientes 24 h recibes la respuesta original (con Idempotent-Replayed: true) sin ejecutarla de nuevo.
"5b0f7c1e-2f7a-4d8e-9d3c-7f1e2a9b4c60"
Parámetros de ruta
Identificador del webhook (UUID).
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
Cuerpo
Sin cuerpo. Cualquier propiedad enviada se rechaza con 400.
The body is of type object.
Respuesta
Resultado de la entrega de prueba.
Id de la entrega de prueba (deliveryId del cuerpo enviado).
"e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
Si tu endpoint respondió 2xx.
true
Código HTTP que respondió tu endpoint. null si no respondió (timeout, DNS, conexión rechazada...).
200