Documentazione API livesurf.org

Accedi o registrati per ottenere la chiave API.

Accedi o registrati

LiveSurf Client API

Data di aggiornamento della documentazione: 2026-07-04

Che cos'e

API REST di LiveSurf per gestire account, gruppi, pagine, sorgenti di traffico e statistiche.

  • URL di base: https://api.livesurf.ru
  • Formato: JSON
  • Autenticazione: intestazione HTTP Authorization: <API_KEY>
  • Rate limit: massimo 10 richieste al secondo

Avvio rapido

Intestazioni obbligatorie

Authorization: <API_KEY>
Accept: application/json
Content-Type: application/json

Esempio GET

curl -sS "https://api.livesurf.ru/user/" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json"

Esempio POST

curl -sS -X POST "https://api.livesurf.ru/user/manualmode/" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"

Esempio PATCH

curl -sS -X PATCH "https://api.livesurf.ru/group/12345/" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data '{"name":"Updated group"}'

Esempio PUT

curl -sS -X PUT "https://api.livesurf.ru/group/12345/" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data '{"name":"Full group update", "hour_limit": 100, "day_limit": 5000}'

Mappa dell'API

Valori di riferimento e limiti

  • GET /categories/ — elenco delle categorie disponibili
  • GET /countries/ — elenco dei Paesi disponibili
  • GET /languages/ — elenco delle lingue disponibili
  • GET /limits/ — limiti dell'account corrente e limiti di riferimento per tipo di account

Sorgenti

  • GET /sources/search/ — elenco dei motori di ricerca
  • GET /sources/ad/ — elenco delle piattaforme pubblicitarie
  • GET /sources/messengers/ — elenco dei servizi di messaggistica
  • GET /sources/social/ — elenco dei social network
  • GET /sources/neural/ — elenco delle sorgenti AI
  • GET /sources/recommender/ — elenco delle sorgenti da sistemi di raccomandazione

Utente

  • GET /user/ — restituisce le informazioni dell'utente
  • POST /user/automode/ — attiva la modalita ARC, cioe la campagna pubblicitaria automatica
  • POST /user/manualmode/ — attiva la modalita manuale

Gruppi

  • GET /group/all/ — restituisce i gruppi aggiunti all'account
  • GET /group/{group_id}/ — restituisce un gruppo specifico
  • PATCH /group/{group_id}/ — aggiorna parzialmente le impostazioni del gruppo
  • PUT /group/{group_id}/ — sostituisce tutte le impostazioni del gruppo
  • DELETE /group/{group_id}/ — elimina il gruppo
  • POST /group/create/ — crea un nuovo gruppo
  • POST /group/{group_id}/clone/ — clona il gruppo
  • POST /group/{group_id}/add_credits/ — accredita crediti per visite sul saldo del gruppo in modalita manuale
  • POST /group/{group_id}/refund_credits/ — riporta tutti i crediti del progetto sul saldo principale dell'account in modalita manuale
  • POST /group/{group_id}/reorder/ — cambia l'ordine delle pagine nel gruppo

Pagine

  • GET /page/{page_id}/ — restituisce una pagina specifica
  • PATCH /page/{page_id}/ — aggiorna parzialmente le impostazioni della pagina
  • PUT /page/{page_id}/ — sostituisce tutte le impostazioni della pagina
  • DELETE /page/{page_id}/ — elimina la pagina
  • POST /page/create/ — crea una nuova pagina
  • POST /page/{page_id}/clone/ — clona la pagina
  • POST /page/{page_id}/up/ — sposta la pagina di una posizione verso l'alto
  • POST /page/{page_id}/down/ — sposta la pagina di una posizione verso il basso
  • POST /page/{page_id}/start/ — avvia la pagina
  • POST /page/{page_id}/stop/ — ferma la pagina
  • GET /pages-compiled-stats/ — restituisce le statistiche di visualizzazione della pagina

Formato degli errori

Nella maggior parte dei casi l'API restituisce gli errori in uno di questi formati:

{
  "errors": {
    "field": ["message"]
  }
}

oppure:

{
  "errors": {
    "detail": "message"
  }
}

Limiti e costi

GET /limits/

Restituisce limiti e costi (pricing).

Parametri: nessuno.

La risposta contiene quattro blocchi:

  • general.timezone — fuso orario usato dall'API.
  • limits — limiti di riferimento per tipo di account: Minimo (account_type_id: 0, min), Standard (1, pro), Premium (2, vip).
  • user.limits — limiti effettivi dell'utente corrente, incluse eventuali estensioni individuali.
  • pricing — costo della visita in base a showtime e modificatori.

Per validare interfaccia e richieste usa user.limits.

Campi principali di user.limits

  • min_showtime / max_showtime — intervallo ammesso per ogni valore di page.showtime; from e to vengono validati separatamente.
  • min_daylimit / max_daylimit — intervallo ammesso per group.day_limit; se min_daylimit = 0, e ammesso day_limit = 0.
  • min_hourlimit / max_hourlimit — intervallo ammesso per group.hour_limit; se min_hourlimit = 0, e ammesso hour_limit = 0.
  • min_imp / max_imp — intervallo ammesso per ogni valore di group.interval; se min_imp = 0, e possibile disattivarlo.
  • max_keywords — numero massimo di elementi in sources.keywords.settings.list.
  • max_backlinks — numero massimo di elementi in sources.backlinks.settings.list.
  • max_selectors — numero massimo di elementi in behavior.settings.clicks.list in modalita clicks.
  • max_active_pages — numero di slot per l'avvio simultaneo delle pagine.
  • max_alternate_urls — numero di URL aggiuntivi; massimo totale di URL per pagina: 1 + max_alternate_urls.
  • max_total_pages — numero massimo di pagine per account.

Esempio di risposta:

{
  "general": {"timezone": "Europe/Moscow"},
  "limits": [
    {"account_type_id": 0, "account_type": "min", "min_showtime": 15, "max_showtime": 45, "min_daylimit": 0, "max_daylimit": 200, "min_hourlimit": 0, "max_hourlimit": 50, "min_imp": 0, "max_imp": 10800, "max_keywords": 50, "max_backlinks": 50, "max_selectors": 2, "max_active_pages": 1, "max_alternate_urls": 0, "max_total_pages": 100},
    {"account_type_id": 1, "account_type": "pro", "min_showtime": 15, "max_showtime": 300, "min_daylimit": 0, "max_daylimit": 1000, "min_hourlimit": 0, "max_hourlimit": 200, "min_imp": 0, "max_imp": 10800, "max_keywords": 100, "max_backlinks": 100, "max_selectors": 5, "max_active_pages": 12, "max_alternate_urls": 5, "max_total_pages": 200},
    {"account_type_id": 2, "account_type": "vip", "min_showtime": 15, "max_showtime": 900, "min_daylimit": 0, "max_daylimit": 2000, "min_hourlimit": 0, "max_hourlimit": 501, "min_imp": 0, "max_imp": 10800, "max_keywords": 300, "max_backlinks": 300, "max_selectors": 10, "max_active_pages": 24, "max_alternate_urls": 10, "max_total_pages": 104}
  ],
  "pricing": {
    "showtime_price": {"15": 0.5, "900": 499},
    "modifiers": [
      {"key": "geotargeting", "type": "percentage", "value": "0.30", "description": "Geotargeting attivo: +30%", "enabled": true},
      {"key": "low_pf", "type": "percentage", "value": "-0.70", "description": "Traffico con fattori comportamentali bassi: -70%", "enabled": true}
    ]
  },
  "user": {"limits": {"account_type_id": 2, "account_type": "vip", "min_showtime": 15, "max_showtime": 900, "min_daylimit": 0, "max_daylimit": 2000, "min_hourlimit": 0, "max_hourlimit": 501, "min_imp": 0, "max_imp": 10800, "max_keywords": 300, "max_backlinks": 300, "max_selectors": 10, "max_active_pages": 24, "max_alternate_urls": 10, "max_total_pages": 104}}
}

Valori di riferimento

GET /categories/

Categorie utilizzabili in group.category.

Parametri: nessuno.

Esempio di risposta:

[
  {"id": 1, "name": "Internet, Computer", "parent": 0, "active": true}
]

GET /countries/

Paesi utilizzabili in group.geo.

Parametri: nessuno.

Esempio di risposta:

[
  {"id": 1, "country": "RU", "region": "", "city": "", "name": "Russia"}
]

GET /languages/

Lingue utilizzabili in group.language.

Parametri: nessuno.

Esempio di risposta:

[
  {"id": 2, "name": "Russian", "translate_name": "Russo"}
]

Sorgenti

GET /sources/search/

Restituisce i motori di ricerca disponibili per sources.keywords.settings.search_engines.

Campi dell'elemento di risposta:

  • id — ID della sorgente, usato come chiave in sources.keywords.settings.search_engines.
  • name — nome della sorgente.
  • default — peso predefinito, espresso come stringa numerica.
  • payload — dati della sorgente: iso e str_id.
  • enable — disponibilita della sorgente.

GET /sources/ad/

Restituisce le piattaforme pubblicitarie disponibili per sources.adsystems.settings.

Campi dell'elemento di risposta: name, default, payload, enable. In payload: iso, fullName.

GET /sources/messengers/

Restituisce i servizi di messaggistica disponibili per sources.messengers.settings.

GET /sources/social/

Restituisce i social network disponibili per sources.socialanalytics.settings.

GET /sources/neural/

Restituisce le sorgenti AI disponibili per sources.neurals.settings.

GET /sources/recommender/

Restituisce le sorgenti da sistemi di raccomandazione disponibili per sources.recommenders.settings. Esempi di fullName: "Opera Personal News", "Mir tesen", "Toutiao", "Dzen".


Utente

GET /user/

Restituisce i parametri dell'utente e la modalita operativa corrente.

Campi principali della risposta:

  • credits — saldo crediti corrente.
  • workmode — modalita operativa (0 manuale, 1 automatica).
  • type — ID del tipo di account; per la validazione dei limiti usa GET /limits/ -> user.limits.
  • experience — esperienza dell'utente.
  • token — token dell'utente.
  • is_active — indica se l'account e attivo.

Esempio di risposta:

{"credits": "170491620.33332", "workmode": 0, "type": 2, "experience": 72009, "token": "...", "is_active": true}

POST /user/automode/

Attiva la modalita automatica (ARC).

POST /user/manualmode/

Attiva la modalita manuale.


Gruppi

GET /group/all/

Restituisce tutti i gruppi dell'account con configurazione completa e pagine incluse.

Esempio di risposta:

[
  {"id": 123, "name": "My group", "hour_limit": 50, "day_limit": 1000, "interval": [30, 180], "uniq_ip": 0, "moby_ratio": 50, "geo": [1, 2], "autocalc_visits": {"enabled": false, "lower_at_night": false, "lower_at_week": false}, "use_profiles": true, "retention": true, "description": "", "timezone": "Europe/Moscow", "category": 1, "language": 2, "bookmarks": [10, 40], "autolimit": [-10, 10], "schedules": [], "low_pf": {"enabled": false, "ratio": 30}, "sources": {"keywords": {"value": 50, "enabled": true, "settings": {"list": ["frase di esempio"], "search_engines": {"1": 1}}}, "adsystems": {"value": 20, "enabled": true, "settings": ["B2BContext"]}, "backlinks": {"value": 10, "enabled": true, "settings": {"list": ["https://example.com"]}}, "messengers": {"value": 5, "enabled": true, "settings": ["telegram"]}, "clickunders": {"value": 5, "enabled": true}, "emailanalytics": {"value": 5, "enabled": true}, "socialanalytics": {"value": 5, "enabled": true, "settings": ["pinterest"]}, "neurals": {"value": 0, "enabled": false, "settings": []}, "recommenders": {"value": 0, "enabled": false, "settings": []}, "qrcodes": {"value": 0, "enabled": false}}, "pages": [{"id": 999, "state": 1, "position": 0, "url": ["https://example.com/"], "showtime": [15, 30], "break_chain": 0, "adult": false, "group_id": 123, "behavior": {"mode": "disabled", "settings": {"reading_up": false, "clicks": {"list": []}}}}], "credits": 0}
]

GET /group/{group_id}/

Restituisce la configurazione completa di un gruppo specifico.

Parametri URL:

  • group_id — ID del gruppo.

Nota: l'elenco dei group_id si ottiene con GET /group/all/.

Esempio di risposta:

{"id": 123, "name": "My group", "hour_limit": 50, "day_limit": 1000, "interval": [30, 180], "uniq_ip": 0, "moby_ratio": 50, "geo": [1, 2], "stopping_hours": [1, 2, 3], "autocalc_visits": {"enabled": false, "lower_at_night": false, "lower_at_week": false}, "use_profiles": true, "retention": true, "description": "", "timezone": "Europe/Moscow", "category": 1, "language": 2, "bookmarks": [10, 40], "autolimit": [-10, 10], "schedules": [], "low_pf": {"enabled": false, "ratio": 30}, "sources": {"keywords": {"value": 50, "enabled": true, "settings": {"list": ["frase di esempio"], "search_engines": {"1": 1}}}, "adsystems": {"value": 20, "enabled": true, "settings": ["B2BContext"]}, "backlinks": {"value": 10, "enabled": true, "settings": {"list": ["https://example.com"]}}, "messengers": {"value": 5, "enabled": true, "settings": ["telegram"]}, "clickunders": {"value": 5, "enabled": true}, "emailanalytics": {"value": 5, "enabled": true}, "socialanalytics": {"value": 5, "enabled": true, "settings": ["pinterest"]}, "neurals": {"value": 0, "enabled": false, "settings": []}, "recommenders": {"value": 0, "enabled": false, "settings": []}, "qrcodes": {"value": 0, "enabled": false}}, "pages": [{"id": 999, "state": 1, "position": 0, "url": ["https://example.com/"], "showtime": [15, 30], "break_chain": 0, "adult": false, "group_id": 123, "behavior": {"mode": "neural", "settings": {"reading_up": true, "clicks": {"list": ["a", ".link"]}}}}], "credits": 0}

PATCH /group/{group_id}/

Aggiorna parzialmente un gruppo. Vengono modificati solo i campi inviati; gli altri restano invariati. La validazione si applica solo ai campi presenti nella richiesta.

Campi principali:

  • name — nome del gruppo, fino a 255 caratteri.
  • hour_limit — limite orario nell'intervallo min_hourlimit..max_hourlimit da /limits/.
  • day_limit — limite giornaliero nell'intervallo min_daylimit..max_daylimit.
  • interval — intervallo tra visualizzazioni [from, to], con ogni valore in min_imp..max_imp.
  • uniq_ip — unicita IP in ore (0 disattivato, massimo 168).
  • moby_ratio — quota di traffico mobile 0..100.
  • geo — elenco dei Paesi (GET /countries/).
  • autocalc_visits — calcolo automatico dei limiti.
  • use_profiles — profili dei visitatori con cronologia di ricerca attiva, per migliorare i fattori comportamentali.
  • retention — mantenimento della visita.
  • description — descrizione fino a 100 caratteri.
  • timezone — TZID, ad esempio Europe/Moscow.
  • stopping_hours — ore della settimana, 1..168.
  • category — ID categoria (GET /categories/).
  • language — ID lingua (GET /languages/).
  • bookmarks — intervallo delle visite dai preferiti.
  • autolimit — intervallo di variazione automatica del limite giornaliero (-500..500).
  • low_pf — traffico con fattori comportamentali bassi.
  • schedules — pianificazione (VIP): elementi [state, "dd.mm.yyyy HH:MM"], dove 0 mette in pausa e 1 riprende la visualizzazione.
  • sources — impostazioni delle sorgenti di traffico.

Esempio di richiesta:

curl -sS -X PATCH "https://api.livesurf.ru/group/123/" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data '{"hour_limit": 100, "day_limit": 10000, "interval": [60, 300]}'

Esempio di risposta: stessa struttura di GET /group/{group_id}/, con tutti i campi del gruppo.

PUT /group/{group_id}/

Sostituisce tutte le impostazioni del gruppo. A differenza di PATCH, PUT rimpiazza l'intera configurazione: i campi mancanti nel corpo vengono riportati ai valori predefiniti. La validazione si applica a tutti i campi.

DELETE /group/{group_id}/

Elimina il gruppo e tutte le pagine incluse.

POST /group/{group_id}/clone/

Clona il gruppo insieme a tutte le sue pagine.

Corpo della richiesta:

  • name opzionale — nome del nuovo gruppo.

Esempio di risposta:

{"id": 456, "name": "My group copy 2", "hour_limit": 50, "day_limit": 1000, "interval": [30, 180], "uniq_ip": 0, "moby_ratio": 50, "geo": [1, 2], "stopping_hours": [], "autocalc_visits": {"enabled": false, "lower_at_night": false, "lower_at_week": false}, "use_profiles": true, "retention": true, "description": "", "timezone": "Europe/Moscow", "category": 1, "language": 2, "bookmarks": [10, 40], "autolimit": [-10, 10], "schedules": [], "low_pf": {"enabled": false, "ratio": 30}, "sources": {"keywords": {"value": 50, "enabled": true, "settings": {"list": ["frase di esempio"], "search_engines": {"1": 1}}}}, "pages": [{"id": 1001, "state": 0, "position": 0, "url": ["https://example.com/"], "showtime": [15, 30], "break_chain": 0, "adult": false, "group_id": 456, "behavior": {"mode": "disabled", "settings": {"reading_up": false, "clicks": {"list": []}}}}], "credits": 0}

POST /group/{group_id}/add_credits/

Accredita crediti per visite sul progetto in modalita manuale. credits deve essere un intero positivo maggiore di 0.

POST /group/{group_id}/refund_credits/

Riporta tutti i crediti del progetto sul saldo principale dell'account in modalita manuale.

POST /group/{group_id}/reorder/

Cambia l'ordine delle pagine nel gruppo. L'ordine e definito dall'elenco page_ids: il primo elemento diventa position 0, il secondo 1 e cosi via. Se l'elenco non e valido, l'API restituisce 400 con errors.page_ids.

POST /group/create/

Crea un gruppo con le relative pagine. Supporta gli stessi campi di configurazione di PATCH /group/{group_id}/ e, in piu, pages, cioe l'elenco delle pagine da creare. Per ogni elemento di pages si usano i campi di POST /page/create/.


Pagine

GET /page/{page_id}/

Restituisce la configurazione della pagina.

PATCH /page/{page_id}/

Aggiorna parzialmente la pagina. Vengono modificati solo i campi inviati.

Campi principali:

  • state: 0 pausa, 1 attiva.
  • break_chain: probabilita di interrompere la catena, da 0 a 100.
  • url: elenco di URL sullo stesso dominio, massimo 1 + max_alternate_urls.
  • showtime: [from, to], con ogni valore in min_showtime..max_showtime.
  • behavior: impostazioni del comportamento.

behavior.mode:

  • disabled — comportamento disattivato.
  • clicks — clic sui selettori indicati.
  • fixation — fissazione del visitatore con un clic finale.
  • neural — comportamento generato da una rete neurale.
  • manual — scenario manuale delle azioni in JSON.

behavior.settings:

  • reading_up — lettura fino in fondo: aggiunge lo scroll verso la parte bassa della pagina in qualsiasi modalita, tranne manual.
  • clicks.list — selettori CSS per la modalita clicks, massimo max_selectors.

PUT /page/{page_id}/

Sostituisce tutte le impostazioni della pagina. I campi mancanti vengono riportati ai valori predefiniti.

DELETE /page/{page_id}/

Elimina la pagina. Se nel gruppo non resta alcuna pagina, viene eliminato anche il gruppo.

POST /page/create/

Crea una nuova pagina.

POST /page/{page_id}/clone/

Clona la pagina nello stesso gruppo e inserisce la nuova pagina in fondo all'elenco.

POST /page/{page_id}/up/

Sposta la pagina di una posizione verso l'alto.

POST /page/{page_id}/down/

Sposta la pagina di una posizione verso il basso.

POST /page/{page_id}/start/

Avvia la pagina.

POST /page/{page_id}/stop/

Ferma la pagina.


Comportamento in modalita manual

La modalita manual (behavior.mode = "manual") definisce uno scenario che il browser esegue sulla pagina passo dopo passo. Lo scenario e un grafo di blocchi: ogni blocco rappresenta un'azione, come attendere, cliccare, leggere un testo o verificare una condizione. I blocchi sono collegati da transizioni e partono da trigger, eventi o osservatori.

Come funziona

flowchart TD
    A([Trigger afterload]) --> B["wait — pausa 1-2 s"]
    B -->|next| C{"Il pulsante .cta e visibile?"}
    C -->|success| D["clickTo — clic su .cta"]
    C -->|failure| E["moveToDown — scroll verso il basso"]
    E -->|next| C
    D --> F([Fine della catena])

Lo scenario parte da afterload dopo il caricamento della pagina o da beforeendtask prima della fine del task, quindi procede da un blocco all'altro tramite next. I blocchi condition non usano next: hanno due uscite nominate, success e failure.

Oltre ai trigger esistono due altri punti di ingresso:

  • events — avvio da un evento utente emesso da emitEvent.
  • watches — avvio quando il valore di una variabile attraversa una soglia.

Tutti i punti di ingresso sono opzionali. Il grafo puo essere incompleto: un punto di ingresso con action: null o un blocco senza next viene comunque salvato. Il backend controlla la validita dei valori, non la raggiungibilita di ogni nodo.

Esempio minimo

{
  "behavior": {
    "mode": "manual",
    "manual": {
      "actions": {
        "triggers": {"afterload": [{"enter": ["*"], "action": "wait"}]},
        "blocks": [
          {"id": "wait", "action": "wait", "value": [1500, 3000], "next": ["click"]},
          {"id": "click", "action": "clickTo", "value": {"selector": [".cookies-accept"], "modifiers": {"button": "left", "count": 1, "keys": [], "hold": false}}}
        ]
      }
    }
  }
}

Struttura di actions

behavior.manual.actions contiene queste sezioni: variables, sharedVariables, triggers, events, watches, blocks. Solo blocks e obbligatorio e deve contenere almeno un blocco.

Glossario

  • Blocco — un passo dello scenario, ad esempio wait, clickTo, condition.
  • Azione (action) — tipo del blocco.
  • Trigger — punto di ingresso legato al ciclo di vita della pagina.
  • next — destinazione dopo il blocco.
  • success / failure — uscite di condition.
  • Variabile — valore nominato richiamabile tramite sostituzioni.
  • Variabile condivisa (sharedVariables) — valore comune a tutte le schede di una visita.
  • Evento / emitEvent — segnale utente emesso da un blocco e ricevuto in events.
  • Osservatore (watches) — punto di ingresso che scatta quando una variabile attraversa la soglia configurata.
  • Variabile di sistema — valore fornito dall'esecutore, ad esempio domain, tab_id, time.

Variabili

variables e sharedVariables hanno forma piatta: { "<nome>": <valore_iniziale> }. Il nome accetta lettere Unicode, cifre, _ e -, da 3 a 15 caratteri. Sono ammessi fino a 20 elementi per sezione. Lo stesso nome non puo comparire sia in variables sia in sharedVariables.

Le variabili di sistema sono create a runtime e non possono essere salvate nel grafo, ma possono essere usate nelle sostituzioni o osservate in watches.

Trigger, eventi e osservatori

triggers definisce quando partire (afterload o beforeendtask) e da quale blocco. events collega un evento emesso da emitEvent a un solo ricevitore. watches avvia una catena quando una variabile attraversa una soglia con segno <, > o =. Per ogni evento puo esistere un solo ricevitore; per ogni variabile puo esistere un solo osservatore.

Blocchi

Ogni blocco ha un id univoco, un'action, eventuali parametri in value e, se previsto, una lista next. next puo contenere da 0 a 10 destinazioni.

Sostituzioni e :last-element

Nei selettori CSS e in alcuni valori testuali sono disponibili livesurf.org e {<nome_variabile>}. Lo pseudo-selettore :last-element indica l'ultimo elemento trovato da getElement.

Limiti riepilogativi

  • Dimensione totale di actions: 25 KiB UTF-8.
  • id blocco: [a-zA-Z0-9], fino a 15 caratteri.
  • Nome variabile: 3-15 caratteri.
  • Nome evento: 1-30 caratteri.
  • URL httpGet/httpPost: solo http/https, fino a 2048 caratteri.
  • Risposta httpGet: fino a 2 MB.
  • Timeout rete: 20 s.
  • Pausa obbligatoria tra chiamate: 5 s.

Dizionario delle azioni

Le azioni principali sono wait, condition, shuffle, random, end, moveTo, clickTo, click, clickRelease, scrollTo, scrollPercent, moveToDown, moveToUp, focus, findText, getElement, removeElement, setAttribute, setAttrToVar, removeAttribute, takeImageToVar, type, setVar, emitEvent, httpGet, httpPost.

allowInvisible e un'opzione disponibile per le azioni che lavorano su un solo elemento. Con true disattiva il solo controllo di visibilita visiva, ma conserva il controllo che l'elemento abbia geometria e non sia coperto.


Ricette pronte

Frammenti autonomi di actions da copiare in behavior.manual.actions.

Ricetta 1: attendere 5 secondi

{"triggers": {"afterload": [{"enter": ["*"], "action": "wait1"}]}, "blocks": [{"id": "wait1", "action": "wait", "value": [5000, 5000]}]}

Ricetta 2: trovare testo e inserirlo in un input

{"triggers": {"afterload": [{"enter": ["*"], "action": "find"}]}, "blocks": [{"id": "find", "action": "findText", "value": {"type": "text", "pattern": "Test Passed", "mode": "Text", "variable": "found"}, "next": ["paste"]}, {"id": "paste", "action": "setAttribute", "value": {"selector": ["#textarea", "#textInput"], "attr": "value", "variable": "found"}}]}

Ricetta 3: leggere l'attributo di un elemento e inserirlo in un altro

Ricetta 4: digitare testo e tasti speciali in sequenza

Ricetta 5: serie di clic su elementi diversi

Ricetta 6: drag-and-drop

Ricetta 7: scorrere verso il basso e tornare in alto

Ricetta 8: scorrere fino al pulsante e cliccare

Ricetta 9: mettere a fuoco piu campi in sequenza

Ricetta 10: getElement + :last-element

Ricetta 11: variabili e sostituzione {name} nel selettore

Ricetta 12: ciclo con contatore e confronto numerico

Ricetta 13: attendere un pulsante e cliccarlo (poll pattern)

Ricetta 14: scambiare valori tra due input tramite variabile

Ricetta 15: limite totale di clic su tutta la campagna

Ricetta 16: lettura naturale di un articolo lungo

Ricetta 17: gestore unico dei popup tramite evento

Ricetta 18: inserire nel modulo dati dalla tua API

Ricetta 19: raccogliere prezzi e screenshot e inviarli al server


Server proprio per httpGet e httpPost

I nodi httpPost ("Invia tramite link") e httpGet ("Ricevi tramite link") collegano lo scenario al tuo endpoint HTTP.

  • httpPost invia al tuo URL le variabili selezionate.
  • httpGet chiama il tuo URL e salva i campi della risposta nelle variabili.

La richiesta passa attraverso la sessione della scheda, con lo stesso proxy, User-Agent e cookie della normale navigazione. Il formato e fisso e speculare: questi nodi sono pensati per il tuo server, non per una API di terze parti arbitraria.

Formato comune

Ci sono sempre due contenitori:

  1. Meta — nell'intestazione HTTP Request-Meta, con valore base64(JSON(meta)).
  2. Dati — nell'involucro { "payload": { "nome": "<valore-base64>" } }.

I valori dei dati sono sempre stringhe in base64 ottenute dai byte UTF-8. Il tipo originale non viene conservato: 42 arriva al server come stringa "42". La meta viene codificata tutta insieme come una singola stringa JSON in base64.

Campi di meta: ts, domain, url, tab_id, task_id, device, referrer, nonce. Non ci sono token o firme; nonce e solo un identificatore monouso della richiesta.

httpPost

POST /tuo-ricevitore HTTP/1.1
Content-Type: application/json
Request-Meta: eyJ0cyI6MTcxODYwMDAwMCwiZG9tYWluIjoi...

{ "payload": { "login": "dXNlcjE=", "counter": "NDI=" } }

Il client controlla solo lo status code. E sufficiente restituire un qualsiasi 2xx.

httpGet

GET /tuo-trasmettitore HTTP/1.1
Request-Meta: eyJ0cyI6MTcxODYwMDAwMCwiZG9tYWluIjoi...

Il server deve rispondere con JSON valido:

200 OK

{ "payload": { "token": "YWJjMTIz", "qty": "MTA=" } }

Il mapper legge solo chiavi di primo livello in payload. Non sono supportati percorsi puntati, JSONPath o array.


Statistiche

GET /pages-compiled-stats/

Restituisce le statistiche delle visualizzazioni per pagina o gruppo su una data o un periodo. L'intervallo massimo e di 7 giorni.

Parametri query:

  • page_id oppure group_id
  • date (YYYY-MM-DD) oppure date_from + date_to (YYYY-MM-DD)

Esempio di richiesta:

curl -sS "https://api.livesurf.ru/pages-compiled-stats/?group_id=123&date=2026-02-19" \
  -H "Authorization: <API_KEY>" \
  -H "Accept: application/json"

Esempio di risposta:

[{"group_id": 123, "page_id": 1086337, "visits": 42, "credits": 98, "date": "19.02.2026", "date_update": "19.02.2026 15:57:24"}]

Uso consigliato

  • Prima di costruire l'interfaccia e validare i moduli, richiedi GET /limits/. La risposta contiene il tipo di account corrente (user.limits), le soglie max_* per la validazione lato client, la tabella pricing.showtime_price e i pricing.modifiers attivi. I modificatori si applicano in modo moltiplicativo: final = base × Π(1 + modifier.value) per tutti gli enabled=true.
  • Autenticazione: intestazione HTTP Authorization: <token>. 401 significa token assente; 403 significa token valido, ma operazione non consentita per il tipo di account.
  • Rate limit della Client API: 10 rps per token. Se lo superi, ricevi 429; per le operazioni massive distribuisci le richieste nel tempo.
  • Gli errori di validazione vengono restituiti come 400 con il campo errors. I messaggi specifici si trovano in errors.<field_name> o errors.non_field_errors; usa questi campi per mostrare gli errori all'utente.