{
  "info": {
    "name": "ReGenerate Retailer API",
    "description": "Run in order with your rg_test_ key in apiKey. Without an environment it calls https://api-sandbox.regenerate.co.il/v1, the API of the deployment these docs came from; choose the sandbox or the production environment to call that one instead. The token request stores the token; the catalogue request picks the cheapest fixed SKU; \"Place an order\" makes a new reference each time it runs, and \"The same order again\" reuses it.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api-sandbox.regenerate.co.il/v1"
    },
    {
      "key": "token",
      "value": ""
    },
    {
      "key": "sku",
      "value": ""
    },
    {
      "key": "reference",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "1. Token",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('a token', () => pm.response.to.have.status(200));",
              "pm.collectionVariables.set('token', pm.response.json().accessToken);"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "auth": {
          "type": "noauth"
        },
        "header": [
          {
            "key": "content-type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"apiKey\": \"{{apiKey}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "{{baseUrl}}/auth/token",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "auth",
            "token"
          ]
        }
      }
    },
    {
      "name": "2. Balance",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/balance",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "balance"
          ]
        }
      }
    },
    {
      "name": "3. Catalogue",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('the catalogue', () => pm.response.to.have.status(200));",
              "const buyable = pm.response.json().items",
              "  .filter((item) => item.available && item.pricingMode === 'fixed')",
              "  .sort((a, b) => a.price - b.price);",
              "if (buyable.length) pm.collectionVariables.set('sku', buyable[0].sku);"
            ]
          }
        }
      ],
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/catalog",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "catalog"
          ]
        }
      }
    },
    {
      "name": "4. Availability",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/catalog/{{sku}}/availability",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "catalog",
            "{{sku}}",
            "availability"
          ]
        }
      }
    },
    {
      "name": "5. Place an order",
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.collectionVariables.set('reference', 'TILL-0001-' + new Date().toISOString().replace(/[^0-9]/g, '').slice(0, 14));"
            ]
          }
        },
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('created', () => pm.response.to.have.status(201));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [
          {
            "key": "content-type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"sku\": \"{{sku}}\",\n  \"quantity\": 1,\n  \"reference\": \"{{reference}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "{{baseUrl}}/orders",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "orders"
          ]
        }
      }
    },
    {
      "name": "6. The same order again",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('the same order, not a second one', () => pm.response.to.have.status(200));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [
          {
            "key": "content-type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"sku\": \"{{sku}}\",\n  \"quantity\": 1,\n  \"reference\": \"{{reference}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "{{baseUrl}}/orders",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "orders"
          ]
        }
      }
    },
    {
      "name": "7. Order status",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/orders/{{reference}}",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "orders",
            "{{reference}}"
          ]
        }
      }
    },
    {
      "name": "8. Codes",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/orders/{{reference}}/codes",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "orders",
            "{{reference}}",
            "codes"
          ]
        }
      }
    },
    {
      "name": "9. Orders of a day",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/orders?pageSize=50",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "orders"
          ],
          "query": [
            {
              "key": "pageSize",
              "value": "50"
            }
          ]
        }
      }
    },
    {
      "name": "Webhooks: list",
      "request": {
        "method": "GET",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/webhooks",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "webhooks"
          ]
        }
      }
    },
    {
      "name": "Webhooks: register",
      "request": {
        "method": "POST",
        "auth": {
          "type": "bearer",
          "bearer": [
            {
              "key": "token",
              "value": "{{token}}",
              "type": "string"
            }
          ]
        },
        "header": [
          {
            "key": "content-type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"url\": \"https://example.com/regenerate/callback\",\n  \"events\": [\n    \"order.delivered\",\n    \"order.failed\",\n    \"order.refunded\"\n  ]\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "{{baseUrl}}/webhooks",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "webhooks"
          ]
        },
        "description": "Replace the URL with your own https endpoint. The answer carries signingSecret once."
      }
    }
  ]
}
