Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/sistemashm24/pagos_hotspot_api/llms.txt

Use this file to discover all available pages before exploring further.

The product catalog endpoints return the WiFi access plans available for purchase through the captive portal. Each product maps directly to a MikroTik Hotspot profile, and carries all the information needed to render a pricing card in the frontend — including price, description, an optional image, and configurable detail bullets. Products are filtered by company and router, so only plans assigned to the authenticated router are returned. Results are ordered first by orden_visual (ascending), then by destacado (featured products first), giving administrators full control over the display order.

Endpoints

MethodPathDescription
GET/api/v1/catalogo_perfiles_ventaList all active products for the router
GET/api/v1/catalogo_perfiles_venta/{producto_id}Get a single product by ID

Authentication

X-API-Key
string
required
Router API Key in the format jwt_<token>. Identifies the company and router used to filter the product list.

GET /api/v1/catalogo_perfiles_venta

Returns an array of all active (activo = true) products assigned to the authenticated router.

Response

Returns a JSON array of ProductoVentaResponse objects. Returns an empty array [] if no active products exist for this router.
id
integer
Unique internal product ID. Use this value as producto_id when submitting a payment.
perfil_mikrotik_id
string
Internal identifier of the MikroTik Hotspot profile linked to this product.
perfil_mikrotik_nombre
string
Display name of the MikroTik Hotspot profile (e.g., "5Mbps-1hora"). This is the profile that will be applied when the hotspot user is created.
nombre_venta
string
Commercial name of the product as shown to the end user (e.g., "1 Hora de Internet").
descripcion
string | null
Optional short description of the product. May be null if not configured.
imagen_url
string | null
Optional URL to a product image. May be null if no image has been uploaded.
precio
float
Price of the product in the configured currency. This is the exact amount that must be submitted to the payment endpoints.
moneda
string
ISO 4217 currency code (e.g., "MXN", "USD").
detalles
array of objects
A flexible JSON array of feature/detail bullets for the product. Each element is an object with arbitrary string keys and values. Structure varies by configuration — a common format is [{"icono": "⚡", "valor": "5 Mbps"}]. May be an empty array [].
destacado
boolean
Whether this product is marked as featured. Featured products appear before non-featured products within the same visual-order tier.
creado_en
string
ISO 8601 datetime string of when the product was created (e.g., "2024-01-15T10:30:00").

GET /api/v1/catalogo_perfiles_venta/

Returns the details of a single active product by its ID. The product must belong to the company associated with the API Key and must be assigned to the authenticated router.

Path Parameters

producto_id
integer
required
The numeric ID of the product to retrieve. Obtain this from the list endpoint.

Response

Returns a single ProductoVentaResponse object with the same fields described above.

Error Responses

StatusMeaning
404 Not FoundProduct not found, does not belong to this company/router, or is inactive.

Examples

List all products — cURL

curl -X GET "https://api.example.com/api/v1/catalogo_perfiles_venta" \
  -H "X-API-Key: jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb3V0ZXJfaWQiOjMsImVtcHJlc2FfaWQiOjF9.SIG"

Get single product — cURL

curl -X GET "https://api.example.com/api/v1/catalogo_perfiles_venta/2" \
  -H "X-API-Key: jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb3V0ZXJfaWQiOjMsImVtcHJlc2FfaWQiOjF9.SIG"

Response 200 OK (list — 2 products)

[
  {
    "id": 1,
    "perfil_mikrotik_id": "prof_001",
    "perfil_mikrotik_nombre": "5Mbps-1hora",
    "nombre_venta": "1 Hora de Internet",
    "descripcion": "Navegación rápida por una hora completa",
    "imagen_url": "https://cdn.example.com/products/1hora.png",
    "precio": 15.00,
    "moneda": "MXN",
    "detalles": [
      { "icono": "⚡", "valor": "5 Mbps de velocidad" },
      { "icono": "⏱️", "valor": "1 hora de acceso" },
      { "icono": "📱", "valor": "Todos los dispositivos" }
    ],
    "destacado": true,
    "creado_en": "2024-01-15T10:30:00"
  },
  {
    "id": 2,
    "perfil_mikrotik_id": "prof_002",
    "perfil_mikrotik_nombre": "10Mbps-3horas",
    "nombre_venta": "3 Horas de Internet",
    "descripcion": null,
    "imagen_url": null,
    "precio": 30.00,
    "moneda": "MXN",
    "detalles": [
      { "icono": "🚀", "valor": "10 Mbps de velocidad" },
      { "icono": "⏱️", "valor": "3 horas de acceso" }
    ],
    "destacado": false,
    "creado_en": "2024-01-16T08:00:00"
  }
]

Error response 404 Not Found

{
  "detail": "Producto no encontrado o no disponible"
}
Always read precio and moneda from this endpoint and pass precio verbatim to the payment endpoints. The Mercado Pago endpoint validates that transaction_amount matches the product price to within ±0.01, and will reject the request if they differ.

Build docs developers (and LLMs) love