Єдиний 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