API Reference

How to send visits manually and integrate with external systems.

Execute a visit

Triggers a browser visit for a single lead. The server launches a Vision Browser instant profile, navigates to the URL, fills the login form, and closes the profile.

POST /run/{token}

Replace {token} with the value of server.token from your config. If server.token is empty, the token segment is ignored and auth is disabled.

Request headers
Content-Type: application/json
Request body
{
  "url":     "https://broker.com/autologin?lead_id=123",
  "ip":      "1.2.3.4",
  "ua":      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  "geo":     "ua",
  "lang":    "uk-UA,uk;q=0.9,en;q=0.8",
  "referer": "https://landing.example.com/",
  "proxy":   "socks5://proxy.host:1080",
  "pauth":   "user:pass",
  "name":    "Ivan",
  "last":    "Shevchenko",
  "email":   "ivan@example.com",
  "pass":    "secret123"
}
Field Type Required Description
url string Yes Target autologin URL to navigate to.
ip string No Lead IP address. Sent as X-Forwarded-For and X-Real-IP headers.
ua string No User-agent string. Passed as a request header to the target page.
geo string No Lead country code (e.g. ua, de). Informational — passed through for context.
lang string No Accept-Language header value (e.g. uk-UA,uk;q=0.9). Sent to the target page.
referer string No Referer header sent to the target page.
proxy string No Proxy URL. Formats: socks5://host:port, http://host:port, or bare host:port (defaults to HTTP).
pauth string No Proxy credentials in user:pass format.
name string No Lead first name. Filled into input[name=name], input[name=first_name], or input[id*=name].
last string No Lead last name. Currently passed but not separately filled (merged with name where applicable).
email string No Email address. Filled into input[type=email], input[name=email], input[name=login], or input[id*=email].
pass string No Password. Filled into input[type=password].
Responses
StatusBodyMeaning
200 {"success":true} Visit completed successfully.
200 {"success":false,"error":"..."} Visit attempted but failed (navigation error, timeout, etc.).
400 plain text Malformed JSON body.
403 plain text Wrong token in the URL path.
503 {"success":false,"error":"busy"} All workers are occupied. Retry later or increase visit.workers in config.
Health check

Returns a simple status response. No authentication required. Use this to verify the server is running.

GET /health
Response
{"status":"ok"}
Manual test with curl

Use this command to send a test visit from the command line. Replace localhost:8765 and change-me with your server address and token.

Example
curl -s -X POST http://localhost:8765/run/change-me \
  -H "Content-Type: application/json" \
  -d '{
    "url":     "https://example.com/autologin",
    "ip":      "1.2.3.4",
    "ua":      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "geo":     "ua",
    "lang":    "uk-UA,uk;q=0.9",
    "referer": "",
    "proxy":   "socks5://proxy.host:1080",
    "pauth":   "user:pass",
    "name":    "Ivan",
    "last":    "Shevchenko",
    "email":   "ivan@example.com",
    "pass":    "secret123"
  }'
AlterCPA Autologiner integration

The AlterCPA Autologiner hack module sends leads via a single URL with the |JSON| separator. Everything after |JSON| is serialised as a JSON object and posted to the endpoint before it. The server prints the ready-made URL on startup — copy it directly from the terminal.

Paste into AlterCPA → Autologiner hack → api field
http://YOUR-SERVER-IP:8765/run/change-me|JSON|url={url}&ip={ip}&ua={ua}&geo={geo}&lang={lang}&referer={referer}&proxy={proxy}&pauth={pauth}&name={name}&last={last}&email={email}&pass={pass}
Tip: If AlterCPA and the autologin server run on the same machine, use localhost or 127.0.0.1. If they are on different machines, use the server's LAN IP or public IP, and make sure the firewall allows inbound TCP on port 8765.
Config reference

The config file autologin-config.yaml is created automatically on first run. Edit it before the second launch.

server:
  port: 8765          # HTTP port the server listens on
  token: "change-me"  # token in /run/{token}; empty string disables auth

browser:
  type: vision        # antidetect browser — only "vision" is supported currently
  api_token: ""       # Vision Browser API token (Vision → Settings)
  local_url: ""       # override Vision local API URL (default: http://127.0.0.1:3030)

visit:
  timeout: 30         # page load timeout in seconds
  headless: true      # run browser in headless mode
  wait_after: 3       # pause after page load (seconds) — simulates human reading
  wait_after_max: 8   # random upper bound for wait_after
  workers: 5          # maximum concurrent visits

log:
  file: ""            # log file path; empty = stdout
  level: info         # debug | info | warn | error