SBG Systems - Qinertia Cloud REST API (2.0.479-stable)

Download OpenAPI specification:Download

Introduction

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.

API Description

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:

  • create/view/update/delete containers
  • create/upload/update/delete files within a container
  • list/start/cancel/monitor processing
  • monitor processing progress using webhooks
  • list/download generated exports/reports

To ease integration with other services, most endpoints offer an optional metadata dictionary to store user defined data.

Core Concepts

The Qinertia Cloud API is structured around three primary components: Containers, Container Files, and Processings. These components define a consistent and automated workflow for managing high-precision GNSS/INS post-processing jobs in the cloud.

Containers

Containers are temporary resources used to store, group, and organize the files you want to process via the GNSS/INS cloud service.

Key characteristics:

  • Isolated: Independent and scoped to your organization
  • Expiration: Automatically deleted 24 hours after creation, along with all its files
  • Reusability: Supports uploading new files and launching multiple jobs during its lifetime
  • Parallel-friendly: Allows simultaneous processing jobs using different configurations

Container Files

Once a container is created, you can add, update and delete files within it.

Container files are the user-provided data that will be processed. There are two types of files:

  1. input: RAW GNSS observations, INS sbgECom binary logs, IMU data, odometer velocity, etc
  2. resources: Export profiles, report templates, geodesy resources, etc

Uploading a file is a two-step process:

  1. Register the file on the server to receive upload instructions
  2. Upload the file content directly to Amazon S3 using the provided instructions

Processings

Once a container is created and the necessary files are uploaded, you can start a processing by submitting a JSON processing settings file.

At any time, you can check the status and progress of a processing and retrieve any errors that may have occurred. Please prefer using webhooks instead of polling processings to monitor progress and status.

After a processing completes successfully, you can request and download the list of generated output files.

Workflow Summary

  1. Create a container
  2. Register and upload input/resources files
  3. Start the processing job by submitting a JSON processing settings file
  4. Monitor job status using webhooks (or via polling during tests)
  5. Download results when complete
  6. Optionally archive the job (jobs are archived and results are deleted automatically after 30 days)

HTTP methods

This API implements standard REST API HTTP methods as detailed below:

  • The GET method is used to retrieve a representation of a resource. If successful, GET returns a representation in JSON and an HTTP response code of 200 (OK). In an error case, it most often returns a 404 (NOT FOUND) or 400 (BAD REQUEST). The GET method never modify any resource or state on the server.
  • The POST method is used to create a new resource and/or to execute actions. On successful update or action, a HTTP status code 200 (OK) is returned with a JSON body detailing the operation status. In case of error the corresponding HTTP status code is returned such as 400 (Bad Request).
  • The PATCH method is used to update an existing resource. On successful update or action, a HTTP status code 200 (OK) is returned with a JSON body detailing the operation status. In case of error the corresponding HTTP status code is returned such as 400 (Bad Request).
  • The DELETE method is used to delete an existing resource.

HTTP status codes

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 lists 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.

200 (OK)

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:

  • GET an entity corresponding to the requested resource is sent in the response;
  • POST/PATCH/DELETE an entity describing or containing the result of the action;

400 (Bad Request)

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.

401 (Unauthorized)

A 401 error response indicates that the client tried to operate on a protected resource without providing the proper authorization. The Authorization header is missing, doesn't start with "Bearer ", the access token is invalid or expired. More details will be provided to you in the response.

The client MAY repeat the request with a suitable authorization token in the HTTP header.

403 (Forbidden)

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.

404 (Not Found)

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.

409 (Conflict)

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 resubmit 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 an organization that already has an ongoing processing.

422 (Unprocessable Entity)

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 (Internal Server Error)

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.

Getting started guide

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.

Authentication

AuthToken

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 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.

Compatibility

SBG Systems strives to minimize breaking changes that could disrupt existing integrations. However, as the Qinertia Cloud API evolves with new features and improvements, versioning is essential to ensure a stable and predictable developer experience.

Thanks to its RESTful and JSON-based design, the API is naturally resilient to change. When properly integrated, most changes can be introduced without breaking compatibility.

Implementation Version

The Qinertia Cloud API implementation follows SBG Systems' standard Major.Minor.Build-Qualifier versioning scheme:

  • Major: Incremented when changes introduce potential breaking modifications or significant new functionality.
  • Minor: Incremented for backward-compatible improvements that do not require revalidation or code changes.

Each release updates the version number accordingly and includes a detailed changelog.

REST API Endpoint Version

In addition to the implementation version, the REST API itself uses endpoint-level versioning via the URL path (e.g., /api/v1/..., /api/v2/...).
This versioning scheme is independent of the Major.Minor.Build version and is used to manage breaking changes to the API's structure or behavior.

Like any RESTful interface, changes fall into two categories:

  • Backward-compatible changes: adding a new field to a JSON response or introducing a new endpoint.
  • Breaking changes: removing an endpoint or significantly changing its request/response schema.

When a breaking change is introduced, a new version of the endpoint is created (e.g., /api/v2/...), while the previous version remains available to ensure compatibility with existing integrations.

Example: If the schema for /api/v1/info changes significantly, the updated version should be made available at:

/api/v2/info

The original /api/v1/info will continue to return the legacy schema, allowing clients to migrate at their own pace.

Change Log

Please find below the list of changes for each API release.

Release - 2.0.479-stable

New Features

  • QCLD-199 - Update Qinertia Engine to latest 4.2 version
  • QCLD-172 - Engine: Store in the input.log the list of files with information from the attached container
  • QCLD-139 - Rework processing database architecture and endpoint to replace project with a transitive container

Improvements

  • QCLD-200 - Improve js code sample error reporting
  • QCLD-149 - Updated metadata type from array to a json node
  • QCLD-124 - Automatically delete containers and processings results after a certain amount of time

Migration guide

📢 Migration Notice: Update from v1 to v2

We are releasing version 2 (v2) of the system, which introduces major changes in how input files are handled, how processing jobs are started, and how metadata is managed.

These modifications are part of a broader effort to improve flexibility, performance, and maintainability across the platform.

🚨 What’s Changed from v1 to v2?

📂 Input File Handling

  • The system for uploading, validating, and accessing input files has been completely reworked.
  • File paths, formats, and access methods may differ from those used in v1.

⚙️ Processing Execution

  • The logic for starting processing workflows has been redesigned.
  • New APIs and triggering mechanisms replace older methods used in v1.

🗂️ Metadata Management

  • Metadata is now structured and stored differently.
  • You may need to update how metadata is created, retrieved, or passed through your workflow.

✅ What You Need to Do

Because these changes represent a breaking shift from v1 to v2:

All users must carefully read the updated documentation and adapt their code accordingly.

Using v1 code or logic in v2 without adjustments may result in failures or incorrect behavior.

Containers

Container endpoints allow you to create and manage containers.

Containers are temporary resources used to store, group, and organize the files you want to process via the GNSS/INS cloud service.

You can perform the following operations:

  • Create a new container
  • List existing containers
  • Update container metadata
  • Delete a container
All containers will automatically expire 24h after their creation and all uploaded files will be deleted.

List organization containers

This endpoint returns a list of all existing containers created under an organization, including metadata such as container ID, creation date, current status, and expiration time.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

query Parameters
page
required
integer >= 0
Example: page=0

Pagination page

perPage
required
integer [ 1 .. 100 ]
Example: perPage=100

Pagination page size

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/organizations/40bfe492-5a81-4050-9086-d8880080ecc1/containers?page=0&perPage=100'

Response samples

Content type
application/json
{
}

Create container

Creates a new empty container for an organization and optionally, register the files to be uploaded during the same request.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

Request Body schema: application/json

This body is used to create a container.

region
required
string (containerRegion)
Enum: "eu-west-3" "us-west-1" "ap-northeast-1" "ap-southeast-2"

Specifies the region where input and output files will be stored, and where processing will be executed.
To optimize upload and download performance, it is recommended to select the region closest to your physical location.

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

Array of objects (createContainerFile)

An optional list of container files to create as part of the request.

This field provides a shortcut to avoid making a separate call to the Add files in container endpoint when you already have all the necessary information about the files you intend to upload.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Get container info

Returns information for a container.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerId
required
string <uuid>
Example: 27db37f5-5b5d-4beb-bf69-89748c4de264

Container ID

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/containers/27db37f5-5b5d-4beb-bf69-89748c4de264'

Response samples

Content type
application/json
{
}

Update container

Update an existing container information and more specifically the user metadata.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerId
required
string <uuid>
Example: 27db37f5-5b5d-4beb-bf69-89748c4de264

Container ID

Request Body schema: application/json

This optional body is used to update a container

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Delete container

Delete the container and every file you have uploaded on it. The processings associated with the container remains, but the containerId is set to null. Result files are not affected.

This operation is immediate and can't be cancelled.

You cannot delete a container if an associated processing is currently running.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerId
required
string <uuid>
Example: 27db37f5-5b5d-4beb-bf69-89748c4de264

Container ID

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request DELETE 'https://qinertia-api.sbg-systems.com/api/v2/containers/27db37f5-5b5d-4beb-bf69-89748c4de264'

Response samples

Content type
application/json
{
}

Container files

Container files endpoints allow you to create and manage files within a container.

You can perform the following operations:

  • Register new files to the container
  • Update file path/type/metadata
  • Delete a file

Uploading a file is a two-step process that relies on Amazon S3:

  1. Register the file on the server: Add files in container
  2. Upload the file content using the information returned by the registration step: Upload file data

Add files in container

Registers a list of files to be uploaded into a container. Each file is initially marked with a pending status until it has been successfully uploaded.

For every registered file, an uploadInfo object is returned containing the necessary details to upload the file to Amazon S3.

Note: A processing job can only be started once all registered files have been successfully uploaded.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerId
required
string <uuid>
Example: 27db37f5-5b5d-4beb-bf69-89748c4de264

Container ID

Request Body schema: application/json

This body is used to add files to a container.

required
Array of objects (createContainerFile)

List of files to be added to the container.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
[
]

Upload file data

After registering files in a container, each file must be uploaded individually using an HTTP POST request.

The uploadInfo object provides the necessary information for uploading the file to Amazon S3:

  • uploadInfo.url: the pre-signed Amazon S3 URL to post the file to
  • uploadInfo.fields: the form fields required by Amazon S3 to authorize the upload

Use a multipart/form-data POST request that includes all fields from uploadInfo.fields, followed by the file content.

⚠️ Do not modify any field in uploadInfo.fields, as doing so will result in a 403 Forbidden error.

Request Body schema: multipart/form-data

Upload a file directly to Amazon S3 using a multipart/form-data POST request.

The form fields and target URL must be obtained from the uploadInfo object returned by the Add files in container or List container files endpoint.

All fields from uploadInfo.fields must be included exactly as provided, or the request will fail with a 403 Forbidden error.

⚠️ The file field containing the actual binary data must be the LAST FIELD in the form.

fields
required
string

Additional form fields provided in uploadInfo.fields, such as: X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, Key, Policy, and X-Amz-Signature.

file
required
string <binary>

The binary content of the file to upload.
This field MUST appear last in the multipart/form-data body.

Responses

Request samples

# 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"'

Response samples

Content type
application/json
{
}

Update file in container

Updates the file path, type or metadata of an existing file previously registered in the container.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerFileId
required
string <uuid>
Example: f6a71755-1ed7-45e0-91ab-b7121995d0bb

Container file ID

Request Body schema: application/json

This optional body is used to update a container file

type
string (containerFileType)
Enum: "input" "resources"

Type of the container file.

  • input: RAW GNSS observations, INS sbgECom binary logs, IMU data, odometer velocity, etc
  • resources: Export profiles, report templates, geodesy resources, etc
path
string

Path of the file in the container. Must be a valid POSIX path. If the path collides against another file within the container, the request will fail with a 409 status code. Path collisions detection is performed based on file type. You can use the same path for a file with type input and another with type resources.

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Delete file from a container

Permanently deletes a file that was previously registered in a container. This operation is immediate and cannot be undone.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
containerFileId
required
string <uuid>
Example: f6a71755-1ed7-45e0-91ab-b7121995d0bb

Container file ID

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request DELETE 'https://qinertia-api.sbg-systems.com/api/v2/container-files/f6a71755-1ed7-45e0-91ab-b7121995d0bb'

Response samples

Content type
application/json
{
}

Processings

These endpoints are used to manage GNSS/INS processing jobs for your organization.

You can perform the following operations:

  • Create a new processing job
  • Monitor its status and progress
  • Retrieve processing results
  • Archive completed processings
  • List all processings for an organization
Processing results are automatically archived after 30 days, at which point all associated output files are permanently deleted.

List processings

Retrieves all processing jobs associated with an organization, including:

  • Completed processings (succeeded or failed)
  • Ongoing processings currently in progress

Use this endpoint to monitor the processing history and current activity for your organization.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

query Parameters
page
required
integer >= 0
Example: page=0

Pagination page

perPage
required
integer [ 1 .. 100 ]
Example: perPage=100

Pagination page size

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/organizations/6720f040-7dbc-40c4-be32-1bead64e5515/processings?page=0&perPage=100'

Response samples

Content type
application/json
{
}

Start processing

Initiates a new processing job using the files registered in a container, based on the provided JSON configuration.

Before starting a processing, ensure that all input files have been successfully uploaded. Resource files are optional but must also be uploaded if referenced in the configuration.

The processingJson field must contain a complete Qinertia processing configuration, which defines:

  • Input data path
  • Processing options
  • Export jobs and settings

📘 For more details on how to structure this JSON, refer to the official Qinertia documentation and the Qinertia Cloud API GitHub for sample code and project templates.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

Request Body schema: application/json

This body is used to create and start a processing.

containerId
required
string <uuid>

ID of the associated container.

processingJson
required
object

Processing json. More info

name
string Nullable

Name of the processing.

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Get processing info

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.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
processingId
required
string <uuid>
Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff

Processing ID.

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6'

Response samples

Content type
application/json
{
}

Cancel processing

Cancel a processing job that is either pending or being processed.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
processingId
required
string <uuid>
Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff

Processing ID.

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request POST 'https://qinertia-api.sbg-systems.com/api/v2/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6'

Response samples

Content type
application/json
{
}

Archive processing

Archiving the processing will delete all associated result files.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
processingId
required
string <uuid>
Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff

Processing ID.

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request POST 'https://qinertia-api.sbg-systems.com/api/v2/processings/813d9d26-811a-40d4-a4e0-c52b7cd338ff/archive'

Response samples

Content type
application/json
{
}

Download output data

Use this endpoint to retrieve download URLs for all files generated by the Qinertia Cloud API after processing.

This includes:

  • Processing logs
  • Exported data
  • Generated reports

Note: Only processings with a status of processed will have downloadable output files.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
processingId
required
string <uuid>
Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff

Processing ID.

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/processings/813d9d26-811a-40d4-a4e0-c52b7cd338ff/output'

Get processing errors

Get a detailed list of errors and warnings that have occurred on a processing job.

Authorizations:
AuthToken (qinertia-cloud:api-key)
path Parameters
processingId
required
string <uuid>
Example: 813d9d26-811a-40d4-a4e0-c52b7cd338ff

Processing ID.

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://qinertia-api.sbg-systems.com/api/v2/processings/2ba2c7fb-2441-4344-9243-5661c95c4ab6/errors'

Response samples

Content type
application/json
[
]

Webhooks

Register webhooks to be notified whenever a processing job's status or progress is updated.

The Qinertia Cloud API uses webhooks to notify external services when a processing status changes.
A webhook is simply a URL exposed by your service that is called by SBG Systems’ cloud infrastructure when specific events occur.

For example, you can register a webhook that will trigger a POST request to your service when a processing completes.

Notifications Service

Webhooks are managed by a dedicated notification service provided by SBG Systems — not directly by the Qinertia Cloud API.
All webhook-related API requests must be sent to: https://notification-api.sbg-systems.com/api/v2

Webhooks API is not on the same subdomain as Qinertia Cloud API.

Webhooks scope

Webhooks are registered at the organization level. If your organization has multiple ongoing processings, the webhook will be triggered for each status or progress update.

You should check the received payload to identify which processing has issued the event.

Webhooks are registered for an organization and not for a container or processing.

HTTP endpoint (Your URL)

Before registering a webhook, you must set up an HTTP endpoint on your service that accepts POST requests.

  1. Identify the events you want to monitor.
  2. Create a publicly accessible endpoint on your server (must accept POST requests).
  3. Ensure the endpoint responds within 5 seconds with a 2XX status code.
  4. Register the webhook using the SBG Systems notification service.
Your endpoint must respond quickly, so reply before executing business logic.

Retry policy

If your endpoint is unavailable (due to a timeout, error, or non-2XX status), the webhook will be retried automatically.

Retry logic:

  • The notification service retries up to 10 retries, using exponential backoff.
  • The 10 retries are spread over approximately 3 days.
  • If all attempts fail, the endpoint is considered defective and will be automatically disabled.

You can check missed webhooks events using this endpoint.

Secure webhooks (optional)

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:

  • Sbg-Timestamp: The time the webhook was sent.
  • Sbg-Signature: A cryptographic signature using HMAC (Hash-based Message Authentication Code).

To verify the webhook:

  1. Make sure the timestamp is not too old and consistent with your server time
  2. Recreate the signature on your side using the HMAC secret generated when registering the webhook.
  3. Compare it with the Sbg-Signature header.

The HMAC is computed as:

  HMAC(Sbg-Timestamp + "." + rawBody)

Using:

  • Algorithm: SHA-256
  • Secret: Provided when the webhook was created

Example (Node.js):

  const signature = crypto
    .createHmac('sha256', secret)
    .update(timestamp + '.' + rawBody, 'utf8')
    .digest('hex')

List webhook endpoints

List all webhook endpoints that have been registered for an organization.

Authorizations:
AuthToken (notification:user)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

query Parameters
page
required
integer >= 0
Example: page=0

Pagination page

perPage
required
integer [ 1 .. 100 ]
Example: perPage=100

Pagination page size

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://notification-api.sbg-systems.com/api/v2/organizations/40bfe492-5a81-4050-9086-d8880080ecc1/webhook-endpoints'

Response samples

Content type
application/json
[
]

Create a webhook endpoint

Create and register a new webhook endpoint for an organization.

Authorizations:
AuthToken (notification:user)
path Parameters
organizationId
required
string <uuid>
Example: 6720f040-7dbc-40c4-be32-1bead64e5515

Organization ID

Request Body schema: application/json

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)
Items Enum: "qinertia-cloud:processing-ended" "qinertia-cloud:processing-progress" "qinertia-cloud:processing-error"

List of event types you wish to listen.

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
[
]

Update webhook endpoint

Update an existing webhook endpoint.

Authorizations:
AuthToken (notification:user)
path Parameters
webhookEndpointId
required
string <uuid>
Example: 882e8ef9-ab6b-4904-a860-78837baf838a

Webhook endpoint ID

Request Body schema: application/json

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)
Items Enum: "qinertia-cloud:processing-ended" "qinertia-cloud:processing-progress" "qinertia-cloud:processing-error"

List of event types you wish to listen.

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

enabled
boolean

If disabled, no webhook will be sent to it.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
[
]

Delete a webhook endpoint

Immediately delete a webhook endpoint. This operation can't be cancelled.

Authorizations:
AuthToken (notification:user)
path Parameters
webhookEndpointId
required
string <uuid>
Example: 882e8ef9-ab6b-4904-a860-78837baf838a

Webhook endpoint ID

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request DELETE 'https://notification-api.sbg-systems.com/api/v2/webhook-endpoints/33d5bd02-43b6-4281-9c98-1bf9c2f8a431'

Response samples

Content type
application/json
{
}

List missed webhook events

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.

Authorizations:
AuthToken (notification:user)
path Parameters
webhookEndpointId
required
string <uuid>
Example: 882e8ef9-ab6b-4904-a860-78837baf838a

Webhook endpoint ID

Responses

Request samples

# URL request example using curl tool
# with all mandatory and optional path parameters

curl --location --request GET 'https://notification-api.sbg-systems.com/api/v2/webhook-endpoints/33d5bd02-43b6-4281-9c98-1bf9c2f8a431/missed-webhooks?page=0&perPage=100'

Response samples

Content type
application/json
[
]

Webhook body Webhook

This is the HTTP request that we will send to your server when there are updates on your Qinertia Cloud API processings.

In order for us to send webhooks, you need to create a webhook endpoint.

Request Body schema: application/json

The body of the request that our servers will send to your endpoint once the webhook is active.
The details of the processing can be found its payload field.

id
string <uuid>

Webhook ID.

eventType
string (eventType)
Enum: "qinertia-cloud:processing-ended" "qinertia-cloud:processing-progress" "qinertia-cloud:processing-error"

Event type

createdAt
string <date-time>

Creation date (ISO 8601 date).

object (metadata)

An optional free entity that you can use to store useful information for debugging, tracking events, etc. This object allows you to store data in key-value pairs.

You can define up to 50 keys, with each key name having a maximum length of 40 characters and each value limited to 500 characters.

The object will be returned each time you retrieve the entity it is attached to, as well as in the webhook payload.

This entity cannot be partially updated. Any update will fully override it.

object (processing)

Responses

Request samples

Content type
application/json
{
}

General

Endpoints providing general information such as API version, engine version, and available regions.

Get server info

Get server info like server version, engine versions, available regions...

Responses

Request samples

# 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/info'

Response samples

Content type
application/json
{
}