{"openapi":"3.0.3","info":{"title":"ARC Proxies API","version":"1.0.0","description":"Automate everything the dashboard does: read your plans, bandwidth balance and usage, and generate proxy endpoints.\n\nAuthenticate every request with an API key from the dashboard, either as `Authorization: Bearer arc_live_…` or `X-API-Key: arc_live_…`. Keys are shown once at creation and carry scopes (`read`, `proxies`).\n\nAll responses are JSON. Errors share one envelope: `{\"error\": {\"type\", \"message\", \"param\", \"docs_url\"}}`. Rate limits are reported in the `X-RateLimit-Limit` and `X-RateLimit-Remaining` response headers.","contact":{"url":"https://dashboard.arcproxies.io/api"}},"servers":[{"url":"https://api.arcproxy.cloud/api/v1"}],"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Authorization: Bearer arc_live_…"},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}},"PlanBalance":{"type":"object","properties":{"plan_id":{"type":"string","example":"arc-fast"},"plan_name":{"type":"string","example":"ARC Fast"},"pool_type":{"type":"string","example":"residential"},"purchased_gb":{"type":"number"},"used_gb":{"type":"number"},"remaining_gb":{"type":"number"},"pending_gb":{"type":"number","description":"Paid GB the upstream has not allocated yet."}}},"ProxyEndpoint":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"username":{"type":"string"},"password":{"type":"string"},"country":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"session_id":{"type":"string","nullable":true,"description":"Sticky sessions only. Pass it back in `session_ids` to reach the same exit IP again."},"proxy":{"type":"string","description":"The endpoint rendered in the requested `format`."}}}}},"paths":{"/account":{"get":{"summary":"The account this key belongs to","operationId":"getAccount","tags":["Account"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"email":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}},"/plans":{"get":{"summary":"Every plan we sell, with prices and capabilities","operationId":"listPlans","tags":["Catalog"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["arc-basic","arc-fast","arc-ultra","arc-ultimate","arc-mobile"]},"name":{"type":"string"},"price_per_gb":{"type":"number"},"currency":{"type":"string"},"pool_type":{"type":"string"},"countries":{"type":"array","items":{"type":"string"},"description":"Empty means any ISO 3166-1 alpha-2 code."},"supports_cities":{"type":"boolean"},"supports_fast_mode":{"type":"boolean"},"promo":{"type":"object","nullable":true,"description":"A running campaign whose per-GB tiers REPLACE volume_tiers. Null when none is running."}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}},"/balance":{"get":{"summary":"Bandwidth left, per plan","operationId":"getBalance","tags":["Usage"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plans":{"type":"array","items":{"$ref":"#/components/schemas/PlanBalance"}},"totals":{"$ref":"#/components/schemas/PlanBalance"}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}},"/usage":{"get":{"summary":"Bandwidth consumed per time bucket","operationId":"getUsage","tags":["Usage"],"parameters":[{"name":"range","in":"query","schema":{"type":"string","enum":["24h","30d","12m"],"default":"30d"},"description":"24h gives 15-minute buckets, 30d daily, 12m monthly."},{"name":"pool_type","in":"query","schema":{"type":"string","enum":["residential","isp","mobile"]},"description":"Restrict to one pool. Omit to include all."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"range":{"type":"string"},"granularity":{"type":"string"},"unit":{"type":"string","example":"gb"},"series":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}}}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}},"total_gb":{"type":"number"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}},"/orders":{"get":{"summary":"Paid bandwidth top-ups, newest first","operationId":"listOrders","tags":["Account"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50,"maximum":200}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}},"/proxies":{"post":{"summary":"Generate proxy endpoints","operationId":"generateProxies","tags":["Proxies"],"description":"Requires the `proxies` scope. Rotating plans compose their endpoints from your subuser credentials and cost nothing to call; ARC Mobile mints them at the carrier, so keep batches reasonable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["plan_id"],"properties":{"plan_id":{"type":"string","enum":["arc-basic","arc-fast","arc-ultra","arc-ultimate","arc-mobile"]},"count":{"type":"integer","default":1,"minimum":1,"maximum":10000},"country":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"ISO 3166-1 alpha-2. A list spreads the batch round-robin."},"city":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Rotating plans only."},"session":{"type":"string","enum":["rotating","sticky"],"default":"rotating"},"session_ttl":{"type":"integer","description":"Sticky lifetime in SECONDS. Rotating plans: 60–86400. ARC Mobile: 300–3600."},"session_ids":{"type":"array","items":{"type":"string"},"description":"Reuse handles from an earlier response to get the same exit IPs back."},"fast_mode":{"type":"boolean","default":false,"description":"Rotating plans only. Prefers the fastest nodes in the pool."},"protocol":{"type":"string","enum":["http","socks5"],"default":"http"},"format":{"type":"string","enum":["url","hostport","userpass"],"default":"url","description":"url → protocol://user:pass@host:port · hostport → host:port:user:pass · userpass → user:pass:host:port"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"object"},"count":{"type":"integer"},"format":{"type":"string"},"protocol":{"type":"string"},"session":{"type":"string"},"balance":{"$ref":"#/components/schemas/PlanBalance"},"proxies":{"type":"array","items":{"type":"string"},"description":"Ready-to-paste lines in the requested format."},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/ProxyEndpoint"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"409":{"description":"No bandwidth on this account for that plan yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}},"502":{"description":"The upstream pool could not be reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"invalid_request_error"},"message":{"type":"string"},"param":{"type":"string"},"docs_url":{"type":"string"}},"required":["type","message"]}}}}}}}}}}}