API REST v1

Base: https://viasono-api.extranet.business/v1 · Respuestas en JSON · Multi-tenant por subdominio

Autenticación

Todas las peticiones requieren la cabecera X-SYNCS-API-TOKEN con un token vigente. Puede verificarse en GET /v1/acl:

curl -H "X-SYNCS-API-TOKEN: TU_TOKEN" https://viasono-api.extranet.business/v1/acl

Sin token → 401 UNAUTHORIZED; token inválido o expirado → 401 TOKEN_INVALID.

Formato de respuesta

{
    "status"  : "success" | "error",
    "code"    : "200",
    "message" : "LIST | GET | ADD | UPDATE | DELETED | ...",
    "data"    : { ... } | null,
    "meta"    : { "page": 1, "limit": 20, "count": 20, "total": 134 }   // solo en listados
}

Parámetros comunes

Parám.Aplica aDescripciónEjemplo
iGET, PUT, DELETEId del registro (equivale a /recurso/{id})?i=ABC123
lGETLímite de resultados (1–1000, por defecto 100)?l=20
pGETPágina (desde 1)?p=2
qGETBúsqueda por texto en los campos de búsqueda del recurso?q=martillo
sGETCampo de ordenamiento (lista blanca por recurso)?s=entered
oGETSentido: asc (defecto) o desc?o=desc
fGETFiltros exactos en JSON {"columna":"valor"}?f={"cat_id":"X"}
dPOST, PUTDatos en JSON. También se acepta el body crudo con Content-Type: application/json-d '{"name":"..."}'

Recursos

Terceros · /v1/terceros · tabla cus · v1/api/customer.php

Clientes, proveedores, colaboradores, etc. Solo los diferencia la categoría (cat_id).

MétodoRutaAcción
GET/v1/terceros?l=20Lista paginada
GET/v1/terceros/{id}Un registro
POST/v1/tercerosAgrega (body JSON)
PUT/v1/terceros/{id}Actualiza (body JSON)
DEL/v1/terceros/{id}Borrado lógico (archived = 1)

Requeridos (POST): doi_id doi name
Claves (defecto ---): cus_cha_id sll_id cus_grp_id cus_cla_id cus_sec_id cat_id doi_id doi
Campos grabables: cou_id geo_id name description name_commercial registered sic_id cus_cnt_id cus_cnt_name firstname lastname middlename status condition type activity phone phone_home phone_mobile phone_office phone_fax email state province city zone address billing_address shipping_address importer exporter legal_representatives employees mar_id edu_id annual_revenue agent_detraction agent_retention agent_collection electronic_invoicing electronic_payroll system_accounting system_invoicing user code sync prd_prc_id itm_prc_id rating score
Busca (?q=) en: name name_commercial doi email

Productos · /v1/productos · tabla prd · v1/api/product.php

Catálogo de productos: dimensiones, códigos de barra, precios base, unidades de compra/venta.

MétodoRutaAcción
GET/v1/productos?l=20Lista paginada
GET/v1/productos/{id}Un registro
POST/v1/productosAgrega (body JSON)
PUT/v1/productos/{id}Actualiza (body JSON)
DEL/v1/productos/{id}Borrado lógico (archived = 1)

Requeridos (POST): name
Claves (defecto ---): cou_id cha_id sll_id cat_id prd_lin_id prd_seg_id prd_fam_id prd_cla_id prd_cod_id prd_man_id prd_bra_id prd_bat_id prd_rot_id
Campos grabables: name description description_short specs composition contraindications warnings datasheet visible visible_soldout featured kit typ_id model serial bar_id bar package_width package_height package_depth package_volume package_weight product_width product_height product_depth product_volume product_weight recurrent fre_id frequency_date sync thumbnail url meta_keywords meta_description tag slug reviews rating score loyalty to_purchase purchase_cur purchase_unit purchase_min purchase_max to_sell_online to_sell sell_cur sell_unit sell_min sell_max to_sync
Busca (?q=) en: name description model bar slug

Listas de Precios · /v1/listas-precios · tabla prd_prc · v1/api/price-list.php

Cabeceras de listas de precios, con su moneda (cur_id) y factor.

MétodoRutaAcción
GET/v1/listas-precios?l=20Lista paginada
GET/v1/listas-precios/{id}Un registro
POST/v1/listas-preciosAgrega (body JSON)
PUT/v1/listas-precios/{id}Actualiza (body JSON)
DEL/v1/listas-precios/{id}Borrado lógico (archived = 1)

Requeridos (POST): name cur_id
Campos grabables: name description cur_id factor
Busca (?q=) en: name description

Precios · /v1/precios · tabla prd_prc_ · v1/api/prices.php

Detalle de precios por producto/SKU dentro de una lista de precios (prd_prc_id).

MétodoRutaAcción
GET/v1/precios?l=20Lista paginada
GET/v1/precios/{id}Un registro
POST/v1/preciosAgrega (body JSON)
PUT/v1/precios/{id}Actualiza (body JSON)
DEL/v1/precios/{id}Borrado lógico (archived = 1)

Requeridos (POST): prd_prc_id prd_id price
Claves (defecto ---): prd_prc_id cur_id prd_id prd_sku_id
Campos grabables: name description factor fixed_since fixed_until price_base price price_unit price_tax price_discount price_storage price_shipping price_setup price_replacement price_maintenance price_purchase price_books price_fixed price_sell
Busca (?q=) en: name description

Almacenes · /v1/almacenes · tabla wrh · v1/api/warehouse.php

Almacenes o bodegas: ubicación, responsable y datos de contacto.

MétodoRutaAcción
GET/v1/almacenes?l=20Lista paginada
GET/v1/almacenes/{id}Un registro
POST/v1/almacenesAgrega (body JSON)
PUT/v1/almacenes/{id}Actualiza (body JSON)
DEL/v1/almacenes/{id}Borrado lógico (archived = 1)

Requeridos (POST): name
Claves (defecto ---): com_suc_id cou_id pos_id
Campos grabables: name description responsible responsible_phone responsible_email geo_id state province city zone_typ zone street_typ street number_typ number interior_typ interior zip latitude longitude altitude place_id ip_public ip_local external external_responsible external_responsible_phone external_responsible_email
Busca (?q=) en: name description city

Stock · /v1/stock · tabla prd_sto · v1/api/stock.php

Existencias por almacén, ubicación, lote y SKU: totales, disponibles, reservados y en tránsito.

MétodoRutaAcción
GET/v1/stock?l=20Lista paginada
GET/v1/stock/{id}Un registro
POST/v1/stockAgrega (body JSON)
PUT/v1/stock/{id}Actualiza (body JSON)
DEL/v1/stock/{id}Borrado lógico (archived = 1)

Requeridos (POST): wrh_id prd_id uni_id
Claves (defecto ---): com_suc_id cou_id geo_id wrh_id wrh_loc_id prd_bat_id prd_id prd_sku_id lpn_id sts_id
Campos grabables: name description uni_id factor stock_min stock_max stock_total stock_transit stock_available stock_reserved price_cost price_sell price_storage
Busca (?q=) en: name description

Ejemplos

Listar 20 productos

curl -H "X-SYNCS-API-TOKEN: TU_TOKEN" "https://viasono-api.extranet.business/v1/productos?l=20"

Buscar terceros por texto, ordenados por fecha

curl -H "X-SYNCS-API-TOKEN: TU_TOKEN" "https://viasono-api.extranet.business/v1/terceros?q=acme&s=entered&o=desc&l=10"

Crear un producto

curl -X POST "https://viasono-api.extranet.business/v1/productos" \
     -H "X-SYNCS-API-TOKEN: TU_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"name":"Martillo 16oz","cat_id":"herramientas","bar":"7750000000001","sell_cur":"PEN"}'

Actualizar el stock disponible

curl -X PUT "https://viasono-api.extranet.business/v1/stock/ID_DEL_REGISTRO" \
     -H "X-SYNCS-API-TOKEN: TU_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"stock_available":42}'

Borrar (lógico) un almacén

curl -X DELETE "https://viasono-api.extranet.business/v1/almacenes/ID_DEL_REGISTRO" \
     -H "X-SYNCS-API-TOKEN: TU_TOKEN"

Códigos de error

CódigoMensajeCuándo
400NO_DATA_SENT / NO_DATA_ID / FIELD_REQUIRED / FILTER_INVALIDPetición incompleta o con campos fuera de la lista blanca
401UNAUTHORIZED / TOKEN_INVALIDFalta el token o no es válido
403TENANT_UNKNOWNEl subdominio no corresponde a ningún tenant
404NO_DATA / NOT_FOUNDSin resultados o ruta inexistente
405METHOD_NOT_ALLOWEDMétodo HTTP no soportado
409DUPLICATEViola una clave única (ej. mismo nombre o código de barras)
500/503DB_ERROR / SERVICE_UNAVAILABLEError interno o base de datos caída