Замовити порт
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");curl_easy_setopt(hnd, CURLOPT_URL, "https://api.ltesocks.io/v2/ports/order");
struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "Authorization: Bearer <token>");headers = curl_slist_append(headers, "Content-Type: application/json");curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }");
CURLcode ret = curl_easy_perform(hnd);using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.ltesocks.io/v2/ports/order"), Headers = { { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.ltesocks.io/v2/ports/order"
payload := strings.NewReader("{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.ltesocks.io/v2/ports/order")) .header("Authorization", "Bearer <token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }")) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, "{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }");Request request = new Request.Builder() .url("https://api.ltesocks.io/v2/ports/order") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'POST', url: 'https://api.ltesocks.io/v2/ports/order', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, data: { plan: '5349b4ddd2781d08c09890f3', tarification: {time: 2592000, traffic: 51200, price: 14500} }};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.ltesocks.io/v2/ports/order';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"plan":"5349b4ddd2781d08c09890f3","tarification":{"time":2592000,"traffic":51200,"price":14500}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")val body = RequestBody.create(mediaType, "{ \"plan\": \"5349b4ddd2781d08c09890f3\", \"tarification\": { \"time\": 2592000, \"traffic\": 51200, \"price\": 14500 } }")val request = Request.Builder() .url("https://api.ltesocks.io/v2/ports/order") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json") .build()
val response = client.newCall(request).execute()use serde_json::json;use reqwest;
#[tokio::main]pub async fn main() { let url = "https://api.ltesocks.io/v2/ports/order";
let payload = json!({ "plan": "5349b4ddd2781d08c09890f3", "tarification": json!({ "time": 2592000, "traffic": 51200, "price": 14500 }) });
let mut headers = reqwest::header::HeaderMap::new(); headers.insert("Authorization", "Bearer <token>".parse().unwrap()); headers.insert("Content-Type", "application/json".parse().unwrap());
let client = reqwest::Client::new(); let response = client.post(url) .headers(headers) .json(&payload) .send() .await;
let results = response.unwrap() .json::<serde_json::Value>() .await .unwrap();
dbg!(results);}curl --request POST \ --url https://api.ltesocks.io/v2/ports/order \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "plan": "5349b4ddd2781d08c09890f3", "tarification": { "time": 2592000, "traffic": 51200, "price": 14500 } }'wget --quiet \ --method POST \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --body-data '{ "plan": "5349b4ddd2781d08c09890f3", "tarification": { "time": 2592000, "traffic": 51200, "price": 14500 } }' \ --output-document \ - https://api.ltesocks.io/v2/ports/orderЗберігаються попередні формати JSON і HTTP-статуси, включно з об’єктами помилок і HTTP 500 за недостатнього балансу та помилок валідації. Для ідемпотентності застосовуються налаштовані TTL і тайм-аут блокування; серверні помилки за замовчуванням не кешуються. Необов’язковий заголовок X-LTESocks-Order-State набуває значень not-created, created або unknown. Лише not-created підтверджує, що ця спроба не створила замовлення. Відсутність відповіді або стан unknown не означають, що повторна спроба безпечна. X-LTESocks-Error-Code може бути priceChanged, insufficientBalance, validationFailed, unauthorized, forbidden, portDetailsUnavailable, upstreamError або idempotencyConflict. Ці додаткові заголовки не змінюють обробку інших POST-запитів.
Авторизація
Section titled “Авторизація”Параметри
Section titled “Параметри”Параметри заголовків
Section titled “Параметри заголовків”Необов’язковий UUID, що ідентифікує один запит на зміну. Використовуйте його повторно лише для повторної спроби того самого запиту.
Тіло запитуrequired
Section titled “Тіло запитуrequired”Параметри тарифу
object
ID тарифу
Приклад
5349b4ddd2781d08c09890f3object
Строк дії тарифу в секундах
Приклад
2592000Обсяг трафіку тарифу в мегабайтах
Приклад
51200Ціна тарифу в центах
Приклад
14500Відповіді
Section titled “Відповіді”Операцію виконано успішно
object
Номер порту
Поточна IP-адреса порту (0.0.0.0, якщо недоступна)
object
Статус порту
Поточний статус
Токен скидання порту
Сигнатура порту
Вказує, чи має порт доступ до VPN-сервера
Інтервал автоскидання порту в секундах; 0 вимикає автоскидання
Теги порту
object
ID тарифу
Назва тарифу
Код країни тарифу
Вказує, чи активний тариф
Вказує, чи ввімкнене автопродовження тарифу
Час активації тарифу
Час завершення тарифу
Залишок трафіку в мегабайтах
object
Строк дії тарифу в секундах
Обсяг трафіку тарифу в мегабайтах
Ціна тарифу в центах
object
object
Приклад
{ "port": 10000, "ip": "1.1.1.1", "geoip": { "continentCode": "NA", "continentName": "North America", "countryCode2": "US", "countryCode3": "United States", "latitude": "38.89037", "longitude": "-77.03196", "isp": "T-Mobile USA, Inc." }, "status": "active", "currentStatus": "active", "resetToken": "6015510d206e4d7b023e5f978a56e3cf49d7e79bc26cf28c69b75314e098a61b", "signature": "Windows", "vpnAccess": true, "plan": { "id": "5349b4ddd2781d08c09890f3", "name": "UK Three", "countryCode": "UK", "enabled": true, "autoRenew": true, "activatedAt": "2022-04-02T05:57:29.054Z", "expiresAt": "2022-05-02T05:57:29.054Z", "trafficRemains": 51200, "tarification": { "time": 2592000, "traffic": 51200, "price": 14500 } }, "credentials": { "ip": [ "2.2.2.2" ], "password": [ { "login": "login", "password": "password" } ] }}Заголовки
Section titled “Заголовки”Потрібна автентифікація (об’єкт помилки попереднього формату).
object
Текст помилки
Код помилки
Приклад
{ "error": "example error", "code": 400}Ціна змінилася; об’єкт помилки попереднього формату без даних про нову ціну. Оновіть тарифи перед повторним підтвердженням.
object
Текст помилки
Код помилки
Приклад
{ "error": "example error", "code": 400}Заголовки
Section titled “Заголовки”Помилка попереднього формату. Необов’язкові заголовки повторної спроби зберігаються.
object
Текст помилки
Код помилки
Приклад
{ "error": "example error", "code": 400}