Download OpenAPI specification:Download
Qinertia Cloud API is a professional and highly accurate GNSS/INS post processing solution.
Qinertia is able to post-process RAW GNSS data to deliver centimeter-level positions. Several GNSS post processing modes are available such as single base station, Virtual Base Stations (VBS) and world wide Precise Point Positioning (PPP).
Qinertia is also capable of post processing IMU data to produce highly accurate and reliable position, velocity and attitude data even in harsh GNSS conditions. The solution is able to process SBG Systems INS as well as any GNSS receiver or third party IMU.
Qinertia Cloud API is an ideal solution to create complex but automated post processing workflows such as Lidar point cloud generation, photogrammetry geo-tagging and large survey jobs.
Qinertia Cloud API is accessed using a simple REST API and standard Qinertia CLI JSON processing files.
To use Qinertia Cloud API, you need a MySBG account, be an organization administrator with available processing credits.
The REST API is used to:
To ease integration with other services, most endpoints offer an optional metadata dictionary to store user defined data.
This API implements standard REST API HTTP methods as detailed below:
This API uses standard HTTP status codes to report either a success or a failure. A success is only reported by the status code 200 and the response body always contains the requested resource or the result of an action using JSON.
All other status codes are used to report an error and the response body always contains a JSON detailing the error.
The table below list all HTTP response status codes used by the API.
Status Code | Description |
---|---|
200 OK | Indicates that request has succeeded. |
400 Bad Request | The request could not be understood by the server due to incorrect syntax. |
401 Unauthorized | The request requires user authentication information. |
403 Forbidden | The client does not have access rights to the content. Unlike 401, the client’s identity is known to the server. |
404 Not Found | The server can not find the requested resource. |
409 Conflict | Unable to comply due to a conflict with the current state of the target resource. |
422 Unprocessable Entity | The client has provided invalid input parameters. |
500 Internal Server Error | The server encountered an unexpected condition which prevented it from fulfilling the request. |
It indicates that the REST API successfully carried out whatever action the client requested.
The 200 response includes always a response body. The information returned with the response is dependent on the method used in the request, for example:
400 is the generic client-side error status, used when no other 4xx error code is appropriate. Errors can be like malformed request syntax, invalid request message format, or deceptive request routing etc.
The client SHOULD NOT repeat the request without modifications.
A 403 error response indicates that the client’s request is formed correctly, but the REST API refuses to honor it, i.e., the user does not have the necessary permissions for the resource. A 403 response is not a case of an invalid access token; that would be 401 (“Unauthorized”).
Authentication will not help, and the request SHOULD NOT be repeated. Unlike a 401 Unauthorized response, authenticating will make no difference.
The 404 error status code indicates that the REST API can’t map the client’s URI to a resource but may be available in the future. Subsequent requests by the client are permissible.
No indication is given of whether the condition is temporary or permanent. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.
A 409 status code indicates that the request is in conflict with the current state of the target resource. However, the user might be able to resolve the conflict and resubmmit the request.
This status code is returned when the requested resource is not in the expected state, or the result of processing the request would create a conflict within the resource.
Example: A user would like to start a processing on a project that already has an ongoing processing.
The 422 response status code indicates that the server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions. It's probably due to invalid input parameters such as in invalid enum value.
The client SHOULD NOT repeat the request without modifications.
500 is the generic REST API error response. Most web frameworks automatically respond with this response status code whenever they execute some request handler code that raises an exception.
A 500 error is never the client’s fault, and therefore, it is reasonable for the client to retry the same request that triggered this response and hope to get a different response.
The API response is the generic error message, given when an unexpected condition was encountered and no more specific message is suitable.
This API has been designed to be as easy to use as possible and a dedicated GitHub repository contains code samples.
You should also read the online Qinertia Documentation and other SBG Systems Support Center resources.
Please also visit MySBG to create/manage your account and monitor/buy online prepaid credits.
To consume Qinertia Cloud public API, you need to create an API key on My SBG.
Requests must be made using a temporary access token. Which is generated after after completing an API key OpenID authentication.
All authentication details and a curl request will be provided to you after creating an API key or regenerating its secret.
Security Scheme Type | OpenID Connect |
---|---|
Connect URL | https://account.sbg-systems.com/realms/sbg/.well-known/openid-configuration |
The projects endpoints are used to create and manage processing projects.
You can create a new processing project, update, delete or even archive it.
At any time, you can list your organization's projects and get a specific project information.
Once a project is created, you can request Amazon S3 URLs to upload (POST) data to process (GNSS, IMU, etc) and resources (Export profiles, Report templates, etc).
Finally, when a project has been successfully processed, you can request the list of files that have been generated to download them.
List all Qinertia Cloud API projects for a specific organization.
qinertia-cloud:user
) organizationId required | string <uuid> Example: 6720f040-7dbc-40c4-be32-1bead64e5515 Organziation ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/organizations/40bfe492-5a81-4050-9086-d8880080ecc1/projects'
[- {
- "id": "ab21c597-1f44-4e27-82cb-790c7df005c2",
- "region": "eu-west-3",
- "lastProcessing": {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "organizationName": "SBG Systems",
- "organizationId": "51ec62be-8db9-4288-aac8-aa362fefa706",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Create a new empty Qinertia Cloud API project in an organization.
qinertia-cloud:user
) organizationId required | string <uuid> Example: 6720f040-7dbc-40c4-be32-1bead64e5515 Organziation ID |
This body is used to create a project.
region required | string (projectRegion) Enum: "eu-west-3" "us-west-1" "ap-northeast-1" "ap-southeast-2" Region where your processing files are stored. |
Array of objects (metadataList) List of metadata. |
{- "region": "eu-west-3",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
{- "id": "ab21c597-1f44-4e27-82cb-790c7df005c2",
- "region": "eu-west-3",
- "lastProcessing": {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "organizationName": "SBG Systems",
- "organizationId": "51ec62be-8db9-4288-aac8-aa362fefa706",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
Returns information for a project as well as status/progress for the latest processing.
SBG Systems recommends using webhooks to monitor processing status/progress.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1'
{- "id": "ab21c597-1f44-4e27-82cb-790c7df005c2",
- "region": "eu-west-3",
- "lastProcessing": {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "organizationName": "SBG Systems",
- "organizationId": "51ec62be-8db9-4288-aac8-aa362fefa706",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
Update an existing project information and more specifically the user metadata.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
This optional body is used to update a project
Array of objects (metadataList) List of metadata. |
{- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
{- "id": "ab21c597-1f44-4e27-82cb-790c7df005c2",
- "region": "eu-west-3",
- "lastProcessing": {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "organizationName": "SBG Systems",
- "organizationId": "51ec62be-8db9-4288-aac8-aa362fefa706",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
Delete an existing project with all associated data and processings.
This operation is immediate and can't be cancelled.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request DELETE 'https://qinertia-api.sbg-systems.com/api/v1/organizations/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/projects'
{- "title": "You are not authenticated",
- "details": "Bearer token not found in authorization header"
}
Get Amazon S3 URLs to upload the input files to process, using an HTTP POST request.
Input files are, for example, RAW GNSS observations, INS sbgECom binary logs, IMU, odometer data, etc
The response body fields
should contain a param named key
that should look like:
qinertia-cloud/ab21c597-1f44-4e27-82cb-790c7df005c2/input/${filename}
You need to replace ${filename}
using the relative path of your file.
Please find below examples to upload three different files:
qinertia-cloud/ab21c597-1f44-4e27-82cb-790c7df005c2/input/my-file.txt
qinertia-cloud/ab21c597-1f44-4e27-82cb-790c7df005c2/input/base/sbgs167o.20d
qinertia-cloud/ab21c597-1f44-4e27-82cb-790c7df005c2/input/rover/Navsight-Auto-Demo.json
You don't need to manage the folders/sub-folders, they will be created automatically.
To upload a file, do a HTTP POST request to url
with fields
as form-data followed by the file content.
You can upload as many files as you want by repeating this operation.
Please read the dedicated Amazon S3 section for more info.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/input'
{- "fields": {
- "bucket": "qinertia-cloud-eu-west-3-prod",
- "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
- "X-Amz-Credential": "AKIA4BWA67SAQ4XXITET/20210713/eu-west-3/s3/aws4_request",
- "X-Amz-Date": "20210713T092559Z",
- "key": "tmp/39ae5d26-3ab0-42e5-b6bc-5dfb2b62d2bc",
- "Policy": "eyJleHBpcmF0aW9uIjoiMjAyMS0wNy0xM1QwOTozNTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCw1MzY4NzA5MTIwXSxbInN0YXJ0cy13aXRoIiwiJENvbnRlbnQtVHlwZSIsIiJdLHsidGFnZ2luZyI6IjxUYWdnaW5nPlxuXHQ8VGFnU2V0PlxuXHQ8VGFnPlxuXHQgIDxLZXk+dXNlcjwvS2V5PlxuXHQgIDxWYWx1ZT40MmQyMzVhYy0wMWQ2LTRmY2YtOTc4Mi1kYjEwM2VmZTRmMTg8L1ZhbHVlPlxuXHQ8L1RhZz5cblx0PFRhZz5cblx0ICA8S2V5PnJlYXNvbjwvS2V5PlxuXHQgIDxWYWx1ZT5DcmVhdGUgcHJvZHVjdCBhdHRhY2htZW50PC9WYWx1ZT5cblx0PC9UYWc+XG5cdDwvVGFnU2V0PlxuICA8L1RhZ2dpbmc+In0seyJidWNrZXQiOiJteXNiZy10ZXN0In0seyJYLUFtei1BbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJYLUFtei1DcmVkZW50aWFsIjoiQUtJQTRCV0E2N1NBUTRYWElURVQvMjAyMTA3MTMvZXUtd2VzdC0zL3MzL2F3czRfcmVxdWVzdCJ9LHsiWC1BbXotRGF0ZSI6IjIwMjEwNzEzVDA5MjU1OVoifSx7ImtleSI6InRtcC8zOWFlNWQyNi0zYWIwLTQyZTUtYjZiYy01ZGZiMmI2MmQyYmMifV19",
- "X-Amz-Signature": "db6acb2119fb79d7ef0ca618cf35a724bcb5d20f0dd46b65de5de64fb5dc3240"
}
}
Get Amazon S3 URLs to upload Qinertia resources files to use with an HTTP POST request.
Resources files are, for example, custom Qinertia export profiles or report templates. They are created with the Qinertia Desktop application and are referenced from the JSON processing file.
The response body fields
should contain a param named key
that should look like:
qinertia-cloud/2e6aaedf-7832-4b3f-9bb9-b5bada068427/input/${filename}
You need to replace ${filename}
using the relative path of your file.
Please find below examples to upload a custom export profile and report template:
qinertia-cloud/2e6aaedf-7832-4b3f-9bb9-b5bada068427/resources/photogrammetry.ppprof
qinertia-cloud/2e6aaedf-7832-4b3f-9bb9-b5bada068427/resources/My Custom PDF.ppreport
You don't need to manage the folders/sub-folders, they will be created automatically.
To upload a file, do a HTTP POST request to url
with fields
as form-data followed by the file content.
You can upload as many files as you want by repeating this operation.
Please read the dedicated Amazon S3 section for more info.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/resources'
{- "fields": {
- "bucket": "qinertia-cloud-eu-west-3-prod",
- "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
- "X-Amz-Credential": "AKIA4BWA67SAQ4XXITET/20210713/eu-west-3/s3/aws4_request",
- "X-Amz-Date": "20210713T092559Z",
- "key": "tmp/39ae5d26-3ab0-42e5-b6bc-5dfb2b62d2bc",
- "Policy": "eyJleHBpcmF0aW9uIjoiMjAyMS0wNy0xM1QwOTozNTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCw1MzY4NzA5MTIwXSxbInN0YXJ0cy13aXRoIiwiJENvbnRlbnQtVHlwZSIsIiJdLHsidGFnZ2luZyI6IjxUYWdnaW5nPlxuXHQ8VGFnU2V0PlxuXHQ8VGFnPlxuXHQgIDxLZXk+dXNlcjwvS2V5PlxuXHQgIDxWYWx1ZT40MmQyMzVhYy0wMWQ2LTRmY2YtOTc4Mi1kYjEwM2VmZTRmMTg8L1ZhbHVlPlxuXHQ8L1RhZz5cblx0PFRhZz5cblx0ICA8S2V5PnJlYXNvbjwvS2V5PlxuXHQgIDxWYWx1ZT5DcmVhdGUgcHJvZHVjdCBhdHRhY2htZW50PC9WYWx1ZT5cblx0PC9UYWc+XG5cdDwvVGFnU2V0PlxuICA8L1RhZ2dpbmc+In0seyJidWNrZXQiOiJteXNiZy10ZXN0In0seyJYLUFtei1BbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJYLUFtei1DcmVkZW50aWFsIjoiQUtJQTRCV0E2N1NBUTRYWElURVQvMjAyMTA3MTMvZXUtd2VzdC0zL3MzL2F3czRfcmVxdWVzdCJ9LHsiWC1BbXotRGF0ZSI6IjIwMjEwNzEzVDA5MjU1OVoifSx7ImtleSI6InRtcC8zOWFlNWQyNi0zYWIwLTQyZTUtYjZiYy01ZGZiMmI2MmQyYmMifV19",
- "X-Amz-Signature": "db6acb2119fb79d7ef0ca618cf35a724bcb5d20f0dd46b65de5de64fb5dc3240"
}
}
Issue this request to get, for each file generated by Qinertia Cloud API, an URL to download it.
This endpoints returns both the processing logs as well as the exported data, generated reports and so on.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/output'
Archive a project so it will not be deleted automatically after 30 days.
Only the latest processing results are kept and input data are deleted.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request POST 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/archive'
{- "id": "ab21c597-1f44-4e27-82cb-790c7df005c2",
- "region": "eu-west-3",
- "lastProcessing": {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "organizationName": "SBG Systems",
- "organizationId": "51ec62be-8db9-4288-aac8-aa362fefa706",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
These endpoints are used to manage processing jobs on a project.
Qinertia Cloud API lets you process several times the same project if needed.
It can be helpful if you would like to change some processing settings without re-uploading the dataset.
Once you have created a project, you should start a processing and provide the JSON processing settings file. At any time, you can check a processing status/progress and easily list any error that may have occurred.
However, SBG Systems recommends using webhooks to monitor processing progress/status rather than continuously polling the processing information.
This endpoint lists all the processings that have either succeeded or failed for a project.
If a processing is currently being executed, it will also be listed.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/projects/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/processings'
[- {
- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Start a new processing for a project by providing the processing JSON settings.
Before you issue this request, make sure you have uploaded successfully input and, optionally, resources data.
The processingJson
field is a full Qinertia processing JSON content. It defines input data, processing options, export jobs, etc.
Please read the dedicated Qinertia documentation and check the Qinertia Cloud API GitHub for code and project samples.
qinertia-cloud:user
) projectId required | string <uuid> Example: ab21c597-1f44-4e27-82cb-790c7df005c2 Project ID |
This body is used to create and start a processing.
processingJson required | object Processing json. More info |
Array of objects (metadataList) List of metadata. |
{- "processingJson": { },
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
{- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
Returns detailed information, status and progress for a processing job.
If you would like to check progress on a processing job, please use webhooks rather than polling this endpoint.
qinertia-cloud:user
) processingId required | string <uuid> Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff Processing ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6'
{- "id": "813d9d26-811a-40d4-a4e0-c52b7cd338ff",
- "status": "processing",
- "duration": 120,
- "processingStep": "processing",
- "processingProgress": 0.5,
- "errorCount": {
- "errors": 0,
- "warnings": 1
}, - "creatorName": "John Doe",
- "creatorId": "f98360da-87e7-4233-bed6-02997575d2f1",
- "createdAt": "2021-02-09T00:00:00.000Z",
- "updatedAt": "2022-02-09T00:00:00.000Z",
- "missionLength": 1124,
- "missionLocationCountry": "France",
- "missionLocationRegion": "Yvelines",
- "missionLocationPlace": "Carrières-sur-Seine",
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
Cancel a processing job that is either pending or being processed.
qinertia-cloud:user
) processingId required | string <uuid> Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff Processing ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request DELETE 'https://qinertia-api.sbg-systems.com/api/v1/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6'
{- "title": "You are not authenticated",
- "details": "Bearer token not found in authorization header"
}
Get a detailed list of errors and warnings that have occurred on a processing job.
qinertia-cloud:user
) processingId required | string <uuid> Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff Processing ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v1/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6/errors'
[- {
- "id": "e4d22857-6b5b-4947-9571-3fd3b1e5cb86",
- "level": "error",
- "message": "Base SBGS - Position frame is unknown. Fallback on WGS84.",
- "date": "2021-02-09T00:00:00.000Z"
}
]
Register webhooks to be notified when a processing status or progress is updated.
Qinertia Cloud API relies on webhooks to easily notify another service when a processing status changes.
A webhook is simply an external URL that is called by SBG Systems cloud services to notify an event.
For example, you can register a webhook to issue a POST request on your service when a processing is completed.
The webhook API is provided by a dedicated SBG Systems notification service and not directly by Qinertia Cloud API service. The webhook endpoints should be issued on https://notification-api.sbg-systems.com/api/v1 domain.
Webhooks are registered for an organization. If you have several ongoing processings, the webhook will be triggered
for each processing status/progress updated.
You should check the received payload to identify which processing/project has issued the event.
Before you can install a webhook, you should create, on your service, a dedicated endpoint (URL) that accepts POST requests.
Your endpoint must respond a 2XX status code within 5 seconds to be considered valid. You should respond before executing business logic to avoid a webhook timeout and retry.
If your endpoint was unavailable (connection timeout, invalid status code...) when the webhook was sent, it will be resent later.
The notification service will try, up to 10 times, to resend the missed event with an exponential backoff. These 10 attempts will take place over approximately 3 days. After that, the endpoint will be considered as defective and will be automatically disabled.
You can fetch the missed webhooks using this endpoint.
You can secure webhook calls and make sure the POST request has been issued by SBG Systems service.
In the webhook's HTTP request you will find 2 headers:
The timestamp is when the webhook has been sent. Make sure it is not too old and consistent with your server time.
The signature is generated using the Hash-based message authentication code (HMAC) protocol. You should compute a HMAC hash and compare it to the Sbg-Signature one to confirm POST request authenticity.
The HMAC is computed using the POST request timestamp and raw content body: HMAC(Sbg-Timestamp + "." + body)
The HMAC secret has been generated during the webhook endpoint creation and a sha256 algorithm is used.
Please find below a JavaScript code snippet to implement the HMAC computation:
const signature = crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + rawBody, 'utf8')
.digest('hex')
List all webhook endpoints that have been registered for an organization.
notification:user
) organizationId required | string <uuid> Example: 6720f040-7dbc-40c4-be32-1bead64e5515 Organziation ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://notification-api.sbg-systems.com/api/v1/organizations/40bfe492-5a81-4050-9086-d8880080ecc1/webhook-endpoints'
[- {
- "id": "882e8ef9-ab6b-4904-a860-78837baf838a",
- "enabledEventTypes": [
- "qinertia-cloud:processing-ended"
], - "secret": "qv30v6VCLuvEfRnzxx0d5I7gpFibL2Batdq7GYjRFypQcHONfVuOtuamZns7FiVe",
- "enabled": true,
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Create and register a new webhook endpoint for an organization.
notification:user
) organizationId required | string <uuid> Example: 6720f040-7dbc-40c4-be32-1bead64e5515 Organziation ID |
This body is used to create a webhook endpoint.
url required | string <url> The url on which the webhook will be sent. |
enabledEventTypes required | Array of strings (eventType) List of event types you wish to listen. |
Array of objects (metadataList) List of metadata. |
{- "enabledEventTypes": [
- "qinertia-cloud:processing-ended"
], - "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
[- {
- "id": "882e8ef9-ab6b-4904-a860-78837baf838a",
- "enabledEventTypes": [
- "qinertia-cloud:processing-ended"
], - "secret": "qv30v6VCLuvEfRnzxx0d5I7gpFibL2Batdq7GYjRFypQcHONfVuOtuamZns7FiVe",
- "enabled": true,
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Update an existing webhook endpoint.
notification:user
) webhookEndpointId required | string <uuid> Example: 882e8ef9-ab6b-4904-a860-78837baf838a Webhook endpoint ID |
This body is used to update the webhook endpoint.
url | string <url> The url on which the webhook will be sent. |
enabledEventTypes | Array of strings (eventType) List of event types you wish to listen. |
Array of objects (metadataList) List of metadata. | |
enabled | boolean If disabled, no webhook will be sent to it. |
{- "enabledEventTypes": [
- "qinertia-cloud:processing-ended"
], - "metadata": [
- {
- "key": "string",
- "value": "string"
}
], - "enabled": true
}
[- {
- "id": "882e8ef9-ab6b-4904-a860-78837baf838a",
- "enabledEventTypes": [
- "qinertia-cloud:processing-ended"
], - "secret": "qv30v6VCLuvEfRnzxx0d5I7gpFibL2Batdq7GYjRFypQcHONfVuOtuamZns7FiVe",
- "enabled": true,
- "metadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Immediately delete a webhook endpoint. This operation can't be cancelled.
notification:user
) webhookEndpointId required | string <uuid> Example: 882e8ef9-ab6b-4904-a860-78837baf838a Webhook endpoint ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request DELETE 'https://notification-api.sbg-systems.com/api/v1/webhook-endpoints/33d5bd02-43b6-4281-9c98-1bf9c2f8a431'
{- "title": "You are not authenticated",
- "details": "Bearer token not found in authorization header"
}
List, for an organization, all missed webhook events.
If the target URL (user service) doesn't respond with a 2xx HTTP code to a webhook event, the notification service will retry up to 10 times. Following these 10 retry, a missed webhook event is logged.
notification:user
) webhookEndpointId required | string <uuid> Example: 882e8ef9-ab6b-4904-a860-78837baf838a Webhook endpoint ID |
# URL request example using curl tool # with all mandatory and optional path parameters curl --location --request GET 'https://notification-api.sbg-systems.com/api/v1/webhook-endpoints/33d5bd02-43b6-4281-9c98-1bf9c2f8a431/missed-webhooks?page=0&perPage=100'
[- {
- "id": "882e8ef9-ab6b-4904-a860-78837baf838a",
- "eventType": "qinertia-cloud:processing-ended",
- "payload": { },
- "createdAt": "2021-02-09T00:00:00.000Z",
- "endpointMetadata": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
Qinertia Cloud API uses Amazon S3 services to store input and output data.
The user should upload the data to Amazon S3 before starting a processing job. The processing results and log files will also be stored on Amazon S3.
Uploading files is done in two steps:
Downloading results and logs is straightforward:
To upload your file, do a HTTP request on AWS REST API.
Generate the data to send using this endpoint. The endpoint url is here: response.body.url
, the request data is here: response.body.fields
Upload file to AWS S3. Generate the data to send using the response of this endpoint
key required | string Key of the file you are uploading. It must not end with |
file required | string <binary> MUST BE THE LAST ATTRIBUTE |
property name* | string Every attribute of this endpoint for input files or this endpoint for resources files "response.fields" |
# URL request example using curl tool # with all mandatory and optional path parameters curl --request POST 'https://s3.eu-west-3.amazonaws.com/qinertia-cloud-eu-west-3-prod' \ --form 'bucket="qinertia-cloud-eu-west-3-prod"' \ --form 'X-Amz-Algorithm="AWS4-HMAC-SHA256"' \ --form 'X-Amz-Credential="AKIA4BWA67SAQ4XXITET/20210713/eu-west-3/s3/aws4_request"' \ --form 'X-Amz-Date="20210713T092559Z"' \ --form 'key="qinertia-cloud/7830e885-f602-4d5b-8f80-a7a9bf2aa0b1/input/base/sbgs167o.20d"' \ --form 'Policy="eyJleHBpcmF0aW9uIjoiMjAyMi0wNy0wOFQxNToxODo1OFoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJxaW5lcnRpYS1jbG91ZC1ldS13ZXN0LTMtcHJlcHJvZCJ9LHsiWC1BbXotQWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFTSUE0QldBNjdTQTdOMlpRQU9CLzIwMjIwNzA4L2V1LXdlc3QtMy9zMy9hd3M0X3JlcXVlc3QifSx7IlgtQW16LURhdGUiOiIyMDIyMDcwOFQxNDE4NThaIn0seyJYLUFtei1TZWN1cml0eS1Ub2tlbiI6IklRb0piM0pwWjJsdVgyVmpFTUgvLy8vLy8vLy8vd0VhQ1dWMUxYZGxjM1F0TXlKSE1FVUNJUUNiTW5aZHpadllMWjdQWHp3SDJpTVp5K3ZySHM2bitpaGRoZFBjSnQ3N2tRSWdQcjZsZC8zMGR3QUdKbTZ3ZFdaUk03ejR3bjR6Umt4c3E1c0d5V1llZjhjcWxnUUk2di8vLy8vLy8vLy9BUkFDR2d3NE1qZ3lOVGsyTXpBeU1Ea2lERm9QVy90U0lpbUZPd3VyMXlycUEyeGVhQXkyRDRWa3A5d2FhQVVpNDFPVmdvclBwNlc5RTlpNFAxVFlWNnhoMk5ZbVBIUjBlSklwT2RURWxzT3BpVTlBSUpYYUNES3VCYUphRmlyOVZ3TGd5MEx0NWFNanByYVp0eG9TYllpZ0ViYVRScEZmRjhnL2dnVjZaZ3BZb0FNcjJEUzJsK015ai96QlB0bFFpOGRyWW5iUExYNHFsb3NWSTJraW9NWU5aM29vbmczYklzWmdQTnVuM3VwZ1lSRWppZkd5SEl0Vm5qVUZOa0xMOGFFcmxza0d0QWMybERwa3RXbEw1dVVXWkE4U0YvZ0t0S3pGeFVJd3crZno5YTkwTml6TUh0Vk5MQmVYS2xreTVmQ0tNNTR3ODkzWEE2Tll3aUswdnNjVmxjcjBJeFlBMGdOT2krMHpNYTVvY2d2bW9sWnhHNy9IYW9OL0IzMTY1eW9acHY0MFZQeFhsUGtnbWtGWm1BcTR2OFNtUHRIN3BXNGsrWkVUVEE0ZEFSTFEvdjFmSmxSSmc0UzRLTVpOQktJeFdzK2RqbmplcXVHZmkvcGUzMnM5YnhEa2E4ZkdIN2xnRVBVb0JUa0NsVlc0SHk3VU9UV2luZUZWd0RZdmUraXBTYy9adGQzR1lBZW9Mbnh3QzBPajJVbmNXU241WXpBRVJlZVRmeDdYeGkrNVpUTWhSVmFyYlRnZFV2SzhsZEozNXhMZTBmdmp0bEI1ZzI2MlMzTHVnclVOYWphNWhJWXgvMEJUWUpYL3ZwNlZOOHZwYTRYK1FOWlBCZjdEd2dwZCtxZU1taFlCMzBRVUxEL1hKeUx6ZWo0eVZmSXlXOEJZSnoxR0tSQ1ZhdkdRbnlvM3M5SW9jbTB3czllZmxnWTZwUUh5d2daMzgrVlZpcVh6b25zdVpmNk8zZlNVNEhySUhMUy9UWVFRZldoMVU1Yy9YS0JBQk1QaTVBV3dHa3R1VXU2bFBadmtpN3VCeEV6cnZtMUUxS3NQdTh5VmVTZ2dva25ZQ0FaQkpaVXNJMnZ6Uk5lYWovTVVBUmpJQVUrZnBMUWE5S1pia3g0SklyM2MzbnJqZDFJWkVGVjR4KzIzSWVKT2dsWkNzY1pWdmRVTFdDU2ZNaWowcnFXQ1N5UG0rQ3M1QUNwOS9IRUlWRXFYQnAwU0pEQ0laVFY0aW0wPSJ9LFsic3RhcnRzLXdpdGgiLCIka2V5IiwicWluZXJ0aWEtY2xvdWQvZGJhZjY0ZTUtNGFiZS00N2Q3LTg4ZWUtMDRmMGE4YWJmNDliL2lucHV0LyJdXX0="' \ --form 'X-Amz-Signature="db6acb2119fb79d7ef0ca618cf35a724bcb5d20f0dd46b65de5de64fb5dc4602"' \ --form 'file=@"/C:/Users/YourUser/Desktop/input/base/sbgs167o.20d"'
{- "title": "You are not authenticated",
- "details": "Bearer token not found in authorization header"
}