---
title: "Solutions when a website may be blocked in your country"
method: GET
path: "/api/v1/access-solutions"
---

# Solutions when a website may be blocked in your country

`GET /api/v1/access-solutions`

## Request

- Base URL: `https://checkwebsitenow.com`
- URL: `https://checkwebsitenow.com/api/v1/access-solutions`
- Auth: none declared

Free solutions first. VPN providers are listed only when a regional block is suspected (HTTP 451, block-page wording from a cached agent check, or visitor_reported=1), ordered by documented criteria without commission. Links with affiliate:true are ads (label "Ad", rel sponsored); show the disclosure. This GET never starts a website check (any website may read it with its visitors' addresses): it uses our quick check and agent check of the domain from the last 5 minutes (result cache or curated status snapshot). Without one, assessment.level is "unknown" with needs_check true: run POST /api/v1/check (or the MCP tool check_website) first, then ask again. 120 requests per minute per client.

## Query parameters

- `domain` string
- `case` 'streaming' | 'news_or_legal_block' | 'general_geoblock'
- `visitor_reported` '1' | '0' | 'true' | 'false'

## Response `200`

Ordered solutions

- AccessSolutions
  - `schema_version` '1.0', required
  - `target` string, nullable
  - `case` 'streaming' | 'news_or_legal_block' | 'general_geoblock', required
  - `case_label` string
  - `case_explanation` string: What the chosen case changes in the explanation. The provider order never depends on the case.
  - `assessment` object, required
    - `source` 'measurement' | 'visitor_reported' | 'no_recent_check', required
    - `suspected` boolean, required
    - `show_vpn` boolean, required
    - `confidence` 'high' | 'medium' | 'none', required
    - `level` 'geo_likely' | 'geo_possible' | 'blocked_unknown' | 'none' | 'unknown', required: unknown: no check of the domain from the last 5 minutes; the GET never starts one.
    - `signals` object[], required
    - `reason` string, required
    - `caveat` string, required
    - `measurement_region` string
    - `needs_check` boolean: True when no recent check exists: run POST /api/v1/check for the domain, then ask again.
    - `check_age_seconds` integer: Only on measured assessments: age of the check result used (at most 300 seconds).
  - `show_vpn` boolean, required: Only true when a regional block is suspected. Never for outages, DNS/TLS errors, timeouts or plain 403.
  - `case_note` string, nullable
  - `free_solutions` object[], required: Always first; free and allowed steps.
  - `vpn_providers` VpnProvider[], required: Empty unless show_vpn. Ordered by documented points without commission.
    - `id` string, required
    - `name` string, required
    - `rank` integer, nullable, required: null for unranked providers (not enough verified facts).
    - `score` object, required: points (0-100 or null), coverage, criteria with source_url; commission is never an input.
    - `why_it_fits` string[]
    - `criteria_table` object[]
    - `price` object, nullable: First-term offer: amount, currency (ISO 4217), term, url, checked_at, shown_in_country (ISO country code the price was shown for, or null when unknown), shown_in_country_name and a plain note. Prices vary by country.
      - `amount` number
      - `currency` string
      - `checked_at` string, date
      - `shown_in_country` string, nullable
      - `shown_in_country_name` string, nullable
      - `note` string
    - `incidents` object[]
    - `link` AccessLink, required
      - `url` string, uri, required
      - `affiliate` boolean, required: true = paid link (ad).
      - `rel` 'sponsored noopener' | 'noopener', required
      - `label` 'Ad' | 'null', nullable, required
      - `text` string, required
      - `disclosure` string, required
    - `sources` string[]
  - `unranked_providers` VpnProvider[], required: Not enough verified facts yet: rank null, never present as ranked.
    - `id` string, required
    - `name` string, required
    - `rank` integer, nullable, required: null for unranked providers (not enough verified facts).
    - `score` object, required: points (0-100 or null), coverage, criteria with source_url; commission is never an input.
    - `why_it_fits` string[]
    - `criteria_table` object[]
    - `price` object, nullable: First-term offer: amount, currency (ISO 4217), term, url, checked_at, shown_in_country (ISO country code the price was shown for, or null when unknown), shown_in_country_name and a plain note. Prices vary by country.
      - `amount` number
      - `currency` string
      - `checked_at` string, date
      - `shown_in_country` string, nullable
      - `shown_in_country_name` string, nullable
      - `note` string
    - `incidents` object[]
    - `link` AccessLink, required
      - `url` string, uri, required
      - `affiliate` boolean, required: true = paid link (ad).
      - `rel` 'sponsored noopener' | 'noopener', required
      - `label` 'Ad' | 'null', nullable, required
      - `text` string, required
      - `disclosure` string, required
    - `sources` string[]
  - `unranked_label` string
  - `sponsored_offers` SponsoredOffer[]: Labelled ads (see GET /api/v1/sponsored-offers) for partners we joined. Present whenever vpn_providers and unranked_providers do not already show the same link, whatever the assessment or cache state; with a suspected block the ranked list carries the same labelled link instead. Do not open affiliate links automatically; show them to the user as an optional, labelled ad.
    - `type` 'ad', required
    - `advertisement` unknown, required
    - `label` 'Ad', required
    - `rel` 'sponsored', required: Link relation every rendering of this ad carries; link.rel holds the full attribute value.
    - `disclosure` string, required: Show next to the link. Same text as link.disclosure.
    - `headline` string, required
    - `topic` 'vpn'
    - `provider_id` string, required
    - `name` string, required
    - `use_cases` string, required
    - `link` AccessLink, required
      - `url` string, uri, required
      - `affiliate` boolean, required: true = paid link (ad).
      - `rel` 'sponsored noopener' | 'noopener', required
      - `label` 'Ad' | 'null', nullable, required
      - `text` string, required
      - `disclosure` string, required
    - `facts` object, required: Only facts with a source in our data; an unknown fact is left out.
      - `price_from` object
        - `amount` number, required
        - `currency` string, required
        - `per` 'month', required
        - `term` string, required
        - `checked_at` string, date, required
        - `shown_in_country` string, nullable
        - `shown_in_country_name` string, nullable
        - `note` string, required: Where and when the price was seen; prices vary by country.
        - `source_url` string, uri, required
      - `money_back` object
        - `days` integer, required
        - `source_type` string, nullable
        - `source_url` string, uri, required
      - `server_countries` object
        - `count` integer, required
        - `note` string, nullable
        - `source_type` string, nullable
        - `source_url` string, uri, required
      - `devices` object
        - `count` integer, nullable
        - `unlimited` boolean, nullable
        - `source_type` string, nullable
        - `source_url` string, uri, required
    - `deal` object, nullable: The provider's current deal as shown on its order page on checked_at; it may change and varies by country. null when none is recorded.
      - `text` string, required
      - `plan` string, required
      - `checked_at` string, date, required
      - `source_url` string, uri, required
      - `source_type` string, nullable
      - `note` string, required
    - `comparison` object, required
      - `rank` integer, nullable, required: null when not enough facts are verified for a place.
      - `of` integer, required
      - `points` integer, nullable
      - `max` unknown
      - `text` string, required
      - `url` string, required
    - `compare_url` string, required
    - `compare_text` string
    - `data_updated` string, date
  - `solutions` object[], required
  - `disclosure` string, required: Show to the user next to any affiliate link.
  - `legal_note` object, required
  - `method` object, required
  - `page_url` '/vpn', required
  - `agent_note` string, required: How agents must present this answer (same labels as for people).
  - `guides` GuideLink[], required: Sourced long-form guides on geoblocking, VPN legality and EU streaming rights; background reading for every case.
    - `slug` string, required
    - `title` string, required
    - `description` string, required
    - `url` string, required: Human page, e.g. /guides/geoblocking-or-outage
    - `api_url` string, required
    - `markdown_url` string, required

## Other responses

- `400`: INVALID_QUERY or INVALID_TARGET
- `429`: RATE_LIMITED or PROBE_BUSY: our limit, not a verdict about the website

---

[API](https://skmtc.dev/checkwebsitenow/apis/checkwebsitenow-website-checker.md) · [All operations](https://skmtc.dev/checkwebsitenow/apis/checkwebsitenow-website-checker/llms.txt) · [OpenAPI document](https://skmtc.dev/checkwebsitenow/apis/checkwebsitenow-website-checker/revisions/ef066e74da4b?raw)
