Заказать порт
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-запросов.
Авторизация
Заголовок раздела «Авторизация»Параметры
Заголовок раздела «Параметры»Параметры заголовков
Заголовок раздела «Параметры заголовков»Необязательный UUID, идентифицирующий один запрос на изменение. Используйте его повторно только для повторной попытки того же запроса.
Тело запросаrequired
Заголовок раздела «Тело запросаrequired»Параметры тарифа
object
ID тарифа
Пример
5349b4ddd2781d08c09890f3object
Срок действия тарифа в секундах
Пример
2592000Объём трафика тарифа в мегабайтах
Пример
51200Цена тарифа в центах
Пример
14500Операция выполнена успешно
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" } ] }}Заголовки
Заголовок раздела «Заголовки»Требуется аутентификация (объект ошибки прежнего формата).
object
Текст ошибки
Код ошибки
Пример
{ "error": "example error", "code": 400}Цена изменилась; объект ошибки прежнего формата без данных о новой цене. Обновите тарифы перед повторным подтверждением.
object
Текст ошибки
Код ошибки
Пример
{ "error": "example error", "code": 400}Заголовки
Заголовок раздела «Заголовки»Ошибка прежнего формата. Необязательные заголовки повторной попытки сохраняются.
object
Текст ошибки
Код ошибки
Пример
{ "error": "example error", "code": 400}