{
  "info": {
    "name": "Sampuli API",
    "description": "Free, keyless, CORS-open synthetic test data for 90 countries. Real formats, never real data. Docs: https://sampuli.site/api",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "base_url", "value": "https://sampuli.site/api/v1", "type": "string" },
    { "key": "country", "value": "ke", "type": "string" }
  ],
  "item": [
    {
      "name": "List all countries",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/countries", "host": ["{{base_url}}"], "path": ["countries"] },
        "description": "Every country Sampuli supports, with ISO code, name, currency and region."
      }
    },
    {
      "name": "Describe a country (fields + presets)",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}", "host": ["{{base_url}}"], "path": ["{{country}}"] },
        "description": "The record types, fields (each tagged default:true|false) and preset scenarios available for a country."
      }
    },
    {
      "name": "Single field value",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/phone", "host": ["{{base_url}}"], "path": ["{{country}}", "phone"] },
        "description": "One value for a single field (phone, id, account, swift, card, iban, …)."
      }
    },
    {
      "name": "A record (core fields)",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/person", "host": ["{{base_url}}"], "path": ["{{country}}", "person"] },
        "description": "One coherent record with the country's common fields. For everything (cards, passport, income…), use 'A full record' below."
      }
    },
    {
      "name": "A full record (all PII)",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/full", "host": ["{{base_url}}"], "path": ["{{country}}", "full"] },
        "description": "Every field: card + CVV, passport + MRZ, transaction, IP, licence, income, employer, and more."
      }
    },
    {
      "name": "A company",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/company", "host": ["{{base_url}}"], "path": ["{{country}}", "company"] },
        "description": "A synthetic company: name with the country's legal suffix (GmbH, Pty Ltd, K.K.), industry, VAT, phone, website, currency."
      }
    },
    {
      "name": "A product (valid EAN-13)",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/product", "host": ["{{base_url}}"], "path": ["{{country}}", "product"] },
        "description": "A catalogue row: name, brand, category, SKU, price in the local currency, stock, rating, and a checksum-valid EAN-13 barcode."
      }
    },
    {
      "name": "100 records",
      "request": {
        "method": "GET",
        "url": {
          "raw": "{{base_url}}/{{country}}/person?n=100",
          "host": ["{{base_url}}"], "path": ["{{country}}", "person"],
          "query": [{ "key": "n", "value": "100" }]
        },
        "description": "A JSON array of 100 records. n is capped at 1000 on the free API."
      }
    },
    {
      "name": "Chosen fields as CSV",
      "request": {
        "method": "GET",
        "url": {
          "raw": "{{base_url}}/de/person?fields=name,account,card&n=50&format=csv",
          "host": ["{{base_url}}"], "path": ["de", "person"],
          "query": [
            { "key": "fields", "value": "name,account,card" },
            { "key": "n", "value": "50" },
            { "key": "format", "value": "csv" }
          ]
        },
        "description": "Pick fields, choose CSV. Use format=ndjson for newline-delimited JSON. fields=all returns everything."
      }
    },
    {
      "name": "Reproducible with a seed",
      "request": {
        "method": "GET",
        "url": {
          "raw": "{{base_url}}/{{country}}/person?n=10&seed=demo",
          "host": ["{{base_url}}"], "path": ["{{country}}", "person"],
          "query": [{ "key": "n", "value": "10" }, { "key": "seed", "value": "demo" }]
        },
        "description": "Same seed → same data, every time."
      }
    },
    {
      "name": "A preset scenario",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/{{country}}/preset:kyc", "host": ["{{base_url}}"], "path": ["{{country}}", "preset:kyc"] },
        "description": "An ordered KYC scenario (label/value rows)."
      }
    },
    {
      "name": "A valid IBAN",
      "request": {
        "method": "GET",
        "url": { "raw": "{{base_url}}/de/iban", "host": ["{{base_url}}"], "path": ["de", "iban"] },
        "description": "IBAN with a valid mod-97 check. Works for any IBAN country (fr, nl, es, ae, …)."
      }
    },
    {
      "name": "Batch — mix countries in one call (GET)",
      "request": {
        "method": "GET",
        "url": {
          "raw": "{{base_url}}/batch?specs=ng.phone,ke.full:3,de.company,de.person@name+card",
          "host": ["{{base_url}}"], "path": ["batch"],
          "query": [{ "key": "specs", "value": "ng.phone,ke.full:3,de.company,de.person@name+card" }]
        },
        "description": "One request, many specs. Each is country.selector[:count][@fields]. :N = how many; @all or @name+card = fields; the full selector gives everything. Up to 50 requests / 1000 rows."
      }
    },
    {
      "name": "Batch — full control (POST)",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"requests\": [\n    { \"spec\": \"ng.phone\", \"key\": \"ceo_phone\" },\n    { \"spec\": \"ke.person\", \"n\": 3, \"fields\": [\"name\", \"phone\", \"account\"] },\n    { \"spec\": \"de.full\", \"n\": 2, \"seed\": \"demo\" }\n  ]\n}"
        },
        "url": { "raw": "{{base_url}}/batch", "host": ["{{base_url}}"], "path": ["batch"] },
        "description": "POST a list of requests, each with its own spec, n, fields, seed and optional key. Returns { count, results: [ { spec, data } | { spec, error } ] } — one bad spec never fails the batch."
      }
    }
  ]
}
