Единый API для сервисов, автоматического списания с баланса, статусов, файлов результата и подписанных webhook-уведомлений.
https://bmw-power.com.ua/api/v2/index.phpПосле регистрации API-аккаунт и персональный ключ создаются автоматически. Отдельное подключение администратором не требуется.
Подробные поля, варианты и готовые примеры для каждого сервиса находятся в полной инструкции API.
Инструкция содержит код для cURL, Python, PHP, JavaScript и C#.
Для выполнения запросов войдите или зарегистрируйтесь. После входа на этой странице автоматически появится ваш персональный API-ключ.
Idempotency-Key.Передавайте персональный ключ в заголовке X-API-Key: YOUR_API_KEY.
curl -sS "https://bmw-power.com.ua/api/v2/index.php" \
-H "X-API-Key: YOUR_API_KEY"
import requests
response = requests.get("https://bmw-power.com.ua/api/v2/index.php", headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60)
response.raise_for_status()
print(response.json())
$ch = curl_init('https://bmw-power.com.ua/api/v2/index.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY'],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
curl_close($ch);
echo $response;const response = await fetch("https://bmw-power.com.ua/api/v2/index.php", { headers: { "X-API-Key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
var json = await client.GetStringAsync("https://bmw-power.com.ua/api/v2/index.php");
Console.WriteLine(json);
Ответ содержит текущий баланс и эффективные тарифы. Индивидуальная цена имеет приоритет; если её нет, применяется общая. Поле price_source показывает источник цены. Успешное создание возвращает HTTP 201, цену заказа и остаток баланса.
Для каждого нового логического заказа или платежа генерируйте новый UUID длиной 8–128 символов. При сетевой ошибке повторяйте абсолютно тот же запрос к тому же endpoint с тем же ключом — дубликата не будет. Не используйте один ключ для разных данных.
curl -sS "https://bmw-power.com.ua/api/v2/index.php?order_id=API_ORDER_ID" \
-H "X-API-Key: YOUR_API_KEY"
import requests
response = requests.get("https://bmw-power.com.ua/api/v2/index.php?order_id=API_ORDER_ID", headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60)
response.raise_for_status()
print(response.json())
$ch = curl_init('https://bmw-power.com.ua/api/v2/index.php?order_id=API_ORDER_ID');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY'],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
curl_close($ch);
echo $response;const response = await fetch("https://bmw-power.com.ua/api/v2/index.php?order_id=API_ORDER_ID", { headers: { "X-API-Key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
var json = await client.GetStringAsync("https://bmw-power.com.ua/api/v2/index.php?order_id=API_ORDER_ID");
Console.WriteLine(json);
pending — обрабатывается; completed — готово; cancel — отменено; failed — ошибка.
Автоматический возврат: при статусе cancel или failed вся списанная за API-заказ сумма один раз возвращается на баланс с пометкой Invalid request or server error. В ответе статуса и webhook смотрите поля order.refunded и order.refund.
Укажите публичный HTTPS URL на этой странице. Сервер отправляет события order.completed, order.cancelled, order.failed, payment.completed и проверочное webhook.test. Событие payment.completed отправляется только после подтверждения LiqPay и фактического зачисления баланса. Получатель должен быстро вернуть HTTP 2xx, проверять подпись по сырому body и удалять дубликаты по event_id.
X-BMW-Power-Event: order.completed
X-BMW-Power-Delivery: EVENT_UUID
X-BMW-Power-Timestamp: UNIX_TIMESTAMP
X-BMW-Power-Signature: v1=HMAC_SHA256(TIMESTAMP + "." + RAW_BODY, WEBHOOK_SECRET)
curl -L "DOWNLOAD_URL" \
-H "X-API-Key: YOUR_API_KEY" \
-o result.zip
import requests
response = requests.get("DOWNLOAD_URL", headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60)
response.raise_for_status()
with open("result.zip", "wb") as output:
output.write(response.content)
$ch = curl_init('DOWNLOAD_URL');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY'],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
curl_close($ch);
file_put_contents(__DIR__ . '/result.zip', $response);import { writeFile } from "node:fs/promises";
const response = await fetch("DOWNLOAD_URL", { headers: { "X-API-Key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error(await response.text());
await writeFile("result.zip", new Uint8Array(await response.arrayBuffer()));using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
var bytes = await client.GetByteArrayAsync("DOWNLOAD_URL");
await File.WriteAllBytesAsync("result.zip", bytes);
401 invalid_api_key — ключ отсутствует, неверен, заменён или отключён.402 insufficient_balance — недостаточно денег.403 service_not_enabled — нет активного тарифа.409 idempotency_conflict — тот же ключ использован с другими данными.422 — ошибка входных данных.Безопасность: храните API-ключ и webhook secret только на сервере. Не вставляйте их в публичное мобильное или desktop-приложение и не отправляйте в логи.
Создайте платёж отдельным POST-запросом. В ответе сохраните payment.id и откройте payment.payment_url в браузере пользователя. Данные карты через ваш сервер и BMW-Power API не передаются — их принимает защищённая страница LiqPay.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?action=topup" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"amount":100,"payment_method":"liqpay","language":"en"}'
import uuid
import requests
response = requests.post(
"https://bmw-power.com.ua/api/v2/index.php?action=topup",
headers={
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": str(uuid.uuid4()),
},
json={"amount": 100, "payment_method": "liqpay", "language": "en"},
timeout=60,
)
response.raise_for_status()
print(response.json())
$url = 'https://bmw-power.com.ua/api/v2/index.php?action=topup';
$payload = json_encode(['amount' => 100, 'payment_method' => 'liqpay', 'language' => 'en']);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY',
'Idempotency-Key: ' . bin2hex(random_bytes(16)),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
curl_close($ch);
echo $response;
import { randomUUID } from "node:crypto";
const response = await fetch("https://bmw-power.com.ua/api/v2/index.php?action=topup", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({ amount: 100, payment_method: "liqpay", language: "en" }),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?action=topup");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"amount\":100,\"payment_method\":\"liqpay\",\"language\":\"en\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
Поля: amount — сумма, payment_method — liqpay, language — ru, uk или en. Для каждого нового платежа нужен новый Idempotency-Key.
curl -sS "https://bmw-power.com.ua/api/v2/index.php?payment_id=API_PAYMENT_ID" \
-H "X-API-Key: YOUR_API_KEY"
import requests
response = requests.get("https://bmw-power.com.ua/api/v2/index.php?payment_id=API_PAYMENT_ID", headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60)
response.raise_for_status()
print(response.json())
$ch = curl_init('https://bmw-power.com.ua/api/v2/index.php?payment_id=API_PAYMENT_ID');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY'],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
curl_close($ch);
echo $response;const response = await fetch("https://bmw-power.com.ua/api/v2/index.php?payment_id=API_PAYMENT_ID", { headers: { "X-API-Key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
var json = await client.GetStringAsync("https://bmw-power.com.ua/api/v2/index.php?payment_id=API_PAYMENT_ID");
Console.WriteLine(json);
pending — ожидает оплаты или подтверждения; completed — оплата подтверждена и средства зачислены на баланс.
Создаёт заказ NCD 2.0 из двух XML-файлов автомобиля.
| Поле | Описание |
|---|---|
fa_file | XML FA; из него извлекается VIN. |
svt_file | XML SVT_IST для того же автомобиля. |
Только XML. Оба файла должны относиться к одному автомобилю.
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=ncd" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-F "fa_file=@mCM_FA.xml" \
-F "svt_file=@mCM_SVT_IST.xml"
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=ncd"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
files = {
"fa_file": open("mCM_FA.xml", "rb"),
"svt_file": open("mCM_SVT_IST.xml", "rb"),
}
try:
response = requests.post(url, headers=headers, files=files, timeout=60)
finally:
for handle in files.values():
handle.close()
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=ncd';
$form = [
'fa_file' => new CURLFile(__DIR__ . '/mCM_FA.xml', 'application/xml', 'mCM_FA.xml'),
'svt_file' => new CURLFile(__DIR__ . '/mCM_SVT_IST.xml', 'application/xml', 'mCM_SVT_IST.xml'),
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
],
CURLOPT_POSTFIELDS => $form,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
import { readFile } from "node:fs/promises";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=ncd";
const form = new FormData();
form.append("fa_file", new Blob([await readFile("./mCM_FA.xml")], { type: "application/xml" }), "mCM_FA.xml");
form.append("svt_file", new Blob([await readFile("./mCM_SVT_IST.xml")], { type: "application/xml" }), "mCM_SVT_IST.xml");
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
},
body: form,
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=ncd");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
using var form = new MultipartFormDataContent();
using var file1Stream = File.OpenRead("mCM_FA.xml");
using var file1Content = new StreamContent(file1Stream);
file1Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
form.Add(file1Content, "fa_file", "mCM_FA.xml");
using var file2Stream = File.OpenRead("mCM_SVT_IST.xml");
using var file2Content = new StreamContent(file2Stream);
file2Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
form.Add(file2Content, "svt_file", "mCM_SVT_IST.xml");
request.Content = form;
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл. Скачайте его по order.result.download_url с тем же API-ключом.
Проверяет CBB-запрос из файла, содержащего VIN.
| Поле | Описание |
|---|---|
request_file | XML, JSON или TXT с 17-значным VIN. |
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=cbb" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-F "request_file=@request.xml"
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=cbb"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
files = {
"request_file": open("request.xml", "rb"),
}
try:
response = requests.post(url, headers=headers, files=files, timeout=60)
finally:
for handle in files.values():
handle.close()
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=cbb';
$form = [
'request_file' => new CURLFile(__DIR__ . '/request.xml', 'application/xml', 'request.xml'),
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
],
CURLOPT_POSTFIELDS => $form,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
import { readFile } from "node:fs/promises";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=cbb";
const form = new FormData();
form.append("request_file", new Blob([await readFile("./request.xml")], { type: "application/xml" }), "request.xml");
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
},
body: form,
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=cbb");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
using var form = new MultipartFormDataContent();
using var file1Stream = File.OpenRead("request.xml");
using var file1Content = new StreamContent(file1Stream);
file1Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
form.Add(file1Content, "request_file", "request.xml");
request.Content = form;
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл с авторизованной ссылкой скачивания.
Создаёт KDS-заказ из файла запроса с VIN.
| Поле | Описание |
|---|---|
request_file | XML, JSON или TXT с 17-значным VIN. |
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=kds" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-F "request_file=@request.xml"
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=kds"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
files = {
"request_file": open("request.xml", "rb"),
}
try:
response = requests.post(url, headers=headers, files=files, timeout=60)
finally:
for handle in files.values():
handle.close()
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=kds';
$form = [
'request_file' => new CURLFile(__DIR__ . '/request.xml', 'application/xml', 'request.xml'),
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
],
CURLOPT_POSTFIELDS => $form,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
import { readFile } from "node:fs/promises";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=kds";
const form = new FormData();
form.append("request_file", new Blob([await readFile("./request.xml")], { type: "application/xml" }), "request.xml");
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
},
body: form,
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=kds");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
using var form = new MultipartFormDataContent();
using var file1Stream = File.OpenRead("request.xml");
using var file1Content = new StreamContent(file1Stream);
file1Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
form.Add(file1Content, "request_file", "request.xml");
request.Content = form;
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл с авторизованной ссылкой скачивания.
Получает заводской FA по полному VIN.
| Поле | Описание |
|---|---|
vin | Полный VIN из 17 символов. |
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=factory_fa" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"vin":"5UX73GP07S9Z07376"}'
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=factory_fa"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
payload = {
"vin": "5UX73GP07S9Z07376"
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=factory_fa';
$payload = json_decode('{"vin":"5UX73GP07S9Z07376"}', true);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=factory_fa";
const payload = {
"vin": "5UX73GP07S9Z07376"
};
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=factory_fa");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"vin\":\"5UX73GP07S9Z07376\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл FA.
Создаёт SFA Debug Token для выбранной функции и ECU.
| Поле | Описание |
|---|---|
request_file | XML, JSON или TXT с 17-значным VIN. |
feature_code | Разрешённый код SFA, например 0x005DF1. |
ecu_address | Обязательный адрес ECU, например 0x12. |
ecu_uid | Обязательный UID ECU, максимум 160 символов. |
token_mode | Необязательно: LCS или SecOC, только для LCS-функций. |
token_edit_tag / token_edit_value | Необязательное редактирование токена только для LCS-функций: передайте token_mode=LCS или SecOC, числовой token_edit_tag (например 1) и token_edit_value без префикса 0x. Значение: 01 или 02; например 01. |
Сначала используется тариф по точному feature_code; если его нет — standard.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=sfa_debug" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-F "request_file=@request.xml" \
-F "feature_code=0x000100" \
-F "ecu_address=0x12" \
-F "ecu_uid=YOUR_ECU_UID" \
-F "token_mode=LCS" \
-F "token_edit_tag=1" \
-F "token_edit_value=01"
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=sfa_debug"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
files = {
"request_file": open("request.xml", "rb"),
}
data = {
"feature_code": "0x000100",
"ecu_address": "0x12",
"ecu_uid": "YOUR_ECU_UID",
"token_mode": "LCS",
"token_edit_tag": "1",
"token_edit_value": "01"
}
try:
response = requests.post(url, headers=headers, files=files, data=data, timeout=60)
finally:
for handle in files.values():
handle.close()
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=sfa_debug';
$form = [
'request_file' => new CURLFile(__DIR__ . '/request.xml', 'application/xml', 'request.xml'),
'feature_code' => '0x000100',
'ecu_address' => '0x12',
'ecu_uid' => 'YOUR_ECU_UID',
'token_mode' => 'LCS',
'token_edit_tag' => '1',
'token_edit_value' => '01',
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
],
CURLOPT_POSTFIELDS => $form,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
import { readFile } from "node:fs/promises";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=sfa_debug";
const form = new FormData();
form.append("request_file", new Blob([await readFile("./request.xml")], { type: "application/xml" }), "request.xml");
form.append("feature_code", "0x000100");
form.append("ecu_address", "0x12");
form.append("ecu_uid", "YOUR_ECU_UID");
form.append("token_mode", "LCS");
form.append("token_edit_tag", "1");
form.append("token_edit_value", "01");
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
},
body: form,
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=sfa_debug");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
using var form = new MultipartFormDataContent();
using var file1Stream = File.OpenRead("request.xml");
using var file1Content = new StreamContent(file1Stream);
file1Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
form.Add(file1Content, "request_file", "request.xml");
form.Add(new StringContent("0x000100"), "feature_code");
form.Add(new StringContent("0x12"), "ecu_address");
form.Add(new StringContent("YOUR_ECU_UID"), "ecu_uid");
form.Add(new StringContent("LCS"), "token_mode");
form.Add(new StringContent("1"), "token_edit_tag");
form.Add(new StringContent("01"), "token_edit_value");
request.Content = form;
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл Debug Token.
0x005DF1 — 0x005DF1 - Secure Diag Function Group Level 10x005DF2 — 0x005DF2 - Secure Diag Function Group Level 20x005DF3 — 0x005DF3 - Secure Diag Function Group Level 30x000FBD — 0x000FBD - FBD Pairing0x00A50C — 0x00A50C - Reuse Counter / IDR Individual Data Rescue0x000100 — 0x000100 - LCS-SP2018/20210x000101 — 0x000101 - LCS-SecOC by-pass0x000102 — 0x000102 - LCS-TimeSupreme0x000103 — 0x000103 - LCS Switch for Activation/Deactivation Integrity Protection OC0x000104 — 0x000104 - LCS Switch to set luK cluster configuration0x00151D — 0x00151D - IPSec Link DeactivationСоздаёт OEM SFA-заказ по полному VIN.
| Поле | Описание |
|---|---|
vin | Полный VIN из 17 символов. |
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=oemsfa" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"vin":"5UX73GP07S9Z07376"}'
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=oemsfa"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
payload = {
"vin": "5UX73GP07S9Z07376"
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=oemsfa';
$payload = json_decode('{"vin":"5UX73GP07S9Z07376"}', true);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=oemsfa";
const payload = {
"vin": "5UX73GP07S9Z07376"
};
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=oemsfa");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"vin\":\"5UX73GP07S9Z07376\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл OEM SFA.
Создаёт заказ восстановления FSC по полному VIN.
| Поле | Описание |
|---|---|
vin | Полный VIN из 17 символов. |
Стандартный или индивидуальный тариф за заказ.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=fsc_repair" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"vin":"5UX73GP07S9Z07376"}'
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=fsc_repair"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
payload = {
"vin": "5UX73GP07S9Z07376"
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=fsc_repair';
$payload = json_decode('{"vin":"5UX73GP07S9Z07376"}', true);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=fsc_repair";
const payload = {
"vin": "5UX73GP07S9Z07376"
};
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=fsc_repair");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"vin\":\"5UX73GP07S9Z07376\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл восстановления FSC.
Создаёт ключ Feature Installer для головы, региона карт и выбранных опций.
| Поле | Описание |
|---|---|
vin | Полный VIN из 17 символов. |
head_unit | Код головного устройства. Определяет тип мультимедиа, обязательные функции и доступные options. Полный список с пояснениями приведён ниже. |
map_region | Код региона навигационных карт. Передавайте одно точное значение из таблицы регионов ниже. |
options | JSON-массив дополнительных опций для выбранного head_unit, например ["region_unlock","vo_coding"]. Может быть пустым []. Обязательные функции передавать не нужно. |
| head_unit | Тип мультимедиа | Обязательные функции — уже включены, в options не передаются |
|---|---|---|
nbt_evo_56 | NBT EVO ID 5/6 Выбирайте для головного устройства NBT EVO с интерфейсом ID5 или ID6. | Apple CarPlay на весь экран, Дублирование экрана, Видео во время движения, Навигационные карты |
nbt_evo_4 | NBT EVO ID 4 Выбирайте для головного устройства NBT EVO с интерфейсом ID4. | Навигационные карты |
entrynav2 | EntryNav2 (EntryEVO) Выбирайте для головного устройства EntryNav2, также известного как EntryEVO. | Apple CarPlay на весь экран, Дублирование экрана, Навигационные карты |
Передавайте только дополнительные опции, доступные для выбранного head_unit. Если дополнительные опции не нужны, передайте [].
| option | Что делает | Доступно для head_unit |
|---|---|---|
region_unlockРазблокировка региона (исправление Black Screen) | Снимает региональное ограничение и используется для исправления чёрного экрана после несовпадения региона. | nbt_evo_56, nbt_evo_4 |
vo_codingИсправление VO Coding | Исправляет или восстанавливает VO-кодирование головного устройства. | nbt_evo_56, nbt_evo_4 |
component_protectionРабота с защитой компонентов | Используется при работе с защитой компонентов после установки или замены устройства. | nbt_evo_56, entrynav2 |
open_sshОткрытие SSH-доступа | Открывает SSH-доступ к поддерживаемому головному устройству. | nbt_evo_4, entrynav2 |
head_unit_replacementЗамена головного устройства | Выбирайте, когда головное устройство было заменено или подготавливается замена. | nbt_evo_56, nbt_evo_4 |
rhd_vehicleАвтомобиль с правым рулём (RHD) | Указывает, что автомобиль имеет правое расположение руля. | nbt_evo_56 |
Передавайте ровно один код региона. Значение влияет на регион навигационных карт, но не изменяет цену заказа.
| map_region | Регион навигационных карт |
|---|---|
argentina | Аргентина |
australia_nz | Австралия и Новая Зеландия |
china | Китай, Гонконг и Макао |
europe | Европа |
india | Индия |
israel | Израиль |
japan | Япония |
korea | Корея |
middle_east | Ближний Восток |
north_africa | Северная Африка |
north_america | Северная Америка |
russia | Россия |
south_africa | Южная Африка |
south_america | Южная Америка |
southeast_asia | Юго-Восточная Азия |
taiwan | Тайвань |
turkey | Турция |
Итог: базовая цена головы плюс цены всех выбранных опций. Для каждого пункта индивидуальная цена имеет приоритет, иначе применяется общая. Обязательные функции входят в базу; регион цену не меняет.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=feature_installer" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"vin":"5UX73GP07S9Z07376","head_unit":"nbt_evo_56","map_region":"europe","options":["region_unlock","vo_coding"]}'
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=feature_installer"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
payload = {
"vin": "5UX73GP07S9Z07376",
"head_unit": "nbt_evo_56",
"map_region": "europe",
"options": [
"region_unlock",
"vo_coding"
]
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=feature_installer';
$payload = json_decode('{"vin":"5UX73GP07S9Z07376","head_unit":"nbt_evo_56","map_region":"europe","options":["region_unlock","vo_coding"]}', true);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=feature_installer";
const payload = {
"vin": "5UX73GP07S9Z07376",
"head_unit": "nbt_evo_56",
"map_region": "europe",
"options": [
"region_unlock",
"vo_coding"
]
};
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=feature_installer");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"vin\":\"5UX73GP07S9Z07376\",\"head_unit\":\"nbt_evo_56\",\"map_region\":\"europe\",\"options\":[\"region_unlock\",\"vo_coding\"]}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — ключ прямо в order.result.value; скачивание файла не требуется.
Создаёт DME FSC-заказ для одного или нескольких поддерживаемых FSC-кодов.
| Поле | Описание |
|---|---|
vin | VIN из 7 или 17 символов. |
fsc_codes | Непустой JSON-массив поддерживаемых кодов, например ["0x17C","0x180"]. |
Стандартный или индивидуальный тариф за заказ независимо от количества переданных кодов.
curl -sS -X POST "https://bmw-power.com.ua/api/v2/index.php?service=dme_fsc" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_UUID" \
-H "Content-Type: application/json" \
--data '{"vin":"9Z07376","fsc_codes":["0x17C","0x180"]}'
import uuid
import requests
API_KEY = "YOUR_API_KEY"
url = "https://bmw-power.com.ua/api/v2/index.php?service=dme_fsc"
headers = {
"X-API-Key": API_KEY,
"Idempotency-Key": str(uuid.uuid4()),
}
payload = {
"vin": "9Z07376",
"fsc_codes": [
"0x17C",
"0x180"
]
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())
$apiKey = 'YOUR_API_KEY';
$idempotencyKey = bin2hex(random_bytes(16));
$url = 'https://bmw-power.com.ua/api/v2/index.php?service=dme_fsc';
$payload = json_decode('{"vin":"9Z07376","fsc_codes":["0x17C","0x180"]}', true);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status . PHP_EOL . $response;
import { randomUUID } from "node:crypto";
const url = "https://bmw-power.com.ua/api/v2/index.php?service=dme_fsc";
const payload = {
"vin": "9Z07376",
"fsc_codes": [
"0x17C",
"0x180"
]
};
const response = await fetch(url, {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://bmw-power.com.ua/api/v2/index.php?service=dme_fsc");
request.Headers.Add("X-API-Key", "YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("{\"vin\":\"9Z07376\",\"fsc_codes\":[\"0x17C\",\"0x180\"]}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
Результат — файл DME FSC.
0x17C — DME1: Remote engine start activation0x180 — DME2: Remote engine start activation0x095 — Vmax - DME1 (M vehicles)0x07B — Vmax - DME2 (M vehicles)0x1A4 — 8.6.S (F97/F98 + G80/G82/G83) Competition (Werk)0x1C1 — 8.6.S (G8x) M-Drive Professional0x1DE — 8.6.S G80 CS / G82 CSL - Pmax/Vmax (Werk)0x1E8 — 8.6.S (G8x AWD LCI) Competition (Werk)0x1EC — 8.6.S G87 CS (Werk)0x188 — M-Driver package (DME-86T0)0x1AB — DME1 Competition package0x1AC — DME2 Competition package