Verdmarket
Notificaciones

Bienvenido a Verdmarket!

Nos alegra darle la bienvenida a nuestra plataforma! Cree una cuenta para acceder al catálogo B2B completo. Para nuevos usuarios registrados en abril — tarifas de comisión especiales!

Registrarse

API de Proveedor Verdmarket

API REST para gestionar programáticamente sus productos, stock, precios y pedidos.

URL base

https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier

Endpoints disponibles

Método Endpoint Descripción
GET/productsListar productos
GET/products/{id}Detalle de producto
POST/productsCrear producto
POST/products/{id}Actualizar producto
POST/products/{id}/deleteEliminar producto
GET/products/{id}/imagesListar imágenes del producto
POST/products/{id}/imagesAgregar imágenes por URL
POST/products/{id}/images/{imageId}/deleteEliminar imagen
POST/products/{id}/images/{imageId}/primaryEstablecer imagen principal
POST/stockActualización masiva de stock
POST/pricesActualización masiva de precios
GET/ordersListar pedidos
GET/orders/{id}Detalle de pedido
POST/orders/{id}/statusActualizar estado de pedido
GET/categoriesListar categorías

Autenticación

Todas las solicitudes API requieren un token Bearer en el encabezado Authorization.

Genere su clave API desde Panel de proveedor → Perfil de tienda → Claves API.

Authorization: Bearer YOUR_API_KEY
Importante: Su clave API se muestra solo una vez al generarla. Guárdela de forma segura. Las claves se almacenan hasheadas en nuestros servidores — no podemos recuperarlas. Si la pierde, revoque la anterior y genere una nueva.

Límites de solicitudes

Por defecto: 1.000 solicitudes por hora por clave API.

La información de límites se devuelve en los encabezados de respuesta:

EncabezadoDescripción
X-RateLimit-LimitMáximo de solicitudes por hora
X-RateLimit-RemainingSolicitudes restantes en la ventana actual
X-RateLimit-ResetMarca de tiempo Unix del reinicio de la ventana
Retry-AfterSegundos hasta reintentar (solo en 429)

Formato de respuesta

Todas las respuestas son JSON. Respuestas exitosas:

{
  "success": true,
  "data": { ... }
}

Respuestas de error:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Name is required."
  }
}

Productos

GET /products

Lista sus productos con paginación y filtrado.

Parámetros de consulta

ParámetroTipoDescripción
pageintNúmero de página (por defecto: 1)
per_pageintElementos por página (máx.: 100, por defecto: 20)
statusstringFiltro: active, inactive, pending
searchstringBuscar por nombre o SKU

Respuesta de ejemplo

{
  "success": true,
  "data": {
    "products": [
      {
        "id": 42,
        "name": "Red Roses Premium",
        "sku": "ROSE-RED-001",
        "type": "flower",
        "base_price": 2.50,
        "unit": "stem",
        "stock_qty": 500,
        "stock_status": "in_stock",
        "is_active": true,
        "is_approved": true,
        "category": { "id": 3, "name": "Roses" },
        "primary_image": "/uploads/products/rose-red.jpg"
      }
    ],
    "pagination": {
      "current_page": 1,
      "total_pages": 5,
      "total_items": 94,
      "per_page": 20
    }
  }
}
GET /products/{id}

Obtener un producto con imágenes y variantes.

POST /products

Crear un producto nuevo. Los productos nuevos requieren aprobación del administrador antes de aparecer en el catálogo.

Cuerpo de la solicitud (JSON)

CampoTipoObligatorioDescripción
namestring*Nombre del producto
category_idint*ID de categoría
base_pricefloat*Precio en EUR
unitstring*tallo, ramo, caja, paquete, pieza, kilogramo, metro, rollo
typestringflower (por defecto) o supply
descriptionstringDescripción del producto
skustringSKU único (verificado contra duplicados)
stock_qtyintCantidad en stock (por defecto: 0)
min_order_qtyintCantidad mínima de pedido (por defecto: 1)
colorstringColor del producto
stem_lengthintLongitud del tallo en cm
country_of_originstringPaís de origen
vat_ratefloatTasa de IVA en % (por defecto: 21)
image_urlstringURL(s) de imagen. Soporta jpg, png, webp. Múltiples URLs separadas por punto y coma (;). Máximo 10 imágenes por producto.
POST /products/{id}

Actualizar un producto existente. Envíe solo los campos que desea cambiar (actualización parcial).

POST /products/{id}/delete

Eliminación suave de un producto. No requiere cuerpo de solicitud.

Imágenes del producto

Límites de imágenes: Máx. 10 imágenes por producto. Formatos: JPEG, PNG, WebP. Tamaño máx.: 5 MB por imagen. Las imágenes se descargan de las URLs proporcionadas — el servidor las obtiene automáticamente.
GET /products/{id}/images

Obtener todas las imágenes de un producto. Devuelve URLs e indicador de imagen principal.

Respuesta de ejemplo

{
  "success": true,
  "data": {
    "images": [
      {
        "id": 1,
        "url": "/uploads/products/abc123.jpg",
        "thumbnail_url": "/uploads/products/thumb_abc123.jpg",
        "is_primary": true
      },
      {
        "id": 2,
        "url": "/uploads/products/def456.jpg",
        "thumbnail_url": "/uploads/products/thumb_def456.jpg",
        "is_primary": false
      }
    ]
  }
}
POST /products/{id}/images

Agregar imágenes proporcionando URLs. El servidor descarga, valida (jpg/png/webp, máx. 5 MB) y crea miniaturas automáticamente. Use punto y coma para separar múltiples URLs.

Cuerpo de la solicitud (JSON)

CampoTipoObligatorioDescripción
image_urlstring*URL(s) de imagen. Soporta jpg, png, webp. Múltiples URLs separadas por punto y coma (;). Máximo 10 imágenes por producto.

Cuerpo de la solicitud

{
  "image_url": "https://example.com/images/rose.jpg;https://example.com/images/rose-2.jpg"
}
POST /products/{id}/images/{imageId}/delete

Eliminar una imagen del producto. El archivo se elimina del servidor. Si la imagen eliminada era la principal, la siguiente imagen se convierte en principal automáticamente.

POST /products/{id}/images/{imageId}/primary

Establecer una imagen como principal. La imagen principal se muestra en los listados del catálogo y resultados de búsqueda.

Actualización masiva de stock

POST /stock

Actualizar cantidades de stock para múltiples productos a la vez. Identifique productos por product_id o sku. Máx. 500 elementos por solicitud.

Cuerpo de la solicitud

{
  "items": [
    { "product_id": 42, "stock_qty": 500 },
    { "sku": "ROSE-RED-001", "stock_qty": 250 },
    { "sku": "LILY-WHT-003", "stock_qty": 0 }
  ]
}

Respuesta

{
  "success": true,
  "data": {
    "updated": 2,
    "failed": 1,
    "errors": [
      { "index": 2, "sku": "LILY-WHT-003", "error": "Product not found" }
    ]
  }
}

Actualización masiva de precios

POST /prices

Actualizar precios para múltiples productos. Mismo formato que actualización de stock pero con campo base_price. Máx. 500 elementos.

Cuerpo de la solicitud

{
  "items": [
    { "product_id": 42, "base_price": 2.75 },
    { "sku": "ROSE-RED-001", "base_price": 3.10 }
  ]
}

Pedidos

GET /orders

Lista sus grupos de pedidos (porciones de pedidos específicas del proveedor).

Parámetros de consulta

ParámetroTipoDescripción
pageintNúmero de página
per_pageintElementos por página (máx. 100)
statusstringpending, confirmed, processing, shipped, delivered, completed, cancelled
GET /orders/{id}

Detalle completo del pedido incluyendo artículos, información del cliente e historial de estados.

POST /orders/{id}/status

Actualizar estado del pedido. Solo se permiten transiciones válidas:

DesdeTransiciones permitidas
pendingconfirmed, cancelled
confirmedprocessing, cancelled
processingshipped, cancelled
shippeddelivered

Cuerpo de la solicitud

{
  "status": "confirmed",
  "comment": "Order confirmed, preparing for shipment"
}

Categorías

GET /categories

Lista todas las categorías activas. Devuelve una lista plana con referencias a padres.

Respuesta de ejemplo

{
  "success": true,
  "data": {
    "categories": [
      { "id": 1, "name": "Flowers", "slug": "flowers", "parent_id": null, "type": "flower" },
      { "id": 3, "name": "Roses", "slug": "roses", "parent_id": 1, "type": "flower" }
    ]
  }
}

Códigos de error

HTTPCódigoDescripción
401UNAUTHORIZEDClave API faltante o no válida
403FORBIDDENClave revocada o proveedor no verificado
404NOT_FOUNDRecurso no encontrado
422VALIDATION_ERRORDatos de entrada no válidos
429RATE_LIMITEDLímite de solicitudes excedido
500SERVER_ERRORError interno del servidor

Ejemplos de código

Listar productos

curl -X GET "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products?page=1&per_page=10" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Crear producto

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Red Roses Premium",
    "category_id": 3,
    "base_price": 2.50,
    "unit": "stem",
    "stock_qty": 500,
    "sku": "ROSE-RED-001",
    "color": "Red",
    "stem_length": 60,
    "country_of_origin": "Netherlands",
    "image_url": "https://example.com/images/rose-red.jpg"
  }'

Agregar imágenes del producto

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products/42/images" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/img/photo1.jpg;https://example.com/img/photo2.jpg"
  }'

Actualización masiva de stock

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/stock" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"sku": "ROSE-RED-001", "stock_qty": 500},
      {"sku": "LILY-WHT-003", "stock_qty": 200}
    ]
  }'

Ejemplo PHP

<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier';

// List products
$ch = curl_init("$baseUrl/products?page=1&per_page=10");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Accept: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

// Bulk stock update
$ch = curl_init("$baseUrl/stock");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'items' => [
            ['sku' => 'ROSE-RED-001', 'stock_qty' => 500],
            ['sku' => 'LILY-WHT-003', 'stock_qty' => 200],
        ],
    ]),
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

Ejemplo Python

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier"
headers = {"Authorization": f"Bearer {API_KEY}"}

# List products
resp = requests.get(f"{BASE_URL}/products", headers=headers,
                    params={"page": 1, "per_page": 10})
products = resp.json()

# Bulk stock update
resp = requests.post(f"{BASE_URL}/stock", headers=headers,
                     json={"items": [
                         {"sku": "ROSE-RED-001", "stock_qty": 500},
                         {"sku": "LILY-WHT-003", "stock_qty": 200},
                     ]})
result = resp.json()

# Update order status
resp = requests.post(f"{BASE_URL}/orders/15/status", headers=headers,
                     json={"status": "confirmed",
                           "comment": "Ready for shipment"})
print(resp.json())

Configuración de cookies

Usamos cookies para mejorar su experiencia. Más información en nuestra Política de privacidad.

Personalizar

Necesarias

Esenciales para el funcionamiento del sitio. No se pueden desactivar.