Быстрое использование API
Quick Start
Короткий сценарий запуска API за 3 шага.
- Зарегистрируйтесь в GIP VISION: Открыть страницу регистрации.
- Откройте в личном кабинете (в web-версии) раздел Мои настройки и сгенерируйте API-токен.
- Скачайте тестовые IFC-модели:
Разместить на плоскости
Endpoint:
Файл:
Примечание: заголовок
POST /api/gip-vision/v1/session/by_plane/Файл:
ifc-zakladnaya-detail-mn557-21-06-2026.ifcПримечание: заголовок
X-API-Key опционален, если вы не планируете сохранять модель в личном кабинете.- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_plane/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-zakladnaya-detail-mn557-21-06-2026.ifc"
curl.exe -X GET "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/health/" -H "X-API-Key: YOUR_API_TOKEN"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_plane/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-zakladnaya-detail-mn557-21-06-2026.ifc"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_plane/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
with open("ifc-zakladnaya-detail-mn557-21-06-2026.ifc", "rb") as f:
files = {
"model_file": (
"ifc-zakladnaya-detail-mn557-21-06-2026.ifc",
f,
"application/octet-stream",
)
}
response = requests.post(url, headers=headers, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByPlane() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_plane/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByPlane().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByPlaneExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var filePath = "ifc-zakladnaya-detail-mn557-21-06-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_plane/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
using var stream = File.OpenRead(filePath);
using var fileContent = new StreamContent(stream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(fileContent, "model_file", Path.GetFileName(filePath));
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Пример успешного ответа (201)
По схеме
SessionResponse сервер возвращает: deeplink, expires_at, onetime_code.{
"deeplink": "gipvision://session/uuid",
"expires_at": "2026-02-22T12:30:45Z",
"onetime_code": "123456"
}
Чтобы реально запустить AR-сессию, ваше приложение должно открыть значение из поляdeeplinkна устройстве пользователя через системный механизм deep link. Иными словами, API только возвращает ссылкуgipvision://..., а открытие ссылки выполняет клиентское приложение (iOS), из которого пользователь запускает сценарий.Примеры вызова из другого приложения: iOS -openURL
Разместить по изображению
Endpoint:
Файл:
POST /api/gip-vision/v1/session/by_refimage/Файл:
ifc-kabinet-26-r26-21-02-2026.ifc
Пример зоны, где должен быть виден маркер ref_image в кадре перед запуском AR-сессии.
Важно по системам координат:
- Если координаты приходят из Revit (Z-up), обязательно передавайте
point_of_view.coordinate_system=z-up(то есть «z-up=true» в терминах интеграции). - Если координаты уже в Y-up (например, из three.js-вьюеров), поле
coordinate_systemможно не передавать, по умолчанию используетсяy-up.
Z-up (Revit)
- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" \
-F "point_of_view.x=7.28988" \
-F "point_of_view.y=4.14" \
-F "point_of_view.z=0.844617" \
-F "point_of_view.rx=90.0" \
-F "point_of_view.ry=0.0" \
-F "point_of_view.rz=0.0" \
-F "point_of_view.coordinate_system=z-up"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" ^
-F "point_of_view.x=7.28988" ^
-F "point_of_view.y=4.14" ^
-F "point_of_view.z=0.844617" ^
-F "point_of_view.rx=90.0" ^
-F "point_of_view.ry=0.0" ^
-F "point_of_view.rz=0.0" ^
-F "point_of_view.coordinate_system=z-up"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
data = {
"point_of_view.x": "7.28988",
"point_of_view.y": "4.14",
"point_of_view.z": "0.844617",
"point_of_view.rx": "90.0",
"point_of_view.ry": "0.0",
"point_of_view.rz": "0.0",
"point_of_view.coordinate_system": "z-up",
}
with open("ifc-kabinet-26-r26-21-02-2026.ifc", "rb") as model_f:
files = {
"model_file": ("ifc-kabinet-26-r26-21-02-2026.ifc", model_f, "application/octet-stream"),
}
response = requests.post(url, headers=headers, data=data, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByRefImageZUp() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
formData.append("point_of_view.x", "7.28988");
formData.append("point_of_view.y", "4.14");
formData.append("point_of_view.z", "0.844617");
formData.append("point_of_view.rx", "90.0");
formData.append("point_of_view.ry", "0.0");
formData.append("point_of_view.rz", "0.0");
formData.append("point_of_view.coordinate_system", "z-up");
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByRefImageZUp().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByRefImageZUpExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var modelPath = "ifc-kabinet-26-r26-21-02-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var model = new StreamContent(File.OpenRead(modelPath));
model.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(model, "model_file", Path.GetFileName(modelPath));
form.Add(new StringContent("7.28988"), "point_of_view.x");
form.Add(new StringContent("4.14"), "point_of_view.y");
form.Add(new StringContent("0.844617"), "point_of_view.z");
form.Add(new StringContent("90.0"), "point_of_view.rx");
form.Add(new StringContent("0.0"), "point_of_view.ry");
form.Add(new StringContent("0.0"), "point_of_view.rz");
form.Add(new StringContent("z-up"), "point_of_view.coordinate_system");
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Y-up (например, three.js)
- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" \
-F "point_of_view.x=7.28988" \
-F "point_of_view.y=0.844617" \
-F "point_of_view.z=-4.14" \
-F "point_of_view.rx=90.0" \
-F "point_of_view.ry=0.0" \
-F "point_of_view.rz=0.0"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" ^
-F "point_of_view.x=7.28988" ^
-F "point_of_view.y=0.844617" ^
-F "point_of_view.z=-4.14" ^
-F "point_of_view.rx=90.0" ^
-F "point_of_view.ry=0.0" ^
-F "point_of_view.rz=0.0"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
data = {
"point_of_view.x": "7.28988",
"point_of_view.y": "0.844617",
"point_of_view.z": "-4.14",
"point_of_view.rx": "90.0",
"point_of_view.ry": "0.0",
"point_of_view.rz": "0.0",
}
with open("ifc-kabinet-26-r26-21-02-2026.ifc", "rb") as model_f:
files = {
"model_file": ("ifc-kabinet-26-r26-21-02-2026.ifc", model_f, "application/octet-stream"),
}
response = requests.post(url, headers=headers, data=data, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByRefImageYUp() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
formData.append("point_of_view.x", "7.28988");
formData.append("point_of_view.y", "0.844617");
formData.append("point_of_view.z", "-4.14");
formData.append("point_of_view.rx", "90.0");
formData.append("point_of_view.ry", "0.0");
formData.append("point_of_view.rz", "0.0");
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByRefImageYUp().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByRefImageYUpExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var modelPath = "ifc-kabinet-26-r26-21-02-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_refimage/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var model = new StreamContent(File.OpenRead(modelPath));
model.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(model, "model_file", Path.GetFileName(modelPath));
form.Add(new StringContent("7.28988"), "point_of_view.x");
form.Add(new StringContent("0.844617"), "point_of_view.y");
form.Add(new StringContent("-4.14"), "point_of_view.z");
form.Add(new StringContent("90.0"), "point_of_view.rx");
form.Add(new StringContent("0.0"), "point_of_view.ry");
form.Add(new StringContent("0.0"), "point_of_view.rz");
// point_of_view.coordinate_system опущен: по умолчанию y-up
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Пример успешного ответа (201)
{
"deeplink": "gipvision://session/uuid",
"expires_at": "2026-02-22T12:30:45Z",
"onetime_code": "123456"
}
Разместить по двери
Endpoint:
Файл:
POST /api/gip-vision/v1/session/by_scan/Файл:
ifc-kabinet-26-r26-21-02-2026.ifc
Пример сцены для размещения по двери: точка
point_1 задает позицию пользователя, точка point_2 - направление взгляда.Важно по системам координат:
alignment- обязательный объект выравнивания модели по скану.- Поддерживаются два взаимоисключающих режима:
point_1 + point_2илиcorners + wall_normal. alignment.corners- 4 точки проёма в порядке[BL, BR, TR, TL], формат[[x, y, z], ...].alignment.wall_normal- нормаль стены в формате[x, y, z].- Для координат из Revit (Z-up) передавайте
alignment.coordinate_system=z-up; сервер автоматически нормализует координаты в Y-up. - Для Y-up (например, из three.js-вьюеров) поле
alignment.coordinate_systemможно не передавать, по умолчанию используетсяy-up. - В multipart-запросе массивы (
alignment.point_1,alignment.point_2,alignment.corners,alignment.wall_normal) допускается передавать JSON-строкой.
Режим point_1 + point_2: Z-up (Revit)
- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" \
-F "alignment.point_1=[8.07369, 3.663441, 0.0]" \
-F "alignment.point_2=[8.050343, 4.092017, 0.0]" \
-F "alignment.coordinate_system=z-up"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" ^
-F "alignment.point_1=[8.07369, 3.663441, 0.0]" ^
-F "alignment.point_2=[8.050343, 4.092017, 0.0]" ^
-F "alignment.coordinate_system=z-up"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
data = {
"alignment.point_1": "[8.07369, 3.663441, 0.0]",
"alignment.point_2": "[8.050343, 4.092017, 0.0]",
"alignment.coordinate_system": "z-up",
}
with open("ifc-kabinet-26-r26-21-02-2026.ifc", "rb") as model_f:
files = {
"model_file": ("ifc-kabinet-26-r26-21-02-2026.ifc", model_f, "application/octet-stream"),
}
response = requests.post(url, headers=headers, data=data, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByScanZUp() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
formData.append("alignment.point_1", "[8.07369, 3.663441, 0.0]");
formData.append("alignment.point_2", "[8.050343, 4.092017, 0.0]");
formData.append("alignment.coordinate_system", "z-up");
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByScanZUp().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByDoorZUpExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var modelPath = "ifc-kabinet-26-r26-21-02-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var model = new StreamContent(File.OpenRead(modelPath));
model.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(model, "model_file", Path.GetFileName(modelPath));
form.Add(new StringContent("[8.07369, 3.663441, 0.0]"), "alignment.point_1");
form.Add(new StringContent("[8.050343, 4.092017, 0.0]"), "alignment.point_2");
form.Add(new StringContent("z-up"), "alignment.coordinate_system");
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Режим point_1 + point_2: Y-up (например, three.js)
- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" \
-F "alignment.point_1=[8.07369, 0.0, -3.663441]" \
-F "alignment.point_2=[8.050343, 0.0, -4.092017]"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" ^
-F "alignment.point_1=[8.07369, 0.0, -3.663441]" ^
-F "alignment.point_2=[8.050343, 0.0, -4.092017]"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
data = {
"alignment.point_1": "[8.07369, 0.0, -3.663441]",
"alignment.point_2": "[8.050343, 0.0, -4.092017]",
}
with open("ifc-kabinet-26-r26-21-02-2026.ifc", "rb") as model_f:
files = {
"model_file": ("ifc-kabinet-26-r26-21-02-2026.ifc", model_f, "application/octet-stream"),
}
response = requests.post(url, headers=headers, data=data, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByScanYUp() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
formData.append("alignment.point_1", "[8.07369, 0.0, -3.663441]");
formData.append("alignment.point_2", "[8.050343, 0.0, -4.092017]");
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByScanYUp().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByDoorYUpExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var modelPath = "ifc-kabinet-26-r26-21-02-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var model = new StreamContent(File.OpenRead(modelPath));
model.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(model, "model_file", Path.GetFileName(modelPath));
form.Add(new StringContent("[8.07369, 0.0, -3.663441]"), "alignment.point_1");
form.Add(new StringContent("[8.050343, 0.0, -4.092017]"), "alignment.point_2");
// alignment.coordinate_system опущен: по умолчанию y-up
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Режим corners + wall_normal (когда известны координаты проёма)
Как составить список
[BL, BR, TR, TL]:BL(Bottom Left) - нижний левый угол проёма.BR(Bottom Right) - нижний правый угол проёма.TR(Top Right) - верхний правый угол проёма.TL(Top Left) - верхний левый угол проёма.- Лево/право определяйте, глядя на проём со стороны, куда направлен вектор
wall_normal. - Порядок точек должен идти по контуру без перестановок:
BL -> BR -> TR -> TL.
Пример данных проёма:
{
"corners": [
[7.510000190734863, -2.220446049250313e-16, -4.145116873249376],
[8.410000190734863, -2.220446049250313e-16, -4.145116873249376],
[8.410000190734863, 2.05, -4.145116873249376],
[7.510000190734863, 2.05, -4.145116873249376]
],
"wall_normal": [0, 0, 1],
}
- curl
- curl (Windows)
- python
- js
- c#
curl -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" \
-H "X-API-Key: YOUR_API_TOKEN" \
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" \
-F "alignment.corners=[[7.510000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, 2.05, -4.145116873249376], [7.510000190734863, 2.05, -4.145116873249376]]" \
-F "alignment.wall_normal=[0, 0, 1]"
curl.exe -X POST "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/" ^
-H "X-API-Key: YOUR_API_TOKEN" ^
-F "model_file=@ifc-kabinet-26-r26-21-02-2026.ifc" ^
-F "alignment.corners=[[7.510000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, 2.05, -4.145116873249376], [7.510000190734863, 2.05, -4.145116873249376]]" ^
-F "alignment.wall_normal=[0, 0, 1]"
import requests
url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/"
headers = {
"X-API-Key": "YOUR_API_TOKEN",
}
data = {
"alignment.corners": "[[7.510000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, 2.05, -4.145116873249376], [7.510000190734863, 2.05, -4.145116873249376]]",
"alignment.wall_normal": "[0, 0, 1]",
}
with open("ifc-kabinet-26-r26-21-02-2026.ifc", "rb") as model_f:
files = {
"model_file": ("ifc-kabinet-26-r26-21-02-2026.ifc", model_f, "application/octet-stream"),
}
response = requests.post(url, headers=headers, data=data, files=files, timeout=120)
print(response.status_code)
print(response.json())
async function createSessionByScanCorners() {
const fileInput = document.querySelector("#model-file-input");
const modelFile = fileInput?.files?.[0];
if (!modelFile) {
throw new Error("Выберите IFC-файл в input#model-file-input");
}
const formData = new FormData();
formData.append("model_file", modelFile);
formData.append(
"alignment.corners",
"[[7.510000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, 2.05, -4.145116873249376], [7.510000190734863, 2.05, -4.145116873249376]]",
);
formData.append("alignment.wall_normal", "[0, 0, 1]");
const response = await fetch("https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_TOKEN",
},
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(JSON.stringify(data));
}
console.log(response.status);
console.log(data);
}
createSessionByScanCorners().catch(console.error);
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class GipVisionByDoorCornersExample
{
public static async Task Main()
{
var apiToken = "YOUR_API_TOKEN";
var modelPath = "ifc-kabinet-26-r26-21-02-2026.ifc";
var url = "https://api-cpsk-superapp.gip.su/api/gip-vision/v1/session/by_scan/";
using var http = new HttpClient();
using var form = new MultipartFormDataContent();
http.DefaultRequestHeaders.Add("X-API-Key", apiToken);
var model = new StreamContent(File.OpenRead(modelPath));
model.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
form.Add(model, "model_file", Path.GetFileName(modelPath));
form.Add(new StringContent("[[7.510000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, -2.220446049250313e-16, -4.145116873249376], [8.410000190734863, 2.05, -4.145116873249376], [7.510000190734863, 2.05, -4.145116873249376]]"), "alignment.corners");
form.Add(new StringContent("[0, 0, 1]"), "alignment.wall_normal");
// alignment.coordinate_system опущен: входные данные уже в y-up
var response = await http.PostAsync(url, form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(body);
}
}
Пример успешного ответа (201)
{
"deeplink": "gipvision://session/uuid",
"expires_at": "2026-02-22T12:30:45Z",
"onetime_code": "123456"
}
Когда координаты проёма известны заранее, используйте режим
alignment.corners + alignment.wall_normal вместо автоматически определения проёма на сервере point_1 и point_2. Автоматическое определение проёма построено на алгоритме RANSAK. Качество автоматического определения зависит от геометрии стены и примыкающих элементов