Code Examples

Ready-to-use code snippets in multiple programming languages

JavaScript / Node.js

API Client Class

class BrainPricesAPI {
  constructor(baseUrl = 'https://www.brainprices.com/api/v1') {
    this.baseUrl = baseUrl;
    this.token = null;
  }

  async request(endpoint, options = {}) {
    const headers = {
      'Content-Type': 'application/json',
      ...options.headers
    };

    if (this.token) {
      headers['Authorization'] = `Bearer ${this.token}`;
    }

    const response = await fetch(`${this.baseUrl}${endpoint}`, {
      ...options,
      headers
    });

    const data = await response.json();
    
    if (!response.ok) {
      throw new Error(data.message || 'API Error');
    }

    return data;
  }

  async login(email, password) {
    const data = await this.request('/auth/login', {
      method: 'POST',
      body: JSON.stringify({ email, password })
    });

    this.token = data.token;
    localStorage.setItem('auth_token', this.token);
    return data;
  }

  async getProducts(filters = {}) {
    const params = new URLSearchParams(filters);
    return await this.request(`/productos?${params}`);
  }

  async createProduct(productData) {
    return await this.request('/productos', {
      method: 'POST',
      body: JSON.stringify(productData)
    });
  }

  async updateStock(productId, quantity, operation = 'set') {
    return await this.request(`/productos/${productId}/stock`, {
      method: 'PUT',
      body: JSON.stringify({ stock_quantity: quantity, operation })
    });
  }

  async addToCart(sessionId, productId, quantity = 1) {
    return await this.request(`/carrito/${sessionId}/agregar`, {
      method: 'POST',
      body: JSON.stringify({ product_id: productId, quantity })
    });
  }
}

Usage Example

// Initialize API
const api = new BrainPricesAPI();

// Login
const user = await api.login('seller@example.com', 'password123');
console.log('Logged in as:', user.user.email);

// Get products on sale
const products = await api.getProducts({
  on_sale: true,
  category_id: 5,
  page: 1,
  per_page: 20
});

console.log(`Found ${products.pagination.total} products on sale`);

// Create new product
const newProduct = await api.createProduct({
  name: 'Vino Tinto Reserva 2023',
  sku: 'VIN-TINTO-RES-2023',
  price: 18.99,
  compare_price: 24.99,
  stock_quantity: 50,
  category_id: 5,
  description: '

Excelente vino tinto...

' }); console.log('Product created with ID:', newProduct.data.id); // Update stock await api.updateStock(123, 75, 'set'); console.log('Stock updated successfully');

PHP

API Client Class

<?php

class BrainPricesAPI {
    private $baseUrl = 'https://www.brainprices.com/api/v1';
    private $token = null;
    
    public function __construct($token = null) {
        $this->token = $token;
    }
    
    private function request($endpoint, $method = 'GET', $data = null) {
        $ch = curl_init($this->baseUrl . $endpoint);
        
        $headers = ['Content-Type: application/json'];
        
        if ($this->token) {
            $headers[] = 'Authorization: Bearer ' . $this->token;
        }
        
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_CUSTOMREQUEST => $method
        ]);
        
        if ($data && in_array($method, ['POST', 'PUT'])) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }
        
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        
        $result = json_decode($response, true);
        
        if ($httpCode >= 400) {
            throw new Exception($result['message'] ?? 'API Error');
        }
        
        return $result;
    }
    
    public function login($email, $password) {
        $data = $this->request('/auth/login', 'POST', [
            'email' => $email,
            'password' => $password
        ]);
        
        $this->token = $data['token'];
        return $data;
    }
    
    public function getProducts($filters = []) {
        $query = http_build_query($filters);
        return $this->request('/productos?' . $query);
    }
    
    public function createProduct($productData) {
        return $this->request('/productos', 'POST', $productData);
    }
    
    public function updateStock($id, $quantity, $operation = 'set') {
        return $this->request("/productos/{$id}/stock", 'PUT', [
            'stock_quantity' => $quantity,
            'operation' => $operation
        ]);
    }
}

Usage Example

<?php

$api = new BrainPricesAPI();

// Login
$loginData = $api->login('seller@example.com', 'password123');
echo "Logged in as: {$loginData['user']['email']}\n";

// Get products
$products = $api->getProducts([
    'category_id' => 5,
    'on_sale' => true,
    'page' => 1,
    'per_page' => 20
]);

echo "Found {$products['pagination']['total']} products\n";

foreach ($products['data'] as $product) {
    echo "- {$product['name']}: €{$product['price']}\n";
}

// Create product
$newProduct = $api->createProduct([
    'name' => 'Jamón Ibérico de Bellota',
    'sku' => 'JAM-IB-BELL-001',
    'price' => 89.99,
    'stock_quantity' => 25,
    'category_id' => 8
]);

echo "Product created with ID: {$newProduct['data']['id']}\n";

// Update stock
$api->updateStock(123, 50, 'set');
echo "Stock updated successfully\n";

Python

API Client Class

import requests
from typing import Dict, Optional

class BrainPricesAPI:
    def __init__(self, base_url='https://www.brainprices.com/api/v1'):
        self.base_url = base_url
        self.token = None
        self.session = requests.Session()
    
    def _request(self, endpoint, method='GET', data=None, params=None):
        url = f"{self.base_url}{endpoint}"
        headers = {'Content-Type': 'application/json'}
        
        if self.token:
            headers['Authorization'] = f'Bearer {self.token}'
        
        response = self.session.request(
            method=method,
            url=url,
            json=data,
            params=params,
            headers=headers
        )
        
        response.raise_for_status()
        return response.json()
    
    def login(self, email: str, password: str) -> Dict:
        data = self._request('/auth/login', 'POST', {
            'email': email,
            'password': password
        })
        self.token = data['token']
        return data
    
    def get_products(self, **filters) -> Dict:
        return self._request('/productos', params=filters)
    
    def create_product(self, product_data: Dict) -> Dict:
        return self._request('/productos', 'POST', product_data)
    
    def update_stock(self, product_id: int, quantity: int, operation='set') -> Dict:
        return self._request(f'/productos/{product_id}/stock', 'PUT', {
            'stock_quantity': quantity,
            'operation': operation
        })

Usage Example

# Initialize API
api = BrainPricesAPI()

# Login
user = api.login('seller@example.com', 'password123')
print(f"Logged in as: {user['user']['email']}")

# Get products on sale
products = api.get_products(
    on_sale=True,
    category_id=5,
    page=1,
    per_page=20
)

print(f"Found {products['pagination']['total']} products on sale")

# Create new product
new_product = api.create_product({
    'name': 'Aceitunas Rellenas Premium',
    'sku': 'ACEIT-PREM-001',
    'price': 5.99,
    'stock_quantity': 200,
    'category_id': 4
})

print(f"Product created with ID: {new_product['data']['id']}")

# Update stock
api.update_stock(123, 75, 'set')
print("Stock updated successfully")

cURL

Login and Save Token

# Login and save token to variable
TOKEN=$(curl -s -X POST https://www.brainprices.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"seller@example.com","password":"password123"}' \
  | jq -r '.token')

echo "Token saved: $TOKEN"

List Products

# Get products on sale
curl -X GET "https://www.brainprices.com/api/v1/productos?on_sale=true&page=1" \
  -H "Authorization: Bearer $TOKEN" \
  | jq '.data[] | {name, price, stock_quantity}'

Create Product

curl -X POST https://www.brainprices.com/api/v1/productos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "Queso Manchego Curado",
    "sku": "QUESO-MANCH-001",
    "price": 24.99,
    "stock_quantity": 40,
    "category_id": 6
  }' \
  | jq .

Update Stock

# Set stock to specific value
curl -X PUT https://www.brainprices.com/api/v1/productos/123/stock \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"stock_quantity": 75, "operation": "set"}' \
  | jq .

# Increment stock
curl -X PUT https://www.brainprices.com/api/v1/productos/123/stock \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"quantity": 10, "operation": "increment"}' \
  | jq .

Use Case: Catalog Synchronization

Import entire catalog from external platform or CSV file.

JavaScript Example

async function importCatalogFromCSV(csvData) {
  const api = new BrainPricesAPI();
  await api.login('admin@example.com', 'password');
  
  const results = {
    imported: 0,
    updated: 0,
    errors: []
  };
  
  for (const product of csvData) {
    try {
      await api.createProduct({
        name: product.name,
        sku: product.sku,
        price: parseFloat(product.price),
        stock_quantity: parseInt(product.stock),
        category_id: parseInt(product.category_id),
        description: product.description
      });
      
      results.imported++;
      console.log(`✅ Imported: ${product.name}`);
      
    } catch (error) {
      results.errors.push({
        sku: product.sku,
        error: error.message
      });
      console.error(`❌ Error: ${product.sku}`);
    }
    
    // Respect rate limiting
    await new Promise(resolve => setTimeout(resolve, 500));
  }
  
  return results;
}

// Usage
const catalogData = [
  { name: 'Product 1', sku: 'PROD-001', price: '19.99', stock: '100', category_id: '5' },
  { name: 'Product 2', sku: 'PROD-002', price: '29.99', stock: '50', category_id: '5' }
];

const results = await importCatalogFromCSV(catalogData);
console.log(`Imported: ${results.imported}, Errors: ${results.errors.length}`);

Use Case: Sync Stock from ERP

Update stock for multiple products from your ERP system.

async function syncStockFromERP(stockData) {
  const api = new BrainPricesAPI();
  await api.login('erp@example.com', 'password');
  
  const results = [];
  
  for (const item of stockData) {
    try {
      await api.updateStock(item.product_id, item.stock, 'set');
      
      results.push({
        product_id: item.product_id,
        status: 'success',
        new_stock: item.stock
      });
      
    } catch (error) {
      results.push({
        product_id: item.product_id,
        status: 'error',
        error: error.message
      });
    }
    
    // Pause to respect rate limiting
    await new Promise(resolve => setTimeout(resolve, 100));
  }
  
  return results;
}

// Usage
const stockUpdates = [
  { product_id: 123, stock: 50 },
  { product_id: 124, stock: 75 },
  { product_id: 125, stock: 100 }
];

const results = await syncStockFromERP(stockUpdates);
console.log('Updated:', results.filter(r => r.status === 'success').length);
console.log('Errors:', results.filter(r => r.status === 'error').length);
<?php

function syncStockFromERP($stockData, BrainPricesAPI $api) {
    $results = ['updated' => 0, 'errors' => []];
    
    foreach ($stockData as $item) {
        try {
            $api->updateStock($item['product_id'], $item['stock'], 'set');
            $results['updated']++;
            echo "✅ Updated product {$item['product_id']}\n";
            
        } catch (Exception $e) {
            $results['errors'][] = [
                'product_id' => $item['product_id'],
                'error' => $e->getMessage()
            ];
            echo "❌ Error updating {$item['product_id']}: {$e->getMessage()}\n";
        }
        
        usleep(100000); // Pause 100ms
    }
    
    return $results;
}

// Usage
$api = new BrainPricesAPI();
$api->login('erp@example.com', 'password');

$stockUpdates = [
    ['product_id' => 123, 'stock' => 50],
    ['product_id' => 124, 'stock' => 75],
    ['product_id' => 125, 'stock' => 100]
];

$results = syncStockFromERP($stockUpdates, $api);
echo "\nUpdated: {$results['updated']}\n";
echo "Errors: " . count($results['errors']) . "\n";
import time

def sync_stock_from_erp(stock_data, api):
    results = {'updated': 0, 'errors': []}
    
    for item in stock_data:
        try:
            api.update_stock(item['product_id'], item['stock'], 'set')
            results['updated'] += 1
            print(f"✅ Updated product {item['product_id']}")
            
        except Exception as e:
            results['errors'].append({
                'product_id': item['product_id'],
                'error': str(e)
            })
            print(f"❌ Error: {e}")
        
        time.sleep(0.1)  # Pause 100ms
    
    return results

# Usage
api = BrainPricesAPI()
api.login('erp@example.com', 'password')

stock_updates = [
    {'product_id': 123, 'stock': 50},
    {'product_id': 124, 'stock': 75},
    {'product_id': 125, 'stock': 100}
]

results = sync_stock_from_erp(stock_updates, api)
print(f"\nUpdated: {results['updated']}")
print(f"Errors: {len(results['errors'])}")

Use Case: Sales Dashboard

Create a real-time sales dashboard with automatic updates.

class SalesDashboard {
  constructor(apiToken) {
    this.api = new BrainPricesAPI();
    this.api.token = apiToken;
    this.updateInterval = 60000; // 1 minute
  }

  async loadMetrics() {
    const today = new Date().toISOString().split('T')[0];
    
    // Get today's orders
    const orders = await this.api.request('/pedidos', {
      params: {
        from_date: today,
        to_date: today,
        per_page: 100
      }
    });
    
    // Calculate metrics
    const metrics = {
      total_orders: orders.pagination.total,
      total_sales: orders.data.reduce((sum, o) => sum + o.total, 0),
      pending_orders: orders.data.filter(o => o.status === 'pending').length,
      avg_order: 0
    };
    
    metrics.avg_order = metrics.total_sales / metrics.total_orders || 0;
    
    return metrics;
  }

  async displayDashboard() {
    const metrics = await this.loadMetrics();
    
    document.getElementById('total-sales').textContent = 
      `€${metrics.total_sales.toFixed(2)}`;
    document.getElementById('total-orders').textContent = 
      metrics.total_orders;
    document.getElementById('avg-order').textContent = 
      `€${metrics.avg_order.toFixed(2)}`;
    document.getElementById('pending-orders').textContent = 
      metrics.pending_orders;
  }

  startAutoUpdate() {
    this.displayDashboard();
    setInterval(() => this.displayDashboard(), this.updateInterval);
  }
}

// Usage
const dashboard = new SalesDashboard(authToken);
dashboard.startAutoUpdate();

Use Case: Order Processing

Complete flow from cart to order confirmation.

async function processOrder(cartSessionId, customerData, paymentMethod) {
  const api = new BrainPricesAPI();
  
  // 1. Get cart contents
  const cart = await api.request(`/carrito/${cartSessionId}`);
  console.log('Cart total:', cart.data.totals.total);
  
  // 2. Validate coupon (if any)
  if (customerData.couponCode) {
    const coupon = await api.request(`/cupones/validar/${customerData.couponCode}`);
    if (coupon.data.is_valid) {
      console.log('Coupon applied:', coupon.data.value);
    }
  }
  
  // 3. Create order
  const orderData = {
    customer: {
      email: customerData.email,
      first_name: customerData.firstName,
      last_name: customerData.lastName,
      phone: customerData.phone
    },
    shipping_address: customerData.shippingAddress,
    billing_address: customerData.billingAddress,
    items: cart.data.items.map(item => ({
      product_id: item.product_id,
      quantity: item.quantity,
      price: item.price
    })),
    payment_method: paymentMethod,
    shipping_method: 'standard',
    coupon_code: customerData.couponCode || null
  };
  
  const order = await api.request('/pedidos', {
    method: 'POST',
    body: JSON.stringify(orderData)
  });
  
  console.log('Order created:', order.data.order_number);
  
  // 4. Process payment
  if (paymentMethod === 'credit_card') {
    const payment = await api.request('/pagos/procesar', {
      method: 'POST',
      body: JSON.stringify({
        order_id: order.data.order_id,
        payment_method: 'credit_card',
        card: customerData.cardData
      })
    });
    
    console.log('Payment processed:', payment.data.transaction_id);
  }
  
  // 5. Clear cart
  await api.request(`/carrito/${cartSessionId}/limpiar`, {
    method: 'DELETE'
  });
  
  return {
    order_id: order.data.order_id,
    order_number: order.data.order_number,
    total: order.data.total
  };
}

// Usage
const result = await processOrder('session123', {
  email: 'customer@example.com',
  firstName: 'Juan',
  lastName: 'Pérez',
  phone: '+34 600 123 456',
  shippingAddress: {
    address: 'Calle Mayor 123',
    city: 'Madrid',
    postal_code: '28001',
    country: 'ES'
  },
  billingAddress: {
    address: 'Calle Mayor 123',
    city: 'Madrid',
    postal_code: '28001',
    country: 'ES'
  },
  couponCode: 'DESCUENTO10',
  cardData: {
    number: '4111111111111111',
    exp_month: '12',
    exp_year: '2025',
    cvv: '123',
    holder_name: 'Juan Pérez'
  }
}, 'credit_card');

console.log('Order completed:', result.order_number);

Need More Information?

Check the complete API reference or visit the main documentation page.