{
  "info": {
    "name": "Blume Developer API v1",
    "description": "27 operaciones verificadas contra los controladores públicos. Importe también el entorno, complete credenciales locales y ejecute auth/token primero. Las escrituras están bloqueadas por defecto. Datos ficticios: adapte cada request. No es un sandbox alojado.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{access_token}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "auth",
      "item": [
        {
          "name": "POST /v1/developer/auth/token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
              }
            ],
            "url": "{{base_url}}/v1/developer/auth/token",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. ",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                },
                {
                  "key": "scope",
                  "value": "{{scope}}",
                  "type": "text"
                }
              ]
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.environment.unset(\"access_token\");",
                  "if (pm.response.code === 200) {",
                  "  const data = pm.response.json();",
                  "  pm.test(\"Token recibido\", () => pm.expect(data.access_token).to.be.a(\"string\").and.not.empty);",
                  "  if (data.access_token) pm.environment.set(\"access_token\", data.access_token);",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "catalog",
      "item": [
        {
          "name": "GET /v1/developer/catalog/products",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/catalog/products",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. catalog:read"
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/catalog/products/search",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/catalog/products/search",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. ",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filters\": [\n    \"brand=Marca%20de%20ejemplo\",\n    \"family=Zapatos\",\n    \"gender=Mujer\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/catalog/products/expand",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/catalog/products/expand",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. ",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"referenceCode\": \"ABC123\",\n  \"colorCode\": \"001\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/catalog/products/{externalId}/availability",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/catalog/products/{{externalId}}/availability",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. catalog:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/catalog/products/{externalId}/nearest-locations",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/catalog/products/{{externalId}}/nearest-locations?latitude=9.9325&longitude=-84.0796&quantity=1&maxResults=5",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. catalog:read locations:read"
          },
          "response": []
        }
      ]
    },
    {
      "name": "customers",
      "item": [
        {
          "name": "GET /v1/developer/customers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/customers?limit=10",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. customers:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/customers/{customerId}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/customers/{{customerId}}",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. customers:read"
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/customers/verify",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/customers/verify",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. customers:read",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"cliente@example.com\",\n  \"documentId\": \"1-1111-1111\",\n  \"phone\": \"88888888\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/customers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/customers",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. customers:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fullName\": \"María Rodríguez\",\n  \"documentId\": \"1-1111-1111\",\n  \"email\": \"maria@example.com\",\n  \"phone\": \"88888888\",\n  \"subscribedNewsletter\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "POST /v1/developer/customers/{customerId}/addresses",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/customers/{{customerId}}/addresses",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. customers:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"isDefault\": true,\n  \"country\": \"Costa Rica\",\n  \"state\": \"San José\",\n  \"city\": \"Escazú\",\n  \"zipCode\": \"10201\",\n  \"coordinates\": \"9.9325,-84.0796\",\n  \"locationDescription\": \"Frente al parque, casa azul.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "carts",
      "item": [
        {
          "name": "GET /v1/developer/carts/summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/carts/summary?range=7d",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. carts:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/carts/abandoned",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/carts/abandoned?limit=10",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. carts:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/carts/{cartId}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/carts/{{cartId}}",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. carts:read"
          },
          "response": []
        }
      ]
    },
    {
      "name": "orders",
      "item": [
        {
          "name": "GET /v1/developer/orders",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/orders?limit=10",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. orders:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/orders/{orderId}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/orders/{{orderId}}",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. orders:read"
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/orders",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/orders",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. orders:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customer\": {\n    \"fullName\": \"María Rodríguez\",\n    \"documentId\": \"1-1111-1111\",\n    \"email\": \"maria@example.com\",\n    \"phone\": \"88888888\"\n  },\n  \"address\": {\n    \"country\": \"Costa Rica\",\n    \"state\": \"San José\",\n    \"city\": \"Escazú\",\n    \"locationDescription\": \"Frente al parque\",\n    \"coordinates\": \"9.9325,-84.0796\"\n  },\n  \"order\": {\n    \"deliveryMethod\": \"Envío estándar\",\n    \"deliveryType\": \"delivery\",\n    \"paymentMethod\": \"moneytransfer\",\n    \"currency\": \"CRC\",\n    \"subtotal\": 25000,\n    \"deliveryCost\": 2500,\n    \"discount\": 0,\n    \"tax\": 0,\n    \"total\": 27500,\n    \"items\": [\n      {\n        \"productId\": 12345,\n        \"description\": \"Producto ejemplo\",\n        \"quantity\": 1,\n        \"unitPrice\": 25000,\n        \"total\": 25000,\n        \"isDiscountPrice\": false\n      }\n    ]\n  },\n  \"transactionLog\": {\n    \"paymentMethod\": \"moneytransfer\",\n    \"clientIp\": \"190.0.0.1\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "PATCH /v1/developer/orders/{orderId}/status",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/orders/{{orderId}}/status",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. orders:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deliveryStatus\": \"facturado\",\n  \"trackingNumber\": \"ABC123\",\n  \"sendEmail\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "POST /v1/developer/orders/items/update",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/orders/items/update",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. orders:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"storeName\": \"demo-blume\",\n  \"orderNumber\": \"8123\",\n  \"subtotal\": 24000,\n  \"discount\": 1000,\n  \"total\": 23000,\n  \"items\": [\n    {\n      \"description\": \"Zapato negro\",\n      \"productId\": 12345,\n      \"quantity\": 1,\n      \"unitPrice\": 24000,\n      \"total\": 24000,\n      \"isDiscountPrice\": false\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "discounts",
      "item": [
        {
          "name": "GET /v1/developer/discounts/verify",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/discounts/verify?code={{discount_code}}",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. discounts:read"
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/discounts/verify",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/discounts/verify",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. discounts:read",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"WELCOME10\",\n  \"items\": [\n    {\n      \"productId\": 12345,\n      \"description\": \"Producto ejemplo\",\n      \"quantity\": 1,\n      \"unitPrice\": 25000,\n      \"total\": 25000,\n      \"isDiscountPrice\": false\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "emails",
      "item": [
        {
          "name": "POST /v1/developer/emails/template/send",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/emails/template/send",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. emails:send Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"templateId\": \"SU_TEMPLATE_ID\",\n  \"fromName\": \"Tienda de ejemplo\",\n  \"customer\": {\n    \"name\": \"Ana Cliente\",\n    \"email\": \"ana@example.com\",\n    \"phone\": \"8888-8888\",\n    \"documentId\": \"1-1111-1111\"\n  },\n  \"store\": {\n    \"chain\": \"demo-blume\",\n    \"name\": \"Tienda Escazú\"\n  },\n  \"order\": {\n    \"number\": \"F001-100\",\n    \"subtotal\": \"24000\",\n    \"discount\": \"0\",\n    \"tax\": \"0\",\n    \"total\": \"24000\",\n    \"cashback\": \"1200\",\n    \"cashbackRedeem\": \"0\",\n    \"items\": [\n      {\n        \"description\": \"Compra en tienda\",\n        \"unitPrice\": \"24000\",\n        \"quantity\": \"1\",\n        \"total\": \"24000\"\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "gift-cards",
      "item": [
        {
          "name": "GET /v1/developer/gift-cards/verify",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/gift-cards/verify?code={{gift_card_code}}",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. giftcards:read"
          },
          "response": []
        },
        {
          "name": "POST /v1/developer/gift-cards/use",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/gift-cards/use",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. giftcards:write Esta llamada modifica datos o envía comunicaciones. Bloqueada hasta establecer allow_writes=true explícitamente.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"ABCD1234\",\n  \"usedPlace\": \"Sucursal de ejemplo\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.environment.get(\"allow_writes\") !== \"true\") {",
                  "  console.warn(\"Escritura omitida. Revise los datos y habilite allow_writes solo para una cuenta de prueba.\");",
                  "  pm.execution.skipRequest();",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "locations",
      "item": [
        {
          "name": "GET /v1/developer/locations",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/locations",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. locations:read"
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/locations/nearest",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/locations/nearest?latitude=9.9325&longitude=-84.0796&maxResults=5",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. "
          },
          "response": []
        },
        {
          "name": "GET /v1/developer/locations/{externalWarehouseId}/products",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/v1/developer/locations/{{externalWarehouseId}}/products",
            "description": "Ejemplo de referencia. Sustituya IDs y datos por los de su comercio de prueba. locations:read catalog:read"
          },
          "response": []
        }
      ]
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "const rawUrl = pm.request.url.toString();",
          "const required = [...rawUrl.matchAll(/{{([^}]+)}}/g)].map(m => m[1]);",
          "if (required.some(key => !pm.variables.get(key))) { console.warn(\"Complete las variables de la URL.\"); pm.execution.skipRequest(); }",
          "const resolved = pm.variables.replaceIn(rawUrl);",
          "if (resolved.includes(\"{{\")) { console.warn(\"Complete las variables de la URL.\"); pm.execution.skipRequest(); }",
          "if (!resolved.endsWith(\"/auth/token\") && !pm.environment.get(\"access_token\")) { console.warn(\"Ejecute auth/token primero.\"); pm.execution.skipRequest(); }"
        ]
      }
    }
  ]
}
