Playground API

Testa l'endpoint di lista prezzi concorrenti.

Autenticazione Richiesta

Devi essere loggato per utilizzare il Playground API. Accedi per continuare.

Endpoint Lista Prezzi Concorrenti

Ottieni una lista paginata dei prezzi dei concorrenti per i tuoi prodotti

GET

L'endpoint di lista prezzi concorrenti consente di recuperare un elenco paginato dei prodotti presenti nel tuo inventario con i relativi prezzi dei concorrenti. La risposta include informazioni dettagliate su ciascun prodotto e un elenco dei concorrenti con i loro prezzi.

La risposta è paginata con 50 prodotti per pagina e include metadati di paginazione per facilitare la navigazione tra le pagine.

URL dell'Endpoint
GET https://api.commerceclarity.io/api/competitor-prices/index

Parametri della Richiesta

Parametro Tipo Obbligatorio Descrizione
page integer Opzionale Numero della pagina richiesta. Default: 1

Struttura della Risposta

Lista di tutti i prezzi concorrenti (50 prezzi concorrenti per pagina)

Risposta di Successo
{
  "status": "success",
  "data": {
    "current_page": 1,
    "data": [
      {
        "code": "7332543795000",
        "price": 462.99,
        "shipping_cost": 0,
        "name": "Electrolux LBI107 Frigorifero da Incasso 142L Bianco Classe E",
        "brand": "Electrolux",
        "status": "completed",
        "competitors": [
          {
            "price": 469,
            "shipping": 0,
            "seller": "Amazon Marketplace average price",
            "difference": 1.28
          },
          {
            "price": 639.99,
            "shipping": 0,
            "seller": "Electrolux.it",
            "difference": 27.66
          },
          {
            "price": 412,
            "shipping": 0,
            "seller": "Unieuro",
            "difference": -12.38
          }
          // ... altri concorrenti ...
        ]
      },
      
      // ... altri prodotti ...
      
    ],
    "first_page_url": "https://api.commerceclarity.io/competitor-prices/index?page=1",
    "from": 1,
    "last_page": 833,
    "last_page_url": "https://api.commerceclarity.io/competitor-prices/index?page=833",
    "links": [
      {
        "url": null,
        "label": "pagination.previous",
        "active": false
      },
      {
        "url": "https://api.commerceclarity.io/competitor-prices/index?page=1",
        "label": "1",
        "active": true
      },
      // ... altri link ...
    ],
    "next_page_url": "https://api.commerceclarity.io/competitor-prices/index?page=2",
    "path": "https://api.commerceclarity.io/competitor-prices/index",
    "per_page": 50,
    "prev_page_url": null,
    "to": 50,
    "total": 41647
  }
}

Struttura della Paginazione

Campo Tipo Descrizione
current_page integer Numero della pagina corrente
first_page_url string URL per la prima pagina
from integer Indice del primo elemento nella pagina corrente
last_page integer Numero dell'ultima pagina
last_page_url string URL per l'ultima pagina
links array Array di link per la navigazione
next_page_url string|null URL per la pagina successiva
path string URL base dell'endpoint
per_page integer Numero di elementi per pagina
prev_page_url string|null URL per la pagina precedente
to integer Indice dell'ultimo elemento nella pagina corrente
total integer Numero totale di elementi disponibili
data array Array di prodotti nella pagina corrente

Struttura di un Elemento Prodotto

Campo Tipo Descrizione
code string Codice principale del prodotto (EAN, ASIN o MINSAN)
price float|null Prezzo del prodotto
shipping_cost float|null Costo di spedizione
name string Nome completo del prodotto
brand string Marca del prodotto
status string Stato dell'analisi dei prezzi concorrenti
competitors array Array di oggetti concorrente con informazioni sui prezzi

Struttura di un Elemento Concorrente

Campo Tipo Descrizione
price float Prezzo del prodotto
shipping float Costo di spedizione
seller string Nome del venditore concorrente
difference float Differenza percentuale tra il tuo prezzo e quello del concorrente

Analisi della Competitività

  • Un valore di difference positivo indica che il tuo prezzo è più alto del concorrente
  • Un valore di difference negativo indica che il tuo prezzo è più basso del concorrente
  • Utilizza questi dati per ottimizzare la tua strategia di prezzi

Esempi di Codice

Esempio PHP (Utilizzo del Client HTTP Guzzle)
<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client([
    'base_uri' => 'https://api.commerceclarity.io',
    'timeout'  => 10.0,
    'headers' => [
        'Authorization' => 'Bearer IL_TUO_TOKEN_API',
        'Accept' => 'application/json',
    ]
]);

// Numero di pagina (Opzionale)
$page = 1; // Prima pagina

try {
    $response = $client->get('/api/competitor-prices/index', [
        'query' => [
            'page' => $page
        ]
    ]);
    
    $result = json_decode($response->getBody()->getContents(), true);
    
    echo "Stato: " . $result['status'] . "\n";
    echo "Pagina corrente: " . $result['data']['current_page'] . "\n";
    echo "Totale prodotti: " . $result['data']['total'] . "\n";
    echo "Prodotti per pagina: " . $result['data']['per_page'] . "\n";
    echo "Pagine totali: " . $result['data']['last_page'] . "\n\n";
    
    echo "Prodotti nella pagina corrente:\n";
    foreach ($result['data']['data'] as $index => $product) {
        echo ($index + 1) . ". " . $product['name'] . " (" . $product['brand'] . ")\n";
        echo "   Prezzo tuo: " . $product['price'] . " + " . $product['shipping_cost'] . " (spedizione)\n";
        echo "   Stato: " . $product['status'] . "\n";
        echo "   Concorrenti: " . count($product['competitors']) . "\n";
        
        // Concorrenti principali
        echo "   Concorrenti principali:\n";
        $competitors = $product['competitors'];
        usort($competitors, function($a, $b) {
            return $a['difference'] <=> $b['difference'];
        });
        
        $topCompetitors = array_slice($competitors, 0, 3);
        foreach ($topCompetitors as $i => $competitor) {
            echo "     " . ($i + 1) . ". " . $competitor['seller'] . ": " . 
                 $competitor['price'] . " + " . $competitor['shipping'] . " (spedizione), " . 
                 "differenza: " . $competitor['difference'] . "%\n";
        }
        
        echo "\n";
    }
    
    // Navigazione
    echo "\nNavigazione:\n";
    echo "Pagina precedente: " . ($result['data']['prev_page_url'] ?? "Non disponibile") . "\n";
    echo "Pagina successiva: " . ($result['data']['next_page_url'] ?? "Non disponibile") . "\n";
    
} catch (RequestException $e) {
    echo "Errore: " . $e->getMessage() . "\n";
    
    if ($e->hasResponse()) {
        $errorResponse = json_decode($e->getResponse()->getBody()->getContents(), true);
        echo "Stato: " . ($errorResponse['status'] ?? 'sconosciuto') . "\n";
        echo "Messaggio: " . ($errorResponse['message'] ?? 'nessun messaggio') . "\n";
    }
}
Esempio JavaScript (Fetch API)
// Configurazione della richiesta
const apiUrl = 'https://api.commerceclarity.io/api/competitor-prices/index';
const token = 'IL_TUO_TOKEN_API';

// Parametro pagina (opzionale)
const page = 1; // Prima pagina

// Costruisci l'URL con il parametro di query
const requestUrl = `${apiUrl}?page=${page}`;

// Configurazione della richiesta
const requestOptions = {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Accept': 'application/json'
  }
};

// Effettua la richiesta API
fetch(requestUrl, requestOptions)
  .then(response => {
    if (!response.ok) {
      return response.json().then(errorData => {
        throw new Error(errorData.message || `Status: ${response.status}`);
      });
    }
    return response.json();
  })
  .then(data => {
    console.log('Risposta:', data);
    
    // Informazioni sulla paginazione
    console.log(`Pagina corrente: ${data.data.current_page}`);
    console.log(`Totale prodotti: ${data.data.total}`);
    console.log(`Prodotti per pagina: ${data.data.per_page}`);
    console.log(`Pagine totali: ${data.data.last_page}`);
    
    // Esempio: elaborazione dei prodotti e dei concorrenti
    const products = data.data.data;
    console.log(`Prodotti nella pagina corrente: ${products.length}`);
    
    // Esempio: visualizzazione dei prodotti in una tabella
    const productList = document.getElementById('product-list');
    if (productList) {
      // Svuota la lista esistente
      productList.innerHTML = '';
      
      // Crea intestazione tabella
      const headerRow = document.createElement('tr');
      headerRow.innerHTML = `
        Codice
        Nome
        Marca
        Prezzo
        Concorrenti
        Stato
      `;
      productList.appendChild(headerRow);
      
      // Aggiungi ogni prodotto
      products.forEach(product => {
        const productRow = document.createElement('tr');
        
        // Trova il concorrente più economico
        let cheapestCompetitor = null;
        if (product.competitors && product.competitors.length > 0) {
          cheapestCompetitor = product.competitors.reduce((min, comp) => 
            (comp.price + comp.shipping) < (min.price + min.shipping) ? comp : min
          );
        }
        
        const totalConcorrenti = product.competitors ? product.competitors.length : 0;
        
        productRow.innerHTML = `
          ${product.code}
          ${product.name || 'N/D'}
          ${product.brand || 'N/D'}
          ${product.price || 0} + ${product.shipping_cost || 0} spedizione
          ${totalConcorrenti} (min: ${cheapestCompetitor ? cheapestCompetitor.price + cheapestCompetitor.shipping : 'N/D'})
          ${product.status}
        `;
        
        productList.appendChild(productRow);
      });
    }
    
    // Aggiorna i controlli di paginazione
    updatePaginationControls(data.data);
    
    // Crea la dashboard di analisi dei concorrenti
    createCompetitorsAnalysisDashboard(products);
  })
  .catch(error => {
    console.error('Errore durante il recupero dei prezzi dei concorrenti:', error.message);
    
    // Mostra un messaggio di errore all'utente
    showNotification(`Errore: ${error.message}`, 'error');
  });

// Funzione di utilità per determinare il colore dello stato
function getStatusColor(state) {
  switch (state) {
    case 'completed':
      return 'success';
    case 'processing':
      return 'warning';
    case 'error':
      return 'danger';
    default:
      return 'secondary';
  }
}

// Funzione per aggiornare i controlli di paginazione
function updatePaginationControls(pagination) {
  const paginationElement = document.getElementById('pagination');
  if (!paginationElement) return;
  
  paginationElement.innerHTML = '';
  
  // Precedente
  const prevButton = document.createElement('button');
  prevButton.classList.add('btn', 'btn-outline-primary', 'me-2');
  prevButton.innerHTML = '« Precedente';
  prevButton.disabled = !pagination.prev_page_url;
  prevButton.onclick = () => loadPage(pagination.current_page - 1);
  paginationElement.appendChild(prevButton);
  
  // Aggiungi pulsanti per le pagine numeriche
  pagination.links.forEach(link => {
    if (link.url && !isNaN(link.label) && link.label !== '...') {
      const pageButton = document.createElement('button');
      pageButton.classList.add('btn', 'btn-outline-primary', 'me-2');
      if (link.active) {
        pageButton.classList.add('active');
      }
      pageButton.textContent = link.label;
      pageButton.onclick = () => loadPage(parseInt(link.label));
      paginationElement.appendChild(pageButton);
    }
  });
  
  // Successivo
  const nextButton = document.createElement('button');
  nextButton.classList.add('btn', 'btn-outline-primary');
  nextButton.innerHTML = 'Successivo »';
  nextButton.disabled = !pagination.next_page_url;
  nextButton.onclick = () => loadPage(pagination.current_page + 1);
  paginationElement.appendChild(nextButton);
}

// Funzione per caricare una pagina specifica
function loadPage(pageNumber) {
  // Aggiorna l'URL con il nuovo numero di pagina e ricarica i dati
  window.location.href = `?page=${pageNumber}`;
}

// Funzione per creare una dashboard di analisi dei concorrenti
function createCompetitorsAnalysisDashboard(products) {
  const dashboardElement = document.getElementById('competitors-dashboard');
  if (!dashboardElement) return;
  
  // Raccoglie statistiche sui prodotti e concorrenti
  let totalCompetitors = 0;
  let betterPricedProducts = 0;
  let worsePricedProducts = 0;
  let sellers = {};
  
  products.forEach(product => {
    if (!product.competitors) return;
    
    totalCompetitors += product.competitors.length;
    
    // Controlla se il nostro prezzo è più competitivo del prezzo medio dei concorrenti
    const averageCompetitorPrice = product.competitors.reduce((sum, comp) => 
      sum + (comp.price + comp.shipping), 0
    ) / product.competitors.length;
    
    const ourTotalPrice = product.price + product.shipping_cost;
    
    if (ourTotalPrice < averageCompetitorPrice) {
      betterPricedProducts++;
    } else {
      worsePricedProducts++;
    }
    
    // Raccoglie informazioni sui venditori
    product.competitors.forEach(comp => {
      if (!sellers[comp.seller]) {
        sellers[comp.seller] = {
          count: 0,
          totalDifference: 0
        };
      }
      
      sellers[comp.seller].count++;
      sellers[comp.seller].totalDifference += comp.difference;
    });
  });
  
  // Calcola venditori più competitivi
  const topSellers = Object.keys(sellers)
    .map(seller => ({
      name: seller,
      count: sellers[seller].count,
      avgDifference: sellers[seller].totalDifference / sellers[seller].count
    }))
    .sort((a, b) => a.avgDifference - b.avgDifference)
    .slice(0, 5);
  
  // Crea la dashboard
  dashboardElement.innerHTML = `
    
Prodotti analizzati

${products.length}

Concorrenti totali

${totalCompetitors}

Media concorrenti per prodotto

${(totalCompetitors / products.length).toFixed(1)}

Competitività prezzi

${betterPricedProducts}

Prodotti con prezzo migliore

${worsePricedProducts}

Prodotti con prezzo peggiore

Venditori più competitivi
    ${topSellers.map(seller => `
  • ${seller.name} ${seller.avgDifference.toFixed(2)}%
  • `).join('')}
`; } // Funzione di utilità per mostrare notifiche function showNotification(message, type) { // Implementazione della tua funzione di notifica console.log(`[${type.toUpperCase()}] ${message}`); }
Esempio Python (Requests)
import requests
import json
from tabulate import tabulate  # Per una visualizzazione tabellare più elegante (opzionale)

# Configurazione API
api_url = 'https://api.commerceclarity.io/api/competitor-prices/index'
token = 'IL_TUO_TOKEN_API'

headers = {
    'Authorization': f'Bearer {token}',
    'Accept': 'application/json'
}

# Parametri della richiesta
params = {
    'page': 1  # Prima pagina (opzionale)
}

try:
    # Effettua la richiesta GET
    response = requests.get(
        api_url,
        headers=headers,
        params=params
    )
    
    # Solleva eccezione per errori HTTP
    response.raise_for_status()
    
    # Estrai i dati dalla risposta
    result = response.json()
    
    print(f"Stato: {result['status']}")
    print(f"Pagina corrente: {result['data']['current_page']}")
    print(f"Totale prodotti: {result['data']['total']}")
    print(f"Prodotti per pagina: {result['data']['per_page']}")
    print(f"Pagine totali: {result['data']['last_page']}\n")
    
    # Analisi e presentazione dei dati
    products = result['data']['data']
    print(f"Prodotti nella pagina corrente: {len(products)}\n")
    
    # Visualizzazione dei prodotti con i loro concorrenti principali
    for index, product in enumerate(products):
        print(f"{index + 1}. {product['name']} ({product['brand']})")
        print(f"   Codice: {product['code']}")
        print(f"   Prezzo: {product['price']} + {product['shipping_cost']} (spedizione)")
        print(f"   Stato: {product['status']}")
        
        competitors = product.get('competitors', [])
        if competitors:
            print(f"   Concorrenti: {len(competitors)}")
            
            # Ordiniamo i concorrenti per prezzo totale (prezzo + spedizione)
            sorted_competitors = sorted(competitors, key=lambda x: x['price'] + x['shipping'])
            
            # Mostriamo i tre concorrenti più economici
            print("   Concorrenti più economici:")
            for i, competitor in enumerate(sorted_competitors[:3]):
                total_price = competitor['price'] + competitor['shipping']
                diff = competitor['difference']
                diff_symbol = "↓" if diff < 0 else "↑" if diff > 0 else "="
                print(f"     {i+1}. {competitor['seller']}: {competitor['price']} + {competitor['shipping']} = {total_price} ({diff_symbol}{abs(diff):.2f}%)")
        else:
            print("   Nessun concorrente trovato")
        
        print()  # Riga vuota tra i prodotti
    
    # Analisi della competitività
    print("\nAnalisi della competitività:")
    
    # Calcola prodotti con prezzo migliore o peggiore dei concorrenti
    product_competitive_status = []
    for product in products:
        if not product.get('competitors'):
            continue
            
        avg_competitor_price = sum([(c['price'] + c['shipping']) for c in product['competitors']]) / len(product['competitors'])
        our_price = product['price'] + product['shipping_cost']
        
        status = "Migliore" if our_price < avg_competitor_price else "Peggiore"
        product_competitive_status.append({
            'name': product['name'],
            'our_price': our_price,
            'avg_competitor': avg_competitor_price,
            'difference': ((our_price - avg_competitor_price) / avg_competitor_price) * 100,
            'status': status
        })
    
    # Stampa risultati dell'analisi
    better_priced = len([p for p in product_competitive_status if p['status'] == "Migliore"])
    worse_priced = len([p for p in product_competitive_status if p['status'] == "Peggiore"])
    
    print(f"Prodotti con prezzo migliore dei concorrenti: {better_priced} ({better_priced/len(product_competitive_status)*100:.1f}%)")
    print(f"Prodotti con prezzo peggiore dei concorrenti: {worse_priced} ({worse_priced/len(product_competitive_status)*100:.1f}%)")
    
    # Navigazione
    print("\nNavigazione:")
    prev_page_url = result['data']['prev_page_url']
    next_page_url = result['data']['next_page_url']
    print(f"Pagina precedente: {prev_page_url if prev_page_url else 'Non disponibile'}")
    print(f"Pagina successiva: {next_page_url if next_page_url else 'Non disponibile'}")
    
    # Esempio: navigazione automatica tra le pagine
    def fetch_all_competitor_prices():
        """Funzione di utilità per recuperare tutti i prezzi dei concorrenti attraverso la paginazione."""
        all_products = []
        current_page = 1
        last_page = result['data']['last_page']
        
        print(f"\nRecupero di tutti i prodotti ({result['data']['total']}) attraverso {last_page} pagine...")
        
        while current_page <= last_page:
            print(f"Recupero pagina {current_page}...")
            
            page_response = requests.get(
                api_url,
                headers=headers,
                params={'page': current_page}
            )
            page_response.raise_for_status()
            page_data = page_response.json()
            
            # Aggiungi i prodotti della pagina corrente alla lista completa
            all_products.extend(page_data['data']['data'])
            
            current_page += 1
        
        print(f"Totale prodotti recuperati: {len(all_products)}")
        return all_products
    
    # Decommentare per eseguire il recupero di tutti i prodotti (attenzione: potrebbe richiedere molto tempo)
    # all_products = fetch_all_competitor_prices()
    
except requests.exceptions.HTTPError as err:
    print(f"Errore HTTP: {err}")
    if response.text:
        error_data = response.json()
        print(f"Stato: {error_data.get('status', 'sconosciuto')}")
        print(f"Messaggio: {error_data.get('message', 'nessun messaggio')}")
        
except requests.exceptions.RequestException as err:
    print(f"Errore durante la richiesta: {err}")
Esempio cURL
curl -X GET "https://api.commerceclarity.io/api/competitor-prices/index?page=1" \
     -H "Authorization: Bearer IL_TUO_TOKEN_API" \
     -H "Accept: application/json"

Casi d'Uso

Monitoraggio dei Prezzi

L'API fornisce dati aggiornati sui prezzi dei concorrenti per aiutarti a mantenere la tua strategia di prezzo competitiva.

Analisi di Mercato

Puoi utilizzare questi dati per analizzare il posizionamento dei tuoi prodotti rispetto alla concorrenza.

Prezzi Dinamici

Implementa strategie di prezzi dinamici basate sui dati dei concorrenti per massimizzare i margini e la competitività.

Risorse Correlate

Autenticazione

Impara come autenticare le tue richieste API con token di accesso.

Vai all'Autenticazione
Analisi Prodotti

Aggiungi nuovi prodotti al tuo inventario per poterne recuperare i dettagli.

Vedi Endpoint
Lista Prodotti

Ottieni una lista paginata dei prodotti nel tuo inventario

Vedi Endpoint