{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Sanctions List Change Monitor (FCDO UKSL)",
    "description": "Track changes to the UK Sanctions List entries you are exposed to: watch FCDO UKSL Unique IDs and get DELISTED, VARIATION (regime, sanctions, names) and DESIGNATED events from the official UKSL file. For compliance teams holding frozen assets or acting under OFSI licences. No API key.",
    "version": "0.1",
    "x-build-id": "mf85R18tJC7oTDPbc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/plym-actor-factory~uk-sanctions-list-counterparty-portfolio-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-plym-actor-factory-uk-sanctions-list-counterparty-portfolio-watch",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/plym-actor-factory~uk-sanctions-list-counterparty-portfolio-watch/runs": {
      "post": {
        "operationId": "runs-sync-plym-actor-factory-uk-sanctions-list-counterparty-portfolio-watch",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/plym-actor-factory~uk-sanctions-list-counterparty-portfolio-watch/run-sync": {
      "post": {
        "operationId": "run-sync-plym-actor-factory-uk-sanctions-list-counterparty-portfolio-watch",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "uniqueIds": {
            "title": "UKSL Unique IDs to watch (example IDs prefilled — replace with yours)",
            "type": "array",
            "description": "FCDO UKSL Unique IDs to monitor (e.g. AFG0001). Preferred match key. Invalid/blank entries are skipped with no charge. Not a nationwide dump — only IDs on the book are evaluated.",
            "default": [
              "AFG0001",
              "AFG0003"
            ],
            "items": {
              "type": "string"
            }
          },
          "ofsiGroupIds": {
            "title": "OFSI Group IDs (optional)",
            "type": "array",
            "description": "Optional legacy OFSI Group ID keys. Resolved to Unique IDs present on the current UKSL snapshot.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "names": {
            "title": "Normalised names (imperfect fallback)",
            "type": "array",
            "description": "Optional counterparty names when Unique ID is unknown. Matching is imperfect (aliases / non-Latin script / punctuation). Prefer Unique ID. Matched entities are keyed by Unique ID for checkpoints. First run per name is a silent baseline; a new Unique ID under a watched name on a later run is reported as UKSL_DESIGNATED (match_method=name).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "signalGroups": {
            "title": "Signal groups",
            "type": "array",
            "description": "Which change groups to evaluate: designation (DESIGNATED / DELISTED presence flips), variation (material regime / sanctions / name / designation-type changes). Default: both.",
            "default": [
              "designation",
              "variation"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "minimum": 5,
            "maximum": 900,
            "type": "integer",
            "description": "Wall-clock budget for CSV/XML download + watchlist diff. UKSL CSV is ~50 MB — allow enough headroom.",
            "default": 120
          },
          "maxEvents": {
            "title": "Max delivered change events",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many unique change events are delivered (does not include RUN_STATUS).",
            "default": 500
          },
          "resumeFromCheckpoint": {
            "title": "Resume from stored checkpoint",
            "type": "boolean",
            "description": "If true, resume entity snapshots and seen event_uids from the default Key-Value Store.",
            "default": true
          },
          "sourceMode": {
            "title": "Source mode (set to live for real data)",
            "enum": [
              "fixture",
              "live"
            ],
            "type": "string",
            "description": "fixture = local/CI / Apify Store daily auto-test default (no network; emits RUN_STATUS only unless emitFixtureDemoEvents=true). live = official FCDO UKSL CSV/XML (no API key). Not HTML scrape; not ComplyAdvantage/OpenSanctions paid; not OFAC SDN.",
            "default": "fixture"
          },
          "emitFixtureDemoEvents": {
            "title": "Emit fixture demo change events",
            "type": "boolean",
            "description": "When sourceMode=fixture, if true push fabricated change events from local fixtures (unit/local demos only). Default false so Store daily auto-tests never emit fake UKSL events or charge uksl-designation-event-delivered. Production: leave false and use sourceMode=live. SAMPLE rows only: demo events use placeholder entities (never real companies/IDs), are flagged sample=true / isSample=true, and are NEVER charged.",
            "default": false
          },
          "asOfHint": {
            "title": "as_of hint (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional as_of label. Live mode prefers Report Date from the FCDO file when present."
          },
          "maxTotalChargeUsd": {
            "title": "Max total charge (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Optional soft budget hint for delivered change events. Platform ACTOR_MAX_TOTAL_CHARGE_USD also applies when set."
          },
          "ukslCsvUrl": {
            "title": "UKSL CSV URL override",
            "type": "string",
            "description": "Optional override for the official FCDO UKSL CSV URL. Default: https://sanctionslist.fcdo.gov.uk/docs/UK-Sanctions-List.csv"
          },
          "ukslXmlUrl": {
            "title": "UKSL XML URL override",
            "type": "string",
            "description": "Optional override for the official FCDO UKSL XML URL (used when preferFormat=xml)."
          },
          "preferFormat": {
            "title": "Preferred live format",
            "enum": [
              "csv",
              "xml"
            ],
            "type": "string",
            "description": "csv (default) or xml. Both are official FCDO machine-readable files. CSV is the primary path in this build.",
            "default": "csv"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}