Documentazione API livesurf.org
Accedi o registrati per ottenere la chiave API.
Accedi o registratiLiveSurf 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
10richieste 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 disponibiliGET /countries/— elenco dei Paesi disponibiliGET /languages/— elenco delle lingue disponibiliGET /limits/— limiti dell'account corrente e limiti di riferimento per tipo di account
Sorgenti
GET /sources/search/— elenco dei motori di ricercaGET /sources/ad/— elenco delle piattaforme pubblicitarieGET /sources/messengers/— elenco dei servizi di messaggisticaGET /sources/social/— elenco dei social networkGET /sources/neural/— elenco delle sorgenti AIGET /sources/recommender/— elenco delle sorgenti da sistemi di raccomandazione
Utente
GET /user/— restituisce le informazioni dell'utentePOST /user/automode/— attiva la modalita ARC, cioe la campagna pubblicitaria automaticaPOST /user/manualmode/— attiva la modalita manuale
Gruppi
GET /group/all/— restituisce i gruppi aggiunti all'accountGET /group/{group_id}/— restituisce un gruppo specificoPATCH /group/{group_id}/— aggiorna parzialmente le impostazioni del gruppoPUT /group/{group_id}/— sostituisce tutte le impostazioni del gruppoDELETE /group/{group_id}/— elimina il gruppoPOST /group/create/— crea un nuovo gruppoPOST /group/{group_id}/clone/— clona il gruppoPOST /group/{group_id}/add_credits/— accredita crediti per visite sul saldo del gruppo in modalita manualePOST /group/{group_id}/refund_credits/— riporta tutti i crediti del progetto sul saldo principale dell'account in modalita manualePOST /group/{group_id}/reorder/— cambia l'ordine delle pagine nel gruppo
Pagine
GET /page/{page_id}/— restituisce una pagina specificaPATCH /page/{page_id}/— aggiorna parzialmente le impostazioni della paginaPUT /page/{page_id}/— sostituisce tutte le impostazioni della paginaDELETE /page/{page_id}/— elimina la paginaPOST /page/create/— crea una nuova paginaPOST /page/{page_id}/clone/— clona la paginaPOST /page/{page_id}/up/— sposta la pagina di una posizione verso l'altoPOST /page/{page_id}/down/— sposta la pagina di una posizione verso il bassoPOST /page/{page_id}/start/— avvia la paginaPOST /page/{page_id}/stop/— ferma la paginaGET /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 ashowtimee modificatori.
Per validare interfaccia e richieste usa user.limits.
Campi principali di user.limits
min_showtime/max_showtime— intervallo ammesso per ogni valore dipage.showtime;frometovengono validati separatamente.min_daylimit/max_daylimit— intervallo ammesso pergroup.day_limit; semin_daylimit = 0, e ammessoday_limit = 0.min_hourlimit/max_hourlimit— intervallo ammesso pergroup.hour_limit; semin_hourlimit = 0, e ammessohour_limit = 0.min_imp/max_imp— intervallo ammesso per ogni valore digroup.interval; semin_imp = 0, e possibile disattivarlo.max_keywords— numero massimo di elementi insources.keywords.settings.list.max_backlinks— numero massimo di elementi insources.backlinks.settings.list.max_selectors— numero massimo di elementi inbehavior.settings.clicks.listin modalitaclicks.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 insources.keywords.settings.search_engines.name— nome della sorgente.default— peso predefinito, espresso come stringa numerica.payload— dati della sorgente:isoestr_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 (0manuale,1automatica).type— ID del tipo di account; per la validazione dei limiti usaGET /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'intervallomin_hourlimit..max_hourlimitda/limits/.day_limit— limite giornaliero nell'intervallomin_daylimit..max_daylimit.interval— intervallo tra visualizzazioni[from, to], con ogni valore inmin_imp..max_imp.uniq_ip— unicita IP in ore (0disattivato, massimo168).moby_ratio— quota di traffico mobile0..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 esempioEurope/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"], dove0mette in pausa e1riprende 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:
nameopzionale — 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:0pausa,1attiva.break_chain: probabilita di interrompere la catena, da 0 a 100.url: elenco di URL sullo stesso dominio, massimo1 + max_alternate_urls.showtime:[from, to], con ogni valore inmin_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, trannemanual.clicks.list— selettori CSS per la modalitaclicks, massimomax_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 daemitEvent.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 dicondition.- 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 inevents. - 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. idblocco:[a-zA-Z0-9], fino a 15 caratteri.- Nome variabile: 3-15 caratteri.
- Nome evento: 1-30 caratteri.
- URL
httpGet/httpPost: solohttp/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.
httpPostinvia al tuo URL le variabili selezionate.httpGetchiama 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:
- Meta — nell'intestazione HTTP
Request-Meta, con valorebase64(JSON(meta)). - 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_idoppuregroup_iddate(YYYY-MM-DD) oppuredate_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 sogliemax_*per la validazione lato client, la tabellapricing.showtime_pricee ipricing.modifiersattivi. I modificatori si applicano in modo moltiplicativo:final = base × Π(1 + modifier.value)per tutti glienabled=true. - Autenticazione: intestazione HTTP
Authorization: <token>.401significa token assente;403significa 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
400con il campoerrors. I messaggi specifici si trovano inerrors.<field_name>oerrors.non_field_errors; usa questi campi per mostrare gli errori all'utente.

IT
RU