curl --request GET \
--url https://tapipay-facade.homo.tapila.cloud/subscriptions \
--header 'x-api-key: <api-key>' \
--header 'x-authorization-token: <api-key>'import requests
url = "https://tapipay-facade.homo.tapila.cloud/subscriptions"
headers = {
"x-api-key": "<api-key>",
"x-authorization-token": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'x-api-key': '<api-key>', 'x-authorization-token': '<api-key>'}
};
fetch('https://tapipay-facade.homo.tapila.cloud/subscriptions', 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/subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/subscriptions"
req, _ := http.NewRequest("GET", 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.get("https://tapipay-facade.homo.tapila.cloud/subscriptions")
.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/subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
request["x-authorization-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"subscriptionId": "sub_839d28e1-a175-40c7-a54b-55f6c17b7964",
"externalSubscriptionId": "SUB-2026-007",
"status": "ACTIVE",
"scheduling": {
"intervalUnit": "month",
"intervalCount": 1,
"startDate": "2026-06-15",
"totalCycles": 12,
"endDate": null,
"billingDay": {
"day": 15
}
},
"externalClientId": "CLI-00042",
"amount": 999,
"currency": "MXN",
"paymentUrl": "https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts",
"enforcePaymentOrder": false,
"autopay": false,
"allowOverduePayment": true,
"allowPartialPayments": true,
"paymentMethods": [
"CASH",
"CARD"
],
"description": "Plan Gimnasio",
"additionalData": {
"source": "crm"
},
"contact": {
"contactId": "con_9aL3kP2m",
"externalClientId": "CLI-00042",
"createdInline": false
},
"product": {
"productId": "prd_42",
"name": "Plan Gimnasio",
"active": true,
"createdInline": true
},
"createdAt": "2026-06-03T18:15:00.000Z",
"updatedAt": "2026-06-03T18:15:00.000Z"
}
],
"meta": {
"page": 2,
"limit": 250,
"total": 1,
"hasMore": true
},
"requestId": "<string>"
}Listar suscripciones
Devuelve tus suscripciones con filtros y paginación, ordenadas por externalSubscriptionId descendente. Con el filtro status, meta.total puede ser aproximado: el filtro se reaplica después de calcular el estado real (una ACTIVE vencida sale como ENDED).
curl --request GET \
--url https://tapipay-facade.homo.tapila.cloud/subscriptions \
--header 'x-api-key: <api-key>' \
--header 'x-authorization-token: <api-key>'import requests
url = "https://tapipay-facade.homo.tapila.cloud/subscriptions"
headers = {
"x-api-key": "<api-key>",
"x-authorization-token": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'x-api-key': '<api-key>', 'x-authorization-token': '<api-key>'}
};
fetch('https://tapipay-facade.homo.tapila.cloud/subscriptions', 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/subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/subscriptions"
req, _ := http.NewRequest("GET", 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.get("https://tapipay-facade.homo.tapila.cloud/subscriptions")
.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/subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
request["x-authorization-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"subscriptionId": "sub_839d28e1-a175-40c7-a54b-55f6c17b7964",
"externalSubscriptionId": "SUB-2026-007",
"status": "ACTIVE",
"scheduling": {
"intervalUnit": "month",
"intervalCount": 1,
"startDate": "2026-06-15",
"totalCycles": 12,
"endDate": null,
"billingDay": {
"day": 15
}
},
"externalClientId": "CLI-00042",
"amount": 999,
"currency": "MXN",
"paymentUrl": "https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts",
"enforcePaymentOrder": false,
"autopay": false,
"allowOverduePayment": true,
"allowPartialPayments": true,
"paymentMethods": [
"CASH",
"CARD"
],
"description": "Plan Gimnasio",
"additionalData": {
"source": "crm"
},
"contact": {
"contactId": "con_9aL3kP2m",
"externalClientId": "CLI-00042",
"createdInline": false
},
"product": {
"productId": "prd_42",
"name": "Plan Gimnasio",
"active": true,
"createdInline": true
},
"createdAt": "2026-06-03T18:15:00.000Z",
"updatedAt": "2026-06-03T18:15:00.000Z"
}
],
"meta": {
"page": 2,
"limit": 250,
"total": 1,
"hasMore": true
},
"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 consulta
Filtrar por estado (case-sensitive). Valor inválido devuelve 400 (Invalid status filter ...); vacío se ignora.
PROCESSING, ACTIVE, PAUSED, CANCELLED, ENDED Filtrar por deudor (match exacto), combinable con status (AND). Vacío o en blanco devuelve 400 INVALID_REQUEST. Sin resultados devuelve 200 con data: [].
x >= 11 <= x <= 500Respuesta
Lista de suscripciones

