{
  "info": {
    "_postman_id": "rc360-v1-public-api-collection",
    "name": "RegCheck360 v1 Public API",
    "description": "Public API for AU (TGA/FSANZ), BR (ANVISA), and CA (Health Canada) supplement ingredient compliance.\n\n**Setup**\n1. Mint an API key at https://regcheck360.com/account/api-keys (returned once — save it)\n2. In Postman, set the collection variable `api_key` to the `rc360_...` value\n3. (Optional) Override `base_url` if testing a non-prod deploy\n\nSee https://regcheck360.com/api/openapi.json for the canonical OpenAPI 3.1 spec, and `docs/PUBLIC_API_SPEC.md` in the repo for the narrative spec.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "base_url", "value": "https://regcheck360.com", "type": "string" },
    { "key": "api_key", "value": "rc360_PASTE_YOUR_KEY_HERE", "type": "string" }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{api_key}}", "type": "string" }]
  },
  "item": [
    {
      "name": "Compliance checks",
      "item": [
        {
          "name": "POST /v1/check — single ingredient",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Idempotency-Key", "value": "{{$guid}}", "description": "Optional. UUID v4. Same key + same body within 24h replays the cached response." }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ingredient\": \"magnesium glycinate\",\n  \"dose\": \"300mg\",\n  \"region\": \"AU\",\n  \"format\": \"capsule\"\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/check", "host": ["{{base_url}}"], "path": ["api", "v1", "check"] }
          }
        },
        {
          "name": "POST /v1/check/batch — up to 100 ingredients",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Idempotency-Key", "value": "{{$guid}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"region\": \"AU\",\n  \"ingredients\": [\n    { \"ingredient\": \"magnesium glycinate\", \"dose\": \"300mg\" },\n    { \"ingredient\": \"L-theanine\", \"dose\": \"200mg\" },\n    { \"ingredient\": \"zinc picolinate\", \"dose\": \"15mg\" }\n  ]\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/check/batch", "host": ["{{base_url}}"], "path": ["api", "v1", "check", "batch"] }
          }
        },
        {
          "name": "POST /v1/formula — whole formula",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Idempotency-Key", "value": "{{$guid}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"product_name\": \"Sleep Support Gummy\",\n  \"region\": \"AU\",\n  \"ingredients\": [\n    { \"name\": \"melatonin\", \"dose\": \"1mg\" },\n    { \"name\": \"magnesium glycinate\", \"dose\": \"200mg\" },\n    { \"name\": \"L-theanine\", \"dose\": \"150mg\" }\n  ]\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/formula", "host": ["{{base_url}}"], "path": ["api", "v1", "formula"] }
          }
        },
        {
          "name": "POST /v1/pathway — regulatory pathway advisor",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Idempotency-Key", "value": "{{$guid}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"region\": \"AU\",\n  \"product_name\": \"Pre-workout\",\n  \"format\": \"powder\",\n  \"ingredients\": [\n    { \"name\": \"creatine monohydrate\", \"dose\": \"3g\" },\n    { \"name\": \"beta-alanine\", \"dose\": \"3.2g\" }\n  ],\n  \"claims\": [\"performance\", \"endurance\"]\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/pathway", "host": ["{{base_url}}"], "path": ["api", "v1", "pathway"] }
          }
        },
        {
          "name": "POST /v1/scan — label OCR",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"image_base64\": \"<base64-encoded PNG/JPEG/WebP, ≤ 8 MB>\",\n  \"region\": \"AU\"\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/scan", "host": ["{{base_url}}"], "path": ["api", "v1", "scan"] }
          }
        },
        {
          "name": "GET /v1/ingredient/{slug} — cached lookup, no AI call",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/api/v1/ingredient/vitamin-c?region=AU",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "ingredient", "vitamin-c"],
              "query": [{ "key": "region", "value": "AU" }]
            },
            "description": "Returns the most recent cached verdict for (region, ingredient). Populated by successful /v1/check calls. 404 on cache miss. Does NOT burn monthly quota."
          }
        }
      ]
    },
    {
      "name": "Account",
      "item": [
        {
          "name": "GET /v1/whoami — key metadata",
          "request": {
            "method": "GET",
            "url": { "raw": "{{base_url}}/api/v1/whoami", "host": ["{{base_url}}"], "path": ["api", "v1", "whoami"] }
          }
        },
        {
          "name": "GET /v1/usage — current month usage + limits",
          "request": {
            "method": "GET",
            "url": { "raw": "{{base_url}}/api/v1/usage", "host": ["{{base_url}}"], "path": ["api", "v1", "usage"] }
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "POST /v1/webhooks — register",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://your-app.example.com/webhooks/regcheck\",\n  \"events\": [\n    \"regulatory_alert.created\",\n    \"ingredient.status_changed\",\n    \"check.completed\",\n    \"formula.completed\"\n  ],\n  \"description\": \"Production receiver\"\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/webhooks", "host": ["{{base_url}}"], "path": ["api", "v1", "webhooks"] },
            "description": "Returns `secret` (whsec_<hex>) ONCE in the response. Save it — you'll need it to verify HMAC signatures on inbound delivery."
          }
        },
        {
          "name": "GET /v1/webhooks — list",
          "request": {
            "method": "GET",
            "url": { "raw": "{{base_url}}/api/v1/webhooks", "host": ["{{base_url}}"], "path": ["api", "v1", "webhooks"] }
          }
        },
        {
          "name": "DELETE /v1/webhooks/{id} — remove",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{base_url}}/api/v1/webhooks/:id",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "webhooks", ":id"],
              "variable": [{ "key": "id", "value": "00000000-0000-0000-0000-000000000000" }]
            }
          }
        },
        {
          "name": "GET /v1/webhooks/{id}/deliveries — last 50 attempts",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/api/v1/webhooks/:id/deliveries",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "webhooks", ":id", "deliveries"],
              "variable": [{ "key": "id", "value": "00000000-0000-0000-0000-000000000000" }]
            }
          }
        }
      ]
    },
    {
      "name": "Discovery",
      "item": [
        {
          "name": "GET /api/openapi.json — OpenAPI 3.1 spec",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": { "raw": "{{base_url}}/api/openapi.json", "host": ["{{base_url}}"], "path": ["api", "openapi.json"] }
          }
        },
        {
          "name": "GET /api/openapi.yaml — same spec, YAML",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": { "raw": "{{base_url}}/api/openapi.yaml", "host": ["{{base_url}}"], "path": ["api", "openapi.yaml"] }
          }
        }
      ]
    },
    {
      "name": "v1.1 envelope (opt-in)",
      "item": [
        {
          "name": "POST /v1/check with wrapped error envelope",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              {
                "key": "Accept",
                "value": "application/vnd.regcheck360.v1.1+json",
                "description": "Opt into the wrapped error shape: {error:{code,message,type,request_id,doc_url}}. Default flat shape unchanged when this header is absent."
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ingredient\": \"vitamin D3\",\n  \"dose\": \"1000IU\",\n  \"region\": \"AU\"\n}"
            },
            "url": { "raw": "{{base_url}}/api/v1/check", "host": ["{{base_url}}"], "path": ["api", "v1", "check"] }
          }
        }
      ]
    }
  ]
}
