Base URL https://api.afer.pro Referencia aferapp.com Reservar demo

Listar productos

GET https://api.afer.pro/api/v1/products
Alias en castellano (v0, sigue operativo): POST https://api.afer.pro/consultarProductos

El catálogo de artículos con referencia, familia, coste, precios por tarifa y stock.

Listado paginado del maestro de artículos. De aquí salen los articuloId que aceptan las líneas de todos los documentos de venta y los endpoints de disponibilidad.

Los precios llegan en un array precios, una entrada por tarifa. En Afer una tarifa no es una tabla: son las columnas de precio del artículo (pvp1, pvp2…) a las que apunta cada cliente con su tarifa. Solo se devuelven las que existen realmente en tu cuenta, así que el número de entradas varía de un tenant a otro — consúltalas con consultarTarifas.

Los importes de precio y coste van sin IVA; precio_con_iva es el precio final si la tarifa tiene columna con IVA configurada, y null si no.

Autenticación

Envía tus claves API en las cabeceras X-API-KEY y X-API-SECRET. La cuenta sobre la que se opera se resuelve automáticamente a partir de la clave. Cómo obtener tus claves →

Este endpoint requiere autenticación con API key: sin credenciales responde 401.

Parámetros del cuerpo

El cuerpo de la petición es un objeto JSON con Content-Type: application/json.

busquedastring
opcional
Texto a buscar en descripción, referencia, SKU o código EAN.
familiaIdstring
opcional
Solo los artículos de esta familia. Es el familiaId de consultarFamilias.
bajo_minimobool
opcional
Con true, solo los artículos con stock igual o inferior a su mínimo.
paginaint
opcional
Página a devolver. Por defecto 1.
por_paginaint
opcional
Resultados por página. Por defecto 100, máximo 500.

Ejemplo de petición

curl -X GET 'https://api.afer.pro/api/v1/products?busqueda=cannondale&por_pagina=50' \
  -H 'X-API-KEY: afer_tk_TU_TOKEN' \
  -H 'X-API-SECRET: afer_sk_TU_SECRET'
<?php

$ch = curl_init('https://api.afer.pro/api/v1/products?busqueda=cannondale&por_pagina=50');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-API-KEY: afer_tk_TU_TOKEN',
    'X-API-SECRET: afer_sk_TU_SECRET',
]);

$respuesta = json_decode(curl_exec($ch), true);
curl_close($ch);
const respuesta = await fetch('https://api.afer.pro/api/v1/products?busqueda=cannondale&por_pagina=50', {
  method: 'GET',
  headers: {
    'X-API-KEY': 'afer_tk_TU_TOKEN',
    'X-API-SECRET': 'afer_sk_TU_SECRET'
  }
});

const resultado = await respuesta.json();

Respuesta

200 · application/json
{
    "errorCode": 200,
    "errorMsg": "",
    "data": {
        "total_articulos": 1,
        "pagina": 1,
        "por_pagina": 50,
        "num_paginas": 1,
        "articulos": [
            {
                "articuloId": "aBc123XyZ…",
                "referencia": "CDL-SYN-56",
                "sku": "SYN56",
                "codigo_ean": "8412345678901",
                "descripcion": "CANNONDALE SYNAPSE CARBON",
                "familia": {
                    "familiaId": "dEf456…",
                    "titulo": "Bicicletas"
                },
                "iva": 21,
                "coste": 1450,
                "precios": [
                    {
                        "tarifa": 1,
                        "precio": 2399,
                        "precio_con_iva": 2902.79
                    },
                    {
                        "tarifa": 2,
                        "precio": 2199,
                        "precio_con_iva": 2660.79
                    }
                ],
                "stock": 2,
                "stock_minimo": 4,
                "bajo_minimo": true
            }
        ]
    }
}
Notas
  • El articuloId se puede usar tal cual en las líneas de crearFactura, crearAlbaran y compañía.
  • Para el detalle de un artículo —incluidos los precios de alquiler por días— usa obtenerProducto.