{
  "openapi": "3.1.0",
  "info": {
    "title": "Import Rules sanctions screening",
    "version": "2026-09-03",
    "description": "Screen a company or person against six official sanctions lists: the EU consolidated list, the UN Security Council list, OFAC SDN (United States), the UK Sanctions List (FCDO), the Swiss list (SECO) and the Canadian autonomous sanctions list. Around 45,700 listed parties across 133,000 recorded spellings, refreshed daily.\n\nWhat this API does NOT do: it never states that a party is not sanctioned. A result with no hit means only that these spellings did not appear in these lists on that date. Names are transliterated and abbreviated differently, and ownership above 50% by a listed person catches a company that is not itself listed and is invisible to a name search.\n\nUse for: telling someone whether a counterparty appears on a sanctions list, which list, and on what ground. Every hit carries a link to the official publication so the reader can verify it.\n\nFree to call. No key. Limited to 30 calls per hour per IP address.",
    "contact": {
      "email": "bart@importrules.com",
      "url": "https://importrules.com/sanctions/"
    },
    "license": {
      "name": "Free to use; the underlying lists are official public publications"
    }
  },
  "servers": [
    {
      "url": "https://importrules.com"
    }
  ],
  "paths": {
    "/api/screen": {
      "get": {
        "operationId": "screenName",
        "summary": "Screen one company or person name against six sanctions lists",
        "description": "Returns exact matches, near matches to assess, the ground for each listing with a link to the official source, and what the reader should do next. Also returns a shareable page URL for the same search.",
        "parameters": [
          {
            "name": "naam",
            "in": "query",
            "required": true,
            "description": "The company or person to check, as it appears on the invoice, contract or registration. Latin, Cyrillic and Greek script are handled; Chinese, Japanese and Korean are not converted. Misspellings still find the party. Minimum three letters, maximum 120 characters.",
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 120
            },
            "example": "Wissol Commodities"
          }
        ],
        "responses": {
          "200": {
            "description": "Screening result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Uitslag"
                }
              }
            }
          },
          "400": {
            "description": "Unusable input; the message says why",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fout"
                }
              }
            }
          },
          "429": {
            "description": "More than 30 calls in an hour from this address"
          }
        }
      }
    },
    "/api/lijststand": {
      "get": {
        "operationId": "listStatus",
        "summary": "Which list versions are currently being searched",
        "description": "Use this to state, verifiably, what a screening covered: the publication date of the lists and how many parties and spellings each contains.",
        "responses": {
          "200": {
            "description": "Current list versions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Lijststand"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Uitslag": {
        "type": "object",
        "properties": {
          "naam": {
            "type": "string",
            "description": "What was searched, as given"
          },
          "gezocht_als": {
            "type": "string",
            "description": "The normalised form actually compared"
          },
          "treffers": {
            "type": "array",
            "description": "Matches. Never act on these alone: read the ground and establish whether it is the same party.",
            "items": {
              "$ref": "#/components/schemas/Vermelding"
            }
          },
          "beoordelen": {
            "type": "array",
            "description": "Near matches shown for the reader to assess. These are deliberately not filtered away: a transliteration or an abbreviation can hide a real match.",
            "items": {
              "$ref": "#/components/schemas/Vermelding"
            }
          },
          "wat_nu": {
            "type": "string",
            "description": "What the reader should do next, given this result."
          },
          "voorbehoud": {
            "type": "string",
            "description": "What this result does and does not establish. Quote this whenever you report a result."
          },
          "lijsten": {
            "type": "object",
            "description": "The list versions searched, with what a hit on each one means"
          },
          "lijsten_opgehaald": {
            "type": "string",
            "format": "date-time",
            "description": "When the lists were last fetched"
          },
          "doorzochte_namen": {
            "type": "integer"
          },
          "deellink": {
            "type": "string",
            "format": "uri",
            "description": "A page showing this same search, for linking a person to it"
          },
          "dossier": {
            "type": "string",
            "format": "uri",
            "description": "Where to order a dated record of the screening (EUR 29)"
          },
          "verbonden": {
            "type": "array",
            "description": "Parties the lists name as connected to a listing (parent company, subsidiary, 'linked to') where the searched name matches. Reported as a connection, never as a match: it does not establish ownership. Relevant because EU sanctions also prohibit making funds available indirectly, and ownership above 50% by a listed person catches a company that is not itself listed.",
            "items": {
              "type": "object",
              "properties": {
                "gevonden_als": {
                  "type": "string"
                },
                "relatie": {
                  "type": "string",
                  "enum": [
                    "parent company",
                    "subsidiary",
                    "linked to"
                  ]
                },
                "hangt_aan": {
                  "type": "string",
                  "description": "The listed party it is connected to"
                },
                "lijst": {
                  "type": "string"
                },
                "grond": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      },
      "Vermelding": {
        "type": "object",
        "properties": {
          "gevonden_als": {
            "type": "string",
            "description": "The name as the list records it"
          },
          "lijst": {
            "type": "string",
            "enum": [
              "EU",
              "UN",
              "OFAC",
              "UK",
              "CH",
              "CA"
            ]
          },
          "betekenis": {
            "type": "string",
            "description": "Whether a hit on this list binds the reader, e.g. 'Directly binding on you'"
          },
          "betekenis_uitleg": {
            "type": "string",
            "description": "Why that is so"
          },
          "waarom": {
            "type": "string",
            "description": "Why this listing was returned: exact match, same name with a different legal form, same date of birth as a match above, closely matching spelling"
          },
          "gelijkenis": {
            "type": "number"
          },
          "soort": {
            "type": "string",
            "enum": [
              "person",
              "enterprise",
              "ship",
              "object"
            ]
          },
          "grond": {
            "type": "array",
            "description": "The ground for the listing: the regulation or programme, the designation date, and a link to the official publication",
            "items": {
              "type": "object",
              "properties": {
                "verordening": {
                  "type": "string"
                },
                "datum": {
                  "type": "string"
                },
                "bron": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "landen": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "geboorte": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "geboorteplaats": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "functie": {
            "type": "string"
          },
          "nummers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Passport and national identity numbers, where the list publishes them"
          },
          "alle_namen": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Every recorded spelling and alias"
          },
          "opmerking": {
            "type": "string",
            "description": "The listing's own statement of reasons or remarks"
          }
        }
      },
      "Lijststand": {
        "type": "object",
        "properties": {
          "opgehaald": {
            "type": "string",
            "format": "date-time"
          },
          "entiteiten": {
            "type": "integer"
          },
          "zoeknamen": {
            "type": "integer"
          },
          "lijsten": {
            "type": "object"
          }
        }
      },
      "Fout": {
        "type": "object",
        "properties": {
          "fout": {
            "type": "string"
          }
        }
      }
    }
  }
}