अतिरिक्त लॉगिन बदलें
POST
/account/api/v1/extra-logins/replaceकार्रवाई की स्पष्ट पुष्टि करें
यह कार्रवाई रिकॉर्ड, शेष राशि या सेवा सेटिंग बदल सकती है। पहले दायरा और नोट पढ़ें। परिणाम अनिश्चित हो तो नई कार्रवाई के बजाय उसी की स्थिति पूछें।
प्राधिकरण
| Authorization | Bearer YOUR_ARNPROXY_API_KEY |
|---|---|
| आवश्यक अनुमति | proxy_management |
| Accept | application/json |
| Content-Type | application/json |
| Idempotency-Key | 16–100 अक्षर, अंक, _ या -। एक ही कार्रवाई के लिए मान सहेजकर दोबारा उपयोग करें। |
पैरामीटर
| नाम | प्रकार | विवरण |
|---|---|---|
Idempotency-Key | string | 16–100 अक्षर/अंक/_/-। कार्रवाई और स्थिति में समान मान रखें; अलग बॉडी में पुनः उपयोग न करें। |
id | integer | इस कार्रवाई के अपने रिकॉर्ड की ID; 1–2147483647। दिखने वाला ऑर्डर नंबर या प्रदाता ID नहीं। |
mode | string | random (डिफ़ॉल्ट) या custom। custom केवल तभी जब विकल्प उत्तर में custom_credentials_available=true हो। आवश्यक लंबाई username_length और password_length में देखें। डिफ़ॉल्ट: "random" |
expected_revision | string | इस कार्रवाई की दायरा/सेटिंग क्वेरी का revision: 64 छोटे हेक्स अक्षर। |
terms | boolean | स्पष्ट स्वीकृति के लिए JSON बूलियन true चाहिए, "true" स्ट्रिंग नहीं। |
username | string | केवल समर्थित mode=custom में: ठीक 12 ASCII अक्षर या अंक। random मोड में न भेजें। |
password | string | केवल समर्थित mode=custom में: ठीक 12 ASCII अक्षर या अंक। random मोड में न भेजें। |
अनुरोध का मुख्य भाग
YOUR_/FROM_ को संबंधित कैटलॉग, कोट या दायरे के मान से बदलें। उदाहरणों में सहमति false है; वास्तविक कार्रवाई केवल जानबूझकर मंज़ूर करें।
{
"id": "YOUR_EXTRA_LOGIN_ID",
"mode": "random",
"expected_revision": "FROM_SCOPE_REVISION",
"terms": false
}अनुरोध उदाहरण
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
curl --silent --show-error --header @- \
--header 'Accept: application/json' \
--connect-timeout 10 --max-time 30 \
--header 'Idempotency-Key: YOUR_SAVED_OPERATION_KEY' \
--request POST --header 'Content-Type: application/json' \
--data-binary @request.json \
'https://www.arnproxy.com/account/api/v1/extra-logins/replace'इस पेज पर उदाहरण नहीं चलते। API कुंजी सर्वर की पर्यावरण चर में रखें, URL या ब्राउज़र कोड में नहीं। POST के लिए request.json तैयार करें।
{"curl":"printf \u0027Authorization: Bearer %s\\n\u0027 \u0022$ARNPROXY_API_KEY\u0022 |\n curl --silent --show-error --header @- \\\n --header \u0027Accept: application\/json\u0027 \\\n --connect-timeout 10 --max-time 30 \\\n --header \u0027Idempotency-Key: YOUR_SAVED_OPERATION_KEY\u0027 \\\n --request POST --header \u0027Content-Type: application\/json\u0027 \\\n --data-binary @request.json \\\n \u0027https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0027","python":"import os, requests\n\nheaders = {\u0022Authorization\u0022: \u0022Bearer \u0022 + os.environ[\u0022ARNPROXY_API_KEY\u0022]}\nheaders[\u0022Idempotency-Key\u0022] = \u0022YOUR_SAVED_OPERATION_KEY\u0022\nimport json\nwith open(\u0022request.json\u0022, encoding=\u0022utf-8\u0022) as f:\n payload = json.load(f)\nresponse = requests.post(\n \u0022https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0022,\n headers=headers, json=payload,\n timeout=(10, 30), allow_redirects=False\n)\nprint(response.status_code, response.text)\n# No automatic write retry.","javascript":"const headers = { Authorization: `Bearer ${process.env.ARNPROXY_API_KEY}` };\nheaders[\u0027Idempotency-Key\u0027] = \u0027YOUR_SAVED_OPERATION_KEY\u0027;\nconst { readFile } = await import(\u0027node:fs\/promises\u0027);\nheaders[\u0027Content-Type\u0027] = \u0027application\/json\u0027;\nconst body = await readFile(\u0027request.json\u0027, \u0027utf8\u0027);\nconst response = await fetch(\u0022https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0022, {\n method: \u0027POST\u0027, headers, redirect: \u0027error\u0027,\n signal: AbortSignal.timeout(30000), body\n});\nconsole.log(response.status, await response.text());\n\/\/ A write timeout is ambiguous; query its saved operation.","php":"\u003C?php\n$headers = [\u0027Accept: application\/json\u0027,\n \u0027Authorization: Bearer \u0027.getenv(\u0027ARNPROXY_API_KEY\u0027)];\n$headers[] = \u0027Idempotency-Key: YOUR_SAVED_OPERATION_KEY\u0027;\n$headers[] = \u0027Content-Type: application\/json\u0027;\n$ch = curl_init(\u0027https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0027);\ncurl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER =\u003E true,\n CURLOPT_HTTPHEADER =\u003E $headers,\n CURLOPT_FOLLOWLOCATION =\u003E false,\n CURLOPT_SSL_VERIFYPEER =\u003E true, CURLOPT_SSL_VERIFYHOST =\u003E 2,\n CURLOPT_CONNECTTIMEOUT =\u003E 10, CURLOPT_TIMEOUT =\u003E 30,\n CURLOPT_POST =\u003E true,\n CURLOPT_POSTFIELDS =\u003E file_get_contents(\u0027request.json\u0027),\n]);\n$result = curl_exec($ch);\nif ($result === false) {\n \/\/ Do not repeat a write; use the original operation key.\n throw new RuntimeException(\u0027Transport result unknown\u0027);\n}\necho curl_getinfo($ch, CURLINFO_HTTP_CODE).PHP_EOL.$result;\ncurl_close($ch);","go":"package main\n\nimport (\n \u0022fmt\u0022\n \u0022io\u0022\n \u0022net\/http\u0022\n \u0022os\u0022\n \u0022time\u0022\n)\n\nfunc main() {\n client := \u0026http.Client{Timeout: 30*time.Second,\n CheckRedirect: func(req *http.Request, via []*http.Request) error {\n return http.ErrUseLastResponse\n }}\n var body io.Reader\n file, err := os.Open(\u0022request.json\u0022); if err != nil { panic(err) }\n defer file.Close(); body = file\n req, err := http.NewRequest(\u0022POST\u0022, \u0022https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0022, body)\n if err != nil { panic(err) }\n req.Header.Set(\u0022Authorization\u0022, \u0022Bearer \u0022+os.Getenv(\u0022ARNPROXY_API_KEY\u0022))\n req.Header.Set(\u0022Idempotency-Key\u0022, \u0022YOUR_SAVED_OPERATION_KEY\u0022)\n req.Header.Set(\u0022Content-Type\u0022, \u0022application\/json\u0022)\n res, err := client.Do(req); if err != nil { panic(err) }\n defer res.Body.Close()\n data, err := io.ReadAll(res.Body); if err != nil { panic(err) }\n fmt.Println(res.StatusCode, string(data))\n}","csharp":"using System;\nusing System.IO;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Text;\n\nusing var handler = new HttpClientHandler { AllowAutoRedirect = false };\nusing var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };\nusing var request = new HttpRequestMessage(HttpMethod.Post,\n \u0022https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0022);\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\n \u0022Bearer\u0022, Environment.GetEnvironmentVariable(\u0022ARNPROXY_API_KEY\u0022));\nrequest.Headers.Add(\u0022Idempotency-Key\u0022, \u0022YOUR_SAVED_OPERATION_KEY\u0022);\nrequest.Content = new StringContent(\n await File.ReadAllTextAsync(\u0022request.json\u0022), Encoding.UTF8, \u0022application\/json\u0022);\nusing var response = await client.SendAsync(request);\nConsole.WriteLine((int)response.StatusCode);\nConsole.WriteLine(await response.Content.ReadAsStringAsync());\n\/\/ Never automatically retry an ambiguous write.","java":"import java.net.URI;\nimport java.net.http.*;\nimport java.nio.charset.StandardCharsets;\nimport java.nio.file.*;\n\n\/\/ Inside your application method:\nvar client = HttpClient.newHttpClient();\nvar request = HttpRequest.newBuilder(URI.create(\u0022https:\/\/www.arnproxy.com\/account\/api\/v1\/extra-logins\/replace\u0022))\n .header(\u0022Authorization\u0022, \u0022Bearer \u0022 + System.getenv(\u0022ARNPROXY_API_KEY\u0022))\n .header(\u0022Accept\u0022, \u0022application\/json\u0022)\n .header(\u0022Idempotency-Key\u0022, System.getenv(\u0022ARNPROXY_OPERATION_KEY\u0022))\n .header(\u0022Content-Type\u0022, \u0022application\/json\u0022)\n .POST(HttpRequest.BodyPublishers.ofString(\n Files.readString(Path.of(\u0022request.json\u0022), StandardCharsets.UTF_8)))\n .build();\nvar response = client.send(request, HttpResponse.BodyHandlers.ofString());\nSystem.out.println(response.statusCode());"}उत्तर
200सफल उत्तर
{
"ok": true,
"data": {
"state": "completed",
"phase": "done",
"action": "replace_extra_login",
"old_login_id": 40001,
"new_login_id": 40002,
"proxy_ids": [
12345
],
"reason_code": null,
"resume_available": false,
"replayed": false,
"primary_credentials_modified": false,
"credentials_included": false,
"strategy": "create_verify_then_revoke_old"
},
"meta": {
"request_id": "000000000000000000000001",
"phase": "public_v1",
"source": "arnproxy_records"
}
}उत्तर के फ़ील्ड और प्रकार
| नाम | प्रकार | विवरण |
|---|---|---|
ok | boolean | सफलता संकेत; false पर error.code देखें। |
data | object | कार्रवाई-विशिष्ट परिणाम; उदाहरण कृत्रिम और समझाने के लिए हैं। |
data.state | string | रिकॉर्ड/कार्रवाई स्थिति। accepted डिलीवरी नहीं; completed कनेक्शन परीक्षण नहीं। |
data.phase | string | phase का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
data.action | string | action का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
data.old_login_id | integer | संबंधित ARNPROXY रिकॉर्ड ID; आंतरिक प्रदाता ID के बदले इसे लें। |
data.new_login_id | integer | संबंधित ARNPROXY रिकॉर्ड ID; आंतरिक प्रदाता ID के बदले इसे लें। |
data.proxy_ids | array | इस खाते को दिखने वाले दायरे की प्रॉक्सी ID। |
data.proxy_ids[] | integer | इस खाते को दिखने वाले दायरे की प्रॉक्सी ID। |
data.reason_code | string|null | निश्चित कारण कोड या null, मूल प्रदाता त्रुटि पाठ नहीं। |
data.resume_available | boolean | न भेजे चरण को स्पष्ट रूप से जारी रखने की सुविधा; false पर स्वतः न दोहराएँ। |
data.replayed | boolean | उसी कार्रवाई का सहेजा परिणाम लौटा, नए शुल्क/कार्रवाई का प्रमाण नहीं। |
data.primary_credentials_modified | boolean | primary credentials modified का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
data.credentials_included | boolean | क्या परिणाम/कुंजी गोपनीय क्रेडेंशियल शामिल या अनुमति देता है। |
data.strategy | string | अतिरिक्त लॉगिन बदलाव में पहले नई पहुँच सत्यापित होती है, फिर पुरानी चुनी पहुँच हटती है। |
meta | object | अनुरोध संबद्धता और डेटा-स्रोत मेटाडेटा। |
meta.request_id | string | इस HTTP अनुरोध की पहचान; कार्रवाई कुंजी या ऑर्डर ID नहीं। |
meta.phase | string | phase का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
meta.source | string | डेटा स्रोत; स्थानीय रिकॉर्ड और लाइव प्रदाता क्वेरी अलग प्रमाण हैं। |
त्रुटि उत्तर
{
"ok": false,
"error": { "code": "INVALID_API_KEY" },
"meta": { "request_id": "000000000000000000000001" }
}प्रमाणीकरण और जाँच निष्पादन से पहले अनुरोध रोक सकते हैं। त्रुटि संदर्भ देखें और सहायता के लिए request_id रखें। कुंजी या पासवर्ड न भेजें। त्रुटियाँ और सीमाएँ →
व्यवहार और महत्वपूर्ण नोट
- अतिरिक्त लॉगिन मुख्य डिलीवरी लॉगिन से अलग हैं। नया लॉगिन बनाने से मुख्य लॉगिन नहीं बदलता और अन्य अतिरिक्त लॉगिन नहीं मिटते। पहले विकल्प उत्तर में custom_credentials_available, username_length और password_length पढ़ें।
- id अतिरिक्त लॉगिन ID है, प्रॉक्सी ID नहीं। पहले नया लॉगिन सत्यापित होता है, फिर केवल चुना पुराना हटता है। मुख्य प्रॉक्सी तालिका नहीं बदलती।
- कार्रवाई केवल चुने प्रॉक्सी के बजाय पूरे अनुमति समूह, जैसे ऑर्डर या पैकेज, को प्रभावित कर सकती है। आगे बढ़ने से पहले proxy_ids, authorization_scope और may_affect_other_proxies जाँचें। दायरा बदले तो नया revision लें।
- टाइमआउट/5xx लिखने की विफलता का प्रमाण नहीं। मूल Idempotency-Key से स्थिति पूछें। नई कुंजी से न दोहराएँ; GET बदलाव फिर नहीं भेजता।