Autenticación
Para autenticarte con la API de T1pagos, debes utilizar una API Key. Esta clave debe incluirse en el encabezado de todas las solicitudes HTTP que realices a la API.
Encabezados de Autenticación
Incluye tu API Key en el encabezado de cada solicitud:
X-API-Key: tu_api_key_aqui
Ambientes
T1pagos proporciona dos ambientes para el desarrollo e implementación de tu integración:
| Ambiente | URL Base | Descripción |
|---|---|---|
| Sandbox |
https://api.sandbox.t1pagos.com/v2
|
Ambiente de pruebas para desarrollo e integración. Utiliza tarjetas de prueba y no realiza cargos reales. |
| Producción |
https://api.t1pagos.com/v2
|
Ambiente de producción para transacciones reales. |
Cargos con Tarjeta
Objetivo
Aceptar pagos con tarjeta con T1pagos es un proceso de 3 pasos con acciones del lado del cliente (front-end) y del servidor (back-end):
- Device fingerprint - En tu sitio web, que está siendo ejecutado en el navegador del cliente, se inserta un archivo de javascript que envía a la herramienta de prevención de fraude la información del dispositivo del cliente y este le regresa al navegador un identificador único del dispositivo llamado device_fingerprint.
- Tokenización - Cuando tu cliente da clic en Pagar, tu sitio deberá enviar a T1pagos la información de la tarjeta de tu cliente y este le regresará un token único de la tarjeta. Después tu sitio deberá enviar a tu servidor el token, device_fingerprint y todos los datos del pedido.
- Cargo - Tu servidor deberá hacer un request al API de T1pagos para crear un cargo y complementar el pago.
La tokenización asegura que la información sensible de la tarjeta nunca toque tu servidor, lo que te permite minimizar el alcance de una certificación PCI Compliance.
Proceso de Cargo a Tarjeta
- Front end Comercio, a través de un Javascript, envía datos del navegador a Herramienta de Prevención de Fraude (opcional)
- Herramienta de Prevención de Fraude envía Device fingerprint generado
- Front end Comercio envía datos de tarjeta a T1pagos
- T1pagos regresa un token
- Front end Comercio envía datos de pedido a Back end comercio
- Back end de Comercio solicita creación de cargo enviando datos del pedido a T1pagos
- T1pagos evalúa y procesa la transacción al switch correspondiente y envía respuesta final a Back end Comercio
Tokenización
El envío de datos de la tarjeta se realizará haciendo una
petición al método POST /tarjeta.
Request:
{
"nombre": "NOMBRE DEL TITULAR",
"pan": "4242424242424242",
"expiracion_mes": "03",
"expiracion_anio": "27",
"cvv2": "123",
"default": true
}
Response:
{
"status": "success",
"data": {
"tarjeta": {
"cliente_id": "ba3e968d-95d0-4a4d-928b-808a58ffbb55",
"default": true,
"nombre": "NOMBRE DEL TITULAR",
"iin": "424242",
"terminacion": "4242",
"pan": "424242******4242",
"marca": "visa",
"expiracion_mes": "03",
"expiracion_anio": "27",
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3",
"actualizacion": "2025-03-25T15:52:11-05:00",
"creacion": "2025-03-25T15:52:11-05:00"
}
},
"http_code": 200,
"datetime": "2025-03-25T15:52:11-05:00",
"timestamp": 1711400531
}
Crear un Cargo
Para generar un cargo, tu servidor debe hacer una petición al
API de T1pagos usando el método POST /cargo.
Request:
{
"monto": "10",
"descripcion": "Cargo de prueba",
"pedido": {
"device_fingerprint": "5834125431628311477"
},
"metodo_pago": "tarjeta",
"tarjeta": {
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3"
}
}
Response:
{
"status": "success",
"data": {
"cargo": {
"id": "ce6fa69d-a2ab-471a-b2a9-9ed18f3241b7",
"monto": "200.0000",
"tipo": "cargo",
"orden_id": 0,
"cliente_id": "ba3e968d-95d0-4a4d-928b-808a58ffbb55",
"estatus": "completada",
"codigo": "approved",
"descripcion": "La transacción ha sido aprobada",
"prueba": true,
"tarjeta": {
"creacion": "2025-03-25T15:56:45-05:00",
"nombre": "NOMBRE DE CLIENTE",
"expiracion_mes": "03"
"expiracion_anio": "27"
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3",
"iin": "424242"
"marca": "visa",
"terminacion": "4242"
}
}
},
"http_code": 200,
"datetime": "2025-03-25T15:56:45-05:00",
"timestamp": 1711400805
}
Campos Requeridos
| Campo | Descripción |
|---|---|
monto |
Monto a cobrar. Debe ser un número entre 1 y 999999999999999. |
descripcion |
Descripción breve del cargo. |
metodo_pago |
Método de pago, debe ser 'tarjeta'. |
tarjeta.token |
Token de la tarjeta obtenido en el proceso de tokenización. |
pedido.device_fingerprint |
Identificador único del dispositivo generado por la herramienta de prevención de fraude. |
Campos Opcionales
| Campo | Descripción |
|---|---|
orden_id |
ID de la orden en tu sistema. |
pedido.id_externo |
ID externo del pedido. |
pedido.total_articulos |
Número total de artículos en el pedido. |
pedido.monto_articulos |
Monto total de los artículos. |
pedido.total_monto |
Monto total del pedido. |
pedido.creacion |
Fecha de creación del pedido. |
pedido.articulos |
Array de artículos en el pedido. |
cliente |
Información del cliente. |
PlanPagos |
Detalles sobre el plan de pagos. |
Gestionar Clientes y Tarjetas
T1pagos permite guardar tarjetas para futuros cargos, lo que mejora la experiencia del usuario al no tener que ingresar los datos de su tarjeta en cada compra.
Crear Cliente
Antes de guardar una tarjeta, es necesario crear un cliente en el sistema.
Request:
{
"nombre": "Juan",
"apellido_paterno": "Pérez",
"apellido_materno": "García",
"email": "juan.perez@ejemplo.com",
"telefono": {
"tipo": "celular",
"codigo_pais": "+52",
"codigo_area": "55",
"numero": "12345678"
}
}
Response:
{
"status": "success",
"data": {
"cliente": {
"id": "ba3e968d-95d0-4a4d-928b-808a58ffbb55",
"nombre": "Juan",
"apellido_paterno": "Pérez",
"apellido_materno": "García",
"email": "juan.perez@ejemplo.com",
"estado": "activo",
"telefono": {
"tipo": "celular",
"codigo_pais": "+52",
"codigo_area": "55",
"numero": "12345678"
},
"creacion": "2025-03-25T16:00:10-05:00",
"actualizacion": "2025-03-25T16:00:10-05:00"
}
},
"http_code": 200,
"datetime": "2025-03-25T16:00:10-05:00",
"timestamp": 1711401010
}
Guardar Tarjeta de Cliente
Una vez que tienes un cliente creado, puedes guardar sus tarjetas para futuros cargos.
Request:
{
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3",
"default": true
}
Response:
{
"status": "success",
"data": {
"tarjeta": {
"cliente_id": "ba3e968d-95d0-4a4d-928b-808a58ffbb55",
"default": true,
"nombre": "NOMBRE DEL TITULAR",
"iin": "424242",
"terminacion": "4242",
"pan": "424242******4242",
"marca": "visa",
"expiracion_mes": "03",
"expiracion_anio": "27",
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3",
"actualizacion": "2025-03-25T16:02:30-05:00",
"creacion": "2025-03-25T16:02:30-05:00"
}
},
"http_code": 200,
"datetime": "2025-03-25T16:02:30-05:00",
"timestamp": 1711401150
}
Listar Tarjetas de un Cliente
Puedes obtener todas las tarjetas guardadas de un cliente.
Response:
{
"status": "success",
"data": {
"tarjetas": [
{
"cliente_id": "ba3e968d-95d0-4a4d-928b-808a58ffbb55",
"default": true,
"nombre": "NOMBRE DE TITULAR",
"iin": "424242",
"terminacion": "4242",
"pan": "424242******4242",
"marca": "visa",
"expiracion_mes": "03",
"expiracion_anio": "27",
"token": "5c4a7103-d35f-4136-98be-6210d57b0ca3",
"actualizacion": "2025-03-25T16:02:30-05:00",
"creacion": "2025-03-25T16:02:30-05:00"
}
]
},
"http_code": 200,
"datetime": "2025-03-25T16:03:45-05:00",
"timestamp": 1711401225
}
Ejemplos de Integración
A continuación se presentan ejemplos de integración con la API de T1pagos en diferentes lenguajes de programación.
Ejemplo de integración con Java
Este ejemplo muestra cómo realizar un cargo a tarjeta utilizando Java y la biblioteca OkHttp:
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import okhttp3.*;
import java.io.IOException;
public class T1PagosExample {
private static final String API_URL = "https://api.sandbox.t1pagos.com/v2";
private static final String API_KEY = "tu_api_key_aqui";
public static void main(String[] args) {
try {
// 1. Tokenizar tarjeta
String cardToken = tokenizeCard(
"NOMBRE DEL TITULAR",
"4242424242424242",
"03",
"27",
"123"
);
// 2. Crear cargo con el token
createCharge(cardToken, "10", "Cargo de prueba", "5834125431628311477");
} catch (IOException e) {
e.printStackTrace();
}
}
private static String tokenizeCard(String name, String cardNumber, String expiryMonth,
String expiryYear, String cvv) throws IOException {
OkHttpClient client = new OkHttpClient();
// Crear objeto JSON para la solicitud
JsonObject cardData = new JsonObject();
cardData.addProperty("nombre", name);
cardData.addProperty("pan", cardNumber);
cardData.addProperty("expiracion_mes", expiryMonth);
cardData.addProperty("expiracion_anio", expiryYear);
cardData.addProperty("cvv2", cvv);
cardData.addProperty("default", true);
// Configurar la solicitud
RequestBody body = RequestBody.create(
MediaType.parse("application/json"), new Gson().toJson(cardData));
Request request = new Request.Builder()
.url(API_URL + "/tarjeta")
.addHeader("X-API-Key", API_KEY)
.post(body)
.build();
// Ejecutar la solicitud
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Error inesperado: " + response.code());
}
// Procesar la respuesta
String responseBody = response.body().string();
JsonObject jsonResponse = new Gson().fromJson(responseBody, JsonObject.class);
// Extraer el token de la tarjeta
return jsonResponse.getAsJsonObject("data")
.getAsJsonObject("tarjeta")
.get("token").getAsString();
}
}
private static void createCharge(String cardToken, String amount, String description,
String deviceFingerprint) throws IOException {
OkHttpClient client = new OkHttpClient();
// Crear objeto JSON para la solicitud
JsonObject chargeData = new JsonObject();
chargeData.addProperty("monto", amount);
chargeData.addProperty("descripcion", description);
chargeData.addProperty("metodo_pago", "tarjeta");
// Añadir información del pedido
JsonObject orderInfo = new JsonObject();
orderInfo.addProperty("device_fingerprint", deviceFingerprint);
chargeData.add("pedido", orderInfo);
// Añadir información de la tarjeta
JsonObject cardInfo = new JsonObject();
cardInfo.addProperty("token", cardToken);
chargeData.add("tarjeta", cardInfo);
// Configurar la solicitud
RequestBody body = RequestBody.create(
MediaType.parse("application/json"), new Gson().toJson(chargeData));
Request request = new Request.Builder()
.url(API_URL + "/cargo")
.addHeader("X-API-Key", API_KEY)
.post(body)
.build();
// Ejecutar la solicitud
try (Response response = client.newCall(request).execute()) {
String responseBody = response.body().string();
System.out.println("Respuesta del cargo: " + responseBody);
// Procesar la respuesta según tus necesidades
JsonObject jsonResponse = new Gson().fromJson(responseBody, JsonObject.class);
String status = jsonResponse.get("status").getAsString();
if ("success".equals(status)) {
JsonObject chargeInfo = jsonResponse.getAsJsonObject("data")
.getAsJsonObject("cargo");
String chargeStatus = chargeInfo.get("estatus").getAsString();
if ("completada".equals(chargeStatus)) {
System.out.println("¡Cargo completado con éxito!");
} else {
System.out.println("El cargo fue procesado pero no completado: " +
chargeInfo.get("descripcion").getAsString());
}
} else {
System.out.println("Error al procesar el cargo: " +
jsonResponse.getAsJsonObject("error").get("message").getAsString());
}
}
}
}
Ejemplo de integración con Go
Este ejemplo muestra cómo realizar un cargo a tarjeta utilizando Go:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
const (
apiURL = "https://api.sandbox.t1pagos.com/v2"
apiKey = "tu_api_key_aqui"
)
// Estructuras para la tokenización de tarjeta
type CardTokenRequest struct {
Nombre string `json:"nombre"`
Pan string `json:"pan"`
ExpiracionMes string `json:"expiracion_mes"`
ExpiracionAnio string `json:"expiracion_anio"`
Cvv2 string `json:"cvv2"`
Default bool `json:"default"`
}
type CardTokenResponse struct {
Status string `json:"status"`
Data struct {
Tarjeta struct {
Token string `json:"token"`
} `json:"tarjeta"`
} `json:"data"`
}
// Estructuras para la creación de cargo
type ChargeRequest struct {
Monto string `json:"monto"`
Descripcion string `json:"descripcion"`
Pedido struct {
DeviceFingerprint string `json:"device_fingerprint"`
} `json:"pedido"`
MetodoPago string `json:"metodo_pago"`
Tarjeta struct {
Token string `json:"token"`
} `json:"tarjeta"`
}
type ChargeResponse struct {
Status string `json:"status"`
Data struct {
Cargo struct {
ID string `json:"id"`
Estatus string `json:"estatus"`
Codigo string `json:"codigo"`
Descripcion string `json:"descripcion"`
} `json:"cargo"`
} `json:"data"`
}
func main() {
// 1. Tokenizar tarjeta
cardToken, err := tokenizeCard("NOMBRE DEL TITULAR", "4242424242424242", "03", "27", "123")
if err != nil {
fmt.Printf("Error al tokenizar tarjeta: %v\n", err)
return
}
fmt.Printf("Tarjeta tokenizada con éxito. Token: %s\n", cardToken)
// 2. Crear cargo con el token
err = createCharge(cardToken, "10", "Cargo de prueba", "5834125431628311477")
if err != nil {
fmt.Printf("Error al crear cargo: %v\n", err)
return
}
}
func tokenizeCard(name, cardNumber, expiryMonth, expiryYear, cvv string) (string, error) {
// Preparar datos de la solicitud
cardData := CardTokenRequest{
Nombre: name,
Pan: cardNumber,
ExpiracionMes: expiryMonth,
ExpiracionAnio: expiryYear,
Cvv2: cvv,
Default: true,
}
// Convertir a JSON
jsonData, err := json.Marshal(cardData)
if err != nil {
return "", err
}
// Crear solicitud HTTP
req, err := http.NewRequest("POST", apiURL+"/tarjeta", bytes.NewBuffer(jsonData))
if err != nil {
return "", err
}
// Añadir encabezados
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", apiKey)
// Enviar solicitud
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
// Leer respuesta
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
// Verificar código de estado
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("error en la solicitud: %s", body)
}
// Procesar respuesta
var tokenResponse CardTokenResponse
err = json.Unmarshal(body, &tokenResponse)
if err != nil {
return "", err
}
// Verificar estado de la respuesta
if tokenResponse.Status != "success" {
return "", fmt.Errorf("error al tokenizar tarjeta: %s", body)
}
return tokenResponse.Data.Tarjeta.Token, nil
}
func createCharge(cardToken, amount, description, deviceFingerprint string) error {
// Preparar datos de la solicitud
chargeData := ChargeRequest{
Monto: amount,
Descripcion: description,
MetodoPago: "tarjeta",
}
chargeData.Pedido.DeviceFingerprint = deviceFingerprint
chargeData.Tarjeta.Token = cardToken
// Convertir a JSON
jsonData, err := json.Marshal(chargeData)
if err != nil {
return err
}
// Crear solicitud HTTP
req, err := http.NewRequest("POST", apiURL+"/cargo", bytes.NewBuffer(jsonData))
if err != nil {
return err
}
// Añadir encabezados
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", apiKey)
// Enviar solicitud
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
// Leer respuesta
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
// Procesar respuesta
var chargeResponse ChargeResponse
err = json.Unmarshal(body, &chargeResponse)
if err != nil {
return err
}
// Verificar estado de la respuesta
if chargeResponse.Status != "success" {
return fmt.Errorf("error al crear cargo: %s", body)
}
// Verificar estado del cargo
fmt.Printf("Cargo procesado. Estado: %s\n", chargeResponse.Data.Cargo.Estatus)
if chargeResponse.Data.Cargo.Estatus == "completada" {
fmt.Println("¡Cargo completado con éxito!")
} else {
fmt.Printf("El cargo no se completó: %s\n", chargeResponse.Data.Cargo.Descripcion)
}
return nil
}
Ejemplo de integración con Python
Este ejemplo muestra cómo realizar un cargo a tarjeta utilizando Python y la biblioteca requests:
import requests
import json
# Configuración
API_URL = "https://api.sandbox.t1pagos.com/v2"
API_KEY = "tu_api_key_aqui"
def tokenize_card(name, card_number, expiry_month, expiry_year, cvv):
"""
Tokeniza una tarjeta y devuelve el token generado.
"""
# Preparar datos de la solicitud
card_data = {
"nombre": name,
"pan": card_number,
"expiracion_mes": expiry_month,
"expiracion_anio": expiry_year,
"cvv2": cvv,
"default": True
}
# Configurar encabezados
headers = {
"Content-Type": "application/json",
"X-API-Key": API_KEY
}
# Realizar la solicitud
response = requests.post(
f"{API_URL}/tarjeta",
headers=headers,
json=card_data
)
# Verificar respuesta
if response.status_code != 200:
raise Exception(f"Error al tokenizar tarjeta: {response.text}")
# Procesar respuesta
response_data = response.json()
if response_data["status"] != "success":
raise Exception(f"Error en la respuesta: {response_data}")
# Extraer token
return response_data["data"]["tarjeta"]["token"]
def create_charge(card_token, amount, description, device_fingerprint):
"""
Crea un cargo utilizando un token de tarjeta.
"""
# Preparar datos de la solicitud
charge_data = {
"monto": amount,
"descripcion": description,
"pedido": {
"device_fingerprint": device_fingerprint
},
"metodo_pago": "tarjeta",
"tarjeta": {
"token": card_token
}
}
# Configurar encabezados
headers = {
"Content-Type": "application/json",
"X-API-Key": API_KEY
}
# Realizar la solicitud
response = requests.post(
f"{API_URL}/cargo",
headers=headers,
json=charge_data
)
# Procesar respuesta
response_data = response.json()
print(f"Respuesta del cargo: {json.dumps(response_data, indent=2)}")
# Verificar estado de la respuesta
if response_data["status"] != "success":
print(f"Error al procesar el cargo: {response_data.get('error', {}).get('message', 'Error desconocido')}")
return False
# Verificar estado del cargo
charge_status = response_data["data"]["cargo"]["estatus"]
if charge_status == "completada":
print("¡Cargo completado con éxito!")
return True
else:
print(f"El cargo no se completó: {response_data['data']['cargo']['descripcion']}")
return False
def main():
try:
# 1. Tokenizar tarjeta
print("Tokenizando tarjeta...")
card_token = tokenize_card(
"NOMBRE DEL TITULAR",
"4242424242424242",
"03",
"27",
"123"
)
print(f"Tarjeta tokenizada con éxito. Token: {card_token}")
# 2. Crear cargo con el token
print("Creando cargo...")
success = create_charge(
card_token,
"10",
"Cargo de prueba",
"5834125431628311477"
)
if success:
print("Proceso de cargo completado correctamente.")
else:
print("El proceso de cargo no se completó correctamente.")
except Exception as e:
print(f"Error durante el proceso: {e}")
if __name__ == "__main__":
main()
Webhooks
En el sistema T1pagos algunos procesos son ejecutados de manera automática, como es el caso de los cobros de las suscripciones. Para poder mantener sincronizados los sistemas, podrá configurarse un endpoint para recibir notificaciones de algunos eventos como nuevos cargos, renovación de suscripciones y otros.
El registro se realiza desde el sistema Admin, podrá incluirse más de un endpoint y canalizar las notificaciones a cada nueva ruta.
Eventos Disponibles
| Método | Tipo de Evento | Id | Descripción |
|---|---|---|---|
| Cargo | Exitoso |
cargo.exitoso
|
Indicará cuando fue realizado un cargo exitoso |
| Cargo | Fallido |
cargo.fallido
|
Indicará cuando fue realizado un cargo fallido o rechazado |
| Cargo | Cancelado |
cargo.cancelado
|
Indicará cuando un cargo haya sido cancelado |
| Cargo | Reembolsado |
cargo.reembolsado
|
Indicará cuando un cargo haya sido reembolsado |
| Suscripción | Creada |
suscripcion.creada
|
Indicará la creación de una nueva suscripción, el evento no notificará el cobro de una suscripción |
| Suscripción | Actualizada |
suscripcion.actualizada
|
Se ejecuta cuando se realiza una actualización a una suscripción. |
| Suscripción | Cancelada | suscripcion.cancelada |
Se ejecuta cuando se ejecuta el comando "cancelar" de una suscripción. |
| Suscripción | Pago.exitoso | suscripcion.pago.exitoso |
Se ejecuta cuando se realiza el cobro de una suscripción de manera exitosa |
| Suscripción | Pago.fallido | suscripcion.pago.fallido |
Se ejecuta cuando se realiza el cobro de una suscripción de manera fallida |
Seguridad en Recepción de Eventos
En la configuración de recepción de eventos podrá habilitarse un usuario y contraseña que deberá de validar el sistema al recibir cada evento. El esquema, conocido como autenticación básica, permite añadir una capa de seguridad adicional.
Consulta de Eventos
Si el sistema que recibe las notificaciones presenta algún
contratiempo, o se busca confirmar las operaciones realizadas,
podrá hacerse uso del método GET /notificacion para
consultar un listado de eventos que han sido creados y enviados.
Response:
{
"status": "success",
"http_code": 200,
"datetime": "2025-03-25T16:30:35-05:00",
"timestamp": 1711402835,
"data": {
"eventos": {
"data": [
{
"id": "string",
"creacion": "2025-03-25T16:30:35-05:00",
"tipo": "evento",
"tipo_evento": "cargo.exitoso",
"prueba": true,
"estatus": "entregado",
"fecha_entrega": "2025-03-25T16:30:35-05:00",
"codigo_http": 200,
"mensaje_http": "OK",
"total_intentos": 1,
"data": {
"cargo": {
"id": "string",
"monto": 100,
"autorizacion_id": "string",
"tipo": "cargo",
"fecha": "2025-03-25T16:30:35-05:00",
"orden_id": "string",
"cliente_id": "string",
"estatus": "completada",
"codigo": "string",
"descripcion": "string",
"tarjeta": {
"token": "string",
"pan": "string",
"terminacion": 0,
"nombre": "string",
"expiracion_mes": 0,
"expiracion_anio": 0,
"iin": 0,
"marca": "visa",
"cliente_id": "string",
"default": true
}
}
}
}
],
"registros_por_pagina": 5,
"pagina_actual": 1,
"desde": 1,
"hasta": 1,
"total": 1,
"total_pagina": 1,
"ultima_pagina": 1
}
}
}
Respuestas y Errores
El modelo de respuesta del API agrupa los errores en categorías,
adoptando el modelo de respuestas HTTP como códigos de cada grupo.
Se adoptan sólo una serie de códigos HTTP para reflejar el
resultado de la operación, además, las respuestas incluyen
descripción de los errores y en algunos casos el detalle del
origen del error en el campo data.
Las respuestas que sean ejecutadas de manera correcta, regresarán
un código HTTP 200.
Códigos de Error HTTP
| Código | Tipo | Campo Data | Descripción |
|---|---|---|---|
400 |
Parámetros | Presente | La solicitud contiene sintaxis errónea o un parámetro incorrecto, deberá corregirse antes de realizar una nueva petición |
401 |
Autenticación | N/A | El método de autenticación proporcionado no es válido |
403 |
Autenticación | N/A | El método de autenticación no cuenta con permisos suficientes |
404 |
General | N/A | No se ha encontrado el recurso solicitado |
405 |
Sistema | N/A | Se ha hecho una solicitud a un método no soportado |
409 |
Parámetros | N/A | Se ha realizado una solicitud que entra en conflicto con un recurso existente |
412 |
Precondición | N/A | Una o más condiciones no se han cumplido por lo que no se puede procesar la petición |
429 |
Sistema | N/A | Se han realizado demasiadas peticiones |
500 |
Sistema | N/A | Ha ocurrido un error en el servidor |
Formato de Respuestas
En general, todas las respuestas del API incluyen un wrapper en
las respuestas, el concepto detrás del wrapper es permitir una
rápida interpretación de la ejecución de la petición realizada,
más no del resultado, el resultado estará contenido en el campo
data, algunas peticiones también podrán incluir un
objeto error en el cuerpo del mensaje.
Ejemplo de Respuesta Exitosa:
{
"status": "success",
"data": {},
"http_code": 200,
"datetime": "2025-03-25T16:35:21-05:00",
"timestamp": 1711403121
}
Ejemplo de Error:
{
"status": "error",
"error": {
"code": 429,
"type": "Sistema",
"message": "Ha excedido la tasa máxima de peticiones"
},
"http_code": 429,
"datetime": "2025-03-25T16:36:49-05:00",
"timestamp": 1711403209
}
Ejemplo de Error con Detalle:
{
"status": "fail",
"error": {
"code": 400,
"type": "Parámetros",
"message": "Error en parámetros de entrada."
},
"http_code": 400,
"datetime": "2025-03-25T16:38:33-05:00",
"timestamp": 1711403313,
"data": {
"errors": {
"email": [
"El campo email no corresponde con una dirección de e-mail válida."
]
}
}
}
Valores de Status
-
success- Indicará que la petición fue al API fue procesada correctamente. El detalle de la operación solicitada se encontrará en el campodata. -
fail- Indicará que hubo un error con los valores enviados en la petición o no se cumplió con una precondición, por ejemplo no se incluyó un campo obligatorio. -
error- Indicará que ha ocurrido un error al procesar la petición, por ejemplo, que ha sucedido una excepción al procesar la operación.