{
  "info": {
    "_postman_id": "b974e886-0c19-415f-8aec-35ea19594d86",
    "name": "RiskWatch API v1",
    "description": "Generated from the RiskWatch OpenAPI 1.0.0 document (https://api.riskwatch.pl/v1/openapi.json) by scripts/gen-postman.ts. Set `apiKey` in a private Postman environment (never in this collection). `nip` defaults to the sandbox NIP 1111111111, which returns deterministic fixtures with an rw_test_ key.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Health",
      "item": [
        {
          "name": "Health status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "Returns service health and availability configuration for VAT, KRS and KRZ registries.\n\noperationId: getHealth",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Watchlist",
      "item": [
        {
          "name": "List watchlist",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/watchlist",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "Opaque keyset cursor from a previous response meta.next_cursor."
                },
                {
                  "key": "band",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated risk bands; only entities with a computed score match."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "source",
                  "value": "",
                  "disabled": true,
                  "description": "Rows monitoring this source."
                },
                {
                  "key": "label_prefix",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive label prefix; % and _ match literally, * is rejected."
                },
                {
                  "key": "external_id",
                  "value": "",
                  "disabled": true,
                  "description": "Exact external_id match (not unique: several rows may share one)."
                }
              ]
            },
            "description": "Lists monitored Polish NIPs on the organization watchlist with current entity details and risk scores.\n\noperationId: listWatchlist"
          }
        },
        {
          "name": "Add NIPs to watchlist",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist"
              ]
            },
            "description": "Adds or reactivates up to 500 Polish NIPs on the organization watchlist and queues initial registry checks.\n\noperationId: addWatchlist",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nips\": [\n    \"{{nip}}\"\n  ],\n  \"sources\": [\n    \"VAT\"\n  ],\n  \"check_frequency\": \"daily\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove NIPs from watchlist",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist"
              ]
            },
            "description": "Marks one or more monitored NIPs as deleted on the organization watchlist.\n\noperationId: removeWatchlist",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nips\": [\n    \"{{nip}}\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Set review interval",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist/{{nip}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "{{nip}}"
              ]
            },
            "description": "Sets (or clears with null) the periodic review interval in days for one monitored NIP, for an ongoing-monitoring calendar such as art. 34 ust. 1 pkt 4 of the Polish AML act. The interval is your policy, not a RiskWatch default. Requires the write scope; idempotent by value. 503 until the review calendar migration is applied. rw_test keys get a fixture for the sandbox NIPs.\n\noperationId: setWatchlistReviewInterval",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"review_interval_days\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Acknowledge a review",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist/{{nip}}/review",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "{{nip}}",
                "review"
              ]
            },
            "description": "Records that the counterparty file was reviewed now: stamps last_reviewed_at and writes an audit log entry (with the optional note). Events are not changed. Requires the write scope. rw_test keys get a fixture and nothing is stored.\n\noperationId: acknowledgeWatchlistReview",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Start an asynchronous bulk watchlist import",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist/imports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "imports"
              ]
            },
            "description": "Accepts text/csv (header row nip[,label][,external_id]; comma or semicolon delimited) or JSON {items:[...]} / {csv:string} with up to 25,000 rows and answers 202 with a job; poll GET /watchlist/imports/{id}. The whole import is rejected up front (403) when it cannot fit the plan watchlist limit. Rows are added through the same path as POST /watchlist. XLSX is not accepted: export the sheet as CSV. Sandbox (rw_test) keys get 403. Requires the write scope.\n\noperationId: createWatchlistImport",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"nip\": \"{{nip}}\"\n    }\n  ],\n  \"sources\": [\n    \"VAT\"\n  ],\n  \"check_frequency\": \"daily\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Bulk import status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/watchlist/imports/{{id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "imports",
                "{{id}}"
              ]
            },
            "description": "Returns the status, totals and the first 1000 per-row errors (row number and reason only) of an import job of this organization. Sandbox (rw_test) keys get 403.\n\noperationId: getWatchlistImport"
          }
        },
        {
          "name": "Look up watchlist rows by external_id",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/watchlist/lookup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "lookup"
              ]
            },
            "description": "Maps up to 500 external_id values to the organization watchlist rows that carry them. Writes nothing, so a read-scoped key may call it. Sandbox fixtures carry no external_id, so a sandbox key gets every id back in not_found.\n\noperationId: lookupWatchlistByExternalId",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"external_ids\": [\n    \"<external_ids>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Export the watchlist (CSV)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/watchlist/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "watchlist",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "band",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated risk bands; only entities with a computed score match."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "source",
                  "value": "",
                  "disabled": true,
                  "description": "Rows monitoring this source."
                },
                {
                  "key": "label_prefix",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive label prefix; % and _ match literally, * is rejected."
                },
                {
                  "key": "external_id",
                  "value": "",
                  "disabled": true,
                  "description": "Exact external_id match (not unique: several rows may share one)."
                }
              ]
            },
            "description": "Streams up to 100,000 watchlist rows of this organization as text/csv with the risk band and score, with the same filters as GET /watchlist. Formula-injection guarded like the events export. Sandbox (rw_test) keys get 403.\n\noperationId: exportWatchlist"
          }
        }
      ]
    },
    {
      "name": "Entities",
      "item": [
        {
          "name": "Entity status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}"
              ]
            },
            "description": "Returns current VAT, KRS and KRZ registry status, metadata and latest risk score for a monitored 10-digit Polish NIP.\n\noperationId: getEntityStatus"
          }
        },
        {
          "name": "Entity risk",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}/risk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}",
                "risk"
              ]
            },
            "description": "Returns the computed risk score (0-100), risk band (LOW, MEDIUM, HIGH, CRITICAL) and weighted reasons for a monitored Polish NIP.\n\noperationId: getEntityRisk"
          }
        },
        {
          "name": "Entity events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}",
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "Opaque keyset cursor from a previous response meta.next_cursor."
                }
              ]
            },
            "description": "Lists chronological registry change events (VAT, KRS, KRZ) detected for a specific monitored NIP.\n\noperationId: listEntityEvents"
          }
        },
        {
          "name": "Queue manual refresh",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}/refresh",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}",
                "refresh"
              ]
            },
            "description": "Queues an immediate on-demand registry check across allowed sources (VAT, KRS, KRZ) for a monitored NIP.\n\noperationId: refreshEntity"
          }
        },
        {
          "name": "Entity risk score history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}/risk/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}",
                "risk",
                "history"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "Opaque keyset cursor from a previous response meta.next_cursor."
                }
              ]
            },
            "description": "Lists distinct computed risk states for a monitored NIP, newest first (a row is stored only when score, band or reasons changed). Cursor-paginated. 404 if the NIP is not on the organization watchlist; 503 until score history is enabled. Sandbox keys get fixture history. Requires the read scope.\n\noperationId: listEntityRiskHistory"
          }
        },
        {
          "name": "Explain a risk score change",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/{{nip}}/risk/explain",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "{{nip}}",
                "risk",
                "explain"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "2026-01-01T00:00:00Z",
                  "disabled": false,
                  "description": "ISO 8601 instant with offset."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "ISO 8601 instant with offset, after `from`. Defaults to now."
                }
              ]
            },
            "description": "Returns the stored risk snapshots in effect at `from` and at `to` (default now) and a deterministic diff: reasons added, removed and with changed impact, each with the event that caused it. 404 if the NIP is not on the organization watchlist; 503 until score history is enabled. Requires the read scope.\n\noperationId: explainEntityRiskChange"
          }
        },
        {
          "name": "Search monitored entities by name",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/entities/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "entities",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "Demo",
                  "disabled": false,
                  "description": ""
                }
              ]
            },
            "description": "Case-insensitive name fragment search over this organization watchlist only (never the public registers). q is 3-80 characters; % and _ match literally; at most 50 results. Sandbox keys search the fixtures.\n\noperationId: searchEntities"
          }
        }
      ]
    },
    {
      "name": "Events",
      "item": [
        {
          "name": "Organization event feed",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "Opaque keyset cursor from a previous response meta.next_cursor."
                },
                {
                  "key": "severity",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated severities."
                },
                {
                  "key": "source",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated sources."
                },
                {
                  "key": "event_type",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated event types (closed list)."
                },
                {
                  "key": "since",
                  "value": "",
                  "disabled": true,
                  "description": "detected_at >= since (ISO 8601 with offset)."
                },
                {
                  "key": "until",
                  "value": "",
                  "disabled": true,
                  "description": "detected_at < until; must be after since."
                },
                {
                  "key": "resolved",
                  "value": "",
                  "disabled": true,
                  "description": "true: resolved events only; false: open events only."
                }
              ]
            },
            "description": "Lists recent registry risk events across all NIPs monitored by the organization.\n\noperationId: listEvents"
          }
        },
        {
          "name": "Export the event feed (CSV or JSONL)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/events/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "severity",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated severities."
                },
                {
                  "key": "source",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated sources."
                },
                {
                  "key": "event_type",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated event types (closed list)."
                },
                {
                  "key": "since",
                  "value": "",
                  "disabled": true,
                  "description": "detected_at >= since (ISO 8601 with offset)."
                },
                {
                  "key": "until",
                  "value": "",
                  "disabled": true,
                  "description": "detected_at < until; must be after since."
                },
                {
                  "key": "resolved",
                  "value": "",
                  "disabled": true,
                  "description": "true: resolved events only; false: open events only."
                }
              ]
            },
            "description": "Streams up to 100,000 events of this organization, newest first, as text/csv (default) or application/x-ndjson, with the same filters as GET /events. CSV cells starting with = + - @ TAB or CR are prefixed with an apostrophe. PDF is not offered. Sandbox (rw_test) keys get 403.\n\noperationId: exportEvents"
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "List webhooks",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks"
              ]
            },
            "description": "Lists configured HTTPS webhook endpoints for the organization.\n\noperationId: listWebhooks"
          }
        },
        {
          "name": "Create webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks"
              ]
            },
            "description": "Registers a new HTTPS webhook endpoint and returns its one-time HMAC-SHA256 signing secret.\n\noperationId: createWebhook",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/riskwatch-webhook\",\n  \"event_types\": [\n    \"*\"\n  ],\n  \"payload_format\": \"riskwatch\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete webhook",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{id}}"
              ]
            },
            "description": "Deletes a webhook endpoint by UUID.\n\noperationId: deleteWebhook"
          }
        },
        {
          "name": "Webhook deliveries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{id}}/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "deliveries"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "Opaque keyset cursor from a previous response meta.next_cursor."
                }
              ]
            },
            "description": "Lists recent delivery attempts and HTTP status codes for a specific webhook UUID.\n\noperationId: listWebhookDeliveries"
          }
        },
        {
          "name": "Replay webhook delivery",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{id}}/deliveries/{{deliveryId}}/replay",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "deliveries",
                "{{deliveryId}}",
                "replay"
              ]
            },
            "description": "Requeues one failed or delivered delivery of an active webhook (status pending, attempts 0, due now). It is re-signed with a fresh timestamp and keeps its delivery id. 409 if the delivery is pending/sending or the webhook is inactive. Requires the webhooks scope.\n\noperationId: replayWebhookDelivery"
          }
        },
        {
          "name": "Replay failed webhook deliveries",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{id}}/replay-failed",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "replay-failed"
              ]
            },
            "description": "Requeues failed deliveries of an active webhook created in the since..until window (max 7 days), at most 500 per call (oldest first). Requires the webhooks scope.\n\noperationId: replayFailedWebhookDeliveries",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"since\": \"2026-01-08T00:00:00Z\",\n  \"until\": \"2026-01-15T00:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Rotate webhook signing secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{id}}/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "rotate-secret"
              ]
            },
            "description": "Generates a new signing secret for an active webhook and returns it once. The previous secret keeps signing for grace_hours (default 24, max 168): during that window every delivery carries two v1= signatures in X-RiskWatch-Signature, so a receiver holding either secret verifies. Only one previous secret is kept; rotating again replaces it. 404 if the webhook is not active in this organization; 503 while the server is being upgraded. Requires the webhooks scope; rw_test keys get 403.\n\noperationId: rotateWebhookSecret",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"grace_hours\": 24\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "item": [
        {
          "name": "Usage counters",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "usage"
              ]
            },
            "description": "Returns current billing-period and daily usage counters against plan limits.\n\noperationId: getUsage"
          }
        }
      ]
    },
    {
      "name": "One-shot checks",
      "item": [
        {
          "name": "One-shot VAT whitelist check (up to 30 NIPs)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checks/vat",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checks",
                "vat"
              ]
            },
            "description": "Checks up to 30 Polish NIPs against the MF VAT whitelist in one upstream request without adding them to the watchlist. Metered as one API request. Requires the read scope.\n\noperationId: checkVatBatch",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nips\": [\n    \"{{nip}}\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Payment-time bank account check",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checks/bank-account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checks",
                "bank-account"
              ]
            },
            "description": "Checks whether a bank account (NRB) is on the MF VAT whitelist for a NIP on a given date, using the MF check method. The account is never echoed in full. Metered as one API request. Requires the read scope.\n\noperationId: checkBankAccount",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nip\": \"{{nip}}\",\n  \"account\": \"<26-digit NRB>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "One-shot EU VIES VAT number check",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checks/vies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checks",
                "vies"
              ]
            },
            "description": "Checks an EU VAT number against the European Commission VIES service (live member-state lookup). A member-state outage is a 503 with retry_after, never valid=false. Metered as one API request; refunded on errors. Requires the read scope; rw_test keys get 403.\n\noperationId: checkVies",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"country_code\": \"<country_code>\",\n  \"vat_number\": \"<vat_number>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "One-shot sanctions screening (MSWiA, EU FSF, OFAC SDN)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checks/sanctions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checks",
                "sanctions"
              ]
            },
            "description": "Screens a Polish NIP and/or a name against locally synced copies of the Polish MSWiA list, the EU consolidated financial sanctions list and the OFAC SDN list. Exact identifier match first, then exact normalized name/alias; no fuzzy scoring. A list older than 48h makes an empty result inconclusive. Metered as one API request. Requires the read scope; rw_test keys get 403.\n\noperationId: checkSanctions",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nip\": \"{{nip}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "OpenAPI",
      "item": [
        {
          "name": "OpenAPI specification",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/openapi.json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "openapi.json"
              ]
            },
            "description": "Returns the OpenAPI 3.1 JSON contract for RiskWatch API v1.\n\noperationId: getOpenApiSpec",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "portfolio",
      "item": [
        {
          "name": "Portfolio risk summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/portfolio/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "portfolio",
                "summary"
              ]
            },
            "description": "One aggregate over the active watchlist: counts by risk band (with UNSCORED), band by monitored source, open events by source and severity, and NIPs whose score rose in the last 7 days. Requires the read scope.\n\noperationId: getPortfolioSummary"
          }
        }
      ]
    },
    {
      "name": "reviews",
      "item": [
        {
          "name": "Reviews due",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reviews/due",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reviews",
                "due"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                }
              ]
            },
            "description": "Lists monitored NIPs whose review is due: last_reviewed_at (or the date added, if never reviewed) plus review_interval_days is now or earlier, oldest first, at most limit rows. Items without an interval never appear. Requires the read scope.\n\noperationId: listReviewsDue"
          }
        }
      ]
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.riskwatch.pl/v1",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    },
    {
      "key": "nip",
      "value": "1111111111",
      "type": "string"
    },
    {
      "key": "id",
      "value": "",
      "type": "string"
    },
    {
      "key": "deliveryId",
      "value": "",
      "type": "string"
    }
  ]
}
