Documentación
de la API BLYNE
Integra el ID Corporal Universal de BLYNE en tu tienda o plataforma. Recomendaciones de talla con 92% de precisión en menos de 200ms.
Inicio rápido
Obtén tu primera recomendación de talla en menos de 5 minutos. Solo necesitas tu API key y el ID del producto.
1. Obtén tu API key
Accede al Portal de Marcas → pestaña API y genera tu API key. La clave solo se muestra una vez tras la generación — guárdala en un lugar seguro.
2. Primera llamada
curl -X POST https://blynesize.com/v1/recommend \
-H "Authorization: Bearer blyne_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"measurements": {
"heightCm": 170,
"weightKg": 65,
"gender": "female"
},
"product": {
"name": "Camiseta básica",
"category": "tshirt",
"sizeChart": {
"S": { "chest": 88 },
"M": { "chest": 92 },
"L": { "chest": 96 }
}
},
"fitPreference": "regular"
}'Autenticación
BLYNE usa API keys tipo Bearer para autenticar todas las peticiones. Las keys se generan y revocan desde el Portal de Marcas → pestaña API.
Todas las API keys de BLYNE tienen el prefijo blyne_live_. Las peticiones con un formato diferente serán rechazadas con INVALID_API_KEY_FORMAT.
# Incluye la API key en el header Authorization de cada petición curl https://blynesize.com/v1/brands/me \ -H "Authorization: Bearer blyne_live_xxxxxxxxxxxx"
Errores
BLYNE usa códigos HTTP estándar. Los errores devuelven un objeto JSON con error.code y error.message.
| Código | Error | Descripción |
|---|---|---|
| 401 | MISSING_API_KEY | No se proporcionó el header Authorization con Bearer token. |
| 401 | INVALID_API_KEY_FORMAT | La API key no tiene el prefijo blyne_live_. |
| 401 | INVALID_API_KEY | API key no encontrada o revocada. |
| 403 | BRAND_SUSPENDED | La cuenta de marca está suspendida. Contacta con soporte. |
| 400 | MISSING_MEASUREMENTS | El cuerpo de la petición debe incluir el objeto measurements. |
| 400 | INVALID_HEIGHT | heightCm debe ser un número entre 100 y 250. |
| 400 | INVALID_WEIGHT | weightKg debe ser un número entre 30 y 300. |
| 400 | INVALID_GENDER | gender debe ser male, female o neutral. |
| 400 | MISSING_PRODUCT | El cuerpo debe incluir el objeto product con name, category y sizeChart. |
| 400 | INVALID_PRODUCT | product debe incluir name, category y sizeChart. |
| 400 | INVALID_FIT_PREFERENCE | fitPreference debe ser: very_tight, tight, regular, relaxed u oversized. |
| 422 | FIT_ENGINE_ERROR | No se pudo calcular la recomendación. Verifica que sizeChart tenga medidas válidas. |
| 429 | QUOTA_EXCEEDED | Se alcanzó la cuota mensual de recomendaciones. Actualiza tu plan para continuar. |
| 400 | MISSING_FIELDS | Campos obligatorios faltantes en la petición (name y category para productos). |
| 404 | PRODUCT_NOT_FOUND | El producto no existe o no pertenece a esta marca. |
| 500 | INTERNAL_ERROR | Error interno del servidor. Reinéntalo con backoff exponencial. |
Límites de tasa
Starter
10 req/s
500 req/min
Growth
100 req/s
5.000 req/min
Enterprise
Sin límite
Personalizado
Perfiles de usuario — Próximamente
La API de perfiles de usuario permitirá a las marcas crear y gestionar perfiles corporales de sus clientes de forma persistente, de modo que no sea necesario enviar las medidas en cada llamada a /v1/recommend.
POST /v1/recommend. La API de perfiles estará disponible en una próxima versión.Recomendaciones
POST /v1/recommend
https://blynesize.com/v1/recommendEl endpoint principal de BLYNE. Recibe las medidas del usuario y la ficha del producto con su tabla de tallas, y devuelve la talla recomendada con Fit Score, alternativas y un insight textual.
Objeto measurements
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
measurements.heightCm | number | Sí | Altura en centímetros. Rango: 100–250. |
measurements.weightKg | number | Sí | Peso en kilogramos. Rango: 30–300. |
measurements.gender | string | Sí | Género para el modelo de tallas. Valores: male, female, neutral. |
measurements.chestCm | number | No | Perímetro de pecho en cm. Mejora la precisión si se proporciona. |
measurements.waistCm | number | No | Perímetro de cintura en cm. |
measurements.hipsCm | number | No | Perímetro de caderas en cm. |
measurements.shouldersCm | number | No | Ancho de hombros en cm. |
measurements.inseamCm | number | No | Entrepierna en cm. Relevante para pantalones. |
Objeto product
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
product.name | string | Sí | Nombre del producto. |
product.category | string | Sí | Categoría de la prenda. Ver valores válidos abajo. |
product.sizeChart | object | Sí | Tabla de tallas con medidas reales en cm por talla. Ej: { "M": { "chest": 96, "waist": 80 } }. |
product.fabric | string | No | Tipo de tejido. Mejora el cálculo de holgura. |
product.brandInsight | string | No | Nota de la marca sobre cómo talla este producto. |
product.designEase | number | No | Holgura de diseño en cm. Default: 4. |
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
fitPreference | string | No | Preferencia de ajuste. Valores: very_tight, tight, regular, relaxed, oversized. Default: regular. |
curl -X POST https://blynesize.com/v1/recommend \
-H "Authorization: Bearer blyne_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"measurements": {
"heightCm": 170,
"weightKg": 65,
"gender": "female",
"chestCm": 90,
"waistCm": 72,
"hipsCm": 96
},
"product": {
"name": "Jean Slim Fit",
"category": "bottoms",
"sizeChart": {
"XS": { "waist": 68, "hips": 88 },
"S": { "waist": 72, "hips": 92 },
"M": { "waist": 76, "hips": 96 },
"L": { "waist": 82, "hips": 102 }
}
},
"fitPreference": "regular"
}'
# Response 200:
# {
# "recommendedSize": "M",
# "alternativeSize": "L",
# "fitScore": 91,
# "fitPreference": "regular",
# "insight": "Ajuste perfecto para tu silueta",
# "fabricNote": "Tejido estándar, sin ajuste por elasticidad",
# "washNote": null,
# "confidenceLevel": "high",
# "confidenceNote": "Medidas completas proporcionadas",
# "zones": [
# { "zone": "waist", "label": "Cintura", "fitScore": 94, "status": "perfect", "note": "Ajuste ideal" },
# { "zone": "hips", "label": "Caderas", "fitScore": 89, "status": "good", "note": "Buen ajuste" }
# ],
# "meta": { "brandId": 1, "brandSlug": "mi-marca", "quotaUsed": 42, "quotaLimit": 1000 }
# }Fit Score
El Fit Score es un porcentaje de 0–100 que indica qué tan bien encaja una talla con el cuerpo y preferencias del usuario. La respuesta incluye también un desglose por zonas corporales (zones) con su estado individual.
90–100
Perfecto
75–89
Muy bien
60–74
Aceptable
0–59
No recomendado
GET /v1/brands/me
https://blynesize.com/v1/brands/meDevuelve el perfil de la marca autenticada, incluyendo el plan, estado y consumo de cuota mensual.
curl https://blynesize.com/v1/brands/me \
-H "Authorization: Bearer blyne_live_xxxxxxxxxxxx"
# Response:
# {
# "id": 1,
# "name": "Mi Marca",
# "slug": "mi-marca",
# "plan": "growth",
# "status": "active",
# "quota": { "used": 42, "limit": 1000, "remaining": 958 },
# "hasApiKey": true
# }quota.remaining es 0, las siguientes llamadas a /v1/recommend devolverán QUOTA_EXCEEDED.POST /v1/recommend/batch — Próximamente
https://blynesize.com/v1/recommend/batchEndpoint en desarrollo. Permitirá obtener recomendaciones para múltiples usuarios o productos en una sola llamada. Disponible en el plan Growth y Enterprise.
# Próximamente disponible
/v1/recommend consume 1 unidad de cuota independientemente de si es paralela o secuencial.GET /v1/products
https://blynesize.com/v1/productsLista todos los productos del catálogo de la marca autenticada.
curl https://blynesize.com/v1/products \ -H "Authorization: Bearer blyne_live_xxxxxxxxxxxx"
POST /v1/products
https://blynesize.com/v1/productsCrea o actualiza un producto en el catálogo. Si se incluye id en el cuerpo, actualiza el producto existente (debe pertenecer a la marca autenticada).
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del producto. |
category | string | Sí | Categoría de la prenda. |
sku | string | No | SKU del producto en tu sistema. |
gender | string | No | Género objetivo. Valores: female, male, unisex. Default: unisex. |
fabricComposition | string | No | Composición del tejido. Ej: '95% algodón, 5% elástico'. |
sizeChart | object | No | Tabla de tallas con medidas reales en cm. Ej: { "M": { "chest": 96 } }. |
availableSizes | array | No | Lista de tallas disponibles. Ej: ['XS', 'S', 'M', 'L', 'XL']. |
id | number | No | ID del producto a actualizar. Si se omite, se crea un nuevo producto. |
# Crear producto
curl -X POST https://blynesize.com/v1/products \
-H "Authorization: Bearer blyne_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Jean Slim Fit Azul",
"category": "bottoms",
"sku": "JSF-001",
"gender": "female",
"fabricComposition": "98% algodón, 2% elástico",
"sizeChart": {
"XS": { "waist": 68, "hips": 88, "inseam": 76 },
"S": { "waist": 72, "hips": 92, "inseam": 77 },
"M": { "waist": 76, "hips": 96, "inseam": 78 },
"L": { "waist": 82, "hips": 102, "inseam": 79 }
},
"availableSizes": ["XS", "S", "M", "L"]
}'
# Response 201:
# { "success": true, "action": "created", "productId": 42 }analysisStatus se resetea a pending para que el motor de IA re-analice la prenda con los nuevos datos.GET /v1/products — Próximamente
https://blynesize.com/v1/products/:idEndpoint de eliminación en desarrollo. Por ahora, gestiona los productos desde el Portal de Marcas → pestaña Catálogo.
Catálogo de prendas
Sube y gestiona los productos de tu catálogo vía API. Cada producto puede incluir su tabla de tallas con medidas reales, que el motor de IA analizará para mejorar las recomendaciones.
GET /v1/products y POST /v1/products. También puedes gestionar tu catálogo visualmente desde el Portal de Marcas → pestaña Catálogo.Webhooks — Próximamente
Los webhooks permitirán recibir notificaciones en tiempo real sobre eventos como recomendaciones generadas, feedback de usuarios, y cambios en el catálogo.
GET /v1/brands/me y GET /v1/products.SDKs oficiales
JavaScript / Node.js
npm install @blyne/sdk # o yarn add @blyne/sdk
Python
pip install blyne-sdk
Shopify (1 clic)
Instala el widget BLYNE en tu tienda Shopify con una sola línea de código en tu tema Liquid.
{%- comment -%} Añade esto en tu theme.liquid antes de </body> {%- endcomment -%}
<script
src="https://cdn.blyne.app/widget/v1.js"
data-api-key="{{ shop.metafields.blyne.publishable_key }}"
data-locale="{{ request.locale.iso_code }}"
async
></script>