# ऑर्डर का कोट

`POST /account/api/v1/quote`

## प्राधिकरण

`Authorization: Bearer YOUR_ARNPROXY_API_KEY`

`Accept: application/json`

आवश्यक अनुमति: `read`

`Content-Type: application/json`

## पैरामीटर

| नाम | प्रकार | आवश्यक / सशर्त | डिफ़ॉल्ट | विवरण |
|---|---|---|---|---|
| `product_id` (body) | integer | आवश्यक | — | products से उत्पाद ID; 1–2147483647। |
| `lines` (body) | object[] | आवश्यक | — | एक उत्पाद के 1–20 अलग स्थान। location_id दोहराएँ नहीं; कुल अधिकतम 100000 प्रॉक्सी। |
| `lines[].location_id` (body) | integer | आवश्यक | — | चुने उत्पाद कैटलॉग की स्थान ID। |
| `lines[].time_id` (body) | integer | आवश्यक | — | उस स्थान पर उपलब्ध अवधि ID। |
| `lines[].quantity` (body) | integer | आवश्यक | — | 1–100000; product.minimum_quantity भी लागू। |
| `promo_code` (body) | string | वैकल्पिक | `""` | वैकल्पिक प्रमोशन, अधिकतम 100 बाइट। कोट और खरीद/नवीनीकरण में समान रखें। |

## अनुरोध का मुख्य भाग

YOUR_/FROM_ को संबंधित कैटलॉग, कोट या दायरे के मान से बदलें। उदाहरणों में सहमति false है; वास्तविक कार्रवाई केवल जानबूझकर मंज़ूर करें।

```json
{
  "product_id": "FROM_PRODUCTS",
  "lines": [
    {
      "location_id": "FROM_CATALOG",
      "time_id": "FROM_CATALOG",
      "quantity": 1
    }
  ],
  "promo_code": ""
}
```

## अतिरिक्त उपयोग उदाहरण

ID और कीमतें उदाहरण मात्र हैं; कैटलॉग और उसी कोट के वास्तविक मान उपयोग करें। JSON ID और expected_total_minor संख्याएँ हों। सुरक्षा के लिए उदाहरणों में terms=false है; वास्तविक भुगतान वाले कार्य के लिए ग्राहक की स्पष्ट सहमति के बाद ही terms=true भेजें।

### एक उत्पाद प्रकार, दो देश

quote की पंक्तियों में उद्देश्य न भेजें: location_id, time_id और quantity पर्याप्त हैं। उद्देश्य purchase चरण में अनिवार्य है।

```json
{
  "product_id": 5,
  "lines": [
    {
      "location_id": 10,
      "time_id": 101,
      "quantity": 1
    },
    {
      "location_id": 11,
      "time_id": 102,
      "quantity": 1
    }
  ],
  "promo_code": ""
}
```

## अनुरोध उदाहरण

### curl

```curl
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
  curl --silent --show-error --header @- \
    --header 'Accept: application/json' \
    --connect-timeout 10 --max-time 30 \
    --request POST --header 'Content-Type: application/json' \
    --data-binary @request.json \
    'https://www.arnproxy.com/account/api/v1/quote'
```

### python

```python
import os, requests

headers = {"Authorization": "Bearer " + os.environ["ARNPROXY_API_KEY"]}
import json
with open("request.json", encoding="utf-8") as f:
    payload = json.load(f)
response = requests.post(
    "https://www.arnproxy.com/account/api/v1/quote",
    headers=headers, json=payload,
    timeout=(10, 30), allow_redirects=False
)
print(response.status_code, response.text)
# No automatic write retry.
```

### javascript

```javascript
const headers = { Authorization: `Bearer ${process.env.ARNPROXY_API_KEY}` };
const { readFile } = await import('node:fs/promises');
headers['Content-Type'] = 'application/json';
const body = await readFile('request.json', 'utf8');
const response = await fetch("https://www.arnproxy.com/account/api/v1/quote", {
  method: 'POST', headers, redirect: 'error',
  signal: AbortSignal.timeout(30000), body
});
console.log(response.status, await response.text());
// A write timeout is ambiguous; query its saved operation.
```

### php

```php
<?php
$headers = ['Accept: application/json',
    'Authorization: Bearer '.getenv('ARNPROXY_API_KEY')];
$headers[] = 'Content-Type: application/json';
$ch = curl_init('https://www.arnproxy.com/account/api/v1/quote');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 30,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => file_get_contents('request.json'),
]);
$result = curl_exec($ch);
if ($result === false) {
    // Do not repeat a write; use the original operation key.
    throw new RuntimeException('Transport result unknown');
}
echo curl_getinfo($ch, CURLINFO_HTTP_CODE).PHP_EOL.$result;
curl_close($ch);
```

### go

```go
package main

import (
  "fmt"
  "io"
  "net/http"
  "os"
  "time"
)

func main() {
  client := &http.Client{Timeout: 30*time.Second,
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
      return http.ErrUseLastResponse
    }}
  var body io.Reader
  file, err := os.Open("request.json"); if err != nil { panic(err) }
  defer file.Close(); body = file
  req, err := http.NewRequest("POST", "https://www.arnproxy.com/account/api/v1/quote", body)
  if err != nil { panic(err) }
  req.Header.Set("Authorization", "Bearer "+os.Getenv("ARNPROXY_API_KEY"))
  req.Header.Set("Content-Type", "application/json")
  res, err := client.Do(req); if err != nil { panic(err) }
  defer res.Body.Close()
  data, err := io.ReadAll(res.Body); if err != nil { panic(err) }
  fmt.Println(res.StatusCode, string(data))
}
```

### csharp

```csharp
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Post,
    "https://www.arnproxy.com/account/api/v1/quote");
request.Headers.Authorization = new AuthenticationHeaderValue(
    "Bearer", Environment.GetEnvironmentVariable("ARNPROXY_API_KEY"));
request.Content = new StringContent(
    await File.ReadAllTextAsync("request.json"), Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
// Never automatically retry an ambiguous write.
```

### java

```java
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;

// Inside your application method:
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("https://www.arnproxy.com/account/api/v1/quote"))
    .header("Authorization", "Bearer " + System.getenv("ARNPROXY_API_KEY"))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(
        Files.readString(Path.of("request.json"), StandardCharsets.UTF_8)))
    .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
```

## उत्तर · HTTP 200

```json
{
  "ok": true,
  "data": {
    "product": {
      "id": 5,
      "name": "IPv4 Proxy",
      "minimum_quantity": 1
    },
    "currency": "TRY",
    "quantity": 1,
    "base_total": "10.00",
    "quantity_discount_amount": "0.00",
    "subtotal": "10.00",
    "promotion": {
      "code": "",
      "rate": "0.00",
      "amount": "0.00"
    },
    "total": "10.00",
    "total_minor": 1000,
    "lines": [
      {
        "location_id": 10,
        "country": "Example country",
        "time_id": 101,
        "period": "7 days",
        "days": 7,
        "quantity": 1,
        "base_unit_price": "10.0000",
        "quantity_discount_rate": "0.00",
        "unit_price": "10.0000",
        "base_total": "10.00",
        "subtotal": "10.00",
        "promotion_amount": "0.00",
        "total": "10.00",
        "total_minor": 1000
      }
    ],
    "discount_scope": "country",
    "estimate_only": true,
    "stock_checked": false,
    "purchase_available": false,
    "calculated_at": "2030-01-01T12:00:00+00:00"
  },
  "meta": {
    "request_id": "000000000000000000000001",
    "phase": "public_v1",
    "source": "arnproxy_records"
  }
}
```

| नाम | प्रकार | सशर्त | विवरण |
|---|---|---|---|
| `ok` | boolean | — | सफलता संकेत; false पर error.code देखें। |
| `data` | object | — | कार्रवाई-विशिष्ट परिणाम; उदाहरण कृत्रिम और समझाने के लिए हैं। |
| `data.product` | object | — | product का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.product.id` | integer | — | संबंधित ARNPROXY रिकॉर्ड ID; आंतरिक प्रदाता ID के बदले इसे लें। |
| `data.product.name` | string | — | name का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.product.minimum_quantity` | integer | — | इस उत्पाद की प्रति ऑर्डर पंक्ति न्यूनतम मात्रा। |
| `data.currency` | string | — | खाते की लेनदेन मुद्रा: TRY या USD। |
| `data.quantity` | integer | — | चुने या ऑर्डर किए प्रॉक्सी की संख्या। |
| `data.base_total` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.quantity_discount_amount` | string | — | quantity discount amount का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.subtotal` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.promotion` | object | — | promotion का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.promotion.code` | string | — | code का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.promotion.rate` | string | — | rate का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.promotion.amount` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.total` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.total_minor` | integer | — | लघुतम मुद्रा इकाई में पूर्णांक: 1000 = 10.00 TRY/USD। |
| `data.lines` | array | — | lines का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[]` | object | — | lines का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].location_id` | integer | — | स्थानीय कैटलॉग स्थान या उत्पाद प्रकार ID। |
| `data.lines[].country` | string | — | country का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].time_id` | integer | — | स्थानीय अवधि/GB प्लान ID, दिनों या GB की गिनती नहीं। |
| `data.lines[].period` | string | — | पढ़ने योग्य कैटलॉग अवधि नाम। |
| `data.lines[].days` | integer | — | प्लान अवधि दिनों में, GB प्लान की ट्रैफ़िक मात्रा से अलग। |
| `data.lines[].quantity` | integer | — | चुने या ऑर्डर किए प्रॉक्सी की संख्या। |
| `data.lines[].base_unit_price` | string | — | base unit price का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].quantity_discount_rate` | string | — | quantity discount rate का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].unit_price` | string | — | unit price का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].base_total` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.lines[].subtotal` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.lines[].promotion_amount` | string | — | promotion amount का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.lines[].total` | string | — | धनराशि; शुद्धता के लिए लौटाया पाठ/पूर्णांक प्रारूप बनाए रखें। |
| `data.lines[].total_minor` | integer | — | लघुतम मुद्रा इकाई में पूर्णांक: 1000 = 10.00 TRY/USD। |
| `data.discount_scope` | string | — | discount scope का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.estimate_only` | boolean | — | estimate only का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `data.stock_checked` | boolean | — | कीमत/स्थानीय परिणाम अकेले प्रदाता या स्टॉक की गारंटी नहीं। |
| `data.purchase_available` | boolean | — | शर्तों/अनुमतियों के अनुसार उपलब्धता, स्टॉक या प्रदाता की गारंटी नहीं। |
| `data.calculated_at` | string | — | API के लौटाए प्रारूप में समय; उदाहरण की तारीखें कृत्रिम हैं। |
| `meta` | object | — | अनुरोध संबद्धता और डेटा-स्रोत मेटाडेटा। |
| `meta.request_id` | string | — | इस HTTP अनुरोध की पहचान; कार्रवाई कुंजी या ऑर्डर ID नहीं। |
| `meta.phase` | string | — | phase का कार्रवाई-विशिष्ट मान। लौटाया प्रकार बनाए रखें और व्यवहार नोट देखें। |
| `meta.source` | string | — | डेटा स्रोत; स्थानीय रिकॉर्ड और लाइव प्रदाता क्वेरी अलग प्रमाण हैं। |

## व्यवहार और महत्वपूर्ण नोट

- ID products/catalog से लें। quote पंक्ति में केवल location_id, time_id, quantity। purchase में purpose_id=201 और चुना subpurpose_id भी आवश्यक।
- quote की पंक्तियों में उद्देश्य न भेजें: location_id, time_id और quantity पर्याप्त हैं। उद्देश्य purchase चरण में अनिवार्य है।
- एक product_id में अधिकतम 20 अलग location_id हो सकते हैं। हर देश की अलग ऑर्डर प्रविष्टि बनती है; जुड़ा हुआ चेकआउट एक इनवॉइस में संसाधित होता है। मात्रा छूट हर देश की अपनी मात्रा पर लगती है।

प्रमाणीकरण और जाँच निष्पादन से पहले अनुरोध रोक सकते हैं। त्रुटि संदर्भ देखें और सहायता के लिए request_id रखें। कुंजी या पासवर्ड न भेजें।

[त्रुटियाँ और सीमाएँ](https://docs.arnproxy.com/hi/api-v1/errors)
