FeelingSurf API

v1.0.0
Base URL https://api.feelingsurf.fr

Programmatic access to a FeelingSurf account: manage the websites that receive automated visits, and read account information.

Quick start

Every endpoint except the health check needs a Premium API key.

1. Check connectivity — no key required:

curl https://api.feelingsurf.fr/v1/ping

2. Get your API key. Generate one in your dashboard under Settings → API. API access is a Premium benefit: any account can create a key, but it only authenticates while your subscription is active (and the same key resumes working on re-upgrade — no reissue needed).

3. Make your first authenticated request — send the key as a bearer token:

curl https://api.feelingsurf.fr/v1/me -H "Authorization: Bearer fsk_your_key"

That returns your account summary. From there: list your sites with GET /v1/sites, add one with POST /v1/sites, and so on — every endpoint is documented below.

Authentication

Every request carries Authorization: Bearer fsk_.... The key is distinct from the FeelingSurfViewer desktop app token — treat it like a password, and manage or revoke it any time under Settings → API.

Send request bodies as JSON and set a Content-Type: application/json header on POST and PATCH requests. Responses are JSON too, except the screenshot image endpoints, which stream raw image bytes.

Rate limits

60 requests per minute per account (fixed window). Every authenticated response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (the unix epoch when the window resets); over the limit returns 429 rate_limited with a Retry-After header (seconds).

Errors

Responses are JSON. Errors use a stable envelope — {"error": {"code": "…", "message": "…"}} — with a machine-readable, locale-independent code (the message is English and may change):

  • unauthorized (401)
  • premium_required (403)
  • forbidden (403) — a banned or disabled account
  • not_found (404)
  • validation_error (422)
  • site_limit_reached / template_limit_reached / limit_reached (403, on create once a quota is full)
  • rate_limited (429)
  • server_error (500)
  • service_unavailable (503) — temporary maintenance; carries a Retry-After header

System

Liveness.

GET/v1/ping
Liveness probe

Unauthenticated health check.

Responses

200Service is up.
  • status string
Example
{
    "status": "ok"
}

Account

The authenticated account.

GET/v1/me
Get the authenticated account

Account summary plus the earn-side rollup (credits earned today / last 7 days), active FeelingSurfViewer session count, and site-slot usage.

Responses

200Account summary.
  • id integer
    Unique identifier.
  • username string
    Your username.
  • plan string (premium)
    Membership plan. Always premium, since the API requires Premium.
  • credits number
    Current credit balance.
  • earning object
    Credits earned by surfing.
    • credits_today number
      Credits earned by surfing today.
    • credits_last_7_days number
      Rolling sum over the last 7 days (today inclusive).
  • surfing object
    Your live surfing activity.
    • active_sessions integer
      FeelingSurfViewer sessions active in the last few minutes.
  • site_slots object
    Site-slot usage; create returns 403 once used reaches max.
    • used integer
      Site slots currently in use (your number of sites).
    • max integer
      Total site slots your plan allows.
    • available integer
      Unused site slots (max minus used).
  • visit_own_sites boolean
    Whether the app also surfs your own sites.
  • timezone string nullable
    IANA timezone for active-hours scheduling; UTC is used when null.
  • currency string (eur, usd)
    Your billing currency.
  • language string (en, fr, es, pt, ru, vi, id, tr, de, it, nl)
    Your account language (ISO code).
  • newsletter boolean
    Newsletter email opt-in.
  • invoice_emails boolean
    Whether invoice emails are sent.
  • subscription object
    Premium subscription lifecycle.
    • active boolean
      Whether an active premium subscription exists.
    • renews_at string nullable
      Next renewal date while active and not cancelled.
    • ends_at string nullable
      When premium access ends after a cancellation.
Example
{
    "id": 98221,
    "username": "acme",
    "plan": "premium",
    "credits": 5000,
    "earning": {
        "credits_today": 0,
        "credits_last_7_days": 0
    },
    "surfing": {
        "active_sessions": 1
    },
    "site_slots": {
        "used": 1,
        "max": 12,
        "available": 11
    },
    "visit_own_sites": false,
    "timezone": null,
    "currency": "eur",
    "language": "en",
    "newsletter": true,
    "invoice_emails": true,
    "subscription": {
        "active": true,
        "renews_at": "2026-12-25T12:00:00Z",
        "ends_at": null
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
PATCH/v1/me
Update account settings

Update non-sensitive account settings (e.g. visit_own_sites, timezone).

Request body

  • visit_own_sites boolean
    Whether the app also surfs your own sites.
  • timezone string nullable
    An IANA timezone name (e.g. "Europe/Paris"), or null to clear (scheduling then uses UTC).
  • currency string (eur, usd)
    Your billing currency.
  • language string (en, fr, es, pt, ru, vi, id, tr, de, it, nl)
    Your account language (ISO code).
  • newsletter boolean
    Newsletter email opt-in.
  • invoice_emails boolean
    Whether invoice emails are sent.

Responses

200The updated account.
  • id integer
    Unique identifier.
  • username string
    Your username.
  • plan string (premium)
    Membership plan. Always premium, since the API requires Premium.
  • credits number
    Current credit balance.
  • earning object
    Credits earned by surfing.
    • credits_today number
      Credits earned by surfing today.
    • credits_last_7_days number
      Rolling sum over the last 7 days (today inclusive).
  • surfing object
    Your live surfing activity.
    • active_sessions integer
      FeelingSurfViewer sessions active in the last few minutes.
  • site_slots object
    Site-slot usage; create returns 403 once used reaches max.
    • used integer
      Site slots currently in use (your number of sites).
    • max integer
      Total site slots your plan allows.
    • available integer
      Unused site slots (max minus used).
  • visit_own_sites boolean
    Whether the app also surfs your own sites.
  • timezone string nullable
    IANA timezone for active-hours scheduling; UTC is used when null.
  • currency string (eur, usd)
    Your billing currency.
  • language string (en, fr, es, pt, ru, vi, id, tr, de, it, nl)
    Your account language (ISO code).
  • newsletter boolean
    Newsletter email opt-in.
  • invoice_emails boolean
    Whether invoice emails are sent.
  • subscription object
    Premium subscription lifecycle.
    • active boolean
      Whether an active premium subscription exists.
    • renews_at string nullable
      Next renewal date while active and not cancelled.
    • ends_at string nullable
      When premium access ends after a cancellation.
Example
{
    "id": 98221,
    "username": "acme",
    "plan": "premium",
    "credits": 5000,
    "earning": {
        "credits_today": 0,
        "credits_last_7_days": 0
    },
    "surfing": {
        "active_sessions": 1
    },
    "site_slots": {
        "used": 1,
        "max": 12,
        "available": 11
    },
    "visit_own_sites": false,
    "timezone": null,
    "currency": "eur",
    "language": "en",
    "newsletter": true,
    "invoice_emails": true,
    "subscription": {
        "active": true,
        "renews_at": "2026-12-25T12:00:00Z",
        "ends_at": null
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/surf-sessions
List your FeelingSurfViewer sessions

Recent FeelingSurfViewer sessions on your account (the earning side), most recent first. These are your own FeelingSurfViewer instances and their IPs.

Parameters

limitqueryintegerPage size (clamped to 1..200).
offsetqueryintegerNumber of items to skip.

Responses

200A page of surf sessions.
  • data SurfSession[]
    • ip_address string
      The IP address this session runs from.
    • country_code string nullable
      ISO country code of the IP, or null if unknown.
    • credits_earned number
      Credits this session has earned.
    • active boolean
      Whether the session was active in the last few minutes.
    • last_activity_at string nullable
      When the session was last active.
    • app_version string nullable
      FeelingSurfViewer app version, e.g. "2.5.0".
    • app_version_outdated boolean
      Whether this app version is behind the current release.
    • app_version_supported_until string nullable
      When support for this app version ends, or null.
    • low_quality_ip boolean
      The IP is classified low-quality (earns more slowly).
    • overused_ip boolean
      True when this IP has tripped one of your account's session limits — for example too many simultaneous sessions from the same IP or IP subnet, or your account-wide session cap. While flagged, further sessions from the IP are rejected, so it earns less until it drops back under the limit.
  • meta PageMeta
    Pagination metadata for a list response.
    • limit integer
      Page size applied (clamped).
    • offset integer
      Number of items skipped before this page.
    • total integer
      Total number of items across all pages.
Example
{
    "data": [
        {
            "ip_address": "203.0.113.42",
            "country_code": "US",
            "credits_earned": 128.5,
            "active": true,
            "last_activity_at": "2026-06-25T09:04:36Z",
            "app_version": "2.5.0",
            "app_version_outdated": false,
            "app_version_supported_until": null,
            "low_quality_ip": false,
            "overused_ip": false
        }
    ],
    "meta": {
        "limit": 50,
        "offset": 0,
        "total": 1
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/referrals
Get your referral program

Your shareable referral link, how many users you've referred, your commission rate, and commission credits earned.

Responses

200The referral summary.
  • referral_link string
    Shareable signup link that credits you for the referral.
  • referred_count integer
    Number of (non-banned) users you referred.
  • commission_percent integer
    Your referral commission: you get this percentage of every credit your referrals earn, forever (10 for Free accounts, 20 for Premium).
  • credits_earned object
    Credits earned from referrals.
    • total number
      All-time commission credits.
    • today number
      Commission credits earned today.
    • last_7_days number
      Rolling sum over the last 7 days (today inclusive).
Example
{
    "referral_link": "https://www.feelingsurf.fr/r/98220",
    "referred_count": 0,
    "commission_percent": 20,
    "credits_earned": {
        "total": 0,
        "today": 0,
        "last_7_days": 0
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Sites

The websites that receive automated visits.

GET/v1/sites
List your sites

Parameters

limitqueryintegerPage size (clamped to 1..200).
offsetqueryintegerNumber of items to skip.

Responses

200The caller's (non-deleted) sites.
  • data Site[]
    • id integer
      Unique identifier.
    • url string
      The website's URL.
    • name string nullable
      Optional user-chosen name.
    • paused boolean
      Whether the user has paused delivery.
    • blocked boolean
      Whether the platform has blocked the site (e.g. dead link).
    • limit_reached boolean
      Whether a configured visit cap has been reached.
    • devices object
      Device targeting split, as percentages summing to 100.
      • desktop integer (0–100)
        Percentage of visits sent to desktop devices.
      • mobile integer (0–100)
        Percentage of visits sent to mobile devices.
      • tablet integer (0–100)
        Percentage of visits sent to tablet devices.
    • visit_duration object
      Visit duration range, in seconds.
      • min_seconds integer (10–600)
        Shortest visit duration, in seconds.
      • max_seconds integer (10–600)
        Longest visit duration, in seconds.
    • visit_distribution string (even, asap)
      How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
    • limits object
      Visit caps; null means no limit.
      • hourly integer (1–500)
        Max visits per hour — always at least 1 (an hourly cap is mandatory).
      • daily integer nullable (1–10000)
        Max visits per day; null means no limit.
      • total integer nullable (1–500000)
        Max visits in total (lifetime); null means no limit.
    • schedule object
      Active-hours scheduling.
      • active_hours_mask string nullable
        A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
      • time_zone string nullable
        IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
    • traffic_quality object
      Traffic quality controls.
      • low_quality_ips boolean
        Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
      • ipv6 boolean
        Whether IPv6 visitors may deliver visits to this site.
    • browsing object
      Browsing options.
      • max_sub_windows integer (0–1)
        How many pop-up windows the visited site may open during a visit.
    • traffic_sources integer[]
      IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
    • labels integer[]
      IDs of assigned labels (resolve via GET /v1/labels).
    • total_visits integer
      Lifetime visits delivered.
    • created_at string nullable
      When it was created (UTC), or null.
  • meta PageMeta
    Pagination metadata for a list response.
    • limit integer
      Page size applied (clamped).
    • offset integer
      Number of items skipped before this page.
    • total integer
      Total number of items across all pages.
Example
{
    "data": [
        {
            "id": 2761880,
            "url": "https://example.com",
            "name": "My landing page",
            "paused": false,
            "blocked": false,
            "limit_reached": false,
            "devices": {
                "desktop": 100,
                "mobile": 0,
                "tablet": 0
            },
            "visit_duration": {
                "min_seconds": 10,
                "max_seconds": 10
            },
            "visit_distribution": "even",
            "limits": {
                "hourly": 50,
                "daily": null,
                "total": null
            },
            "schedule": {
                "active_hours_mask": null,
                "time_zone": null
            },
            "traffic_quality": {
                "low_quality_ips": true,
                "ipv6": true
            },
            "browsing": {
                "max_sub_windows": 0
            },
            "traffic_sources": [1],
            "labels": [],
            "total_visits": 0,
            "created_at": "2026-06-25T07:58:02Z"
        }
    ],
    "meta": {
        "limit": 50,
        "offset": 0,
        "total": 1
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
POST/v1/sites
Create a site

Only url is required; every other field defaults to a new-site configuration. Exceeding the account's slot count returns 403 site_limit_reached.

Request body

  • url string required
    The website's URL.
  • name string nullable
    User-chosen name; null clears it.
  • paused boolean
    Pause or resume visit delivery.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign; an empty list assigns the default "Direct visits" source.
  • labels integer[]
    IDs of labels to assign.
  • template_id integer
    A site template to apply as the base configuration. Must be one of your own templates; an unknown id returns 422. The template's settings become the defaults; any field you also send in this request overrides the template's value for that whole field (shallow merge, per top-level field).

Responses

201The created site.
  • id integer
    Unique identifier.
  • url string
    The website's URL.
  • name string nullable
    Optional user-chosen name.
  • paused boolean
    Whether the user has paused delivery.
  • blocked boolean
    Whether the platform has blocked the site (e.g. dead link).
  • limit_reached boolean
    Whether a configured visit cap has been reached.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • labels integer[]
    IDs of assigned labels (resolve via GET /v1/labels).
  • total_visits integer
    Lifetime visits delivered.
  • created_at string nullable
    When it was created (UTC), or null.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • visit_history object
    Recent visit counts.
    • by_hour integer[]
      Visits per hour over the last 24h, oldest first (last = current hour).
    • by_day integer[]
      Visits per day over the last 8 days, oldest first (last = today).
Example
{
    "id": 2761880,
    "url": "https://example.com",
    "name": "My landing page",
    "paused": false,
    "blocked": false,
    "limit_reached": false,
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "traffic_sources": [1],
    "labels": [],
    "total_visits": 0,
    "created_at": "2026-06-25T07:58:02Z",
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "visit_history": {
        "by_hour": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        "by_day": [0, 0, 0, 0, 0, 0, 0, 0]
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/sites/{id}
Get one site

Parameters

id requiredpathintegerSite identifier.

Responses

200The site, with full configuration.
  • id integer
    Unique identifier.
  • url string
    The website's URL.
  • name string nullable
    Optional user-chosen name.
  • paused boolean
    Whether the user has paused delivery.
  • blocked boolean
    Whether the platform has blocked the site (e.g. dead link).
  • limit_reached boolean
    Whether a configured visit cap has been reached.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • labels integer[]
    IDs of assigned labels (resolve via GET /v1/labels).
  • total_visits integer
    Lifetime visits delivered.
  • created_at string nullable
    When it was created (UTC), or null.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • visit_history object
    Recent visit counts.
    • by_hour integer[]
      Visits per hour over the last 24h, oldest first (last = current hour).
    • by_day integer[]
      Visits per day over the last 8 days, oldest first (last = today).
Example
{
    "id": 2761880,
    "url": "https://example.com",
    "name": "My landing page",
    "paused": false,
    "blocked": false,
    "limit_reached": false,
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "traffic_sources": [1],
    "labels": [],
    "total_visits": 0,
    "created_at": "2026-06-25T07:58:02Z",
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "visit_history": {
        "by_hour": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        "by_day": [0, 0, 0, 0, 0, 0, 0, 0]
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
PATCH/v1/sites/{id}
Update a site

Parameters

id requiredpathintegerSite identifier.

Request body

  • name string nullable
    User-chosen name; null clears it.
  • paused boolean
    Pause or resume visit delivery.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign; an empty list assigns the default "Direct visits" source.
  • labels integer[]
    IDs of labels to assign.

Responses

200The updated site.
  • id integer
    Unique identifier.
  • url string
    The website's URL.
  • name string nullable
    Optional user-chosen name.
  • paused boolean
    Whether the user has paused delivery.
  • blocked boolean
    Whether the platform has blocked the site (e.g. dead link).
  • limit_reached boolean
    Whether a configured visit cap has been reached.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • labels integer[]
    IDs of assigned labels (resolve via GET /v1/labels).
  • total_visits integer
    Lifetime visits delivered.
  • created_at string nullable
    When it was created (UTC), or null.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • visit_history object
    Recent visit counts.
    • by_hour integer[]
      Visits per hour over the last 24h, oldest first (last = current hour).
    • by_day integer[]
      Visits per day over the last 8 days, oldest first (last = today).
Example
{
    "id": 2761880,
    "url": "https://example.com",
    "name": "My landing page",
    "paused": false,
    "blocked": false,
    "limit_reached": false,
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "traffic_sources": [1],
    "labels": [],
    "total_visits": 0,
    "created_at": "2026-06-25T07:58:02Z",
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "visit_history": {
        "by_hour": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        "by_day": [0, 0, 0, 0, 0, 0, 0, 0]
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
DELETE/v1/sites/{id}
Delete a site

Parameters

id requiredpathintegerSite identifier.

Responses

204The site was deleted.
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Site templates

Reusable bundles of site settings.

GET/v1/site-templates
List your site templates

Parameters

limitqueryintegerPage size (clamped to 1..200).
offsetqueryintegerNumber of items to skip.

Responses

200The caller's saved site templates.
  • data SiteTemplate[]
    • id integer
      Unique identifier.
    • name string nullable
      Template name.
    • devices object
      Device targeting split, as percentages summing to 100.
      • desktop integer (0–100)
        Percentage of visits sent to desktop devices.
      • mobile integer (0–100)
        Percentage of visits sent to mobile devices.
      • tablet integer (0–100)
        Percentage of visits sent to tablet devices.
    • visit_duration object
      Visit duration range, in seconds.
      • min_seconds integer (10–600)
        Shortest visit duration, in seconds.
      • max_seconds integer (10–600)
        Longest visit duration, in seconds.
    • visit_distribution string (even, asap)
      How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
    • limits object
      Visit caps; null means no limit.
      • hourly integer (1–500)
        Max visits per hour — always at least 1 (an hourly cap is mandatory).
      • daily integer nullable (1–10000)
        Max visits per day; null means no limit.
      • total integer nullable (1–500000)
        Max visits in total (lifetime); null means no limit.
    • schedule object
      Active-hours scheduling.
      • active_hours_mask string nullable
        A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
      • time_zone string nullable
        IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
    • traffic_quality object
      Traffic quality controls.
      • low_quality_ips boolean
        Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
      • ipv6 boolean
        Whether IPv6 visitors may deliver visits to this site.
    • browsing object
      Browsing options.
      • max_sub_windows integer (0–1)
        How many pop-up windows the visited site may open during a visit.
    • location_targeting object
      Country/continent targeting.
      • mode string (include, exclude)
        Whether the locations list is an allow-list (include) or a block-list (exclude).
      • locations object[]
        The countries/continents to include or exclude.
    • blocked_domains object
      Domains blocked during visits.
      • rate integer (0–100)
        Percentage of visits to which domain blocking applies.
      • domains string[]
        Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
    • actions object
      Auto-actions performed during visits.
      • window string (latest, first)
        Which opened browser window the actions target — the most recent (latest) or the first (first).
      • items SiteAction[]
        The actions to perform.
    • traffic_sources integer[]
      IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
    • created_at string nullable
      When it was created (UTC), or null.
  • meta PageMeta
    Pagination metadata for a list response.
    • limit integer
      Page size applied (clamped).
    • offset integer
      Number of items skipped before this page.
    • total integer
      Total number of items across all pages.
Example
{
    "data": [
        {
            "id": 2644,
            "name": "Default desktop",
            "devices": {
                "desktop": 100,
                "mobile": 0,
                "tablet": 0
            },
            "visit_duration": {
                "min_seconds": 10,
                "max_seconds": 10
            },
            "visit_distribution": "even",
            "limits": {
                "hourly": 50,
                "daily": null,
                "total": null
            },
            "schedule": {
                "active_hours_mask": null,
                "time_zone": null
            },
            "traffic_quality": {
                "low_quality_ips": true,
                "ipv6": true
            },
            "browsing": {
                "max_sub_windows": 0
            },
            "location_targeting": {
                "mode": "include",
                "locations": []
            },
            "blocked_domains": {
                "rate": 100,
                "domains": []
            },
            "actions": {
                "window": "latest",
                "items": []
            },
            "traffic_sources": [],
            "created_at": "2026-06-25T07:58:02Z"
        }
    ],
    "meta": {
        "limit": 50,
        "offset": 0,
        "total": 1
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
POST/v1/site-templates
Create a site template

A template is a reusable bundle of site settings (no url/paused/labels). Only name is required; every other field defaults to a new-template configuration. Exceeding the per-account cap returns 403 template_limit_reached.

Request body

  • name string required
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign.

Responses

201The created template.
  • id integer
    Unique identifier.
  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 2644,
    "name": "Default desktop",
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "traffic_sources": [],
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/site-templates/{id}
Get one site template

Parameters

id requiredpathintegerResource identifier.

Responses

200The template.
  • id integer
    Unique identifier.
  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 2644,
    "name": "Default desktop",
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "traffic_sources": [],
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
PATCH/v1/site-templates/{id}
Update a site template

Parameters

id requiredpathintegerResource identifier.

Request body

  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign.

Responses

200The updated template.
  • id integer
    Unique identifier.
  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 2644,
    "name": "Default desktop",
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "traffic_sources": [],
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
DELETE/v1/site-templates/{id}
Delete a site template

Parameters

id requiredpathintegerResource identifier.

Responses

204The template was deleted.
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Traffic sources

Custom referers a site can report visits as coming from.

GET/v1/traffic-sources
List your traffic sources

Your own sources plus the shared/built-in ones, referenced by id from a site's traffic_sources.

Parameters

limitqueryintegerPage size (clamped to 1..200).
offsetqueryintegerNumber of items to skip.

Responses

200The caller's traffic sources.
  • data TrafficSource[]
    • id integer
      Unique identifier.
    • name string nullable
      Name of the traffic source; a default is shown when unset.
    • referer string
      The referer reported to the target site. Only the scheme is removed, so https://www.google.com/ is stored as www.google.com/.
    • premium boolean
      Whether this source is gated to Premium. Premium sources (your custom ones, plus some shared ones) are unassigned from your sites if your subscription lapses.
    • custom boolean
      True for your own sources, false for shared/built-in ones. Independent of premium, since some shared sources are Premium-gated too.
    • created_at string nullable
      When it was created (UTC), or null.
  • meta PageMeta
    Pagination metadata for a list response.
    • limit integer
      Page size applied (clamped).
    • offset integer
      Number of items skipped before this page.
    • total integer
      Total number of items across all pages.
Example
{
    "data": [
        {
            "id": 166445,
            "name": "Newsletter",
            "referer": "www.google.com/",
            "premium": true,
            "custom": true,
            "created_at": "2026-06-25T07:58:02Z"
        }
    ],
    "meta": {
        "limit": 50,
        "offset": 0,
        "total": 1
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
POST/v1/traffic-sources
Create a traffic source

Exceeding the per-account source cap returns 403 limit_reached.

Request body

  • name string required
    Name of the traffic source; a default is shown when unset.
  • referer string required
    The referer to report to the target site (a domain or full URL, e.g. https://www.google.com/); the scheme is stripped on save.

Responses

201The created traffic source.
  • id integer
    Unique identifier.
  • name string nullable
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer reported to the target site. Only the scheme is removed, so https://www.google.com/ is stored as www.google.com/.
  • premium boolean
    Whether this source is gated to Premium. Premium sources (your custom ones, plus some shared ones) are unassigned from your sites if your subscription lapses.
  • custom boolean
    True for your own sources, false for shared/built-in ones. Independent of premium, since some shared sources are Premium-gated too.
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 166445,
    "name": "Newsletter",
    "referer": "www.google.com/",
    "premium": true,
    "custom": true,
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/traffic-sources/{id}
Get one traffic source

Works for your own sources and for the shared defaults (e.g. id 1, "Direct visits").

Parameters

id requiredpathintegerResource identifier.

Responses

200The traffic source.
  • id integer
    Unique identifier.
  • name string nullable
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer reported to the target site. Only the scheme is removed, so https://www.google.com/ is stored as www.google.com/.
  • premium boolean
    Whether this source is gated to Premium. Premium sources (your custom ones, plus some shared ones) are unassigned from your sites if your subscription lapses.
  • custom boolean
    True for your own sources, false for shared/built-in ones. Independent of premium, since some shared sources are Premium-gated too.
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 166445,
    "name": "Newsletter",
    "referer": "www.google.com/",
    "premium": true,
    "custom": true,
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
PATCH/v1/traffic-sources/{id}
Update a traffic source

Parameters

id requiredpathintegerResource identifier.

Request body

  • name string
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer to report to the target site (a domain or full URL, e.g. https://www.google.com/); the scheme is stripped on save.

Responses

200The updated traffic source.
  • id integer
    Unique identifier.
  • name string nullable
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer reported to the target site. Only the scheme is removed, so https://www.google.com/ is stored as www.google.com/.
  • premium boolean
    Whether this source is gated to Premium. Premium sources (your custom ones, plus some shared ones) are unassigned from your sites if your subscription lapses.
  • custom boolean
    True for your own sources, false for shared/built-in ones. Independent of premium, since some shared sources are Premium-gated too.
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 166445,
    "name": "Newsletter",
    "referer": "www.google.com/",
    "premium": true,
    "custom": true,
    "created_at": "2026-06-25T07:58:02Z"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
DELETE/v1/traffic-sources/{id}
Delete a traffic source

Parameters

id requiredpathintegerResource identifier.

Responses

204The traffic source was deleted.
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Labels

Labels for organizing your sites.

GET/v1/labels
List your labels

Referenced by id from a site's labels.

Parameters

limitqueryintegerPage size (clamped to 1..200).
offsetqueryintegerNumber of items to skip.

Responses

200The caller's labels.
  • data Label[]
    • id integer
      Unique identifier.
    • name string
      Label name.
    • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
      Label color.
    • description string nullable
      Optional notes.
  • meta PageMeta
    Pagination metadata for a list response.
    • limit integer
      Page size applied (clamped).
    • offset integer
      Number of items skipped before this page.
    • total integer
      Total number of items across all pages.
Example
{
    "data": [
        {
            "id": 1744,
            "name": "Campaign A",
            "color": "#0dcaf0",
            "description": "Q1 landing pages"
        }
    ],
    "meta": {
        "limit": 50,
        "offset": 0,
        "total": 1
    }
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
POST/v1/labels
Create a label

Exceeding the per-account label cap returns 403 limit_reached.

Request body

  • name string required
    Label name.
  • color string required (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.

Responses

201The created label.
  • id integer
    Unique identifier.
  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.
Example
{
    "id": 1744,
    "name": "Campaign A",
    "color": "#0dcaf0",
    "description": "Q1 landing pages"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/labels/{id}
Get one label

Parameters

id requiredpathintegerResource identifier.

Responses

200The label.
  • id integer
    Unique identifier.
  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.
Example
{
    "id": 1744,
    "name": "Campaign A",
    "color": "#0dcaf0",
    "description": "Q1 landing pages"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
PATCH/v1/labels/{id}
Update a label

Parameters

id requiredpathintegerResource identifier.

Request body

  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.

Responses

200The updated label.
  • id integer
    Unique identifier.
  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.
Example
{
    "id": 1744,
    "name": "Campaign A",
    "color": "#0dcaf0",
    "description": "Q1 landing pages"
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
400The request body was missing or not a JSON object.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
422The request body failed validation.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
DELETE/v1/labels/{id}
Delete a label

Parameters

id requiredpathintegerResource identifier.

Responses

204The label was deleted.
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Screenshots

FeelingSurfViewer screenshots captured while surfing a site.

GET/v1/sites/{id}/screenshots
List a site's FeelingSurfViewer screenshots

Screenshots captured while the app surfed the site. Returns the most recent (up to 24); this list is not paginated.

Parameters

id requiredpathintegerSite identifier.

Responses

200The site's screenshots.
  • data Screenshot[]
    • uid string
      Unique id for this visit's screenshot set.
    • device string (desktop, mobile, tablet)
      Device category the visit ran on.
    • orientation string (landscape, portrait)
      Screen orientation.
    • country_code string nullable
      ISO country code of the visitor, or null.
    • country_name string nullable
      Localized country name, or null.
    • visit_duration_seconds integer
      How long the visit lasted, in seconds.
    • images ScreenshotImage[]
      The captured images, one per browser window.
      • url string
        URL to fetch the screenshot image.
      • preview_url string nullable
        URL to fetch the blurred preview, or null.
      • window integer
        Browser window index the image was captured from.
      • width integer
        Image width in pixels.
      • height integer
        Image height in pixels.
      • delay_seconds integer
        Seconds into the visit when the image was captured.
      • captured_at string
        When the image was captured.
Example
{
    "data": [
        {
            "uid": "2659c544-81ab-4841-912b-4005336a2a2e",
            "device": "desktop",
            "orientation": "landscape",
            "country_code": "US",
            "country_name": "United States",
            "visit_duration_seconds": 45,
            "images": [
                {
                    "url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83",
                    "preview_url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83/preview",
                    "window": 0,
                    "width": 1280,
                    "height": 720,
                    "delay_seconds": 5,
                    "captured_at": "2026-06-25T09:00:00Z"
                }
            ]
        }
    ]
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/screenshots/{uid}
Get a screenshot image

Streams the image bytes. The id comes from a screenshot's images[].url.

Parameters

uid requiredpathstring

Responses

200The screenshot image bytes (WebP).
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
GET/v1/screenshots/{uid}/preview
Get a screenshot's blurred preview

Parameters

uid requiredpathstring

Responses

200The blurred, lower-resolution preview image (WebP), for use as a thumbnail.
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
404Resource not found (or not owned by the caller).
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Traffic availability

Surfer-traffic availability by country (reference data).

GET/v1/traffic-availability
Traffic availability by country

Surfer-traffic availability per country, to guide a site's or template's location targeting. A country with availability: none has no surfers delivering visits, so targeting it yields nothing. A fixed reference dataset (~250 countries), returned in full — not paginated.

Responses

200Every country with its availability.
  • data TrafficAvailability[]
    • code string
      ISO 3166-1 alpha-2 country code.
    • name string
      Localized country name.
    • continent string
      ISO continent code (EU, AS, NA, AF, SA, OC, AN).
    • availability string (none, low, medium, high)
      Relative volume of surfer traffic available in this country.
Example
{
    "data": [
        {
            "code": "AD",
            "name": "Andorra",
            "continent": "EU",
            "availability": "low"
        }
    ]
}
401Missing or invalid API key.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
403The account may not use the API. The API is Premium-only, so a non-Premium account is rejected with premium_required; a banned or disabled account is rejected with forbidden.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
429Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the Retry-After response header, then retry.
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).

Models

Error
  • error object
    Error details.
    • code string
      Stable, locale-independent error code.
    • message string
      Human-readable description (English).
Example
{
    "error": {
        "code": "unauthorized",
        "message": "string"
    }
}
AccountSummary
  • id integer
    Unique identifier.
  • username string
    Your username.
  • plan string (premium)
    Membership plan. Always premium, since the API requires Premium.
  • credits number
    Current credit balance.
  • earning object
    Credits earned by surfing.
    • credits_today number
      Credits earned by surfing today.
    • credits_last_7_days number
      Rolling sum over the last 7 days (today inclusive).
  • surfing object
    Your live surfing activity.
    • active_sessions integer
      FeelingSurfViewer sessions active in the last few minutes.
  • site_slots object
    Site-slot usage; create returns 403 once used reaches max.
    • used integer
      Site slots currently in use (your number of sites).
    • max integer
      Total site slots your plan allows.
    • available integer
      Unused site slots (max minus used).
  • visit_own_sites boolean
    Whether the app also surfs your own sites.
  • timezone string nullable
    IANA timezone for active-hours scheduling; UTC is used when null.
  • currency string (eur, usd)
    Your billing currency.
  • language string (en, fr, es, pt, ru, vi, id, tr, de, it, nl)
    Your account language (ISO code).
  • newsletter boolean
    Newsletter email opt-in.
  • invoice_emails boolean
    Whether invoice emails are sent.
  • subscription object
    Premium subscription lifecycle.
    • active boolean
      Whether an active premium subscription exists.
    • renews_at string nullable
      Next renewal date while active and not cancelled.
    • ends_at string nullable
      When premium access ends after a cancellation.
Example
{
    "id": 98221,
    "username": "acme",
    "plan": "premium",
    "credits": 5000,
    "earning": {
        "credits_today": 0,
        "credits_last_7_days": 0
    },
    "surfing": {
        "active_sessions": 1
    },
    "site_slots": {
        "used": 1,
        "max": 12,
        "available": 11
    },
    "visit_own_sites": false,
    "timezone": null,
    "currency": "eur",
    "language": "en",
    "newsletter": true,
    "invoice_emails": true,
    "subscription": {
        "active": true,
        "renews_at": "2026-12-25T12:00:00Z",
        "ends_at": null
    }
}
ReferralSummary
  • referral_link string
    Shareable signup link that credits you for the referral.
  • referred_count integer
    Number of (non-banned) users you referred.
  • commission_percent integer
    Your referral commission: you get this percentage of every credit your referrals earn, forever (10 for Free accounts, 20 for Premium).
  • credits_earned object
    Credits earned from referrals.
    • total number
      All-time commission credits.
    • today number
      Commission credits earned today.
    • last_7_days number
      Rolling sum over the last 7 days (today inclusive).
Example
{
    "referral_link": "https://www.feelingsurf.fr/r/98220",
    "referred_count": 0,
    "commission_percent": 20,
    "credits_earned": {
        "total": 0,
        "today": 0,
        "last_7_days": 0
    }
}
AccountSettingsUpdate

Writable account settings. Provide at least one. Email, password and billing are intentionally not editable via the API.

  • visit_own_sites boolean
    Whether the app also surfs your own sites.
  • timezone string nullable
    An IANA timezone name (e.g. "Europe/Paris"), or null to clear (scheduling then uses UTC).
  • currency string (eur, usd)
    Your billing currency.
  • language string (en, fr, es, pt, ru, vi, id, tr, de, it, nl)
    Your account language (ISO code).
  • newsletter boolean
    Newsletter email opt-in.
  • invoice_emails boolean
    Whether invoice emails are sent.
PageMeta

Pagination metadata for a list response.

  • limit integer
    Page size applied (clamped).
  • offset integer
    Number of items skipped before this page.
  • total integer
    Total number of items across all pages.
Example
{
    "limit": 50,
    "offset": 0,
    "total": 1
}
TrafficAvailability

Surfer-traffic availability for a country (guides location targeting).

  • code string
    ISO 3166-1 alpha-2 country code.
  • name string
    Localized country name.
  • continent string
    ISO continent code (EU, AS, NA, AF, SA, OC, AN).
  • availability string (none, low, medium, high)
    Relative volume of surfer traffic available in this country.
Example
{
    "code": "AD",
    "name": "Andorra",
    "continent": "EU",
    "availability": "low"
}
SurfSession

A FeelingSurfViewer session on your account. The IP is your own instance's IP. Sessions older than 7 days, and inactive ones that earned nothing, are not returned.

  • ip_address string
    The IP address this session runs from.
  • country_code string nullable
    ISO country code of the IP, or null if unknown.
  • credits_earned number
    Credits this session has earned.
  • active boolean
    Whether the session was active in the last few minutes.
  • last_activity_at string nullable
    When the session was last active.
  • app_version string nullable
    FeelingSurfViewer app version, e.g. "2.5.0".
  • app_version_outdated boolean
    Whether this app version is behind the current release.
  • app_version_supported_until string nullable
    When support for this app version ends, or null.
  • low_quality_ip boolean
    The IP is classified low-quality (earns more slowly).
  • overused_ip boolean
    True when this IP has tripped one of your account's session limits — for example too many simultaneous sessions from the same IP or IP subnet, or your account-wide session cap. While flagged, further sessions from the IP are rejected, so it earns less until it drops back under the limit.
Example
{
    "ip_address": "203.0.113.42",
    "country_code": "US",
    "credits_earned": 128.5,
    "active": true,
    "last_activity_at": "2026-06-25T09:04:36Z",
    "app_version": "2.5.0",
    "app_version_outdated": false,
    "app_version_supported_until": null,
    "low_quality_ip": false,
    "overused_ip": false
}
Site

A website that receives automated visits. Relation-backed settings (geo targeting, blocked domains, actions, traffic sources, labels) are added alongside their write endpoints.

  • id integer
    Unique identifier.
  • url string
    The website's URL.
  • name string nullable
    Optional user-chosen name.
  • paused boolean
    Whether the user has paused delivery.
  • blocked boolean
    Whether the platform has blocked the site (e.g. dead link).
  • limit_reached boolean
    Whether a configured visit cap has been reached.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • labels integer[]
    IDs of assigned labels (resolve via GET /v1/labels).
  • total_visits integer
    Lifetime visits delivered.
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 2761880,
    "url": "https://example.com",
    "name": "My landing page",
    "paused": false,
    "blocked": false,
    "limit_reached": false,
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "traffic_sources": [1],
    "labels": [],
    "total_visits": 0,
    "created_at": "2026-06-25T07:58:02Z"
}
SiteAction

An action FeelingSurfViewer performs during the visit (click a link, scroll, set a cookie, etc.).

  • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
    What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
  • ratio integer (0–100)
    Percentage of visits that perform this action (default 100 = every visit).
  • element object
    Present for click-type actions.
    • selection string nullable (random, first, last)
      Which element to click when several match.
    • type string nullable (any, internal_link, external_link, link, button)
      What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
    • url_filter string nullable
      Only click links whose URL contains this text; ignored when the element type is button.
    • text_filter string nullable
      Only click elements whose visible text contains this.
  • cookie object
    Present for cookie actions.
    • name string
      Cookie name.
    • value string
      Cookie value.
    • domain string
      Domain to set the cookie on.
SiteActionInput

A site action to apply. Same shape as SiteAction, but type and ratio are required.

  • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
    What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
  • ratio integer required (0–100)
    Percentage of visits that perform this action (default 100 = every visit).
  • element object
    Present for click-type actions.
    • selection string nullable (random, first, last)
      Which element to click when several match.
    • type string nullable (any, internal_link, external_link, link, button)
      What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
    • url_filter string nullable
      Only click links whose URL contains this text; ignored when the element type is button.
    • text_filter string nullable
      Only click elements whose visible text contains this.
  • cookie object
    Present for cookie actions.
    • name string
      Cookie name.
    • value string
      Cookie value.
    • domain string
      Domain to set the cookie on.
SiteDetail

A site with its full configuration (returned by GET /v1/sites/{id}).

  • id integer
    Unique identifier.
  • url string
    The website's URL.
  • name string nullable
    Optional user-chosen name.
  • paused boolean
    Whether the user has paused delivery.
  • blocked boolean
    Whether the platform has blocked the site (e.g. dead link).
  • limit_reached boolean
    Whether a configured visit cap has been reached.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • labels integer[]
    IDs of assigned labels (resolve via GET /v1/labels).
  • total_visits integer
    Lifetime visits delivered.
  • created_at string nullable
    When it was created (UTC), or null.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • visit_history object
    Recent visit counts.
    • by_hour integer[]
      Visits per hour over the last 24h, oldest first (last = current hour).
    • by_day integer[]
      Visits per day over the last 8 days, oldest first (last = today).
Example
{
    "id": 2761880,
    "url": "https://example.com",
    "name": "My landing page",
    "paused": false,
    "blocked": false,
    "limit_reached": false,
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "traffic_sources": [1],
    "labels": [],
    "total_visits": 0,
    "created_at": "2026-06-25T07:58:02Z",
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "visit_history": {
        "by_hour": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        "by_day": [0, 0, 0, 0, 0, 0, 0, 0]
    }
}
SiteUpdate

Writable fields of a site. For PATCH, provide at least one; only the fields present are changed.

  • name string nullable
    User-chosen name; null clears it.
  • paused boolean
    Pause or resume visit delivery.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign; an empty list assigns the default "Direct visits" source.
  • labels integer[]
    IDs of labels to assign.
SiteCreate

Fields for creating a site. Only url is required; all others default to a new-site configuration. When template_id is given, that template's settings seed the defaults and any field set explicitly here overrides them (shallow, per top-level key).

  • url string required
    The website's URL.
  • name string nullable
    User-chosen name; null clears it.
  • paused boolean
    Pause or resume visit delivery.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign; an empty list assigns the default "Direct visits" source.
  • labels integer[]
    IDs of labels to assign.
  • template_id integer
    A site template to apply as the base configuration. Must be one of your own templates; an unknown id returns 422. The template's settings become the defaults; any field you also send in this request overrides the template's value for that whole field (shallow merge, per top-level field).
SiteTemplate

A reusable bundle of site settings. Mirrors a site's configuration minus the site-only fields (url, paused, blocked, labels, visit history), plus a name.

  • id integer
    Unique identifier.
  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteAction[]
      The actions to perform.
      • type string (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of assigned traffic sources (resolve via GET /v1/traffic-sources).
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 2644,
    "name": "Default desktop",
    "devices": {
        "desktop": 100,
        "mobile": 0,
        "tablet": 0
    },
    "visit_duration": {
        "min_seconds": 10,
        "max_seconds": 10
    },
    "visit_distribution": "even",
    "limits": {
        "hourly": 50,
        "daily": null,
        "total": null
    },
    "schedule": {
        "active_hours_mask": null,
        "time_zone": null
    },
    "traffic_quality": {
        "low_quality_ips": true,
        "ipv6": true
    },
    "browsing": {
        "max_sub_windows": 0
    },
    "location_targeting": {
        "mode": "include",
        "locations": []
    },
    "blocked_domains": {
        "rate": 100,
        "domains": []
    },
    "actions": {
        "window": "latest",
        "items": []
    },
    "traffic_sources": [],
    "created_at": "2026-06-25T07:58:02Z"
}
SiteTemplateUpdate

Writable fields of a site template. For PATCH, provide at least one; only the fields present are changed.

  • name string nullable
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign.
SiteTemplateCreate

Fields for creating a site template. Only name is required; all others default to a new-template configuration.

  • name string required
    Template name.
  • devices object
    Device targeting split, as percentages summing to 100.
    • desktop integer (0–100)
      Percentage of visits sent to desktop devices.
    • mobile integer (0–100)
      Percentage of visits sent to mobile devices.
    • tablet integer (0–100)
      Percentage of visits sent to tablet devices.
  • visit_duration object
    Visit duration range, in seconds.
    • min_seconds integer (10–600)
      Shortest visit duration, in seconds.
    • max_seconds integer (10–600)
      Longest visit duration, in seconds.
  • visit_distribution string (even, asap)
    How visits are paced — "even" spreads them across the day, "asap" delivers as fast as possible.
  • limits object
    Visit caps; null means no limit.
    • hourly integer (1–500)
      Max visits per hour — always at least 1 (an hourly cap is mandatory).
    • daily integer nullable (1–10000)
      Max visits per day; null means no limit.
    • total integer nullable (1–500000)
      Max visits in total (lifetime); null means no limit.
  • schedule object
    Active-hours scheduling.
    • active_hours_mask string nullable
      A weekly on/off schedule: a 168-character string, one character per hour (24 hours × 7 days). Each is 1 (active that hour) or 0 (paused). The first character is Monday 00:00 and each next is the following hour, ending Sunday 23:00, in time_zone. null or all-1s means always on; at least one hour must be active, so an all-0s mask is rejected.
    • time_zone string nullable
      IANA time zone for the active-hours schedule (e.g. "Europe/Paris"); null uses your account timezone.
  • location_targeting object
    Country/continent targeting.
    • mode string (include, exclude)
      Whether the locations list is an allow-list (include) or a block-list (exclude).
    • locations object[]
      The countries/continents to include or exclude.
      • type string (country, continent)
        Whether code is a country or a continent.
      • code string
        ISO country code (alpha-2) or continent code, per type.
  • traffic_quality object
    Traffic quality controls.
    • low_quality_ips boolean
      Whether low-quality IPs (VPN/proxy/datacenter) may deliver visits to this site.
    • ipv6 boolean
      Whether IPv6 visitors may deliver visits to this site.
  • browsing object
    Browsing options.
    • max_sub_windows integer (0–1)
      How many pop-up windows the visited site may open during a visit.
  • blocked_domains object
    Domains blocked during visits.
    • rate integer (0–100)
      Percentage of visits to which domain blocking applies.
    • domains string[]
      Hostnames to block (e.g. ads.example.com; no scheme or path), one per entry. Up to 10.
  • actions object
    Auto-actions performed during visits.
    • window string (latest, first)
      Which opened browser window the actions target — the most recent (latest) or the first (first).
    • items SiteActionInput[]
      The actions to perform.
      • type string required (click, click_rss, click_sitemap, cookie, scroll, refresh)
        What the app does — click a link, click an RSS or sitemap link, set a cookie, scroll, or refresh.
      • ratio integer required (0–100)
        Percentage of visits that perform this action (default 100 = every visit).
      • element object
        Present for click-type actions.
        • selection string nullable (random, first, last)
          Which element to click when several match.
        • type string nullable (any, internal_link, external_link, link, button)
          What to click: any element, a same-domain link (internal_link), an off-domain link (external_link), any link (link), or a button.
        • url_filter string nullable
          Only click links whose URL contains this text; ignored when the element type is button.
        • text_filter string nullable
          Only click elements whose visible text contains this.
      • cookie object
        Present for cookie actions.
        • name string
          Cookie name.
        • value string
          Cookie value.
        • domain string
          Domain to set the cookie on.
  • traffic_sources integer[]
    IDs of traffic sources to assign.
TrafficSource

A traffic source (custom referer) a site can report visits as coming from.

  • id integer
    Unique identifier.
  • name string nullable
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer reported to the target site. Only the scheme is removed, so https://www.google.com/ is stored as www.google.com/.
  • premium boolean
    Whether this source is gated to Premium. Premium sources (your custom ones, plus some shared ones) are unassigned from your sites if your subscription lapses.
  • custom boolean
    True for your own sources, false for shared/built-in ones. Independent of premium, since some shared sources are Premium-gated too.
  • created_at string nullable
    When it was created (UTC), or null.
Example
{
    "id": 166445,
    "name": "Newsletter",
    "referer": "www.google.com/",
    "premium": true,
    "custom": true,
    "created_at": "2026-06-25T07:58:02Z"
}
Label
  • id integer
    Unique identifier.
  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.
Example
{
    "id": 1744,
    "name": "Campaign A",
    "color": "#0dcaf0",
    "description": "Q1 landing pages"
}
ScreenshotImage
  • url string
    URL to fetch the screenshot image.
  • preview_url string nullable
    URL to fetch the blurred preview, or null.
  • window integer
    Browser window index the image was captured from.
  • width integer
    Image width in pixels.
  • height integer
    Image height in pixels.
  • delay_seconds integer
    Seconds into the visit when the image was captured.
  • captured_at string
    When the image was captured.
Example
{
    "url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83",
    "preview_url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83/preview",
    "window": 0,
    "width": 1280,
    "height": 720,
    "delay_seconds": 5,
    "captured_at": "2026-06-25T09:00:00Z"
}
Screenshot

Screenshots captured during a single visit by the app.

  • uid string
    Unique id for this visit's screenshot set.
  • device string (desktop, mobile, tablet)
    Device category the visit ran on.
  • orientation string (landscape, portrait)
    Screen orientation.
  • country_code string nullable
    ISO country code of the visitor, or null.
  • country_name string nullable
    Localized country name, or null.
  • visit_duration_seconds integer
    How long the visit lasted, in seconds.
  • images ScreenshotImage[]
    The captured images, one per browser window.
    • url string
      URL to fetch the screenshot image.
    • preview_url string nullable
      URL to fetch the blurred preview, or null.
    • window integer
      Browser window index the image was captured from.
    • width integer
      Image width in pixels.
    • height integer
      Image height in pixels.
    • delay_seconds integer
      Seconds into the visit when the image was captured.
    • captured_at string
      When the image was captured.
Example
{
    "uid": "2659c544-81ab-4841-912b-4005336a2a2e",
    "device": "desktop",
    "orientation": "landscape",
    "country_code": "US",
    "country_name": "United States",
    "visit_duration_seconds": 45,
    "images": [
        {
            "url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83",
            "preview_url": "https://api.feelingsurf.fr/v1/screenshots/c99c25613c8b956ba2b3b0f1f764ce83/preview",
            "window": 0,
            "width": 1280,
            "height": 720,
            "delay_seconds": 5,
            "captured_at": "2026-06-25T09:00:00Z"
        }
    ]
}
TrafficSourceCreate
  • name string required
    Name of the traffic source; a default is shown when unset.
  • referer string required
    The referer to report to the target site (a domain or full URL, e.g. https://www.google.com/); the scheme is stripped on save.
TrafficSourceUpdate

Provide at least one field.

  • name string
    Name of the traffic source; a default is shown when unset.
  • referer string
    The referer to report to the target site (a domain or full URL, e.g. https://www.google.com/); the scheme is stripped on save.
LabelCreate
  • name string required
    Label name.
  • color string required (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.
LabelUpdate

Provide at least one field.

  • name string
    Label name.
  • color string (#6610f2, #6f42c1, #d63384, #dc3545, #fd7e14, #ffc107, #198754, #20c997, #0dcaf0, #6c757d, #343a40)
    Label color.
  • description string nullable
    Optional notes.