Справочник по API
Все API на этой странице используют метод POST и тело запроса в формате JSON. В каждом запросе передаются Общие заголовки запроса; для отдельных API они не повторяются. Внешняя структура ответа описана в разделе Единая структура ответа; в разделе «Ответ» каждого API перечислены только бизнес-поля внутри data.
Домены
| Регион | Домен |
|---|---|
| Материковый Китай | https://open-api-gw.xgrids.cloud/ |
| За пределами материкового Китая (включая Гонконг, Макао и Тайвань) | https://open-api-gw.xgrids.com/ |
Общие заголовки запроса
Каждый API требует следующих параметров заголовка.
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| APP-ID | ID приложения | Выдаётся при подаче заявки на приложение | Да | Нет |
| X-Timestamp | Временная метка запроса | Временная метка в секундах | Да | Нет |
| X-Nonce | Случайная строка | Только буквы и цифры, от 16 до 32 символов. Регулярное выражение ^[A-Za-z0-9]{16,32}$. Рекомендуется UUID.randomUUID() с удалёнными - | Да | Нет |
| X-Sign | Подпись запроса | Подтверждает, что запрос не был изменён, и защищает от повторной отправки. См. Механизм подписи | Да | Нет |
| Content-Type | Тип содержимого | Всегда application/json | Да | Нет |
| language | Язык сообщений ответа | zh-CN или en-US | Нет | zh-CN |
Единая структура ответа
Все API возвращают одинаковую внешнюю структуру. Внешний code отражает только результат на уровне API; бизнес-результат смотрите в data.bizCode.
| Имя | Значение | Правило |
|---|---|---|
| code | Код результата API | 0 — успех, 401 — ошибка аутентификации, 429 — слишком много запросов |
| msg | Описание результата API | — |
| data | Бизнес-данные | — |
| data.bizCode | Код бизнес-результата | 0 означает успех; остальные значения см. в разделе Коды ошибок |
| data.bizMsg | Сообщение о бизнес-ошибке | — |
Примечание: вызов считается успешным, только если одновременно
code == 0иdata.bizCode == 0.
Создание задачи и получение учётных данных для загрузки
Создаёт задачу моделирования и выдаёт временные учётные данные облачного хранилища для загрузки входных данных.
Endpoint
POST /open-apis/spatial-model/v1/model/create
Ограничения
| Параметр | Ограничение |
|---|---|
| Параллельные запросы | 10 запросов / с |
| Срок действия временных учётных данных | 12 часов |
| Регион хранения данных | Привязывается при подаче заявки на приложение; передавать не нужно |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelName | Название задачи моделирования | Менее 50 символов | Да | Нет |
| modelDes | Описание задачи | Менее 200 символов | Нет | Пусто |
| quality | Качество моделирования | "1" — быстро, "2" — стандартно, "3" — медленно | Нет | "2" |
| autoRebuild | Автоматически запускать моделирование после загрузки | 0 — только загрузка, 1 — автоматическое моделирование после загрузки | Нет | 1 |
| tags | Теги задачи | List<String>, менее 20 элементов | Нет | Пусто |
Ответ
| Имя | Тип | Значение |
|---|---|---|
| data.modelId | Long | ID задачи моделирования, сгенерированный сервером |
| data.params | Object | Параметры временных учётных данных для загрузки данных |
| data.params.cloudService | String | Облачный провайдер, принимающий загрузку. OSS — Alibaba Cloud, AWS — Amazon, KS3 — Kingsoft Cloud. Обычно каждая интегрирующая сторона работает только с одним фиксированным провайдером, поэтому поддерживать их все не нужно |
| data.params.endpoint | String | Endpoint загрузки провайдера облачного хранилища |
| data.params.region | String | Регион хранения провайдера облачного хранилища |
| data.params.bucket | String | Bucket для загрузки у провайдера облачного хранилища |
| data.params.savePath | String | Key целевого каталога для загружаемых файлов. Это префикс каталога input; добавьте к нему относительный путь каждого файла, чтобы получить его фактический Key |
| data.params.accessKeyId | String | Временный AccessKeyId |
| data.params.accessKeySecret | String | Временный AccessKeySecret |
| data.params.securityToken | String | SecurityToken для загрузки |
| data.params.requestId | String | ID этого запроса |
Пример запроса
POST /open-apis/spatial-model/v1/model/create HTTP/1.1
Host: open-api-gw.xgrids.com
APP-ID: your_app_id
X-Timestamp: 1791763200
X-Nonce: a3f91c2d8e7b4a6590fd12cb77ae40d1
X-Sign: 9mQk7xL2vTbR4pNw8sYcA1dHfZ3eJgU6oIyK0rVnBsM=
Content-Type: application/json
{
"modelName": "Design Commune C Facade",
"modelDes": "Nanshan, Shenzhen, LCC2 scene package",
"quality": "2",
"autoRebuild": 1,
"tags": ["facade", "nanshan"]
}
Пример ответа
{
"code": 0,
"msg": "success",
"data": {
"bizCode": 0,
"bizMsg": "",
"modelId": 100231987,
"params": {
"cloudService": "AWS",
"endpoint": "s3.ap-southeast-1.amazonaws.com",
"region": "ap-southeast-1",
"bucket": "your-bucket-name",
"savePath": "prd/spatial-model/{accountId}/{taskCode}/input/",
"accessKeyId": "ASIA****************",
"accessKeySecret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCY****",
"securityToken": "IQoJb3JpZ2luX2VjE****",
"requestId": "b7f1e2a9-5c43-4d8e-9a10-6f2c3b84d517"
}
}
}
Запуск задачи
Запускает моделирование вручную.
Endpoint
POST /open-apis/spatial-model/v1/model/start
Ограничения
| Параметр | Ограничение |
|---|---|
| Когда использовать | Только если задача создана с autoRebuild = 0:① Запустить можно только задачу в статусе «Загрузка завершена» (3); иначе возвращается 100041018;② Каталог input должен содержать хотя бы один файл .lcc2 / .ply / .las; иначе возвращается 100041019;③ При запуске кредиты замораживаются; если баланса недостаточно, возвращается код ошибки кредитов |
| Ограничение частоты | Один вызов в 3 секунды на каждый modelId |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | Возвращается при создании задачи | Да | Нет |
Ответ
Возвращается только Единая структура ответа.
Пример запроса
{
"modelId": 100231987
}
Повторное получение учётных данных для загрузки
Выдаёт новые временные учётные данные для загрузки, если загрузка прервалась или срок действия временных учётных данных истёк.
Endpoint
POST /open-apis/spatial-model/v1/model/sts
Ограничения
| Параметр | Ограничение |
|---|---|
| Срок действия временных учётных данных | 12 часов |
| Ограничение частоты | Один вызов в 3 секунды на каждый modelId; при слишком частых вызовах возвращается 10000003 |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | — | Да | Нет |
Ответ
Совпадает с ответом API Создание задачи и получение учётных данных для загрузки (data.modelId и data.params.*).
Пример запроса
{
"modelId": 100231987
}
Обновление статуса загрузки
Сообщает статус загрузки входных данных. После завершения загрузки этот API нужно вызвать обязательно, иначе моделирование не начнётся.
Endpoint
POST /open-apis/spatial-model/v1/model/upload_status/update
Ограничения
| Параметр | Ограничение |
|---|---|
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | — | Да | Нет |
| status | Статус загрузки | 1 — загрузка, 2 — пауза, 3 — успешно, 4 — ошибка | Да | Нет |
| uploadTime | Длительность загрузки | В миллисекундах; рекомендуется передавать при успешной загрузке | Нет | Пусто |
| failedReason | Причина ошибки | Рекомендуется передавать при ошибке загрузки | Нет | Пусто |
Ответ
Возвращается только Единая структура ответа.
Пример запроса
{
"modelId": 100231987,
"status": 3,
"uploadTime": 184620
}
Отмена моделирования
Можно вызывать только для задач, которые находятся в процессе моделирования.
- Отменить можно только задачи в статусе «Моделирование». После отмены задача переходит в статус «Ошибка моделирования».
- При отмене списываются кредиты за уже израсходованный объём; излишне замороженные кредиты возвращаются на баланс.
- Расчёт кредитов обычно занимает несколько минут, но не более примерно 10 минут.
Endpoint
POST /open-apis/spatial-model/v1/model/cancel
Ограничения
| Параметр | Ограничение |
|---|---|
| Ограничение по статусу | Отменить можно только задачи в статусе «Моделирование» (7); для других статусов возвращается 100041017 |
| Параллельные запросы | 10 запросов / с; один вызов в 3 секунды на каждый modelId, при слишком частых вызовах возвращается 10000003 |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | — | Да | Нет |
Ответ
Возвращается только Единая структура ответа.
Пример запроса
{
"modelId": 100231987
}
Постраничный список задач
Запрашивает задачи моделирования постранично с фильтрами.
Endpoint
POST /open-apis/spatial-model/v1/model/list
Ограничения
| Параметр | Ограничение |
|---|---|
| Область данных | Возвращаются только задачи учётной записи, связанной с текущим appId |
| Опрос | Интервал не менее 5 секунд |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelName | Название задачи | Менее 50 символов, нечёткий поиск | Нет | Любое |
| statusList | Статусы задачи | Значения см. в разделе Конечный автомат статусов задачи | Нет | Любые |
| startTime | Время начала | Временная метка в миллисекундах; отбираются записи, созданные не раньше startTime | Нет | Любое |
| endTime | Время окончания | Временная метка в миллисекундах; отбираются записи, созданные не позже endTime | Нет | Любое |
| page.page | Номер страницы | — | Нет | 1 |
| page.limit | Размер страницы | — | Нет | Определяется сервером |
| page.order | Порядок сортировки | ASC — по возрастанию, DESC — по убыванию, по времени создания | Нет | DESC |
Ответ
| Имя | Тип | Значение |
|---|---|---|
| data.page | Integer | Номер страницы |
| data.limit | Integer | Размер страницы |
| data.total | Long | Общее количество |
| data.data | List | Список данных |
| data.data[].modelId | Long | ID задачи моделирования |
| data.data[].modelName | String | Название задачи |
| data.data[].modelDes | String | Описание задачи |
| data.data[].cover | String | URL обложки; после завершения моделирования — общий рендер модели для предпросмотра. Подписанная временная ссылка, не сохраняйте её |
| data.data[].percent | Double | Ход моделирования |
| data.data[].tags | List | Теги |
| data.data[].status | Integer | Статус задачи; значения см. в разделе Конечный автомат статусов задачи |
| data.data[].errorCode | String | Код ошибки |
| data.data[].failedReason | String | Причина ошибки |
| data.data[].createTime | Long | Время создания, временная метка в миллисекундах |
| data.data[].taskSuccessAt | Long | Время завершения моделирования, временная метка в миллисекундах |
Пример запроса
{
"modelName": "Design Commune",
"statusList": [7, 8],
"startTime": 1790899200000,
"endTime": 1791763200000,
"page": {
"page": 1,
"limit": 20,
"order": "DESC"
}
}
Сведения о задачах
Пакетно запрашивает сведения о задачах моделирования, включая статистику, например длительность моделирования.
Endpoint
POST /open-apis/spatial-model/v1/model/detail
Ограничения
| Параметр | Ограничение |
|---|---|
| Пакетный запрос | Не более 50 modelId в одном запросе |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelIdList | ID задач моделирования | List<Long>, не более 50 за раз | Да | Нет |
Ответ
| Имя | Тип | Значение |
|---|---|---|
| data.dataList | List | Сведения о задачах |
| data.dataList[].modelId | Long | ID задачи моделирования |
| data.dataList[].modelName | String | Название задачи |
| data.dataList[].modelDes | String | Описание задачи |
| data.dataList[].cover | String | URL обложки. Подписанная временная ссылка, не сохраняйте её |
| data.dataList[].percent | Double | Ход моделирования |
| data.dataList[].tags | List | Теги |
| data.dataList[].status | Integer | Статус задачи; значения см. в разделе Конечный автомат статусов задачи |
| data.dataList[].errorCode | String | Код ошибки |
| data.dataList[].failedReason | String | Причина ошибки |
| data.dataList[].createTime | Long | Время создания, временная метка в миллисекундах |
| data.dataList[].rebuildInfo | Object | Сведения о моделировании |
| data.dataList[].rebuildInfo.quality | String | Качество моделирования. 1 — быстро, 2 — стандартно, 3 — медленно |
| data.dataList[].rebuildInfo.autoRebuild | Integer | Флаг автоматического моделирования. 0 — только загрузка, 1 — автоматическое моделирование после загрузки |
| data.dataList[].rebuildInfo.inputTotalSize | Long | Размер входных данных, в байтах |
| data.dataList[].rebuildInfo.outputTotalSize | Long | Размер результатов моделирования, в байтах |
| data.dataList[].rebuildInfo.uploadTime | Long | Длительность загрузки, в миллисекундах |
| data.dataList[].rebuildInfo.buildTime | Long | Длительность моделирования, в миллисекундах |
| data.dataList[].rebuildInfo.taskStartAt | Long | Время начала моделирования, временная метка в миллисекундах |
| data.dataList[].rebuildInfo.taskSuccessAt | Long | Время успешного завершения моделирования, временная метка в миллисекундах |
| data.dataList[].rebuildInfo.credit | Object | Сведения о списании кредитов (только чтение), позволяют проверить списание за этот запуск моделирования. Объект возвращается всегда; пока данных о списании нет, его поля равны null |
| data.dataList[].rebuildInfo.credit.freezeNo | String | Номер заморозки кредитов в формате SPATIAL_MODELING_{modelId}_{attempt}. Заполняется только после успешной заморозки кредитов при запуске задачи; до этого равен null |
| data.dataList[].rebuildInfo.credit.frozenCredit | Long | Кредиты, замороженные в этом раунде. При запуске моделирования замораживается оценочная сумма; если алгоритм позже определит площадь, для которой нужно больше кредитов, замораживаются дополнительные кредиты, и в поле отображается итоговая сумма после увеличения |
| data.dataList[].rebuildInfo.credit.actualCredit | Long | Фактически списанные кредиты. До расчёта равно null; после успешного моделирования или отмены содержит списание по фактическому объёму; 0, если кредиты разморожены после ошибки моделирования |
| data.dataList[].rebuildInfo.credit.settleStatus | String | Статус расчёта. FROZEN — заморожено, ожидает расчёта; SETTLED — рассчитано и списано (моделирование успешно или отменено); RELEASED — разморожено, кредиты полностью возвращены (ошибка моделирования и т. п.). Равно null, если заморозки не было |
| data.dataList[].rebuildInfo.credit.attempt | Integer | Раунд моделирования, начиная с 1. Увеличивается на 1 только при повторном вызове API «Запуск задачи»; внутреннее перераспределение на платформе его не меняет. У каждого раунда свой freezeNo |
| data.dataList[].rebuildInfo.credit.areaM2 | Double | Площадь моделирования, оценённая алгоритмом, в квадратных метрах; основание для дополнительной заморозки. Равно null, пока алгоритм не передаст значение |
Пример запроса
{
"modelIdList": [100231987, 100231988]
}
Кредиты учётной записи
Запрашивает баланс кредитов учётной записи, связанной с appId.
Endpoint
POST /open-apis/spatial-model/v1/credit/info
Ограничения
| Параметр | Ограничение |
|---|---|
| Объект запроса | Кредитный счёт учётной записи, связанной с appId; идентификатор пользователя не нужен |
| Счёт не открыт | Если кредиты ещё ни разу не начислялись, все балансы равны 0; это не считается ошибкой |
| Актуальность | Возвращается баланс в реальном времени на момент запроса, без кеширования |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
Бизнес-параметров нет. Передайте пустой объект {}.
Ответ
| Имя | Тип | Значение |
|---|---|---|
| data.availableCredit | Long | Доступные кредиты, которые можно использовать сейчас |
| data.frozenCredit | Long | Замороженные кредиты: зарезервированы, но ещё не рассчитаны |
| data.totalCredit | Long | Всего кредитов, равно availableCredit плюс frozenCredit |
Пример ответа
{
"code": 0,
"msg": "success",
"data": {
"bizCode": 0,
"bizMsg": "",
"availableCredit": 8500,
"frozenCredit": 1500,
"totalCredit": 10000
}
}
Примечание: этот API только запрашивает баланс кредитов учётной записи. Правила списания кредитов за задачи моделирования (момент списания и основание расчёта) будут определены и описаны в следующей версии. В текущей версии значения, которые возвращает этот API, не влияют на вызовы API моделирования.
Скачивание результатов моделирования
Выдаёт временные ссылки для скачивания результатов моделирования. Их состав описан в разделе Результаты моделирования.
Endpoint
POST /open-apis/spatial-model/v1/model/data/download
Ограничения
| Параметр | Ограничение |
|---|---|
| Предварительное условие | Задача должна быть в статусе «Моделирование завершено» (8) |
| Срок действия ссылок | Подписанные временные ссылки; скачивайте файлы сразу после получения ссылок и не сохраняйте их |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | — | Да | Нет |
| type | Тип результата | DXF, GLB, BLEND, RVT | Нет | Если не указан, возвращаются все созданные результаты: DXF / GLB / BLEND, а также RVT, если он есть |
Ответ
| Имя | Тип | Значение |
|---|---|---|
| data.dataList | List<String> | Ссылки для скачивания результатов моделирования. Подписанные временные ссылки, не сохраняйте их |
Пример запроса
{
"modelId": 100231987,
"type": "GLB"
}
Удаление задачи
Удаляет задачу моделирования и связанные с ней данные.
Endpoint
POST /open-apis/spatial-model/v1/model/del
Ограничения
| Параметр | Ограничение |
|---|---|
| Ограничение по статусу | Задачи в статусе «Моделирование» (7) удалить нельзя |
| Последствия | Также удаляются загруженные входные данные и результаты моделирования; действие необратимо |
| Параллельные запросы | 10 запросов / с |
Параметры запроса
| Параметр | Значение | Правило | Обязательный | По умолчанию |
|---|---|---|---|---|
| modelId | ID задачи моделирования | — | Да | Нет |
Ответ
Возвращается только Единая структура ответа.
Пример запроса
{
"modelId": 100231987
}
Примечание: удаление необратимо; входные данные и результаты моделирования удаляются вместе с задачей. Добавьте на своей стороне повторное подтверждение.