Developer API

    Sanctions screening API. Built into your workflow.

    Screen customers, suppliers and payment beneficiaries from your own software. One REST API connects sanctions, PEP/RCA and criminal-watchlist checks, with source-linked results your team can review. Choose Full Search for AI match review and adverse-media context, or a separate Deep Research Report for public-source ownership research.

    POST/api/v1/searchbash
    curl -X POST https://screenveritai.com/api/v1/search \
      -H 'X-API-Key: YOUR_API_KEY' \
      -H 'Content-Type: application/json' \
      -d '{
        "entity_name": "Acme Trading LLC",
        "entity_type": "company",
        "country": "AE",
        "search_type": "sanctions_check"
      }'
    # 202 Accepted
    # { "search_id": "SEARCH_ID", "status": "processing",
    #   "estimated_time_seconds": 15 }

    The request

    One POST call, then your poll loop.

    Entity name, type, country, screening type. The call returns 202 with a search_id and an ETA, and the agent works in the background — you poll for the result rather than hold the connection open.

    • entity_nameRequired, 1-500 characters. Alias-aware matching
    • entity_type"person", "company" or "any" (default "any")
    • countryOptional context field; does not filter Quick Check matching
    • search_type"sanctions_check", "adverse_media" or "full_search"

    The response

    Structured JSON. Findings, not a score.

    Core-jurisdiction fields and per-source arrays, plus criminal-watchlist and PEP/RCA findings. Review the available markdown, identifiers and source references; the response does not provide a numeric risk score.

    GET/api/v1/search/{search_id}200 OK
    {
      "id": "SEARCH_ID",
      "entity_name": "Acme Trading LLC",
      "entity_type": "company",
      "status": "completed",
      "search_type": "sanctions_check",
      "ofac_sanctions": "## OFAC Sanctions Findings\n\n**Status:** *Sanctioned*\n\n**Details:**\n- **Matched entity:** ACME TRADING LLC\n- **Authority:** US Treasury OFAC\n...",
      "eu_sanctions": "## EU Sanctions Findings\n\n**Status:** *No relevant listing found*\n...",
      "sanctions_sources": [
        { "source_id": "ofac_sanctions", "title": "OFAC Sanctions",
          "authority": "US Treasury OFAC", "hit_count": 1 },
        { "source_id": "eu_sanctions", "title": "EU Sanctions",
          "authority": "", "hit_count": 0 }
      ],
      "criminal_watchlists": null,
      "pep": null,
      "news_summary": null,
      "final_report": null,
      "created_at": "2026-09-04T09:20:03.771000+00:00",
      "completed_at": "2026-09-04T09:20:19.088000+00:00"
    }
    No relevant listing found / nullSanctioned / potential matchPer-source hit_countStatus and search_type
    • "ofac_sanctions"One markdown field per jurisdiction; read the *Status:* line
    • "sanctions_sources"source_id, title, authority, details, hit_count per source
    • "criminal_watchlists"Markdown when matched, null when nothing matched
    • "pep"Markdown when matched, null when nothing matched
    • "news_summary"Adverse-media report on adverse_media and full_search
    • "status"completed when done; error_* on failure

    API reference

    Three calls cover a screening integration: queue it, poll it, or hand over a file.

    POST/api/v1/searchQueue a screening run. Returns immediately with a search_id; the work happens in the background.202 Accepted
    Requestbash
    curl -X POST https://screenveritai.com/api/v1/search \
      -H 'X-API-Key: YOUR_API_KEY' \
      -H 'Content-Type: application/json' \
      -d '{"entity_name": "Acme Trading LLC", "entity_type": "company",
           "country": "AE", "search_type": "sanctions_check"}'
    Response202 Accepted
    { "search_id": "SEARCH_ID", "status": "processing",
      "message": "Search queued successfully. Poll the GET endpoint for results.",
      "estimated_time_seconds": 15 }
    GET/api/v1/search/{search_id}Poll for the result. Terminal status is completed; failures land in an error_* status.200 OK
    Requestbash
    curl https://screenveritai.com/api/v1/search/SEARCH_ID \
      -H 'X-API-Key: YOUR_API_KEY'
    Response200 OK
    { "id": "SEARCH_ID", "status": "completed", "search_type": "sanctions_check",
      "ofac_sanctions": "## OFAC Sanctions Findings ... *Sanctioned* ...",
      "eu_sanctions": "... *No relevant listing found* ...",
      "sanctions_sources": [{ "source_id": "ofac_sanctions", "hit_count": 1 }],
      "criminal_watchlists": null, "pep": null }
    POST/api/v1/batchUpload a CSV or XLSX with a name column — up to 100 rows and 2 MB. Poll the job, then export the CSV.202 Accepted
    Requestbash
    curl -X POST https://screenveritai.com/api/v1/batch \
      -H 'X-API-Key: YOUR_API_KEY' \
      -F 'file=@portfolio.csv'
    Response202 Accepted
    { "job_id": "JOB_ID", "total_rows": 100, "credits_charged": 100,
      "search_type": "sanctions_check", "status": "pending",
      "message": "Batch job created successfully. Poll the GET endpoint for status." }

    Integration patterns

    The API sits between data entry and decision — wherever you need a risk signal.

    • Customer onboarding

      1. Customer signup
      2. POST/api/v1/search
      3. Poll until completed
      4. Approve / hold
    • Payment processing

      1. Transaction init
      2. POST/api/v1/search
      3. Poll until completed
      4. Release / hold
    • CRM re-screen

      1. Record updated
      2. Your scheduler fires
      3. POST/api/v1/search
      4. Write result back

    Build in-house vs. integrate ScreenVeritAI

    Build in-house vs. integrate ScreenVeritAI
    AspectBuild in-houseScreenVeritAI API
    Integration workBuild ingestion, matching, job processing and result storageConnect scoped API keys, request submission and result polling
    Sanctions list coverageManual ingestion of each list format; ongoing schema maintenanceMaintained sanctions and restriction sources listed in the coverage register
    Name reviewImplement matching and define how reviewers assess potential matchesQuick Check for original-name matching; Full Search adds query expansion and written AI review
    PEP/RCA and adverse mediaSeparate vendors, separate integrations, separate budgetsSanctions, PEP/RCA and criminal watchlists in one response; adverse media on a Full Search
    Ongoing maintenanceDedicated team for list updates, schema changes, false-positive tuningFully managed — updates, improvements, and infrastructure handled for you
    Audit trailBuild your own logging, evidence, and retention infrastructureTimestamped evidence bundles with source references included

    Four steps to embedded name screening

    1. Get your API key

      Create a scoped key from your dashboard with least-privilege permissions: search:read, search:write, batch:read, batch:write.

    2. Integrate the endpoint

      One POST call from your onboarding, payment, or CRM workflow. Send entity_name, entity_type and country; you get back a search_id and an estimated_time_seconds.

    3. Process results

      Poll GET /api/v1/search/{search_id} until status is completed. The JSON carries one markdown finding per sanctions source, plus criminal_watchlists, pep and, on a Full Search, news_summary.

    4. Re-screen on a cadence

      The v1 API has no webhooks, so schedule the repeat call yourself, or turn on monitoring in the platform for in-app alerts when a listing changes.

    Get started in minutes

    Submit a name-screening request, receive a search_id and poll for the completed result.

    Screen an entitybash
    curl -X POST https://screenveritai.com/api/v1/search \
      -H 'X-API-Key: YOUR_API_KEY' \
      -H 'Idempotency-Key: YOUR_UNIQUE_REQUEST_UUID' \
      -H 'Content-Type: application/json' \
      -d '{"entity_name": "Acme Trading LLC", "country": "AE", "search_type": "sanctions_check"}'
    
    # 202 Accepted
    # { "search_id": "SEARCH_ID", "status": "processing", "estimated_time_seconds": 15 }
    Check resultbash
    curl https://screenveritai.com/api/v1/search/SEARCH_ID \
      -H 'X-API-Key: YOUR_API_KEY'
    
    # 200 OK
    # { "id": "SEARCH_ID", "status": "completed",
    #   "ofac_sanctions": "## OFAC Sanctions Findings ... *No relevant listing found* ...",
    #   "criminal_watchlists": null, "pep": null }

    API performance

    • €0.39

      Quick Check per call, no platform fee

    • 202

      HTTP status when a search is accepted; you then poll the result

    • 100

      Maximum names per CSV/XLSX batch job

    API integration FAQ

    How do I authenticate API requests?

    Authenticate API requests with a secret key passed in the X-API-Key header. Keys are created from your dashboard with scoped, least-privilege permissions.

    Is the API synchronous or asynchronous?

    Name screening is asynchronous: POST /api/v1/search returns HTTP 202 with a search_id to poll. Crypto Address Check uses POST /api/v1/crypto-address/checks and returns a completed result synchronously with HTTP 200, or an error. Route findings through your review policy.

    What response format does the API return?

    Structured JSON with core-jurisdiction fields and per-source arrays, plus criminal-watchlist and PEP/RCA findings. Review the available markdown, identifiers and source references. The response does not provide a numeric risk score.

    What rate limits apply?

    Assigned by subscription tier per API key. Response headers include remaining quota and reset timestamp.

    Can I screen entities in batch via the API?

    Yes. POST /api/v1/batch accepts one CSV or XLSX with a name column, up to 100 rows and 2 MB per file. Read results per row at /rows, or take the whole job as a CSV from /export once its status is completed.

    How do I set up ongoing monitoring via the API?

    Schedule new screening requests in your integration and poll for each result. The v1 screening API has no completion webhooks. The platform also offers a separate monitoring workflow with plan-based slots and in-app alerts.

    What compliance data is included in each screening result?

    A markdown finding for every sanctions source checked, plus criminal watchlists and PEP/RCA records, and on a Full Search an adverse-media summary in news_summary. Each finding names the matched entity, the authority and an evidence URL, and the completed search is stored as a point-in-time snapshot.

    How long does a screening take?

    Processing time depends on the selected product and available sources. The acceptance response includes an estimate; poll for completion or a terminal error and set a timeout in your integration. A time estimate is not a completion guarantee.

    Does crypto screening include transaction tracing or KYT monitoring?

    Crypto Address Check covers exact OFAC digital-currency identifiers and optional native-USDC issuer-block status on Ethereum. It costs €0.39 per completed check from prepaid EUR balance, with no subscription allowance. Transaction tracing, exposure scoring and continuous KYT monitoring are outside this product; crypto results are available through the separate API, without portal history, PDF reports or batch uploads.

    API terminology

    REST API
    Web API using standard HTTP methods — compatible with any language or framework that can make HTTP requests.
    Async processing
    The API accepts a job immediately and processes it in the background — retrieve results via polling.
    API key
    Secret token for authenticating API requests, scoped with specific permissions for least-privilege access.
    Rate limiting
    Restricts API requests per time window by subscription tier — remaining quota and reset timestamps in response headers.
    Structured response
    Machine-readable JSON with consistent field names and types, enabling automated parsing and decision logic.

    Integrate screening with API keys, requests and polling

    Add sanctions, PEP/RCA and criminal-watchlist checks to onboarding or monitoring through one REST API. Use scoped API keys, submit single or batch searches, and retain source-linked results. Select Deep Research Report separately for public-source ownership and relationship research; this per-case product is not available in batch.

    Endpoints are generally available with API-key auth and per-tier rate limits. Explore every endpoint in the interactive OpenAPI docs at /api/v1/docs.

    Quickstart

    1. 1. Create an API key

      Create a scoped API key in your dashboard, or mint one programmatically with your account bearer token for server-to-server requests.

      POST/api/v1/keyscurl
      curl -X POST https://screenveritai.com/api/v1/keys \
        -H "Authorization: Bearer <ACCOUNT_BEARER_TOKEN>" \
        -H "Content-Type: application/json" \
        -d '{"name":"server-key","permissions":["search:read","search:write","batch:write","batch:read"]}'
    2. 2. Run your first search

      Submit a screening request and receive HTTP 202 with a search_id. Reuse one Idempotency-Key with the same payload for transport retries; use a new key only for a deliberate new check.

      POST/api/v1/searchcurl
      curl -X POST https://screenveritai.com/api/v1/search \
        -H "X-API-Key: <YOUR_API_KEY>" \
        -H "Idempotency-Key: <UNIQUE_REQUEST_UUID>" \
        -H "Content-Type: application/json" \
        -d '{"entity_name":"Acme Ltd","entity_type":"company","search_type":"full_search"}'
    3. 3. Submit a batch

      Send up to 100 rows in a CSV/XLSX file (maximum 2 MB), with name, optional country and optional search_type. Use one search type per file: sanctions_check, adverse_media or full_search. Deep Research Report is per-case only.

      POST/api/v1/batchcurl
      curl -X POST https://screenveritai.com/api/v1/batch \
        -H "X-API-Key: <YOUR_API_KEY>" \
        -F "file=@entities.csv"

    Core endpoints

    • POST/api/v1/search

      Create one Quick Check (sanctions_check), Adverse Media Check (adverse_media), Full Search (full_search), or Deep Research Report (deep_research_report) using search_type. Returns a search id, processing status and an estimated time. Deep Research runs as a durable background job — poll for the result rather than holding the connection open.

      Auth: X-API-Key (search:write)

    • POST/api/v1/batch

      Submit up to 100 rows in a CSV/XLSX file (maximum 2 MB). The optional search_type column defaults to sanctions_check, must be consistent across the file, and does not accept deep_research_report.

      Auth: X-API-Key (batch:write)

    • POST/api/v1/keys

      Create and manage API credentials with scoped permissions, tier-aware rate limits, and usage tracking.

      Auth: Bearer token (account)

    Crypto address checks. Source evidence at €0.39.

    Check an address against OFAC’s published digital-currency identifiers. Add native-USDC issuer-block status on Ethereum in the same request, at the same price.

    €0.39 per completed address check · prepaid PAYG only

    • POST/api/v1/crypto-address/checks
    • GET/api/v1/crypto-address/checks/{id}
    OFAC address match
    Exact address lookup under the requested OFAC currency label, such as ETH, XBT, TRX, USDT or USDC. Evidence includes the publication date, source URL, export hash and matching OFAC record.
    Ethereum USDC
    Set network to ethereum to check native-USDC issuer-block status at a finalized Ethereum mainnet block. The result includes the contract address, block number, block hash and contract response. Omit network for an OFAC-only check.
    Create a check
    POST requires X-API-Key with search:write, an Idempotency-Key of 16–128 ASCII letters, digits, underscores, dots, colons or hyphens, and address, currency and integer max_prepaid_cents fields. Set max_prepaid_cents to 39 to authorize the current price. A completed request returns HTTP 200 synchronously.
    Retrieve and retry
    GET requires search:read and returns your saved check without another charge. If a POST response is lost, reuse the same Idempotency-Key and payload. Keep that key while the outcome is uncertain; create a new key only for a deliberate new check.
    Billing
    Completed checks debit €0.39 from your EUR prepaid balance. Minimum balance top-up: €5. Subscription allowances do not apply. Source failures are unpaid.

    A negative result means no published OFAC match or no native-USDC issuer block in the checked source. It does not establish wallet ownership or clear an address of all risk.

    This is an address-level source check. Transaction tracing, exposure scoring and continuous KYT monitoring are outside its scope. Crypto checks use this separate API; they are not available through name-screening batch uploads, portal history or PDF reports.

    Why teams use the API

    • One API for screening products, plus a separate per-case Deep Research Report for public-source ownership research
    • API-key auth via the X-API-Key header, with permission-scoped keys for least-privilege access
    • Per-tier rate limits with usage logging for governance and cost control
    • Search, batch, keys, account, coverage, and health endpoints under /api/v1
    • Interactive OpenAPI docs at /api/v1/docs plus a machine-readable OpenAPI schema
    • Structured output suitable for audit logs, case files, and downstream decisions

    Integration playbooks

    API FAQ

    How do I authenticate API requests?

    Screening requests to /api/v1/search and /api/v1/batch authenticate with an API key sent in the X-API-Key header. Create keys in your dashboard, or programmatically via /api/v1/keys after authenticating with your account bearer token.

    Is the API generally available?

    Yes. API v1 is live and generally available. Authenticate with an API key, call the search, batch, and key-management endpoints, and explore everything in the interactive OpenAPI docs at /api/v1/docs.

    Can I scope API key permissions?

    Yes. Keys support permissions such as search:read, search:write, batch:read, and batch:write so you can enforce least-privilege access per integration.

    What rate limits apply?

    Rate limits are assigned per API tier and enforced per API key — the tier governs request throughput, not billing. Response headers include the limit, remaining quota, and reset timestamps so you can back off cleanly.

    Where can I test the endpoints quickly?

    Use the interactive documentation at /api/v1/docs for Swagger testing and /api/v1/redoc for reference-style docs. The OpenAPI schema is served at /api/v1/openapi.json.

    How do I retry a screening request safely?

    POST /api/v1/search accepts an optional Idempotency-Key of 16–128 ASCII letters, digits, underscores, dots, colons or hyphens. Reuse the key with the same payload: an admitted request replays its original response without another search or charge. A changed payload returns 409 idempotency_conflict. For 409 request_in_progress_or_uncertain, poll the supplied search_id and retain the same key; do not submit a new key. Without a key, another POST creates a new search. This header does not deduplicate batch uploads.

    Can I check crypto addresses or run KYT transaction analysis?

    Crypto Address Check is available through POST /api/v1/crypto-address/checks for €0.39 per completed check, using prepaid EUR balance only. It checks exact OFAC digital-currency identifiers and optionally native-USDC issuer-block status on Ethereum. It does not trace transactions, calculate exposure or provide continuous KYT monitoring.

    Start screening in minutes.

    Choose a plan and start screening today.