curl --request POST \
--url https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel \
--header 'x-api-key: <api-key>' \
--header 'x-authorization-token: <api-key>'import requests
url = "https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel"
headers = {
"x-api-key": "<api-key>",
"x-authorization-token": "<api-key>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'x-authorization-token': '<api-key>'}
};
fetch('https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel', 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://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-authorization-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-authorization-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel")
.header("x-api-key", "<api-key>")
.header("x-authorization-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["x-authorization-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"paymentLinkId": "plk_61a837f5-3c67-423a-ade7-94b78e0007cb",
"status": "ACTIVE",
"amount": 4500,
"currency": "MXN",
"description": "Factura única #777",
"singleUse": true,
"paymentUrl": "https://app.tapipay.la/s/acme-corp/portal/McXmbnKaju/debts/payment-methods?externalRequestId=pl-debt-FAC-777",
"createdAt": "2026-06-03T19:20:00.000Z",
"debtId": "debt_pl-debt-FAC-777",
"externalPaymentLinkId": "FAC-777",
"expiresAt": "2026-06-30T23:59:59.000Z",
"successUrl": null,
"metadata": null,
"identifierValue": "acm-x3kM9pQr",
"contact": null,
"product": null
},
"requestId": "<string>"
}Cancelar link de pago
Desactiva un link de pago y cancela también su deuda asociada (si esa cancelación falla, el link queda cancelado igual). Operación idempotente.
curl --request POST \
--url https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel \
--header 'x-api-key: <api-key>' \
--header 'x-authorization-token: <api-key>'import requests
url = "https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel"
headers = {
"x-api-key": "<api-key>",
"x-authorization-token": "<api-key>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'x-authorization-token': '<api-key>'}
};
fetch('https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel', 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://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-authorization-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-authorization-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel")
.header("x-api-key", "<api-key>")
.header("x-authorization-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tapipay-facade.homo.tapila.cloud/payment-links/{id}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["x-authorization-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"paymentLinkId": "plk_61a837f5-3c67-423a-ade7-94b78e0007cb",
"status": "ACTIVE",
"amount": 4500,
"currency": "MXN",
"description": "Factura única #777",
"singleUse": true,
"paymentUrl": "https://app.tapipay.la/s/acme-corp/portal/McXmbnKaju/debts/payment-methods?externalRequestId=pl-debt-FAC-777",
"createdAt": "2026-06-03T19:20:00.000Z",
"debtId": "debt_pl-debt-FAC-777",
"externalPaymentLinkId": "FAC-777",
"expiresAt": "2026-06-30T23:59:59.000Z",
"successUrl": null,
"metadata": null,
"identifierValue": "acm-x3kM9pQr",
"contact": null,
"product": null
},
"requestId": "<string>"
}Autorizaciones
API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).
Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo "Bearer". Ej: x-authorization-token: eyJhbGci...
Parámetros de ruta
ID público con prefijo plk_ o el mismo valor sin prefijo.
"plk_61a837f5-3c67-423a-ade7-94b78e0007cb"
Respuesta
Link de pago cancelado exitosamente o ya estaba CANCELLED (idempotente). - ACTIVE → CANCELLED: retorna 200 con estado actualizado. - CANCELLED → CANCELLED: retorna 200 sin cambios (idempotente).
externalPaymentLinkId, expiresAt, successUrl, metadata, identifierValue, contact y product siempre vienen, con null cuando no hay valor.
Show child attributes
Show child attributes
{
"paymentLinkId": "plk_61a837f5-3c67-423a-ade7-94b78e0007cb",
"status": "ACTIVE",
"amount": 4500,
"currency": "MXN",
"description": "Factura única #777",
"singleUse": true,
"paymentUrl": "https://app.tapipay.la/s/acme-corp/portal/McXmbnKaju/debts/payment-methods?externalRequestId=pl-debt-FAC-777",
"createdAt": "2026-06-03T19:20:00.000Z",
"debtId": "debt_pl-debt-FAC-777",
"externalPaymentLinkId": "FAC-777",
"expiresAt": "2026-06-30T23:59:59.000Z",
"successUrl": null,
"metadata": null,
"identifierValue": "acm-x3kM9pQr",
"contact": null,
"product": null
}

