---
title: Ejemplos CRUD — GET, POST, PUT, DELETE
section: webservice
slug: crud-examples
description: "Ejemplos completos de operaciones CRUD con la API REST de PrestaShop: crear productos, actualizar stock, cambiar estado de pedido y eliminar recursos."
keywords: prestashop webservice CRUD GET POST PUT DELETE crear producto stock pedido API REST ejemplos
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/webservice/crud-examples"
---

# Ejemplos CRUD — GET, POST, PUT, DELETE

> Ejemplos completos de operaciones CRUD con la API REST de PrestaShop: crear productos, actualizar stock, cambiar estado de pedido y eliminar recursos.

La API REST de PrestaShop usa el metodo HTTP para determinar la operacion: GET para leer, POST para crear, PUT para actualizar y DELETE para eliminar.

## GET — leer recursos

*GET — leer uno o varios recursos*

```php
<?php

function psApiGet(string $apiKey, string $shopUrl, string $endpoint, array $params = []): array
{
    $params['output_format'] = 'JSON';
    $url = rtrim($shopUrl, '/') . '/api/' . $endpoint . '?' . http_build_query($params);

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERPWD       => $apiKey . ':',
    ]);
    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true) ?? [];
}

// ── Obtener un producto por ID ──
$data = psApiGet($key, $url, 'products/42');
$product = $data['product'];
echo $product['reference'];

// ── Obtener lista de productos ──
$data = psApiGet($key, $url, 'products', [
    'display'       => '[id,reference,price]',
    'filter[active]'=> 1,
    'limit'         => 20,
]);
$products = $data['products'];

// ── Obtener stock de un producto ──
$data = psApiGet($key, $url, 'stock_availables', [
    'filter[id_product]' => 42,
    'display'            => 'full',
]);
$stock = $data['stock_availables'][0]['quantity'] ?? 0;
```

## POST — crear recursos

*POST — crear un nuevo producto*

```php
<?php

function psApiPost(string $apiKey, string $shopUrl, string $resource, string $xmlBody): array
{
    $url = rtrim($shopUrl, '/') . '/api/' . $resource . '?output_format=JSON';

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $xmlBody,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/xml'],
        CURLOPT_USERPWD       => $apiKey . ':',
    ]);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true) ?? [];
}

// ── XML para crear un producto ──
// Nota: La API PS usa XML para POST/PUT, incluso con output_format=JSON
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
  <product>
    <price>29.99</price>
    <reference>MY-REF-001</reference>
    <active>1</active>
    <id_category_default>2</id_category_default>
    <id_tax_rules_group>1</id_tax_rules_group>
    <name>
      <language id="1">Mi Nuevo Producto</language>
      <language id="2">My New Product</language>
    </name>
    <description>
      <language id="1"><![CDATA[<p>Descripcion del producto</p>]]></language>
    </description>
    <description_short>
      <language id="1"><![CDATA[Descripcion corta]]></language>
    </description_short>
  </product>
</prestashop>';

$response = psApiPost($key, $url, 'products', $xml);
$newProductId = $response['product']['id'] ?? null;
echo 'Producto creado con ID: ' . $newProductId;
```

## PUT — actualizar recursos

*PUT — actualizar stock y estado de pedido*

```php
<?php

function psApiPut(string $apiKey, string $shopUrl, string $endpoint, string $xmlBody): array
{
    $url = rtrim($shopUrl, '/') . '/api/' . $endpoint . '?output_format=JSON';

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST  => 'PUT',
        CURLOPT_POSTFIELDS     => $xmlBody,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/xml'],
        CURLOPT_USERPWD       => $apiKey . ':',
    ]);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true) ?? [];
}

// ── Actualizar stock de un producto ──
// Primero obtener el id_stock_available
$data = psApiGet($key, $url, 'stock_availables', ['filter[id_product]' => 42, 'display' => 'full']);
$idStock = $data['stock_availables'][0]['id'];

$stockXml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
  <stock_available>
    <id>' . $idStock . '</id>
    <id_product>42</id_product>
    <id_product_attribute>0</id_product_attribute>
    <quantity>100</quantity>
  </stock_available>
</prestashop>';

psApiPut($key, $url, 'stock_availables/' . $idStock, $stockXml);

// ── Cambiar estado de un pedido ──
$orderHistoryXml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop>
  <order_history>
    <id_order>123</id_order>
    <id_order_state>5</id_order_state>
  </order_history>
</prestashop>';

psApiPost($key, $url, 'order_histories', $orderHistoryXml);
```

## DELETE — eliminar recursos

*DELETE — eliminar un recurso*

```php
<?php

function psApiDelete(string $apiKey, string $shopUrl, string $endpoint): bool
{
    $url = rtrim($shopUrl, '/') . '/api/' . $endpoint;

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST  => 'DELETE',
        CURLOPT_USERPWD       => $apiKey . ':',
    ]);
    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $httpCode === 200;
}

// ── Eliminar un producto ──
$success = psApiDelete($key, $url, 'products/42');

// ── Eliminar multiples recursos ──
$idsToDelete = [100, 101, 102];
foreach ($idsToDelete as $id) {
    psApiDelete($key, $url, 'products/' . $id);
    usleep(100000); // 100ms entre peticiones para no saturar el servidor
}
```

## Operaciones comunes completas

| Operacion | Metodo | Endpoint | Notas |
| --- | --- | --- | --- |
| Crear producto | POST | products | Requiere XML con todos los campos requeridos |
| Actualizar precio | PUT | products/{id} | Enviar todo el objeto, no solo el campo modificado |
| Actualizar stock | PUT | stock_availables/{id} | Obtener id_stock_available primero con GET |
| Cambiar estado pedido | POST | order_histories | Crear un nuevo historial de estado |
| Actualizar tracking | PUT | order_carriers/{id} | Obtener id_order_carrier con GET |
| Crear cliente | POST | customers | El password se hashea automaticamente |
| Aplicar cupon | POST | cart_rules | Crear la regla de descuento |
| Subir imagen | POST | images/products/{id} | Requiere multipart/form-data |


---

*Fuente: [https://ayudaprestashop.es/webservice/crud-examples](https://ayudaprestashop.es/webservice/crud-examples). Version Markdown generada automaticamente para consumo por LLMs.*
