NAV
HTTP cURL

Introduction

This documentation describes Solo REST API which provides access to Solo objects. Using Solo REST API, you can easily create your own powerful integration.

Your use of the Solo REST API is subject to this License Agreement

Access Solo REST API

To access Solo REST API you must issue token.

API URL

Once you have a token you can use this URL to access Solo objects. Pass the token in the Authorization: Bearer <access_token> header of every request.

https://solo.cloud/public/api/v1/

Solo objects

Solo objects in Solo REST API are presented in the same hierarchy as is Starsteer. The top level is Project, with the following structure:

Double values

Has a value

HTTP/1.1 200 OK

"data" : {
  "val" : 16.581
}

Not a number value

HTTP/1.1 200 OK

"data" : {
  "undefined": true
}

Double value consists of two fields:

  1. val - field holds a value
  2. undefined - field which is true if a value is not a number value

A response contains only one of the two fields. In requests, send {"undefined": true} for a not a number value. Most endpoints also treat an object without val as a not a number value, but image log data upload rejects it with 400.

Paging

HTTP/1.1 200 OK

{
  "content" : [ ],
  "offset" : 0,
  "limit" : 20,
  "first" : true,
  "last" : true,
  "total" : 3
}

Many of the Solo REST API endpoints return a pageable structure:

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
total Number Total number of records

The range is set by the offset and limit query parameters, most paged endpoints require both of them and reject a request without them with 400. A negative offset is treated as 0, a limit of 0 or less means the default of 100, and a limit above the server maximum (200 by default) is reduced to that maximum. The response returns the applied offset and limit, read the next range until last is true. For trial companies some lists return only the first 50 records, and total is capped accordingly.

0. Authentication

Issue token

Authentication using OAuth 2.0. Get an access token with grant_type=password and get a new one with grant_type=refresh_token when it expires (see expires_in). Pass the access token in the Authorization: Bearer <access_token> header of every API request. A rejected token request returns 401 (wrong credentials, client or grant) or 403 (access denied) with an OAuth 2.0 error body: error, error_description and, when known, type and message

Request

$ curl 'https://solo.cloud/oauth/token' -i -u 'solo-api-client-id:solo-api-secret' -X POST \
    -H 'Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1' \
    -d 'grant_type=password&username=test%2Bapi%40test.com&password=password'
POST /oauth/token HTTP/1.1
Authorization: Basic c29sby1hcGktY2xpZW50LWlkOnNvbG8tYXBpLXNlY3JldA==
Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
Host: solo.cloud

grant_type=password&username=test%2Bapi%40test.com&password=password

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5e183864c4c954b50d18aa8a458853c8
X-Solo-Device-Identifier: a9AaqpB2ZzNdzWBIVDHtH7tMT9kNyvyJlA9HCpi2Zw59qbHPSzK3y4d2hrDU52nLx8+36ntwhTM0H4NgiV90IA==
Set-Cookie: device-identifier=a9AaqpB2ZzNdzWBIVDHtH7tMT9kNyvyJlA9HCpi2Zw59qbHPSzK3y4d2hrDU52nLx8+36ntwhTM0H4NgiV90IA==; Domain=rogii.net; Path=/auth/api/v2; HttpOnly; SameSite=Strict
Set-Cookie: SESSION=YzAxZjYyMGQtZmZkZS00ZGRmLWE3ZTYtMzZkNTA5MjRhYWVi; Max-Age=2147483647; Expires=Sat, 27 Nov 2094 15:09:20 GMT; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=YzAxZjYyMGQtZmZkZS00ZGRmLWE3ZTYtMzZkNTA5MjRhYWVi; Max-Age=2147483647; Expires=Sat, 27 Nov 2094 15:09:20 GMT; Domain=rogii.com; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=YzAxZjYyMGQtZmZkZS00ZGRmLWE3ZTYtMzZkNTA5MjRhYWVi; Max-Age=2147483647; Expires=Sat, 27 Nov 2094 15:09:20 GMT; Domain=solo.cloud; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=YzAxZjYyMGQtZmZkZS00ZGRmLWE3ZTYtMzZkNTA5MjRhYWVi; Max-Age=2147483647; Expires=Sat, 27 Nov 2094 15:09:20 GMT; Domain=testsolo.rogii.net; Path=/; HttpOnly; SameSite=Strict
Authorization: c01f620d-ffde-4ddf-a7e6-36d50924aaeb
Content-Type: application/json;charset=UTF-8

{
  "access_token" : "eyJraWQiOiJvRDd2aGVEcUJ6RWh2R0RGUDBZYy1Gc0hQS3lDS0lfYWhZRU83NFBQRVdnIiwiYWxnIjoiUlMyNTYifQ.eyJjb21wYW55X2lkIjoyMDAwMywiY2xpZW50X2FwcF9pZCI6InBhcGkiLCJwZXJzb25fdHlwZSI6IlNUQUZGIiwidXNlcl9uYW1lIjoidGVzdCthcGlAdGVzdC5jb20iLCJjbGllbnRfaW5pdF9pcCI6IjEwLjQyLjAuNDkiLCJpc3MiOiJodHRwczovL2xvc29sby1zc28ucm9naWkubmV0IiwidXNlcl9kaWdlc3QiOiI4YjllZWEzNzc3IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9TVEFGRiJdLCJjbGllbnRfaWQiOiJzb2xvLWFwaS1jbGllbnQtaWQiLCJhdWQiOiJzb2xvLXB1YmxpYy1hcGkiLCJ1c2VyX2lkIjoxNDk3LCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTc5NDIzNTMxMywiaWF0IjoxNzk0MjI1MzEzLCJqdGkiOiIyNzE1MGYxOS0yZmIyLTRjYTktOGFjYy1iNGU0NjRhYzRlYzMifQ.cQWSRMDmIPf7fn10GEXf5HhoOOV4lSyOHGXTxNI8iKHCq95YoMfZICg4-shTKET6X82OqjQaZuUNtITNnGHcRWdhfpqwrYKmacSVVcruNcC5ewsdJIQH3g-5w-w8RQ0qmpnrC8a-8_Hx5-9CXEjzjd9ozmpe5xbganRQvnyJbSeP9ZanNyrIHD8tMvmBgPTZU7mHJijcjct4x7YqoAdv_Pgp3HRVY1bHsqE8LXHQ9CamBS7RCFTvt97bWLT1PZiYIgslJy1ihF_FpjMouAjMqpwRHiaEFanc_dFrrY1ubVF746bPFGICvFc3EbZQpMaFN8skxdgo2b6IHWlEUOn4CQ",
  "refresh_token" : "eyJraWQiOiJvRDd2aGVEcUJ6RWh2R0RGUDBZYy1Gc0hQS3lDS0lfYWhZRU83NFBQRVdnIiwiYWxnIjoiUlMyNTYifQ.eyJjb21wYW55X2lkIjoyMDAwMywiY2xpZW50X2FwcF9pZCI6InBhcGkiLCJwZXJzb25fdHlwZSI6IlNUQUZGIiwidXNlcl9uYW1lIjoidGVzdCthcGlAdGVzdC5jb20iLCJjbGllbnRfaW5pdF9pcCI6IjEwLjQyLjAuNDkiLCJpc3MiOiJodHRwczovL2xvc29sby1zc28ucm9naWkubmV0IiwidXNlcl9kaWdlc3QiOiI4YjllZWEzNzc3IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9TVEFGRiJdLCJjbGllbnRfaWQiOiJzb2xvLWFwaS1jbGllbnQtaWQiLCJhdWQiOiJzb2xvLXB1YmxpYy1hcGkiLCJ1c2VyX2lkIjoxNDk3LCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTc5NDI1NTMxMywiaWF0IjoxNzk0MjI1MzEzLCJqdGkiOiJjNDE0OTE0NS0yYWFjLTQ3ZjQtOTMwZS00ZGNjYTgyZWIyYzQifQ.UH9LLjH8NcMxCjU8gXJkRKj2CZpkOziFsXsklkQy-ud3MFIoUV-yh4TwsHsaIOMLLyYcSv9z_n4NMd3KzkTRW7LUMbaGul1UV3VvQEkGUQVA5piyHKMuyRtCEoR8Ro45vU9TO0ZDr_NWx366cQwJaV8_iieRDLIbqPjPbBOSPwnnF7-b6GLfbkcsz08G4RbGWIPt4b-uD0EIjb0O7svLlhwab3wnj2ndEQ6UGjGSjpZFspKuDXVZ9kvZtRg1mCVCZwofcRAT-FZCBOK8c1sCA0fB3nplM2GAJNXKDrWqxwuQ8swNazXhn3Y_lWxR7H0iadj2pD6rMcL6MUnAsADWCg",
  "scope" : "read",
  "token_type" : "Bearer",
  "expires_in" : 9999,
  "iat" : 1794225313,
  "jti" : "27150f19-2fb2-4ca9-8acc-b4e464ac4ec3"
}

POST /oauth/token

Parameter Description
grant_type The type of grant being presented in exchange for an access and refresh token: password (requires username and password) or refresh_token (requires the refresh_token parameter instead)
username Solo user login
password Solo user password
Header Description
Authorization Authorization header in the following format Basic credentials
credentials is a client_id:secret string encoded in base64 (standard http basic authorization).
client_id is a unique client identifier to access the public api.
secret is a unique client secret string to access the public api.

Response body

Path Type Description
access_token String Access token issued by the authorization server
token_type String Token type
refresh_token String Refresh token associated with the access token. Pass it as the refresh_token parameter with grant_type=refresh_token to get a new access token
expires_in Number Lifetime in seconds of the access token. For example, the value 3600 denotes that the access token will expire in one hour from the time the response was generated
scope String Space-separated scopes of the token
iat Number Time at which the token was issued, in seconds since the Unix epoch
jti String Unique identifier (JWT ID) of the access token

Solo-hosted login for external integrations

In addition to the OAuth 2.0 token methods described above, Solo supports a browser-based, Solo-hosted login flow for external applications. This flow is suitable for integrations that want to present a "Sign in with Solo" button, redirect the user to Solo for authentication, and receive an authorization code that can be exchanged for tokens.

Download sample project

A runnable sample project is available as a reference implementation. It demonstrates the hosted login redirect, callback handling, token exchange, refresh token handling, and local setup with .env.example.

Download: Solo-auth-sample.zip

1. Projects

Create virtual project

Create a virtual project in the global project with the given UUID. User group roles of the global project are copied to the new virtual project. The new virtual project contains no wells, grids, polygons or sticks (the log families of the global project are added automatically), add them with Add virtual project entities. Returns the UUID of the created virtual project

Request

$ curl 'https://solo.cloud/public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3/virtual' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Virtual project name",
  "description" : "Virtual project description"
}'
POST /public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3/virtual HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 86

{
  "name" : "Virtual project name",
  "description" : "Virtual project description"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3c4dc587eb7c08a861605cc84c2b1be6
Content-Type: application/json

{
  "uuid" : "239285ac-3348-4942-ae03-eca420b81257"
}

POST /public/api/v1/projects/{uuid}/virtual

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Virtual project name, required, up to 200 characters, a request without it or with a blank name is rejected with 400
description String Virtual project description, up to 255 characters

Response body

Path Type Description
uuid String Created virtual project UUID

Add virtual project entities

Add laterals, typewells, grids, polygons and sticks of the parent global project to the virtual project by virtual project UUID. Typewells linked to an added lateral are added too. UUIDs that are not found in the parent project are ignored, objects that are already in the virtual project stay as they are

Request

$ curl 'https://solo.cloud/public/api/v1/projects/virtual/239285ac-3348-4942-ae03-eca420b81257/entities' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "wells" : [ "3de1255e-e680-42ac-9152-e93e269ed459", "bbf49543-3573-46d1-825d-3226e359a0cd" ],
  "typewells" : [ "9a25149c-ffcf-4c4b-8bc1-11092e8476ee", "22028804-de4f-46cd-aeba-355ab10a3f78" ],
  "grids" : [ "f92a4b4f-0858-447e-8162-2c2409257f68" ],
  "polygons" : [ "7375210c-14d6-4a59-8fe0-f1b8fb8cdfde" ],
  "sticks" : [ "b7f4ee10-587f-426d-b6d8-20f50495dd77" ]
}'
POST /public/api/v1/projects/virtual/239285ac-3348-4942-ae03-eca420b81257/entities HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 370

{
  "wells" : [ "3de1255e-e680-42ac-9152-e93e269ed459", "bbf49543-3573-46d1-825d-3226e359a0cd" ],
  "typewells" : [ "9a25149c-ffcf-4c4b-8bc1-11092e8476ee", "22028804-de4f-46cd-aeba-355ab10a3f78" ],
  "grids" : [ "f92a4b4f-0858-447e-8162-2c2409257f68" ],
  "polygons" : [ "7375210c-14d6-4a59-8fe0-f1b8fb8cdfde" ],
  "sticks" : [ "b7f4ee10-587f-426d-b6d8-20f50495dd77" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b20deb0de8138f891cdaa2415ad2134e

POST /public/api/v1/projects/virtual/{uuid}/entities

Path parameter Description
uuid Virtual project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
wells Array Optional list of lateral UUIDs to add to the virtual project. Typewells linked to these laterals are added too
typewells Array Optional list of typewell UUIDs to add to the virtual project
grids Array Optional list of grid UUIDs to add to the virtual project
polygons Array Optional list of polygon UUIDs to add to the virtual project
sticks Array Optional list of stick UUIDs to add to the virtual project

Response body

Empty body

Get projects

Get a list of global projects of the company that the current user has access to with pagination, sorted by name. Virtual projects are returned by Get virtual projects. Available to company users only, support and machine accounts get 403

Request

$ curl 'https://solo.cloud/public/api/v1/projects?filter=pApi&offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/projects?filter=pApi&offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 661133eff8202aeddb7a943f550c00c0
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "f317fc53-eebe-46cd-9f6b-754902780a52",
    "name" : "Papi test project 1",
    "measure_unit" : "FOOT",
    "role" : "MANAGER",
    "accessed_on" : "2026-11-09T11:55:09Z",
    "modified_on" : "2026-11-09T11:55:09Z"
  }, {
    "uuid" : "228adef2-ff4f-4277-9d7f-fee0b8e8f964",
    "name" : "Papi test project 2",
    "measure_unit" : "METER",
    "role" : "MANAGER",
    "geo_crs" : {
      "code" : 2000,
      "authority" : "EPSG",
      "name" : "Anguilla 1957 / British West Indies Grid",
      "measure_unit" : "METER"
    },
    "accessed_on" : "2026-11-09T11:55:09Z",
    "modified_on" : "2026-11-09T11:55:09Z"
  }, {
    "uuid" : "563eda66-f4b0-44b9-96cd-44c85b0161d3",
    "name" : "Papi test project 3",
    "measure_unit" : "FOOT",
    "role" : "MANAGER",
    "geo_crs" : {
      "code" : 2270,
      "authority" : "EPSG",
      "name" : "NAD83 / Oregon South (ft)",
      "measure_unit" : "FOOT"
    },
    "accessed_on" : "2026-11-09T11:55:09Z",
    "modified_on" : "2026-11-09T11:55:09Z"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 3,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects

Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the projects whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Project UUID
content[].name String Project name
content[].measure_unit String Project measure unit: METER, FOOT or METER_FOOT (depths in feet, horizontal coordinates and distances in meters)
content[].role String Role of the current user in the project, for example VIEWER, INTERPRETER, POWER_INTERPRETER, DATA_MANAGER or MANAGER
content[].accessed_on String Date/time project last accessed at
content[].modified_on String Date/time project last modified at
content[].geo_crs Object Project coordinate reference system (CRS), absent if the project has no CRS
content[].geo_crs.code Varies CRS code
content[].geo_crs.authority Varies CRS authority
content[].geo_crs.name Varies CRS name
content[].geo_crs.measure_unit Varies CRS length unit: METER, MILLIMETER, FOOT, FOOT_US or INCH_US

Get virtual projects

Get a list of company virtual projects that the current user has access to with pagination, sorted by name. Virtual projects use a subset of data from a Global Project and have their own access roles defined in the SOLO Admin Panel. They can be easily managed for specific users and any changes made are updated across the database. Data added to a Virtual Project is also added to the corresponding Global Project. Available to company users only, support and machine accounts get 403

Request

$ curl 'https://solo.cloud/public/api/v1/projects/virtual?filter=pApi&offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/projects/virtual?filter=pApi&offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: aad79b3c696691c55d22a21f8873aec0
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "f9a7087b-a43b-47f6-a375-163162ebd0e7",
    "name" : "Virtual Papi test project 1",
    "measure_unit" : "FOOT",
    "role" : "MANAGER",
    "parent_uuid" : "f317fc53-eebe-46cd-9f6b-754902780a52",
    "parent_name" : "Papi test project 1",
    "virtual" : true,
    "modified_on" : "2026-11-09T11:55:09Z"
  }, {
    "uuid" : "5a616343-28b6-4723-8cc5-0e30a9c07fd8",
    "name" : "Virtual Papi test project 2",
    "measure_unit" : "METER",
    "role" : "MANAGER",
    "geo_crs" : {
      "code" : 2000,
      "authority" : "EPSG",
      "name" : "Anguilla 1957 / British West Indies Grid",
      "measure_unit" : "METER"
    },
    "parent_uuid" : "228adef2-ff4f-4277-9d7f-fee0b8e8f964",
    "parent_name" : "Papi test project 2",
    "virtual" : true,
    "modified_on" : "2026-11-09T11:55:09Z"
  }, {
    "uuid" : "ed134f02-380b-47ec-890b-fea8ddaf2256",
    "name" : "Virtual Papi test project 3",
    "measure_unit" : "FOOT",
    "role" : "MANAGER",
    "geo_crs" : {
      "code" : 2270,
      "authority" : "EPSG",
      "name" : "NAD83 / Oregon South (ft)",
      "measure_unit" : "FOOT"
    },
    "parent_uuid" : "563eda66-f4b0-44b9-96cd-44c85b0161d3",
    "parent_name" : "Papi test project 3",
    "virtual" : true,
    "modified_on" : "2026-11-09T11:55:09Z"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 3,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/virtual

Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the virtual projects whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Virtual project UUID
content[].name String Virtual project name
content[].measure_unit String Measure unit of the parent project: METER, FOOT or METER_FOOT (depths in feet, horizontal coordinates and distances in meters)
content[].role String Role of the current user in the virtual project, for example VIEWER, INTERPRETER, POWER_INTERPRETER, DATA_MANAGER or MANAGER
content[].accessed_on String Date/time the virtual project was last accessed at
content[].modified_on String Date/time the parent project was last modified at
content[].geo_crs Object Coordinate reference system (CRS) of the parent project, absent if the project has no CRS
content[].parent_uuid String UUID of the global project the virtual project belongs to
content[].parent_name String Name of the global project the virtual project belongs to
content[].virtual Boolean Always true for a virtual project
content[].geo_crs.code Varies CRS code
content[].geo_crs.authority Varies CRS authority
content[].geo_crs.name Varies CRS name
content[].geo_crs.measure_unit Varies CRS length unit: METER, MILLIMETER, FOOT, FOOT_US or INCH_US

Get project

Get a global or virtual project by UUID. For a virtual project the response also has the parent_uuid, parent_name and virtual fields described in Get virtual projects. Returns 403 if the project does not exist or is not accessible

Request

$ curl 'https://solo.cloud/public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 45705ae5edce1e5963acd1584a896f71
Content-Type: application/json

{
  "uuid" : "563eda66-f4b0-44b9-96cd-44c85b0161d3",
  "name" : "Papi test project 3",
  "measure_unit" : "FOOT",
  "role" : "MANAGER",
  "geo_crs" : {
    "code" : 2270,
    "authority" : "EPSG",
    "name" : "NAD83 / Oregon South (ft)",
    "measure_unit" : "FOOT"
  },
  "accessed_on" : "2026-11-09T11:55:09Z",
  "modified_on" : "2026-11-09T11:55:09Z"
}

GET /public/api/v1/projects/{uuid}

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Project UUID
name String Project name
measure_unit String Project measure unit: METER, FOOT or METER_FOOT (depths in feet, horizontal coordinates and distances in meters)
role String Role of the current user in the project, for example VIEWER, INTERPRETER, POWER_INTERPRETER, DATA_MANAGER or MANAGER
accessed_on String Date/time project last accessed at
modified_on String Date/time project last modified at
geo_crs Object Project coordinate reference system (CRS), absent if the project has no CRS
geo_crs.code Number CRS code
geo_crs.authority String CRS authority
geo_crs.name String CRS name
geo_crs.measure_unit String CRS length unit: METER, MILLIMETER, FOOT, FOOT_US or INCH_US

Get recently updated objects

Get laterals (WELL) and typewells (TYPEWELL) of a global or virtual project that were created, updated or deleted after modified_since. Other object types are not reported, and a well that was created and deleted within the interval is not reported at all. For a virtual project, adding a well to it is reported as CREATE and removing it as DELETE. If modified_since is not earlier than the last project modification, content is empty. Pass the returned modified_on as modified_since in the next request

Request

$ curl 'https://solo.cloud/public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3/changes' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "modified_since" : "2026-11-09T11:54:09.464Z"
}'
POST /public/api/v1/projects/563eda66-f4b0-44b9-96cd-44c85b0161d3/changes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 51

{
  "modified_since" : "2026-11-09T11:54:09.464Z"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2c9337e26d2383d60be594a83a0fb150
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "3de1255e-e680-42ac-9152-e93e269ed459",
    "type" : "WELL",
    "operation" : "CREATE"
  }, {
    "uuid" : "9a25149c-ffcf-4c4b-8bc1-11092e8476ee",
    "type" : "TYPEWELL",
    "operation" : "CREATE"
  } ],
  "modified_on" : "2026-11-09T11:55:09.904Z",
  "modified_at" : "2026-11-09T11:55:09.904+00:00"
}

POST /public/api/v1/projects/{uuid}/changes

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
modified_since String Return changes made after this date/time, ISO 8601, for example 2026-03-12T12:00:00.000Z

Response body

Path Type Description
content Array Content array
modified_on String Date/time the project was last modified at, with milliseconds. Pass it as modified_since in the next request to get only newer changes
modified_at String Deprecated, the same date/time as modified_on
content[].uuid String Lateral or typewell UUID
content[].type String Object type: WELL (lateral) or TYPEWELL
content[].operation String Change of the object since modified_since: CREATE, UPDATE or DELETE

Get project history

Get the change history of a global or virtual project with pagination, one item per revision, oldest first. All request body filters are optional and are combined, modified_since and modified_to are inclusive. Revisions made by service users are not returned

Request

$ curl 'https://solo.cloud/public/api/v1/projects/8703082f-d258-444e-896f-fe1a16b770e4/history?offset=0&limit=4' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "modified_since" : "2026-03-12T12:00:00.000+00:00",
  "modified_to" : "2026-03-12T13:00:00.000+00:00",
  "user_name" : "Bot Manager",
  "user_email" : "a.bortnikov+manager@rogii.com",
  "well_name" : "Typewell",
  "well_ids" : [ "755135f6-6634-49bb-ad1f-093bf4efcc9c" ],
  "sources" : [ "ANY" ]
}'
POST /public/api/v1/projects/8703082f-d258-444e-896f-fe1a16b770e4/history?offset=0&limit=4 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 300

{
  "modified_since" : "2026-03-12T12:00:00.000+00:00",
  "modified_to" : "2026-03-12T13:00:00.000+00:00",
  "user_name" : "Bot Manager",
  "user_email" : "a.bortnikov+manager@rogii.com",
  "well_name" : "Typewell",
  "well_ids" : [ "755135f6-6634-49bb-ad1f-093bf4efcc9c" ],
  "sources" : [ "ANY" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7403cb7037470b35
Content-Type: application/json

{
  "content" : [ {
    "modified_at" : "2026-03-12T12:00:04.441+00:00",
    "user_email" : "a.bortnikov+manager@rogii.com",
    "user_name" : "Bot Manager",
    "source" : "portal",
    "well_id" : "755135f6-6634-49bb-ad1f-093bf4efcc9c",
    "well_name" : "Typewell",
    "well_type" : "TYPEWELL",
    "changes" : [ {
      "operation" : "CREATE",
      "object_id" : "755135f6-6634-49bb-ad1f-093bf4efcc9c",
      "object_type" : "TYPEWELL",
      "object_name" : "Typewell"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000001",
      "object_type" : "WELLHEADER",
      "object_name" : "Name"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000002",
      "object_type" : "WELLHEADER",
      "object_name" : "API"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000004",
      "object_type" : "WELLHEADER",
      "object_name" : "Operator"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000007",
      "object_type" : "WELLHEADER",
      "object_name" : "KB"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000008",
      "object_type" : "WELLHEADER",
      "object_name" : "Azimuth VS"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000009",
      "object_type" : "WELLHEADER",
      "object_name" : "Convergence"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000012",
      "object_type" : "WELLHEADER",
      "object_name" : "X-srf"
    }, {
      "operation" : "CREATE",
      "object_id" : "00000000-0000-0000-0000-000000000013",
      "object_type" : "WELLHEADER",
      "object_name" : "Y-srf"
    } ]
  }, {
    "modified_at" : "2026-03-12T12:00:05.488+00:00",
    "user_email" : "a.bortnikov+manager@rogii.com",
    "user_name" : "Bot Manager",
    "source" : "portal",
    "well_id" : "755135f6-6634-49bb-ad1f-093bf4efcc9c",
    "well_name" : "Typewell",
    "well_type" : "TYPEWELL",
    "changes" : [ {
      "operation" : "CREATE",
      "object_id" : "489bce1c-333d-486d-b84d-89670505f9f3",
      "object_type" : "LOG",
      "object_name" : "Log"
    } ]
  }, {
    "modified_at" : "2026-03-12T12:00:05.634+00:00",
    "user_email" : "a.bortnikov+manager@rogii.com",
    "user_name" : "Bot Manager",
    "source" : "portal",
    "well_id" : "755135f6-6634-49bb-ad1f-093bf4efcc9c",
    "well_name" : "Typewell",
    "well_type" : "TYPEWELL",
    "changes" : [ {
      "operation" : "CREATE",
      "object_id" : "3bd00b21-c7d9-407e-83e9-347d50cef95d",
      "object_type" : "TOPSET",
      "object_name" : "Top Set"
    } ]
  }, {
    "modified_at" : "2026-03-12T12:00:05.982+00:00",
    "user_email" : "a.bortnikov+manager@rogii.com",
    "user_name" : "Bot Manager",
    "source" : "portal",
    "well_id" : "755135f6-6634-49bb-ad1f-093bf4efcc9c",
    "well_name" : "Typewell",
    "well_type" : "TYPEWELL",
    "changes" : [ {
      "operation" : "CREATE",
      "object_id" : "1b97e61f-f57e-4fa4-8df1-21ee3a1b0244",
      "object_type" : "MUDLOG",
      "object_name" : "Mud Log"
    } ]
  } ],
  "offset" : 0,
  "limit" : 4,
  "total" : 32,
  "last" : false,
  "first" : true
}

POST /public/api/v1/projects/{uuid}/history

Path parameter Description
uuid Project UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header
Body field Type Description
modified_since String Return revisions made at or after this date/time, ISO 8601 with a time zone offset
modified_to String Return revisions made at or before this date/time, ISO 8601 with a time zone offset
user_name String Filter by the name of the user who made the changes (full-text match)
user_email String Filter by the email of the user who made the changes (full-text match)
well_name String Filter by lateral or typewell name (full-text match)
well_ids Array Filter by lateral or typewell UUIDs
object_name String Filter by the name of a changed object (full-text match)
object_ids Array Filter by UUIDs of changed objects
sources Array Filter by client applications that made the changes. ANY or an empty list disables the filter. Allowed values: ACTIVITY_LOG, ALERTS, ANY, DATA_MANAGER, DRILLSPOT, DRILLSPOT_FEED, DRILLSPOT_SOLO_FEED, FEED_OUTPUT, FEED_SAAS_OUTPUT, FEED_WELLVIEW, LANDING, PAPI, PETREL, PYTHON_SDK, SAAS_STARSTEER, SOLOBOX, SOLO_CONNECT, SOLO_CONNECT_CLOUD, SOLO_FEED, STARFRAC, STARSTEER, SYSTEM_ROBOT, TLOG, WEB_ADMIN, WEB_FREE_VIEWER_NATIVE_ANDROID, WEB_FREE_VIEWER_NATIVE_IOS, WEB_PORTAL, WEB_SUPPORT_MANAGEMENT, WEB_VIEWER, WEB_VIEWER_MOBILE, WEB_VIEWER_NATIVE_ANDROID, WEB_VIEWER_NATIVE_IOS, WITSML, WITSML_SERVER, WS_RTM, WS_RTM_NATIVE_ANDROID, WS_RTM_NATIVE_IOS

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].modified_at String Date/time of the revision
content[].user_email String User email
content[].user_name String User name
content[].source String Identifier of the client application that made the changes, for example portal for WEB_PORTAL or papi for PAPI
content[].well_id String UUID of the lateral or typewell changed in the revision, absent if no well was changed
content[].well_name String Name of the lateral or typewell changed in the revision
content[].well_type String Type of the changed well: WELL (lateral) or TYPEWELL
content[].changes Array Objects changed in the revision
content[].changes[].operation String Operation performed on the object, for example CREATE, UPDATE, DELETE, LOCKED or UNLOCKED
content[].changes[].object_id String Object UUID
content[].changes[].object_type String Type of the changed object, for example WELL, TYPEWELL or LOG
content[].changes[].object_name String Object name

Delete virtual project

Delete virtual project by virtual project UUID. Only the virtual project is deleted, the objects of the global project are not affected

Request

$ curl 'https://solo.cloud/public/api/v1/projects/virtual/239285ac-3348-4942-ae03-eca420b81257' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/projects/virtual/239285ac-3348-4942-ae03-eca420b81257 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5912c0c969fd4391160932c9f7bd9964

DELETE /public/api/v1/projects/virtual/{uuid}

Path parameter Description
uuid Virtual project UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

2. Laterals

Create lateral

Create lateral by project UUID

Request

$ curl 'https://solo.cloud/public/api/v1/projects/eb90deb0-0f2c-467a-81f7-1cffc77a4a30/wells' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Lateral name",
  "operator" : "operator",
  "api" : "api",
  "convergence" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 45.0
  },
  "kb" : {
    "val" : 0.3
  },
  "tieintvd" : {
    "val" : 0.4
  },
  "tieinns" : {
    "val" : 0.5
  },
  "tieinew" : {
    "val" : 0.6
  },
  "xsrfreal" : {
    "val" : 100.0
  },
  "ysrfreal" : {
    "val" : 500.0
  }
}'
POST /public/api/v1/projects/eb90deb0-0f2c-467a-81f7-1cffc77a4a30/wells HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 377

{
  "name" : "Lateral name",
  "operator" : "operator",
  "api" : "api",
  "convergence" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 45.0
  },
  "kb" : {
    "val" : 0.3
  },
  "tieintvd" : {
    "val" : 0.4
  },
  "tieinns" : {
    "val" : 0.5
  },
  "tieinew" : {
    "val" : 0.6
  },
  "xsrfreal" : {
    "val" : 100.0
  },
  "ysrfreal" : {
    "val" : 500.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d85debbb249380fdef40c6ff8dcf84d2
Content-Type: application/json

{
  "uuid" : "e93c710b-1d36-4ffa-9701-1bca585f2279"
}

POST /public/api/v1/projects/{uuid}/wells

Path parameter Description
uuid Project UUID (a virtual project UUID is also accepted)
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Lateral name
operator String Operator name
api String API lateral number
convergence.val Number Grid convergence angle in degrees
azimuth.val Number Vertical section azimuth in degrees
kb.val Number Kelly bushing (KB) elevation above MSL in project units
tieintvd.val Number Tie-in point TVD in project units
tieinns.val Number Tie-in point NS in project units
tieinew.val Number Tie-in point EW in project units
xsrfreal.val Number X surface coordinate in project units
ysrfreal.val Number Y surface coordinate in project units

Response body

Path Type Description
uuid String Created lateral UUID

Get laterals by project

Get a list of laterals by project UUID with pagination, sorted by name. A virtual project UUID is also accepted, then only the laterals added to that virtual project are listed

Request

$ curl 'https://solo.cloud/public/api/v1/projects/eb90deb0-0f2c-467a-81f7-1cffc77a4a30/wells?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/eb90deb0-0f2c-467a-81f7-1cffc77a4a30/wells?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1fab678c9fbe3653fbd9bf27920431b3
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "dcf4253d-15d1-4c03-a934-e58e05e0b0d5",
    "name" : "Lateral one",
    "api" : "api lateral one",
    "flags" : {
      "has_logs" : false,
      "has_topsets" : false,
      "has_interpretations" : false,
      "has_nested_wells" : false,
      "has_mudlogs" : false,
      "has_target_lines" : false
    }
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/wells

Path parameter Description
uuid Project UUID (a virtual project UUID is also accepted)
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the laterals whose name or API contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Lateral UUID
content[].name String Lateral name
content[].api String API lateral number
content[].flags.has_logs Boolean true if the lateral has at least one log with data
content[].flags.has_topsets Boolean true if the lateral has at least one topset
content[].flags.has_interpretations Boolean true if the lateral has at least one interpretation that is neither private nor a service (AUTO) one
content[].flags.has_nested_wells Boolean true if the lateral has at least one nested well
content[].flags.has_mudlogs Boolean true if the lateral has at least one mudlog with data
content[].flags.has_target_lines Boolean true if the lateral has at least one target line

Get laterals by API filter

Search laterals by API number with pagination: returns the laterals whose api contains filter (case insensitive) from all company projects where the caller has a role other than NO_ACCESS, directly or through a virtual project, in lateral creation order. Available to company users only, support and machine accounts get 403

Request

$ curl 'https://solo.cloud/public/api/v1/wells/api-filtered?offset=0&limit=10&filter=lateral%20t' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/api-filtered?offset=0&limit=10&filter=lateral%20t HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0127b0157dceccf1050f8b8bc909ea21
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "6b5df727-cb2b-4012-87ea-4c9d97118cf4",
    "name" : "Lateral two",
    "api" : "api lateral two",
    "flags" : {
      "has_logs" : false,
      "has_topsets" : false,
      "has_interpretations" : false,
      "has_nested_wells" : false,
      "has_mudlogs" : false,
      "has_target_lines" : false
    },
    "project_uuid" : "eb90deb0-0f2c-467a-81f7-1cffc77a4a30",
    "project_role" : "MANAGER"
  }, {
    "uuid" : "bdc199cd-cb5e-4a70-bcbe-433ea0485b2d",
    "name" : "Lateral three",
    "api" : "api lateral three",
    "flags" : {
      "has_logs" : false,
      "has_topsets" : false,
      "has_interpretations" : false,
      "has_nested_wells" : false,
      "has_mudlogs" : false,
      "has_target_lines" : false
    },
    "project_uuid" : "eb90deb0-0f2c-467a-81f7-1cffc77a4a30",
    "project_role" : "MANAGER"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/api-filtered

Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Required. Returns only the laterals whose API contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Lateral UUID
content[].name String Lateral name
content[].api String API lateral number
content[].flags.has_logs Boolean true if the lateral has at least one log with data
content[].flags.has_topsets Boolean true if the lateral has at least one topset
content[].flags.has_interpretations Boolean true if the lateral has at least one interpretation that is neither private nor a service (AUTO) one
content[].flags.has_nested_wells Boolean true if the lateral has at least one nested well
content[].flags.has_mudlogs Boolean true if the lateral has at least one mudlog with data
content[].flags.has_target_lines Boolean true if the lateral has at least one target line
content[].project_uuid String UUID of the project the lateral belongs to, or of the virtual project when the caller has access to the lateral only through it
content[].project_role String Role of the caller in the project (or virtual project) given by project_uuid

Get lateral metadata

Get lateral metadata

Request

$ curl 'https://solo.cloud/public/api/v1/wells/bdc199cd-cb5e-4a70-bcbe-433ea0485b2d' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/bdc199cd-cb5e-4a70-bcbe-433ea0485b2d HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3f431dbabc9cb5a65a81e3233930d43e
Content-Type: application/json

{
  "uuid" : "bdc199cd-cb5e-4a70-bcbe-433ea0485b2d",
  "name" : "Lateral three",
  "operator" : "string",
  "api" : "api lateral three",
  "xsrf" : {
    "val" : 19.68503937007874
  },
  "ysrf" : {
    "val" : 32.808398950131235
  },
  "kb" : {
    "val" : 22.96587926509186
  },
  "convergence" : {
    "val" : 0.0
  },
  "azimuth" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 3.280839895013123
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

GET /public/api/v1/wells/{uuid}

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Lateral UUID
name String Lateral name
operator String Operator name
api String API lateral number
xsrf.val Number X surface coordinate in project units
ysrf.val Number Y surface coordinate in project units
kb.val Number Kelly bushing (KB) elevation above MSL in project units
azimuth.val Number Vertical section azimuth in degrees
convergence.val Number Grid convergence angle in degrees
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ew.val Number Tie-in point EW in project units
last_feed_stream_date String Timestamp of last update by Solo Feed

Get lateral ellipses

Get lateral ellipses data by lateral UUID. Returns 404 if no ellipses are stored for the lateral

Request

$ curl 'https://solo.cloud/public/api/v1/laterals/e284b18c-7090-41ec-b08c-b4fe66cc4490/ellipses' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/laterals/e284b18c-7090-41ec-b08c-b4fe66cc4490/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1c1fb059bf7e6a6618e3618b8f93c1ca
Content-Type: application/json

{
  "content" : [ {
    "index" : 10.0,
    "value" : {
      "nev" : [ 14.99, 98.23, 41.2, 67.78, 23.89, 12.31, 55.43, 11.23, 34.33 ],
      "messages" : [ ]
    }
  } ]
}

GET /public/api/v1/laterals/{lateralUuid}/ellipses

Path parameter Description
lateralUuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Ellipses points array sorted by index ascending
content[].index Number Measured Depth value of the point
content[].value.nev Array Ellipse attributes
content[].value.messages Array Comments

Get starred objects

Get starred objects by lateral UUID. A field is omitted when nothing of that type is starred or the starred object no longer exists

Request

$ curl 'https://solo.cloud/public/api/v1/wells/0ce0ff02-ec2a-4c2d-b0b1-3ea2fd291481/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/0ce0ff02-ec2a-4c2d-b0b1-3ea2fd291481/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ff4bd384317f0794d449efe2d2c09345
Content-Type: application/json

{
  "target_line" : "ca9ac13d-6115-4c0d-ab72-eefefb81801c",
  "nested_well" : "4b014c20-dbbf-4bef-aa3a-5821c40f3e6f",
  "interpretation" : "ae8173b1-644b-4b68-be20-7d70fd7e64ef",
  "topset" : "c01bd25e-3242-4626-9143-311f7b6ca1da"
}

GET /public/api/v1/wells/{uuid}/starred

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
target_line String Starred target line UUID, absent if none is starred
nested_well String Starred nested well UUID, absent if none is starred
interpretation String Starred interpretation UUID, absent if none is starred
topset String Starred topset UUID, absent if none is starred

Get linked typewells

Get a list of typewells linked to the lateral with pagination, in link creation order. Inactive links are not listed

Request

$ curl 'https://solo.cloud/public/api/v1/wells/a0884937-20b4-4192-88b1-ca9b2fcecdfc/linked?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/a0884937-20b4-4192-88b1-ca9b2fcecdfc/linked?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7a6aca70491c823df707bc071f9df09c
Content-Type: application/json

{
  "content" : [ {
    "shift" : {
      "val" : 1640.4199475065616
    },
    "typewell_id" : "576c6ee5-2419-4909-8047-a8029f748144"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/linked

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].shift.val Number Typewell shift in project units
content[].typewell_id String Typewell UUID

Get bit projection

Get bit projection by lateral UUID. Returns 406 if the lateral has no bit projection

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e1e90e8c-5ff1-47f2-857e-4091f4cbbc21/bitprojection' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/e1e90e8c-5ff1-47f2-857e-4091f4cbbc21/bitprojection HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e8f5a8741385b7a99c20eeed8dff8a6b
Content-Type: application/json

{
  "mode" : "CALCULATED",
  "sub_mode" : "DLS_TF",
  "distance_to_bit" : {
    "val" : 30.0
  },
  "dls" : {
    "val" : 9.499999999999998
  },
  "tool_face" : {
    "val" : 120.49999999999999
  },
  "continuous_inclination_log" : "00000000-0000-0000-0000-000000000000",
  "last_log_point_log" : "00000000-0000-0000-0000-000000000000"
}

GET /public/api/v1/wells/{uuid}/bitprojection

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
mode String Can be [OFF, CALCULATED, PREDEFINED, DRILLSPOT_MULTIPOINT], the last one cannot be set via this API
sub_mode String Can be [TREND, DLS_TF, CONT_INCL_LOG]
distance_to_bit.val Number Distance to bit in meters, not converted to project units, range [0; 100000]
dls.val Number Dogleg Severity value in degrees per 30 m for meter projects or per 100 ft for other projects (range [0; 60])
tool_face.val Number Tool face value in degrees (range [-180; 180])
continuous_inclination_log String Continuous inclination log UUID (00000000-0000-0000-0000-000000000000 if no log is selected)
last_log_point_log String UUID of the log the projection is based on (00000000-0000-0000-0000-000000000000 for the last survey)

Update lateral metadata

Update lateral metadata by UUID. name is required. Values are in project units, angles in degrees. Returns 403 if the lateral is locked or is a private lateral of another user

Request

$ curl 'https://solo.cloud/public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Lateral name",
  "api" : "api lateral",
  "operator" : "string",
  "xsrf" : {
    "val" : 60.5
  },
  "ysrf" : {
    "val" : 100.0
  },
  "kb" : {
    "val" : 70.0
  },
  "azimuth" : {
    "val" : 0.0
  },
  "convergence" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}'
PATCH /public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 379

{
  "name" : "Lateral name",
  "api" : "api lateral",
  "operator" : "string",
  "xsrf" : {
    "val" : 60.5
  },
  "ysrf" : {
    "val" : 100.0
  },
  "kb" : {
    "val" : 70.0
  },
  "azimuth" : {
    "val" : 0.0
  },
  "convergence" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 04a75c7dc01a6f66982bb48872a4bf06

PATCH /public/api/v1/wells/{uuid}

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Lateral name, required and not blank (at most 200 characters)
operator String Operator name (at most 200 characters)
api String API lateral number (at most 200 characters)
xsrf.val Number X surface coordinate in project units
ysrf.val Number Y surface coordinate in project units
kb.val Number Kelly bushing (KB) elevation above MSL in project units
azimuth.val Number Vertical section azimuth in degrees
convergence.val Number Grid convergence angle in degrees
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ew.val Number Tie-in point EW in project units

Response body

Empty body

Set starred objects

Set starred objects by lateral UUID. Omitted fields keep their current value, 00000000-0000-0000-0000-000000000000 resets a field. Every other UUID must belong to an object of this lateral, otherwise 406 is returned. A private lateral of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/wells/0ce0ff02-ec2a-4c2d-b0b1-3ea2fd291481/starred' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "targetline" : "ca9ac13d-6115-4c0d-ab72-eefefb81801c",
  "nestedwell" : "4b014c20-dbbf-4bef-aa3a-5821c40f3e6f",
  "interpretation" : "ae8173b1-644b-4b68-be20-7d70fd7e64ef",
  "topset" : "c01bd25e-3242-4626-9143-311f7b6ca1da"
}'
PUT /public/api/v1/wells/0ce0ff02-ec2a-4c2d-b0b1-3ea2fd291481/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 230

{
  "targetline" : "ca9ac13d-6115-4c0d-ab72-eefefb81801c",
  "nestedwell" : "4b014c20-dbbf-4bef-aa3a-5821c40f3e6f",
  "interpretation" : "ae8173b1-644b-4b68-be20-7d70fd7e64ef",
  "topset" : "c01bd25e-3242-4626-9143-311f7b6ca1da"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4973c3f7266a67f26a6ab44b2cea86ba

PUT /public/api/v1/wells/{uuid}/starred

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
targetline String UUID of a target line of this lateral to set starred (use "00000000-0000-0000-0000-000000000000" to reset, omit to keep the current one)
nestedwell String UUID of a nested well of this lateral to set starred (use "00000000-0000-0000-0000-000000000000" to reset, omit to keep the current one)
interpretation String UUID of an interpretation of this lateral to set starred (use "00000000-0000-0000-0000-000000000000" to reset, omit to keep the current one)
topset String UUID of a topset of this lateral to set starred (use "00000000-0000-0000-0000-000000000000" to reset, omit to keep the current one)

Response body

Empty body

Set bit projection

Set bit projection by lateral UUID. mode is required, a request without it is rejected with 400. For OFF and PREDEFINED modes send mode only. CALCULATED mode requires sub_mode and distance_to_bit plus the fields of the sub-mode: last_log_point_log for TREND, last_log_point_log, dls and tool_face for DLS_TF, continuous_inclination_log for CONT_INCL_LOG. Fields of other sub-modes must not be sent, a log UUID must be a log of this lateral. Parameters that are not sent keep their stored values. Requests that break these rules are rejected with 406

Request

$ curl 'https://solo.cloud/public/api/v1/wells/363c8e28-d4e2-4433-933d-b1c862d32e52/bitprojection' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "mode" : "CALCULATED",
  "sub_mode" : "DLS_TF",
  "distance_to_bit" : {
    "val" : 30.0
  },
  "dls" : {
    "val" : 9.5
  },
  "tool_face" : {
    "val" : 120.5
  },
  "last_log_point_log" : "00000000-0000-0000-0000-000000000000"
}'
PUT /public/api/v1/wells/363c8e28-d4e2-4433-933d-b1c862d32e52/bitprojection HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 237

{
  "mode" : "CALCULATED",
  "sub_mode" : "DLS_TF",
  "distance_to_bit" : {
    "val" : 30.0
  },
  "dls" : {
    "val" : 9.5
  },
  "tool_face" : {
    "val" : 120.5
  },
  "last_log_point_log" : "00000000-0000-0000-0000-000000000000"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3c2310acb89be9a335870d34cdf73be1

PUT /public/api/v1/wells/{uuid}/bitprojection

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
mode String Can be [OFF, CALCULATED, PREDEFINED]. For OFF and PREDEFINED no other field is allowed
sub_mode String Can be [TREND, DLS_TF, CONT_INCL_LOG], required for CALCULATED mode
distance_to_bit.val Number Distance to bit in meters, not converted to project units, range [0; 100000], required for CALCULATED mode
dls.val Number Dogleg Severity value in degrees per 30 m for meter projects or per 100 ft for other projects (range [0; 60]), required for DLS_TF sub-mode and not allowed for other sub-modes
tool_face.val Number Tool face value in degrees (range [-180; 180]), required for DLS_TF sub-mode and not allowed for other sub-modes
continuous_inclination_log String UUID of a log of this lateral or 00000000-0000-0000-0000-000000000000 for no log, required for CONT_INCL_LOG sub-mode and not allowed for other sub-modes
last_log_point_log String UUID of a log of this lateral or 00000000-0000-0000-0000-000000000000 for the last survey, required for TREND and DLS_TF sub-modes and not allowed for CONT_INCL_LOG

Response body

Empty body

Link a typewell to the lateral by lateral UUID, or update the shift of an existing link. shift is in project depth units, an omitted shift is stored as undefined. A deactivated link is activated again. typewell_id is required, a request without it or with a typewell of another project is rejected with 400. Returns 404 if the typewell does not exist and 409 if the link cannot be saved, for example because of a concurrent change. Linked typewells are returned by Get linked typewells. Requires the permission to create well references in the project

Request

$ curl 'https://solo.cloud/public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/linked' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "typewell_id" : "4a7ad015-c7b6-4978-b57a-82982945637d",
  "shift" : {
    "val" : 500.0
  }
}'
POST /public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/linked HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 97

{
  "typewell_id" : "4a7ad015-c7b6-4978-b57a-82982945637d",
  "shift" : {
    "val" : 500.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 65202d0fe99ca2192e384db36559bec8

POST /public/api/v1/wells/{uuid}/linked

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
typewell_id String UUID of the typewell to link to the lateral
shift Object Typewell shift. If present val is set, otherwise undefined is true. An omitted shift is stored as undefined
shift.val Number Typewell shift value in project units
shift.undefined Boolean Set to true if the shift is undefined

Response body

Empty body

Lock lateral

Lock lateral by UUID. Metadata and trajectory updates and the deletion of a locked lateral are rejected with 403 until it is unlocked. A private lateral cannot be locked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/wells/499c7c54-d4ac-4c05-827c-466631862887/lock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/wells/499c7c54-d4ac-4c05-827c-466631862887/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6c5710c5e4fbf87f08bea53bd5cea7a0

PATCH /public/api/v1/wells/{uuid}/lock

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Unlock lateral

Unlock lateral by UUID. A private lateral cannot be unlocked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/wells/2fe1918b-b159-4a71-8d15-e430bb9b0a9c/unlock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/wells/2fe1918b-b159-4a71-8d15-e430bb9b0a9c/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 400a9315da324ec6b65d584d38708ba1

PATCH /public/api/v1/wells/{uuid}/unlock

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete lateral

Delete lateral by UUID. The lateral is also removed from virtual projects and well lists. Returns 403 if the lateral is locked or is a private lateral of another user

Request

$ curl 'https://solo.cloud/public/api/v1/wells/d170ca41-aa7b-4f64-a758-ab02e82da7b3' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/wells/d170ca41-aa7b-4f64-a758-ab02e82da7b3 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6fa20a1834ea8aee85387436019fd8d4

DELETE /public/api/v1/wells/{uuid}

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

3. Interpretations

Create interpretation

Create an empty public interpretation owned by the caller by lateral UUID. Add segments with Add interpretation segment or Write interpretation segments in bulk

Request

$ curl 'https://solo.cloud/public/api/v1/wells/a65c4083-6ac4-42d1-ab37-6530d006caee/interpretations' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Interpretation name"
}'
POST /public/api/v1/wells/a65c4083-6ac4-42d1-ab37-6530d006caee/interpretations HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 36

{
  "name" : "Interpretation name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 964df93078b9ed5fc38c02960b95a3e4
Content-Type: application/json

{
  "uuid" : "95d1f8f1-70c4-4431-9781-4bdad98f419d"
}

POST /public/api/v1/wells/{uuid}/interpretations

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Interpretation name, required, not blank, at most 255 characters

Response body

Path Type Description
uuid String Created interpretation UUID

Write interpretation segments in bulk

Create or overwrite one interpretation of the lateral with all its segments in a single request. Either the whole interpretation is written or nothing is, a refused request leaves the target as it was.

The target is addressed by uuid, or by name when uuid is omitted. An existing target gets its segments fully replaced and the response carries created: false. When no interpretation with such name exists, a new one is created as a copy of source_interpretation_uuid (horizons included, owner is the caller, privacy is taken from private) and the response carries created: true; source_interpretation_uuid is required in this case. Sending the same request twice therefore yields one interpretation written twice, so a retry is safe. Concurrent writes to one lateral are not supported, upload laterals in parallel but write each of them sequentially.

The interpretation name must start with the prefix configured on the server (AI_ by default), so a bulk write never overwrites an interpretation made by a user. It is at most 255 characters long, carries no control characters and neither starts nor ends with whitespace. A lateral holding several interpretations with the requested name is rejected with 400 listing the UUIDs of those the caller may address (other users' private ones are only counted), address the target by uuid instead. A locked target and a private interpretation of another user (as the target or as the source) are rejected with 403. The call requires both CREATE and UPDATE permissions on interpretations.

Segment rules:

One request carries at most 10000 segments (a server setting), a larger request is rejected with 400 naming the limit. Segment values are in project units, the same as the other segment endpoints. Note that a segment is described by its start MD and the vertical shifts at its ends, not by the md, dip and throw of Add interpretation segment.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/4a60313f-ebaf-4ce0-b129-1c840e8b219c/interpretations/bulk' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "AI_interpretation 1",
  "source_interpretation_uuid" : "de2de931-0bb5-4c80-8df7-f8c73de2ddf7",
  "private" : false,
  "segments" : [ {
    "start_md" : 1000.0,
    "start_shift" : 0.0,
    "end_shift" : 2.5
  }, {
    "start_md" : 1500.0,
    "start_shift" : 2.5,
    "end_shift" : 4.0
  } ]
}'
PUT /public/api/v1/wells/4a60313f-ebaf-4ce0-b129-1c840e8b219c/interpretations/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 307

{
  "name" : "AI_interpretation 1",
  "source_interpretation_uuid" : "de2de931-0bb5-4c80-8df7-f8c73de2ddf7",
  "private" : false,
  "segments" : [ {
    "start_md" : 1000.0,
    "start_shift" : 0.0,
    "end_shift" : 2.5
  }, {
    "start_md" : 1500.0,
    "start_shift" : 2.5,
    "end_shift" : 4.0
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 82fe52fd3d3e5bb4fec1ab66334edc5d
Content-Type: application/json

{
  "uuid" : "10c4fb2e-920f-4d38-998e-50713d6704bc",
  "name" : "AI_interpretation 1",
  "segments_written" : 2,
  "created" : true
}

PUT /public/api/v1/wells/{uuid}/interpretations/bulk

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Target interpretation name, at most 255 characters, no control characters, no whitespace at either end. Must start with the configured prefix (AI_ by default), otherwise the request is rejected with 400
uuid String Target interpretation UUID. When omitted, the target is looked up by name among the lateral's interpretations; when present, name must match the interpretation name
source_interpretation_uuid String Interpretation of the same lateral the target is copied from, horizons included. Required only when the target does not exist yet and has to be created, ignored when the target exists
private Boolean Privacy of the created interpretation (false by default). Ignored when an existing interpretation is overwritten
segments Array Segments to write, at least one, in strictly increasing start_md order, the existing segments of the target are fully replaced
segments[].start_md Number Segment start measured depth in project units, within the trajectory MD range
segments[].start_shift Number Vertical shift at the segment start in project units. Used for the first segment and for a fault boundary only, otherwise the previous segment's end_shift is taken
segments[].end_shift Number Vertical shift at the segment end in project units

Response body

Path Type Description
uuid String Target interpretation UUID
name String Target interpretation name
segments_written Number Number of segments the interpretation holds after the write
created Boolean true if the interpretation was created, false if an existing interpretation was overwritten

Add interpretation segment

Add segment by interpretation UUID. The segment is set by md, dip and throw, its vertical section is calculated by the server. A locked interpretation and a private interpretation of another user are rejected with 403. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/0a5ccd9f-1a04-4a7c-b3f7-44ea499ad0c9/segments?horizontal_scale=MD' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "uuid" : "0ae55dfb-04a9-4ef0-ada7-43cff5085270",
  "md" : {
    "val" : 1500.0
  },
  "dip" : {
    "val" : 30.0
  },
  "throw" : {
    "val" : 15.0
  }
}'
POST /public/api/v1/interpretations/0a5ccd9f-1a04-4a7c-b3f7-44ea499ad0c9/segments?horizontal_scale=MD HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158

{
  "uuid" : "0ae55dfb-04a9-4ef0-ada7-43cff5085270",
  "md" : {
    "val" : 1500.0
  },
  "dip" : {
    "val" : 30.0
  },
  "throw" : {
    "val" : 15.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d3bfb60ef9c28e40d333c976de223f91

POST /public/api/v1/interpretations/{uuid}/segments

Path parameter Description
uuid Interpretation UUID
Parameter Description
horizontal_scale Horizontal scale for segment calculations. Available values: MD, THL, VS
Header Description
Authorization OAuth2 authorization header
Body field Type Description
uuid String Segment UUID. On add it is ignored and the server assigns the UUID of the new segment. On modification it selects the segment to change, an unknown UUID is rejected with 400
md.val Number Segment start measured depth in project units
dip.val Number Dip value in degrees
throw.val Number Throw value in project units

Response body

Empty body

Get interpretations by lateral

Get a list of interpretations by lateral UUID with pagination, sorted by name

The list carries the public and locked interpretations of the lateral, and the private ones belonging to the caller - somebody else's private interpretation is not listed. Service (AUTO) interpretations are not listed either. Clients that identify themselves by User-Agent as SoloConnect before 4.3.0, SoloConnectCloud before 1.3.0 or PythonSDK before 0.4.0 (default server settings) get only interpretations in the old (v1) format.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/a65c4083-6ac4-42d1-ab37-6530d006caee/interpretations?filter=test&offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/a65c4083-6ac4-42d1-ab37-6530d006caee/interpretations?filter=test&offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 19a2cf954e463aff3433ec83013e5d1f
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "dce71f36-471c-4310-9c48-73b020da53d4",
    "name" : "test interpretation 1",
    "format" : {
      "extension_grid_uuid" : "00000000-0000-0000-0000-000000000000",
      "reverse_extension" : false,
      "auto_typewell_shift" : true
    },
    "mode" : "PUBLIC"
  }, {
    "uuid" : "576b485e-be59-44f6-bc07-a90778a0ebe8",
    "name" : "test interpretation 2",
    "format" : {
      "extension_grid_uuid" : "00000000-0000-0000-0000-000000000000",
      "reverse_extension" : false,
      "auto_typewell_shift" : true
    },
    "mode" : "PUBLIC"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/interpretations

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the interpretations whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Interpretation name
content[].uuid String Interpretation UUID
content[].format.extension_grid_uuid String Extension grid UUID, 00000000-0000-0000-0000-000000000000 when not set
content[].format.reverse_extension Boolean If true, the interpretation extension is reversed, false when not set
content[].format.auto_typewell_shift Boolean StarSteer "Auto typewell shift" setting of the Geosteering mode, true unless it was turned off. If true, tops and horizons with the same name always match in the TVT scale
content[].mode String PUBLIC, PRIVATE or LOCKED. A PRIVATE interpretation is listed only for its owner

Get segments by interpretation

Get a list of segments by interpretation UUID. A private interpretation of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/9cd388d2-55b2-4581-bd31-5b62946ff807/segments?horizontal_scale=MD' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/9cd388d2-55b2-4581-bd31-5b62946ff807/segments?horizontal_scale=MD HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b372c3f68b2d966b5131fe5f5a33804a
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "48521251-057d-4780-9e70-e7f099346cdd",
    "md" : {
      "val" : 0.0
    },
    "vs" : {
      "val" : 3.280839895013123
    },
    "dip" : {
      "val" : 97.19791814183668
    },
    "dip_equal_thickness" : false,
    "throw_equal_thickness" : true,
    "throw" : {
      "val" : 0.0
    }
  }, {
    "uuid" : "3353ed58-b2b9-4ee0-984b-9cd3c8e21029",
    "md" : {
      "val" : 328.0839895013123
    },
    "vs" : {
      "val" : -0.615877064815856
    },
    "dip" : {
      "val" : 90.00000000000594
    },
    "dip_equal_thickness" : true,
    "throw_equal_thickness" : false,
    "throw" : {
      "val" : 0.49212598425196846
    }
  }, {
    "uuid" : "4444e83b-d0ea-4760-b62d-599bd5b62639",
    "md" : {
      "val" : 1500.0000000000005
    },
    "vs" : {
      "val" : -24.350204919093997
    },
    "dip" : {
      "undefined" : true
    },
    "dip_equal_thickness" : false,
    "throw_equal_thickness" : false,
    "throw" : {
      "undefined" : true
    }
  } ]
}

GET /public/api/v1/interpretations/{uuid}/segments

Path parameter Description
uuid Interpretation UUID
Parameter Description
horizontal_scale Horizontal scale for segment calculations. Available values: MD, THL, VS
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String Segment UUID
content[].md.val Number Segment start measured depth in project units
content[].vs.val Number Vertical section at the segment start in project units
content[].dip.val Number Dip value in degrees
content[].dip.undefined Boolean If true, dip value is undefined
content[].dip_equal_thickness Boolean If true, dip is calculated with equal thickness
content[].throw.val Number Throw value in project units
content[].throw.undefined Boolean If true, throw value is undefined
content[].throw_equal_thickness Boolean If true, throw is calculated with equal thickness

Get faults by interpretation

Get the faults of an interpretation by interpretation UUID in MD order. A fault is a segment start StarSteer marks as a fault boundary: a bulk write marks one where a segment does not continue the previous one, adding or modifying a segment so that its throw changes (a new segment starts with throw 0) marks its start and the next segment start. A segment keeps its fault name after its fault is removed and is then not listed. uuid is the fault's own, segment_uuid addresses its segment. md and throw are calculated as in Get segments by interpretation. throw is the step of the horizons at the fault, the segment's start shift minus the previous segment's end shift: positive when they lie deeper past the fault in MD order. If they step differently it is the step most of them share and throw_equal_thickness is false. On the first segment, which has no previous one, throw is its start shift and throw_equal_thickness is true. format.line_width is a display width, not a length. A private interpretation of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/5d616d4c-f59d-474d-8488-5c4ea8aef5c0/faults' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/5d616d4c-f59d-474d-8488-5c4ea8aef5c0/faults HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: da18a844a14cba76a6e367c2bd035064
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "bb6941a8-f98d-4c2c-b2c1-a786a9b006fa",
    "name" : "Fault1",
    "segment_uuid" : "5c335556-e559-48da-a44a-743abcceb3af",
    "md" : {
      "val" : 1500.0000000000002
    },
    "throw_equal_thickness" : true,
    "format" : {
      "line_color" : "#ff000000",
      "line_width" : 1.0,
      "line_type" : "SOLID",
      "label_location" : "UP"
    },
    "throw" : {
      "val" : 3.5
    }
  } ]
}

GET /public/api/v1/interpretations/{uuid}/faults

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Faults of the interpretation in MD order
content[].uuid String Fault UUID, the fault's own and not the segment UUID
content[].name String Fault name
content[].segment_uuid String UUID of the segment whose start boundary is the fault
content[].md.val Number Fault measured depth in project units
content[].throw.val Number Fault throw in project units, positive when the horizons past the fault lie deeper
content[].throw.undefined Boolean If true, the throw is undefined: a shift it is calculated from is not defined
content[].throw_equal_thickness Boolean true when every horizon steps by the throw, false when it is the step most of them share, always true on the first segment
content[].format.line_color String Line color, #AARRGGBB, #ff000000 when not set
content[].format.line_width Number Line display width from 0 to 10, 1 unless both the width and the line type are set
content[].format.line_type String Line type: NONE, SOLID, DASH, DOT, DASH_DOT or DASH_DOT_DOT, SOLID unless both the width and the line type are set
content[].format.label_location String Fault label location: UP or DOWN, UP when not set

Get starred objects

Get starred objects by interpretation UUID

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/b2782eb5-df25-4448-abf9-48fc9bafaf1b/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/b2782eb5-df25-4448-abf9-48fc9bafaf1b/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 79423bd2ef99a422b956ed728bf0f166
Content-Type: application/json

{
  "top" : "2461fb2c-d50c-4dc2-ba51-c574637f740d",
  "center" : "9457e96c-705b-4890-90a0-ff0c53b64b9c",
  "bottom" : "e77a6462-806d-4a41-96b4-8dc9bf7f9c13"
}

GET /public/api/v1/interpretations/{uuid}/starred

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
top String Starred top horizon UUID, absent when not set or when the horizon no longer exists
center String Starred center horizon UUID, absent when not set or when the horizon no longer exists
bottom String Starred bottom horizon UUID, absent when not set or when the horizon no longer exists

Set starred objects

Set the starred top, center and bottom horizons by interpretation UUID. All three values are required and replace the current ones, 00000000-0000-0000-0000-000000000000 resets a position. A private interpretation of another user is rejected with 403. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/b2782eb5-df25-4448-abf9-48fc9bafaf1b/starred' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "top" : "2461fb2c-d50c-4dc2-ba51-c574637f740d",
  "center" : "9457e96c-705b-4890-90a0-ff0c53b64b9c",
  "bottom" : "e77a6462-806d-4a41-96b4-8dc9bf7f9c13"
}'
PUT /public/api/v1/interpretations/b2782eb5-df25-4448-abf9-48fc9bafaf1b/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158

{
  "top" : "2461fb2c-d50c-4dc2-ba51-c574637f740d",
  "center" : "9457e96c-705b-4890-90a0-ff0c53b64b9c",
  "bottom" : "e77a6462-806d-4a41-96b4-8dc9bf7f9c13"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8275db6556726bf9e74cf6e62c979b8b

PUT /public/api/v1/interpretations/{uuid}/starred

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
top String Required. UUID of a horizon of this interpretation to be set as starred top, 00000000-0000-0000-0000-000000000000 resets it. Any other UUID is rejected with 400
center String Required. UUID of a horizon of this interpretation to be set as starred center, 00000000-0000-0000-0000-000000000000 resets it. Any other UUID is rejected with 400
bottom String Required. UUID of a horizon of this interpretation to be set as starred bottom, 00000000-0000-0000-0000-000000000000 resets it. Any other UUID is rejected with 400

Response body

Empty body

Get auto-typewells by interpretation

Get a list of auto-typewells by interpretation UUID, as StarSteer marks them. A typewell linked to the lateral is listed when, in one of its topsets, the last top by MD lies deeper than the first one in TVD of the typewell by the TVD span from the shallowest to the deepest horizon, within 0.001 in project units. Private typewells, topsets and tops of another user are skipped. The list is empty when the interpretation has fewer than two horizons with a TVD

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/693f7eb1-b37e-4b91-bcf8-17879e60fbf7/autotypewells' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/693f7eb1-b37e-4b91-bcf8-17879e60fbf7/autotypewells HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: afbe5f12dd2522893581a2ca1bcc675c
Content-Type: application/json

{
  "content" : [ {
    "auto_typewell_uuid" : "9cae76f5-2568-4742-af7d-9be92847a5fa"
  } ]
}

GET /public/api/v1/interpretations/{uuid}/autotypewells

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].auto_typewell_uuid String Auto-typewell UUID

Set auto typewell shift

Turn the StarSteer "Auto typewell shift" setting of the Geosteering mode on or off for an interpretation. The current value is returned as format.auto_typewell_shift by "Get interpretations by lateral". Other interpretation settings are kept. A locked interpretation and a private interpretation of another user are rejected with 403. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/a05dd7b5-7ae3-46f1-9ede-889f27cfb927/autotypewellshift' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "enabled" : false
}'
PUT /public/api/v1/interpretations/a05dd7b5-7ae3-46f1-9ede-889f27cfb927/autotypewellshift HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 23

{
  "enabled" : false
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d7e21498bcafa2f0625df9ce388d6590

PUT /public/api/v1/interpretations/{uuid}/autotypewellshift

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
enabled Boolean Required. true turns the StarSteer "Auto typewell shift" setting on for the interpretation, false turns it off, other values (including the strings "true" and "false") are rejected with 400. The current value is returned as format.auto_typewell_shift by the interpretations list

Response body

Empty body

Modify interpretation segment

Modify segment by interpretation UUID. The segment is selected by uuid in the request body, an unknown segment UUID is rejected with 400. md, dip and throw are set, the vertical section is calculated by the server. A locked interpretation and a private interpretation of another user are rejected with 403. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/9934c843-3528-40cb-993a-3800ed2598c4/segments?horizontal_scale=MD' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "uuid" : "b3d6d32a-f090-46b6-aa5d-1bdfee99e54c",
  "md" : {
    "val" : 1500.0
  },
  "dip" : {
    "val" : 60.0
  },
  "throw" : {
    "val" : 25.0
  }
}'
PATCH /public/api/v1/interpretations/9934c843-3528-40cb-993a-3800ed2598c4/segments?horizontal_scale=MD HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158

{
  "uuid" : "b3d6d32a-f090-46b6-aa5d-1bdfee99e54c",
  "md" : {
    "val" : 1500.0
  },
  "dip" : {
    "val" : 60.0
  },
  "throw" : {
    "val" : 25.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: adbc0ca8dd003250c3678aaecaae9eea

PATCH /public/api/v1/interpretations/{uuid}/segments

Path parameter Description
uuid Interpretation UUID
Parameter Description
horizontal_scale Horizontal scale for segment calculations. Available values: MD, THL, VS
Header Description
Authorization OAuth2 authorization header
Body field Type Description
uuid String Segment UUID. On add it is ignored and the server assigns the UUID of the new segment. On modification it selects the segment to change, an unknown UUID is rejected with 400
md.val Number Segment start measured depth in project units
dip.val Number Dip value in degrees
throw.val Number Throw value in project units

Response body

Empty body

Delete interpretation segment

Delete segment by interpretation UUID. A locked interpretation and a private interpretation of another user are rejected with 403. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/b5f8ee94-ed1d-4c81-917a-608713e26e41/segments/6bfb208f-b734-4b4a-b3d6-7288801a11f8' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/interpretations/b5f8ee94-ed1d-4c81-917a-608713e26e41/segments/6bfb208f-b734-4b4a-b3d6-7288801a11f8 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 74f8d700d52cb4f1ba5e0128fa228e87

DELETE /public/api/v1/interpretations/{uuid}/segments/{segmentUuid}

Path parameter Description
uuid Interpretation UUID
segmentUuid Segment UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Lock interpretation

Lock interpretation by UUID. Segment, auto typewell shift, bulk and earth model writes of a locked interpretation are rejected with 403 until it is unlocked. A private interpretation cannot be locked (403). A service (AUTO) interpretation cannot be locked (400). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/0738baf9-0d4f-4db0-bced-1a656e5d2e7d/lock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/interpretations/0738baf9-0d4f-4db0-bced-1a656e5d2e7d/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ce90773d37626c67bdd9bc35083581d1

PATCH /public/api/v1/interpretations/{uuid}/lock

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Unlock interpretation

Unlock interpretation by UUID, the interpretation becomes public. A private interpretation cannot be unlocked (403). A service (AUTO) interpretation cannot be unlocked (400). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/de81f7a1-5739-44e1-9543-f1b1c5d07c31/unlock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/interpretations/de81f7a1-5739-44e1-9543-f1b1c5d07c31/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 442c4a9e5f12d93e9e57dbad9baee355

PATCH /public/api/v1/interpretations/{uuid}/unlock

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

4. Horizons

Get horizons metadata

Get a list of horizons by interpretation UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/37f2ada9-116d-44f8-ab66-06c66dc47753/horizons?filter=tEst&offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/37f2ada9-116d-44f8-ab66-06c66dc47753/horizons?filter=tEst&offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d0a48f26256a38b3208e240520159ca8
Content-Type: application/json

{
  "content" : [ {
    "name" : "Test horizon 1",
    "uuid" : "fc812878-e06e-4bb6-b5be-e84cf7280520"
  }, {
    "name" : "Test horizon 2",
    "uuid" : "c7a23c45-fd08-431b-85c8-0bb77a91fb62"
  }, {
    "name" : "Test horizon 3",
    "uuid" : "f04faa7a-4c9a-4032-b95d-3bce367cacbb"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 3,
  "first" : true,
  "last" : true
}

GET /public/api/v1/interpretations/{uuid}/horizons

Path parameter Description
uuid Interpretation UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the horizons whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Horizon name
content[].uuid String Horizon UUID

Get horizons data by interpretation

Get calculated horizons data by interpretation UUID. Points are returned along the lateral from the start of the first interpretation segment to the trajectory end: at that start, at every MD multiple of spacing in between and at the trajectory end, each with the well position and the TVDSS of every horizon of the interpretation

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/e454b7ea-89c0-42d9-9fef-86fbf47e2fd8/horizons/data/spacing/5000' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/interpretations/e454b7ea-89c0-42d9-9fef-86fbf47e2fd8/horizons/data/spacing/5000 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bfc1fd450007fe895005aecc2dd68533
Content-Type: application/json

{
  "content" : [ {
    "azimuth" : {
      "val" : 71.543
    },
    "horizons" : [ {
      "name" : "!new Hor",
      "tvdss" : {
        "val" : 22.965879265091868
      },
      "uuid" : "ea06ef02-cc59-4487-96cc-b108c98424af"
    }, {
      "name" : "Horizon1",
      "tvdss" : {
        "val" : -3257.8740157480324
      },
      "uuid" : "ef060a03-4f81-4444-8634-e4484cc18f01"
    } ],
    "inclination" : {
      "val" : 0
    },
    "kb" : {
      "val" : 22.965879265091868
    },
    "md" : {
      "val" : 0
    },
    "tvt" : {
      "val" : 0
    },
    "vs_azim" : {
      "azimuth" : {
        "val" : 0
      },
      "vs" : {
        "val" : 3.280839895013124
      }
    },
    "well_name" : "Lateral",
    "x" : {
      "val" : 19.68503937007874
    },
    "y" : {
      "val" : 36.08923884514436
    },
    "z" : {
      "val" : 22.965879265091868
    }
  }, {
    "azimuth" : {
      "val" : 149.253
    },
    "horizons" : [ {
      "name" : "!new Hor",
      "tvdss" : {
        "val" : 22.965879265091868
      },
      "uuid" : "ea06ef02-cc59-4487-96cc-b108c98424af"
    }, {
      "name" : "Horizon1",
      "tvdss" : {
        "val" : -3257.8740157480324
      },
      "uuid" : "ef060a03-4f81-4444-8634-e4484cc18f01"
    } ],
    "inclination" : {
      "val" : 1.33
    },
    "kb" : {
      "val" : 22.965879265091868
    },
    "md" : {
      "val" : 3280.839895013124
    },
    "tvt" : {
      "val" : 3280.0196063852154
    },
    "vs_azim" : {
      "azimuth" : {
        "val" : 0
      },
      "vs" : {
        "val" : -60.07861128428071
      }
    },
    "well_name" : "Lateral",
    "x" : {
      "val" : 53.715600823725445
    },
    "y" : {
      "val" : -27.270212334149477
    },
    "z" : {
      "val" : -3257.0537271201238
    }
  } ]
}

GET /public/api/v1/interpretations/{uuid}/horizons/data/spacing/{spacing}

Path parameter Description
uuid Interpretation UUID
spacing MD step of the returned points in project units (points are placed at MD multiples of it), an integer in [1;100000], other values are rejected with 400
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content[].azimuth.val Number Well azimuth (degrees)
content[].inclination.val Number Well inclination (degrees)
content[].kb.val Number KB (project units)
content[].md.val Number MD (project units)
content[].tvt.val Number TVT (project units)
content[].well_name String Well name
content[].x.val Number X (project units)
content[].y.val Number Y (project units)
content[].z.val Number Z (project units)
content[].vs_azim.azimuth.val Number Vertical section azimuth of the lateral (degrees)
content[].vs_azim.vs.val Number VS (project units)
content[].horizons[].name String Horizon name
content[].horizons[].tvdss.val Number TVDSS (project units)
content[].horizons[].uuid String Horizon UUID

Get horizons data by lateral

Get calculated horizons data by lateral UUID, one interpretation per page: offset selects the interpretation among those Get interpretations by lateral returns (sorted by name, the caller's own private interpretations included, the same User-Agent rule applied), interpretation names it and content carries its points as in Get horizons data by interpretation

Request

$ curl 'https://solo.cloud/public/api/v1/wells/825095de-cdfb-4c78-88ad-5dd06026fa41/horizons/data/spacing/5000?offset=0' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/825095de-cdfb-4c78-88ad-5dd06026fa41/horizons/data/spacing/5000?offset=0 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ae939da1fa5835204e6ea287ae209282
Content-Type: application/json

{
  "content" : [ {
    "azimuth" : {
      "val" : 71.543
    },
    "horizons" : [ {
      "name" : "!new Hor",
      "tvdss" : {
        "val" : 22.965879265091868
      },
      "uuid" : "ea06ef02-cc59-4487-96cc-b108c98424af"
    }, {
      "name" : "Horizon1",
      "tvdss" : {
        "val" : -3257.8740157480324
      },
      "uuid" : "ef060a03-4f81-4444-8634-e4484cc18f01"
    } ],
    "inclination" : {
      "val" : 0
    },
    "kb" : {
      "val" : 22.965879265091868
    },
    "md" : {
      "val" : 0
    },
    "tvt" : {
      "val" : 0
    },
    "vs_azim" : {
      "azimuth" : {
        "val" : 0
      },
      "vs" : {
        "val" : 3.280839895013124
      }
    },
    "well_name" : "Lateral",
    "x" : {
      "val" : 19.68503937007874
    },
    "y" : {
      "val" : 36.08923884514436
    },
    "z" : {
      "val" : 22.965879265091868
    }
  }, {
    "azimuth" : {
      "val" : 149.253
    },
    "horizons" : [ {
      "name" : "!new Hor",
      "tvdss" : {
        "val" : 22.965879265091868
      },
      "uuid" : "ea06ef02-cc59-4487-96cc-b108c98424af"
    }, {
      "name" : "Horizon1",
      "tvdss" : {
        "val" : -3257.8740157480324
      },
      "uuid" : "ef060a03-4f81-4444-8634-e4484cc18f01"
    } ],
    "inclination" : {
      "val" : 1.33
    },
    "kb" : {
      "val" : 22.965879265091868
    },
    "md" : {
      "val" : 3280.839895013124
    },
    "tvt" : {
      "val" : 3280.0196063852154
    },
    "vs_azim" : {
      "azimuth" : {
        "val" : 0
      },
      "vs" : {
        "val" : -60.07861128428071
      }
    },
    "well_name" : "Lateral",
    "x" : {
      "val" : 53.715600823725445
    },
    "y" : {
      "val" : -27.270212334149477
    },
    "z" : {
      "val" : -3257.0537271201238
    }
  } ],
  "interpretation" : {
    "name" : "Interpretation",
    "uuid" : "e454b7ea-89c0-42d9-9fef-86fbf47e2fd8"
  },
  "offset" : 0,
  "limit" : 1,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/horizons/data/spacing/{spacing}

Path parameter Description
uuid Lateral UUID
spacing MD step of the returned points in project units (points are placed at MD multiples of it), an integer in [1;100000], other values are rejected with 400
Parameter Description
offset Index of the interpretation to calculate the horizons for, in [0;total - 1], over the interpretations Get interpretations by lateral returns, sorted by name. An index beyond the last interpretation returns an empty content and no interpretation
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Calculated points of the selected interpretation
offset Number Index of the selected interpretation, as requested. An index beyond the last interpretation returns an empty content and no interpretation
limit Number Always 1
total Number Number of interpretations
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].azimuth.val Number Well azimuth (degrees)
content[].inclination.val Number Well inclination (degrees)
content[].kb.val Number KB (project units)
content[].md.val Number MD (project units)
content[].tvt.val Number TVT (project units)
content[].well_name String Well name
content[].x.val Number X (project units)
content[].y.val Number Y (project units)
content[].z.val Number Z (project units)
content[].vs_azim.azimuth.val Number Vertical section azimuth of the lateral (degrees)
content[].vs_azim.vs.val Number VS (project units)
content[].horizons[].name String Horizon name
content[].horizons[].tvdss.val Number TVDSS (project units)
content[].horizons[].uuid String Horizon UUID
interpretation.name String Interpretation name
interpretation.uuid String Interpretation UUID

5. Nested wells

Create nested well

Create nested well. Another term for a Nested well is a well plan. It's often referred to as a 'well plan object' in StarSteer and Solo

Request

$ curl 'https://solo.cloud/public/api/v1/wells/8db96a01-e5a9-4e5a-90e3-cd12b3547ea6/nestedwells' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Nested well name",
  "operator" : "operator",
  "api" : "api",
  "xsrf" : {
    "val" : 0.1
  },
  "ysrf" : {
    "val" : 0.2
  },
  "kb" : {
    "val" : 0.3
  },
  "tie_in_tvd" : {
    "val" : 0.4
  },
  "tie_in_ns" : {
    "val" : 0.5
  },
  "tie_in_ew" : {
    "val" : 0.6
  }
}'
POST /public/api/v1/wells/8db96a01-e5a9-4e5a-90e3-cd12b3547ea6/nestedwells HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 295

{
  "name" : "Nested well name",
  "operator" : "operator",
  "api" : "api",
  "xsrf" : {
    "val" : 0.1
  },
  "ysrf" : {
    "val" : 0.2
  },
  "kb" : {
    "val" : 0.3
  },
  "tie_in_tvd" : {
    "val" : 0.4
  },
  "tie_in_ns" : {
    "val" : 0.5
  },
  "tie_in_ew" : {
    "val" : 0.6
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3251539ea2cc689032a3f6ea6106bf1e
Content-Type: application/json

{
  "uuid" : "652f6d33-c527-4ddd-a979-fc847982fadb"
}

POST /public/api/v1/wells/{uuid}/nestedwells

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Nested well name
operator String Operator name
api String API nested well number
xsrf.val Number X surface coordinate in project units
ysrf.val Number Y surface coordinate in project units
kb.val Number Kelly bushing (KB) elevation above MSL in project units
tie_in_ew.val Number Tie-in point EW in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_tvd.val Number Tie-in point TVD in project units

Response body

Path Type Description
uuid String Created nested well UUID

Get nested wells by lateral

Get a list of nested wells by lateral UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e5f8169d-4f7a-4b52-a969-2fa7a01e6a2e/nestedwells?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e5f8169d-4f7a-4b52-a969-2fa7a01e6a2e/nestedwells?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b647b0eb7896667f1532adb52f902228
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "50479d8d-6105-4719-8be9-2522bf7dd277",
    "name" : "Nested well one",
    "api" : "api nested well",
    "flags" : {
      "has_topsets" : false
    }
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/nestedwells

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the nested wells whose name or API contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Nested well UUID
content[].name String Nested well name
content[].api String API nested well number
content[].flags.has_topsets Boolean Flag indicating the presence of topsets

Get nested well metadata

Get nested well metadata by UUID. Values except the corridor ones are in project units. xsrf, ysrf and kb that are not set for the nested well (as parent) are returned from its lateral

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/293839d9-777b-4732-9594-c4cb711c6dff' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/nestedwells/293839d9-777b-4732-9594-c4cb711c6dff HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5b1074f3c65bbf4ec449c71689591fa7
Content-Type: application/json

{
  "name" : "Nested well one",
  "operator" : "string",
  "api" : "api nested well",
  "xsrf" : {
    "val" : 6.0
  },
  "ysrf" : {
    "val" : 10.0
  },
  "kb" : {
    "val" : 22.96587926509186
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 3.280839895013123
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

GET /public/api/v1/nestedwells/{uuid}

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
name String Nested well name
operator String Operator name
api String API nested well number
xsrf.val Number X surface coordinate in project units. If it is not set for the nested well, the lateral value is returned
ysrf.val Number Y surface coordinate in project units. If it is not set for the nested well, the lateral value is returned
kb.val Number Kelly bushing (KB) elevation above MSL in project units. If it is not set for the nested well, the lateral value is returned
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ew.val Number Tie-in point EW in project units
corridor_top.val Number Well plan corridor top value as stored in the well plan properties, not converted to project units
corridor_base.val Number Well plan corridor base value as stored in the well plan properties, not converted to project units
corridor_left.val Number Well plan corridor left value as stored in the well plan properties, not converted to project units
corridor_right.val Number Well plan corridor right value as stored in the well plan properties, not converted to project units

Get nested well ellipses

Get nested well ellipses data by nested well UUID. Returns 404 if no ellipses are stored for the nested well

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/fda72ddb-5018-4f96-8c16-3a34a50f9f66/ellipses' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/fda72ddb-5018-4f96-8c16-3a34a50f9f66/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 75be4bea7a89a9a11ae0f56a39e9254b
Content-Type: application/json

{
  "content" : [ {
    "index" : 10.0,
    "value" : {
      "nev" : [ 14.99, 98.23, 41.2, 67.78, 23.89, 12.31, 55.43, 11.23, 34.33 ],
      "messages" : [ ]
    }
  } ]
}

GET /public/api/v1/nestedwells/{nestedWellUuid}/ellipses

Path parameter Description
nestedWellUuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Ellipses points array sorted by index ascending
content[].index Number Measured Depth value of the point
content[].value.nev Array Ellipse attributes
content[].value.messages Array Comments

Get starred topset

Get starred topset by nested well UUID

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/0b6785ad-f7d4-486d-bd8c-1a083da7846e/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/nestedwells/0b6785ad-f7d4-486d-bd8c-1a083da7846e/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6ca6088e1d6dcb4b083259dde1a277bd
Content-Type: application/json

{
  "topset" : "2e05885e-b029-4cf9-8c08-aaacf57dd7ff"
}

GET /public/api/v1/nestedwells/{uuid}/starred

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
topset String Starred topset UUID. Absent when no topset is starred or the starred topset was deleted

Update nested well metadata

Update nested well metadata by UUID. Fields that are not sent keep their current values. Values are in project units. Returns 403 if the nested well is locked or is a private nested well of another user

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/2b595b95-06d4-436b-b88b-337b2d157dbf' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Nested well new name",
  "api" : "api nested well",
  "operator" : "string",
  "xsrf" : {
    "val" : 6.0
  },
  "ysrf" : {
    "val" : 10.0
  },
  "kb" : {
    "val" : 7.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}'
PATCH /public/api/v1/nestedwells/2b595b95-06d4-436b-b88b-337b2d157dbf HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 310

{
  "name" : "Nested well new name",
  "api" : "api nested well",
  "operator" : "string",
  "xsrf" : {
    "val" : 6.0
  },
  "ysrf" : {
    "val" : 10.0
  },
  "kb" : {
    "val" : 7.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: eb906cf07bf4c6061501241b0f9be47d

PATCH /public/api/v1/nestedwells/{uuid}

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Nested well name, up to 200 characters, must not be blank if sent
operator String Operator name, up to 200 characters
api String API nested well number, up to 200 characters
xsrf.val Number X surface coordinate in project units
xsrf.undefined Boolean If true then X surface coordinate will be set as parent (the lateral value is returned)
ysrf.val Number Y surface coordinate in project units
ysrf.undefined Boolean If true then Y surface coordinate will be set as parent (the lateral value is returned)
kb.val Number Kelly bushing (KB) elevation above MSL in project units
kb.undefined Boolean If true then KB will be set as parent (the lateral value is returned)
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_tvd.undefined Boolean If true then tie in TVD will be set undefined
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ns.undefined Boolean If true then tie in NS will be set undefined
tie_in_ew.val Number Tie-in point EW in project units
tie_in_ew.undefined Boolean If true then tie in EW will be set undefined

Response body

Empty body

Set starred topset

Set starred topset by nested well UUID. The topset must belong to the nested well, the zero UUID 00000000-0000-0000-0000-000000000000 resets the starred topset. Any other UUID is rejected with 406. A private nested well of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/f388788c-ae60-4304-8e7d-0ee0dbced495/starred' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "topset" : "80f96985-b873-4a73-a582-f233b3809d40"
}'
PUT /public/api/v1/nestedwells/f388788c-ae60-4304-8e7d-0ee0dbced495/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55

{
  "topset" : "80f96985-b873-4a73-a582-f233b3809d40"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7a0287a6066053d9be86fa95f68c5de6

PUT /public/api/v1/nestedwells/{uuid}/starred

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
topset String UUID of a topset of this nested well to set starred (use "00000000-0000-0000-0000-000000000000" to reset). Any other UUID is rejected with 406

Response body

Empty body

Lock nested well

Lock nested well by UUID. The metadata and trajectory of a locked nested well cannot be updated and the nested well cannot be deleted (403) until it is unlocked. A private nested well cannot be locked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/adaa916f-a51c-4ed3-8621-1e22fdf274bc/lock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/nestedwells/adaa916f-a51c-4ed3-8621-1e22fdf274bc/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d34c738a49918c01060bc63ef8f162dc

PATCH /public/api/v1/nestedwells/{uuid}/lock

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Unlock nested well

Unlock nested well by UUID. A private nested well cannot be unlocked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/c98a2d9d-8d39-4cb2-a307-f20109dabc19/unlock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/nestedwells/c98a2d9d-8d39-4cb2-a307-f20109dabc19/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e842930c7aa389ad4e5afffd47997522

PATCH /public/api/v1/nestedwells/{uuid}/unlock

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete nested well

Delete nested well by UUID. Returns 403 if the nested well is locked or is a private nested well of another user

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/3194ce01-6eeb-4e87-8888-9384e463edf5' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/nestedwells/3194ce01-6eeb-4e87-8888-9384e463edf5 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c9b4526d251070e604e56b2fa179f082

DELETE /public/api/v1/nestedwells/{uuid}

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

6. Typewells

Create typewell

Create typewell by project UUID

Request

$ curl 'https://solo.cloud/public/api/v1/projects/d99efe9b-9286-4151-831e-4ebe78172963/typewells' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Typewell name",
  "operator" : "operator",
  "api" : "api",
  "convergence" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 45.0
  },
  "kb" : {
    "val" : 0.3
  },
  "tieintvd" : {
    "val" : 0.4
  },
  "tieinns" : {
    "val" : 0.5
  },
  "tieinew" : {
    "val" : 0.6
  },
  "xsrfreal" : {
    "val" : 100.0
  },
  "ysrfreal" : {
    "val" : 500.0
  }
}'
POST /public/api/v1/projects/d99efe9b-9286-4151-831e-4ebe78172963/typewells HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 378

{
  "name" : "Typewell name",
  "operator" : "operator",
  "api" : "api",
  "convergence" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 45.0
  },
  "kb" : {
    "val" : 0.3
  },
  "tieintvd" : {
    "val" : 0.4
  },
  "tieinns" : {
    "val" : 0.5
  },
  "tieinew" : {
    "val" : 0.6
  },
  "xsrfreal" : {
    "val" : 100.0
  },
  "ysrfreal" : {
    "val" : 500.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b37a7b62e3f27979a4a0f01551f94331
Content-Type: application/json

{
  "uuid" : "835bbcfb-66c2-466a-bb4a-6862929242b5"
}

POST /public/api/v1/projects/{uuid}/typewells

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Typewell name
operator String Operator name
api String API typewell number
convergence.val Number Grid convergence angle in degrees
azimuth.val Number Vertical section azimuth in degrees
kb.val Number Kelly bushing (KB) elevation above MSL in project units
tieintvd.val Number Tie-in point TVD in project units
tieinns.val Number Tie-in point NS in project units
tieinew.val Number Tie-in point EW in project units
xsrfreal.val Number X surface coordinate in project units
ysrfreal.val Number Y surface coordinate in project units

Response body

Path Type Description
uuid String Created typewell UUID

Get typewells by project

Get a list of typewells by project UUID with pagination, sorted by name. A virtual project UUID is also accepted, then only the typewells added to that virtual project are listed

Request

$ curl 'https://solo.cloud/public/api/v1/projects/d99efe9b-9286-4151-831e-4ebe78172963/typewells?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/d99efe9b-9286-4151-831e-4ebe78172963/typewells?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b624d0e750901ee76f345b5469beb25f
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "adef3745-2e28-4c69-8e2f-82ca8b994da0",
    "name" : "Typewell one",
    "api" : "api typewell one",
    "flags" : {
      "has_logs" : false,
      "has_topsets" : false,
      "has_mudlogs" : false
    }
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/typewells

Path parameter Description
uuid Project UUID (a virtual project UUID is also accepted)
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the typewells whose name or API contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Typewell UUID
content[].name String Typewell name
content[].api String API typewell number
content[].flags.has_logs Boolean Flag indicating the presence of logs with data (logs without data are not counted)
content[].flags.has_topsets Boolean Flag indicating the presence of topsets
content[].flags.has_mudlogs Boolean Flag indicating the presence of mudlogs with data (mudlogs without data are not counted)

Get typewell metadata

Get typewell metadata by UUID. Values are in project units, convergence is in degrees

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5b24d7488a2233a81ba69f27867b5bca
Content-Type: application/json

{
  "uuid" : "9db8364b-de4c-4b75-83d4-3d94c8bad9c7",
  "name" : "Typewell",
  "operator" : "string",
  "api" : "string",
  "xsrf" : {
    "val" : 19.68503937007874
  },
  "ysrf" : {
    "val" : 32.808398950131235
  },
  "kb" : {
    "val" : 22.96587926509186
  },
  "convergence" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 3.280839895013123
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

GET /public/api/v1/typewells/{uuid}

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Typewell UUID
name String Typewell name
operator String Operator name
api String API typewell number
xsrf.val Number X surface coordinate in project units
ysrf.val Number Y surface coordinate in project units
kb.val Number Kelly bushing (KB) elevation above MSL in project units
convergence.val Number Grid convergence angle in degrees
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ew.val Number Tie-in point EW in project units

Get typewell ellipses

Get typewell ellipses data by typewell UUID. Returns 404 if no ellipses are stored for the typewell

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/029683bb-cdc8-43b3-9963-ff90fdbd1b79/ellipses' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/029683bb-cdc8-43b3-9963-ff90fdbd1b79/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 92e32f5f0ca9654909e3c41c411187d4
Content-Type: application/json

{
  "content" : [ {
    "index" : 10.0,
    "value" : {
      "nev" : [ 14.99, 98.23, 41.2, 67.78, 23.89, 12.31, 55.43, 11.23, 34.33 ],
      "messages" : [ ]
    }
  } ]
}

GET /public/api/v1/typewells/{typewellUuid}/ellipses

Path parameter Description
typewellUuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Ellipses points array sorted by index ascending
content[].index Number Measured Depth value of the point
content[].value.nev Array Ellipse attributes
content[].value.messages Array Comments

Get starred topset

Get starred topset by typewell UUID

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 75ba5977c6bee4fc096fcb5ad7b9a0ee
Content-Type: application/json

{
  "topset" : "6d00ea73-e987-4672-9bb4-67129ac2ea05"
}

GET /public/api/v1/typewells/{uuid}/starred

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
topset String Starred topset UUID. Absent when no topset is starred or the starred topset was deleted

Get linked laterals

Get laterals linked to the typewell by typewell UUID with pagination. Only active links are returned, in the order the links were created. shift is in project units

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/f76c6eff-fe40-4f9f-8cf0-0e83cc2d5f02/linked?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/typewells/f76c6eff-fe40-4f9f-8cf0-0e83cc2d5f02/linked?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b5adaa51b6cc643bbe9a417ead833922
Content-Type: application/json

{
  "content" : [ {
    "shift" : {
      "val" : 1640.4199475065616
    },
    "lateral_id" : "897a9d4b-4676-4fea-b01c-613d345e150c"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/linked

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].shift.val Number Typewell shift for the linked lateral in project units
content[].lateral_id String Linked lateral UUID

Update typewell metadata

Update typewell metadata by UUID. Fields that are not sent keep their current values. Values are in project units, convergence is in degrees. Returns 403 if the typewell is locked or is a private typewell of another user

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Typewell one",
  "api" : "api typewell",
  "operator" : "string",
  "xsrf" : {
    "val" : 6.0
  },
  "ysrf" : {
    "val" : 10.0
  },
  "kb" : {
    "val" : 7.0
  },
  "convergence" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}'
PATCH /public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 340

{
  "name" : "Typewell one",
  "api" : "api typewell",
  "operator" : "string",
  "xsrf" : {
    "val" : 6.0
  },
  "ysrf" : {
    "val" : 10.0
  },
  "kb" : {
    "val" : 7.0
  },
  "convergence" : {
    "val" : 0.0
  },
  "tie_in_tvd" : {
    "val" : 0.0
  },
  "tie_in_ns" : {
    "val" : 1.0
  },
  "tie_in_ew" : {
    "val" : 0.0
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 75f0fe73f6b04d1b20a852309e933a8c

PATCH /public/api/v1/typewells/{uuid}

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Typewell name, up to 200 characters, must not be blank if sent
operator String Operator name, up to 200 characters
api String API typewell number, up to 200 characters
xsrf.val Number X surface coordinate in project units
ysrf.val Number Y surface coordinate in project units
kb.val Number Kelly bushing (KB) elevation above MSL in project units
convergence.val Number Grid convergence angle in degrees
tie_in_tvd.val Number Tie-in point TVD in project units
tie_in_ns.val Number Tie-in point NS in project units
tie_in_ew.val Number Tie-in point EW in project units

Response body

Empty body

Set starred topset

Set starred topset by typewell UUID. The topset must belong to the typewell, the zero UUID 00000000-0000-0000-0000-000000000000 resets the starred topset. Any other UUID is rejected with 406. A private typewell of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7/starred' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "topset" : "6d00ea73-e987-4672-9bb4-67129ac2ea05"
}'
PUT /public/api/v1/typewells/9db8364b-de4c-4b75-83d4-3d94c8bad9c7/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55

{
  "topset" : "6d00ea73-e987-4672-9bb4-67129ac2ea05"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 76f66d08b5232256b6ed25f69e7f8bc9

PUT /public/api/v1/typewells/{uuid}/starred

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
topset String UUID of a topset of this typewell to set starred (use "00000000-0000-0000-0000-000000000000" to reset). Any other UUID is rejected with 406

Response body

Empty body

Lock typewell

Lock typewell by UUID. The metadata and trajectory of a locked typewell cannot be updated and the typewell cannot be deleted (403) until it is unlocked. A private typewell cannot be locked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/fc748d8d-8d01-4234-adb0-f603c0da0684/lock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/typewells/fc748d8d-8d01-4234-adb0-f603c0da0684/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c235b3264c7f69c7eb8f065d87eac8bd

PATCH /public/api/v1/typewells/{uuid}/lock

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Unlock typewell

Unlock typewell by UUID. A private typewell cannot be unlocked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/d47dbefb-93d5-4653-bfa1-78b5a20d9951/unlock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/typewells/d47dbefb-93d5-4653-bfa1-78b5a20d9951/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: cd5c6bd680a6c3496ecc8bb46ff7e1fa

PATCH /public/api/v1/typewells/{uuid}/unlock

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete typewell

Delete typewell by UUID. The links of laterals to the typewell are deactivated, the typewell is also removed from virtual projects and well lists. Returns 403 if the typewell is locked or is a private typewell of another user

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/7b72d794-243d-4501-a3ee-b47cb2495ef4' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/typewells/7b72d794-243d-4501-a3ee-b47cb2495ef4 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e9d7d181bd586c13ccd3d49db22e5860

DELETE /public/api/v1/typewells/{uuid}

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

7. Topsets

Create lateral topset

Create topset by lateral UUID

Request

$ curl 'https://solo.cloud/public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset name"
}'
POST /public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 28

{
  "name" : "Topset name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 819b2a690236ae269a8e51d44a08347c
Content-Type: application/json

{
  "uuid" : "14a10661-3cbe-4fcc-964a-1cb2100421d8"
}

POST /public/api/v1/wells/{uuid}/topsets

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters)

Response body

Path Type Description
uuid String Created topset UUID

Create typewell topset

Create topset by typewell UUID

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset name"
}'
POST /public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 28

{
  "name" : "Topset name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2ce6be0976480fd58478b1c943740a2a
Content-Type: application/json

{
  "uuid" : "ccb78645-a9d4-4256-8475-374990dc7500"
}

POST /public/api/v1/typewells/{uuid}/topsets

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters)

Response body

Path Type Description
uuid String Created topset UUID

Create nested well topset

Create topset by nested well UUID

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset name"
}'
POST /public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 28

{
  "name" : "Topset name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b3324fdad92b47770ee116288ffac45f
Content-Type: application/json

{
  "uuid" : "6cbcff3e-10a5-4ad6-b6d6-6887e250b2c9"
}

POST /public/api/v1/nestedwells/{uuid}/topsets

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters)

Response body

Path Type Description
uuid String Created topset UUID

Create lateral topset with tops

Create a topset together with its tops by lateral UUID in one request. Each top takes the same fields as in Create top, invalid attribute values are rejected with 400. md is in project units and must be in [0;100000] range, otherwise the request is rejected with 406. An undefined md is stored as 0. The response holds the UUIDs of the created topset and tops, top_uuids is not guaranteed to follow the order of the request

Request

$ curl 'https://solo.cloud/public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets/bulk' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}'
POST /public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 417

{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: cfedcc13f3d8fc48786dc5ce927d1d7b
Content-Type: application/json

{
  "topset_uuid" : "7233ef33-3a89-4f0d-bbea-d2d8025a742b",
  "top_uuids" : [ "88fb1853-fbc3-4c1e-b225-6731f62f1e8a", "b64477a1-d02d-47b7-856b-412239ab9602" ]
}

POST /public/api/v1/wells/{uuid}/topsets/bulk

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters, required)
tops Array Tops to create in the topset, at least one
tops[].name String Top name (up to 1000 characters, required)
tops[].md Object Measured depth (required). If present val is set, otherwise undefined is true
tops[].md.val Number Measured depth value in project units, must be in [0;100000] range, otherwise 406 is returned
tops[].md.undefined Boolean Set to true if MD is undefined, MD is then stored as 0
tops[].dip Object Dip. If present val is set, otherwise undefined is true
tops[].dip.val Number Dip value in degrees, must be in [0;90] range, otherwise 400 is returned
tops[].dip.undefined Boolean Set to true if dip is undefined
tops[].azimuth Object Azimuth. If present val is set, otherwise undefined is true
tops[].azimuth.val Number Azimuth value in degrees, must be in [0;360) range, otherwise 400 is returned
tops[].azimuth.undefined Boolean Set to true if azimuth is undefined
tops[].dip_classification String Dip classification, must be null or one of: bedding, thin_bed, fault, fracture_open, fracture_healed, fracture_induced, otherwise 400 is returned
tops[].confidence Object Confidence. If present val is set, otherwise undefined is true
tops[].confidence.val Number Confidence value, must be in [0;1] range, otherwise 400 is returned
tops[].confidence.undefined Boolean Set to true if confidence is undefined
tops[].source String Top source, must be null or one of: manual, ai, otherwise 400 is returned
tops[].model_info String Model info

Response body

Path Type Description
topset_uuid String Created topset UUID
top_uuids Array UUIDs of the created tops

Create typewell topset with tops

Create a topset together with its tops by typewell UUID in one request. Each top takes the same fields as in Create top, invalid attribute values are rejected with 400. md is in project units and must be in [0;100000] range, otherwise the request is rejected with 406. An undefined md is stored as 0. The response holds the UUIDs of the created topset and tops, top_uuids is not guaranteed to follow the order of the request

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets/bulk' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}'
POST /public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 417

{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9450a8e06e86f2c4d06e35666373378d
Content-Type: application/json

{
  "topset_uuid" : "3c3e5cdf-7647-4fc9-8010-987eb09f353b",
  "top_uuids" : [ "e028e912-51e3-4ef1-a5d8-e8d1a2f5d84f", "dcc105be-3fb3-4d65-9560-4ed16678846d" ]
}

POST /public/api/v1/typewells/{uuid}/topsets/bulk

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters, required)
tops Array Tops to create in the topset, at least one
tops[].name String Top name (up to 1000 characters, required)
tops[].md Object Measured depth (required). If present val is set, otherwise undefined is true
tops[].md.val Number Measured depth value in project units, must be in [0;100000] range, otherwise 406 is returned
tops[].md.undefined Boolean Set to true if MD is undefined, MD is then stored as 0
tops[].dip Object Dip. If present val is set, otherwise undefined is true
tops[].dip.val Number Dip value in degrees, must be in [0;90] range, otherwise 400 is returned
tops[].dip.undefined Boolean Set to true if dip is undefined
tops[].azimuth Object Azimuth. If present val is set, otherwise undefined is true
tops[].azimuth.val Number Azimuth value in degrees, must be in [0;360) range, otherwise 400 is returned
tops[].azimuth.undefined Boolean Set to true if azimuth is undefined
tops[].dip_classification String Dip classification, must be null or one of: bedding, thin_bed, fault, fracture_open, fracture_healed, fracture_induced, otherwise 400 is returned
tops[].confidence Object Confidence. If present val is set, otherwise undefined is true
tops[].confidence.val Number Confidence value, must be in [0;1] range, otherwise 400 is returned
tops[].confidence.undefined Boolean Set to true if confidence is undefined
tops[].source String Top source, must be null or one of: manual, ai, otherwise 400 is returned
tops[].model_info String Model info

Response body

Path Type Description
topset_uuid String Created topset UUID
top_uuids Array UUIDs of the created tops

Create nested well topset with tops

Create a topset together with its tops by nested well UUID in one request. Each top takes the same fields as in Create top, invalid attribute values are rejected with 400. md is in project units and must be in [0;100000] range, otherwise the request is rejected with 406. An undefined md is stored as 0. The response holds the UUIDs of the created topset and tops, top_uuids is not guaranteed to follow the order of the request

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets/bulk' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}'
POST /public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 417

{
  "name" : "Topset with tops",
  "tops" : [ {
    "name" : "Top 1",
    "md" : {
      "val" : 100.0
    },
    "dip" : {
      "val" : 4.2
    },
    "azimuth" : {
      "val" : 127.3
    },
    "dip_classification" : "bedding",
    "confidence" : {
      "val" : 0.94
    },
    "source" : "ai",
    "model_info" : "WI_BeddingPlane_v2.1"
  }, {
    "name" : "Top 2",
    "md" : {
      "val" : 200.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7d5da1d363ebd2ce0235a25af53120d5
Content-Type: application/json

{
  "topset_uuid" : "98d74ab1-5ff0-4583-b697-799a8c5f49a9",
  "top_uuids" : [ "e03a4661-b731-4034-a023-438097da9c51", "99ed5c4d-7142-406f-b5b1-62aed8bd43a8" ]
}

POST /public/api/v1/nestedwells/{uuid}/topsets/bulk

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters, required)
tops Array Tops to create in the topset, at least one
tops[].name String Top name (up to 1000 characters, required)
tops[].md Object Measured depth (required). If present val is set, otherwise undefined is true
tops[].md.val Number Measured depth value in project units, must be in [0;100000] range, otherwise 406 is returned
tops[].md.undefined Boolean Set to true if MD is undefined, MD is then stored as 0
tops[].dip Object Dip. If present val is set, otherwise undefined is true
tops[].dip.val Number Dip value in degrees, must be in [0;90] range, otherwise 400 is returned
tops[].dip.undefined Boolean Set to true if dip is undefined
tops[].azimuth Object Azimuth. If present val is set, otherwise undefined is true
tops[].azimuth.val Number Azimuth value in degrees, must be in [0;360) range, otherwise 400 is returned
tops[].azimuth.undefined Boolean Set to true if azimuth is undefined
tops[].dip_classification String Dip classification, must be null or one of: bedding, thin_bed, fault, fracture_open, fracture_healed, fracture_induced, otherwise 400 is returned
tops[].confidence Object Confidence. If present val is set, otherwise undefined is true
tops[].confidence.val Number Confidence value, must be in [0;1] range, otherwise 400 is returned
tops[].confidence.undefined Boolean Set to true if confidence is undefined
tops[].source String Top source, must be null or one of: manual, ai, otherwise 400 is returned
tops[].model_info String Model info

Response body

Path Type Description
topset_uuid String Created topset UUID
top_uuids Array UUIDs of the created tops

Get topsets by lateral

Get a list of topsets by lateral UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/32a0a30b-7614-4327-a8c4-8eaa016638b8/topsets?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9257c5e52998212786994026c4cb44fb
Content-Type: application/json

{
  "content" : [ {
    "name" : "C Log TopSet JzqctvJrVJ",
    "uuid" : "534a3093-33fe-4545-bd09-9697b3795d27"
  }, {
    "name" : "D Well FcFcdYlcKB",
    "uuid" : "087f90b1-d49d-4cf3-a841-a6e0dd2371d1"
  }, {
    "name" : "Top Set",
    "uuid" : "f7500391-f069-45aa-a350-023c930318b8"
  }, {
    "name" : "TopSetiMtNyRQdNW",
    "uuid" : "1b702592-928a-42d3-a205-eaba58e0dfde"
  }, {
    "name" : "TopSet Log iYpWsYtQFk",
    "uuid" : "b67f3d9b-0835-4326-884b-508cdde83755"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 5,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/topsets

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Topset name
content[].uuid String Topset UUID

Get topsets by typewell

Get a list of topsets by typewell UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/e8ece883-0511-4b32-8f7e-3d32fa838df4/topsets?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: df7426f9ff2e1132ea800b8520d0b246
Content-Type: application/json

{
  "content" : [ {
    "name" : "C Log TopSet bksNLxDKTd",
    "uuid" : "9bd5b43c-8f64-4ac4-a2ee-5483ff1aed98"
  }, {
    "name" : "D Well OkKKSgioZc",
    "uuid" : "69327052-41bf-4a42-b341-92a556698ae3"
  }, {
    "name" : "TopSet Log GaUIqsZrbU",
    "uuid" : "040b8cb7-1500-4d87-89af-337283570c6a"
  }, {
    "name" : "TopSetxCnDWutDPA",
    "uuid" : "fc86ac7e-9c25-4f38-9656-e2153cc7eb30"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 4,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/topsets

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Topset name
content[].uuid String Topset UUID

Get topsets by nested well

Get a list of topsets by nested well UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/f53620b1-8bf3-4b9d-8a49-71de453947af/topsets?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c3edc44396f18c5e3e0ac3fb387c94c7
Content-Type: application/json

{
  "content" : [ {
    "name" : "C Log TopSet IxjxXEeNli",
    "uuid" : "3cf7f7ff-3684-4770-9c40-52cb11ed897e"
  }, {
    "name" : "D Well kOrCWdOfJK",
    "uuid" : "bb9f6a69-7d72-4e27-8834-60a8dc7bb447"
  }, {
    "name" : "TopSetjrRpsicBpM",
    "uuid" : "db57b7c9-cb5c-4f08-ad9d-fd9a56913a1a"
  }, {
    "name" : "TopSet Log eVeFLBqoAl",
    "uuid" : "d42c9b57-748d-4a10-9da0-6ab9eaa0f2d9"
  }, {
    "name" : "Topset name",
    "uuid" : "6cbcff3e-10a5-4ad6-b6d6-6887e250b2c9"
  }, {
    "name" : "Topset with tops",
    "uuid" : "98d74ab1-5ff0-4583-b697-799a8c5f49a9"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 6,
  "first" : true,
  "last" : true
}

GET /public/api/v1/nestedwells/{uuid}/topsets

Path parameter Description
uuid Nested well UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Topset name
content[].uuid String Topset UUID

Get zones by topset

Get a list of zones by topset UUID with pagination, sorted by name

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/eb5b89a8-1dd4-4eac-9557-22294ad4f986/zones?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/topsets/eb5b89a8-1dd4-4eac-9557-22294ad4f986/zones?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3b446415835d4c775e2a3971c21f067a
Content-Type: application/json

{
  "content" : [ {
    "name" : "zone1",
    "top_start" : "start",
    "top_end" : "end",
    "zone_id" : "034b771f-68cb-4546-8ee1-2e685c17793d"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/topsets/{uuid}/zones

Path parameter Description
uuid Topset UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].zone_id String Zone UUID
content[].name String Zone name
content[].top_start String Name of the zone start top
content[].top_end String Name of the zone end top
content[].from_tvd_offset Object TVD offset of the zone start in meters, not converted to project units. If present val is set, otherwise undefined is true
content[].to_tvd_offset Object TVD offset of the zone end in meters, not converted to project units. If present val is set, otherwise undefined is true

Get starred objects

Get the starred top, center and bottom tops by topset UUID. A position that is not set, or whose top was deleted, is omitted from the response

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c8aabecba8d779323ce59e56b89c5ef5
Content-Type: application/json

{
  "top" : "e85baeb5-6a5f-49e2-bea4-081dceb54bf2",
  "center" : "dafd5b38-6281-4967-b073-befc803498cc",
  "bottom" : "7aca988f-0c2e-492b-ba08-014eb5f95da3"
}

GET /public/api/v1/topsets/{uuid}/starred

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
top String UUID of the starred top, absent when not set or when the top no longer exists
center String UUID of the starred center top, absent when not set or when the top no longer exists
bottom String UUID of the starred bottom top, absent when not set or when the top no longer exists

Set starred objects

Set the starred top, center and bottom tops by topset UUID. All three fields are required and replace the current values. Each value must be a top of this topset, or 00000000-0000-0000-0000-000000000000 to reset the position. One top cannot be starred in two positions. A request that breaks these rules is rejected with 400. A private topset of another user is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8/starred' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "top" : "e85baeb5-6a5f-49e2-bea4-081dceb54bf2",
  "center" : "dafd5b38-6281-4967-b073-befc803498cc",
  "bottom" : "7aca988f-0c2e-492b-ba08-014eb5f95da3"
}'
PUT /public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158

{
  "top" : "e85baeb5-6a5f-49e2-bea4-081dceb54bf2",
  "center" : "dafd5b38-6281-4967-b073-befc803498cc",
  "bottom" : "7aca988f-0c2e-492b-ba08-014eb5f95da3"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 263e1039a53866109a9669f4d2713183

PUT /public/api/v1/topsets/{uuid}/starred

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
top String UUID of a top of this topset to be set as starred top (use "00000000-0000-0000-0000-000000000000" to reset)
center String UUID of a top of this topset to be set as starred center (use "00000000-0000-0000-0000-000000000000" to reset)
bottom String UUID of a top of this topset to be set as starred bottom (use "00000000-0000-0000-0000-000000000000" to reset)

Response body

Empty body

Update topset

Update topset name by UUID. Returns 403 if the topset is locked or is a private topset of another user

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New topset name"
}'
PATCH /public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 32

{
  "name" : "New topset name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 552c7753a1af3ce49c04cc35ac918358

PATCH /public/api/v1/topsets/{uuid}

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Topset name (up to 1000 characters)

Response body

Empty body

Lock topset

Lock topset by UUID. A locked topset cannot be renamed or deleted, and its tops cannot be created, updated or deleted (403) until it is unlocked. A private topset cannot be locked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/dd8ef908-281c-4e73-a67f-bd6b160c976a/lock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/topsets/dd8ef908-281c-4e73-a67f-bd6b160c976a/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3eeafc91ac8ebeb98a9857efa583f130

PATCH /public/api/v1/topsets/{uuid}/lock

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Unlock topset

Unlock topset by UUID. A private topset cannot be unlocked (403). Requires the permission to lock objects

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/eb5b89a8-1dd4-4eac-9557-22294ad4f986/unlock' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/topsets/eb5b89a8-1dd4-4eac-9557-22294ad4f986/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f447afd7ae15f7de26837564d96d70e5

PATCH /public/api/v1/topsets/{uuid}/unlock

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete topset

Delete topset by UUID together with its tops and zones. Returns 403 if the topset is locked or is a private topset of another user

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/topsets/f7500391-f069-45aa-a350-023c930318b8 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3dd93775528f3c44b546cfbf0934b81e

DELETE /public/api/v1/topsets/{uuid}

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

8. Tops

Create top

Create top by topset UUID. Returns 403 if the topset is locked or is a private topset of another user

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/0ae6ad41-349c-4aa1-99ab-211a1eb8107d/tops' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Top name",
  "md" : {
    "val" : 100.5
  },
  "dip" : {
    "val" : 45.0
  },
  "azimuth" : {
    "val" : 180.0
  },
  "dip_classification" : "bedding",
  "confidence" : {
    "val" : 0.95
  },
  "source" : "manual",
  "model_info" : "human"
}'
POST /public/api/v1/topsets/0ae6ad41-349c-4aa1-99ab-211a1eb8107d/tops HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 258

{
  "name" : "Top name",
  "md" : {
    "val" : 100.5
  },
  "dip" : {
    "val" : 45.0
  },
  "azimuth" : {
    "val" : 180.0
  },
  "dip_classification" : "bedding",
  "confidence" : {
    "val" : 0.95
  },
  "source" : "manual",
  "model_info" : "human"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: fe10ec0002f4b7471d9a363ccc4cb626
Content-Type: application/json

{
  "uuid" : "0765f1aa-1560-4612-b195-b70cc44c5fc3"
}

POST /public/api/v1/topsets/{uuid}/tops

Path parameter Description
uuid Topset UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Top name (up to 1000 characters, required on create)
md Object Measured depth (required on create). If present val is set, otherwise undefined is true
md.val Number Measured depth value in project units, must be in [0;100000] range, otherwise 406 is returned
md.undefined Boolean Set to true if MD is undefined, MD is then stored as 0
dip Object Dip. If present val is set, otherwise undefined is true
dip.val Number Dip value in degrees, must be in [0;90] range, otherwise 400 is returned
dip.undefined Boolean Set to true if dip is undefined
azimuth Object Azimuth. If present val is set, otherwise undefined is true
azimuth.val Number Azimuth value in degrees, must be in [0;360) range, otherwise 400 is returned
azimuth.undefined Boolean Set to true if azimuth is undefined
dip_classification String Dip classification, must be null or one of: bedding, thin_bed, fault, fracture_open, fracture_healed, fracture_induced, otherwise 400 is returned
confidence Object Confidence. If present val is set, otherwise undefined is true
confidence.val Number Confidence value, must be in [0;1] range, otherwise 400 is returned
confidence.undefined Boolean Set to true if confidence is undefined
source String Top source, must be null or one of: manual, ai, otherwise 400 is returned
model_info String Model info

Response body

Path Type Description
uuid String Created top UUID

Get tops by topset

Get a list of tops by topset UUID with pagination, in creation order

Request

$ curl 'https://solo.cloud/public/api/v1/topsets/92b998ba-e719-4bab-bd5d-3ca84db6ea63/tops?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/topsets/92b998ba-e719-4bab-bd5d-3ca84db6ea63/tops?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: abcb1e27930eeeacae9447d25ee4db5c
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "e3b91e04-bec3-42f0-90a6-2f65324b2883",
    "name" : "Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 9.84251968503937
    },
    "dip" : {
      "val" : 114.59155902616465
    },
    "azimuth" : {
      "val" : 57.29577951308232
    },
    "dip_classification" : "dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "source",
    "model_info" : "model info"
  }, {
    "uuid" : "96b490ff-4e22-4a81-9898-8352ea9091a5",
    "name" : "Update Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 13.123359580052492
    },
    "dip" : {
      "val" : 171.88733853924697
    },
    "azimuth" : {
      "val" : 114.59155902616465
    },
    "dip_classification" : "update dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "update source",
    "model_info" : "update model info"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/topsets/{uuid}/tops

Path parameter Description
uuid Topset UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Top UUID
content[].name String Top name
content[].topset_name String Topset name
content[].md.val Number Measured depth value in project units
content[].dip.val Number Dip value in degrees
content[].azimuth.val Number Azimuth value in degrees
content[].dip_classification String Dip classification
content[].confidence.val Number Confidence value
content[].source String Top source (manual when not set)
content[].model_info String Model info

Get tops by lateral

Get a list of tops of all lateral topsets by lateral UUID with pagination, in creation order

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e867f2c2-7f28-4913-9c23-497bb144c1bd/tops?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e867f2c2-7f28-4913-9c23-497bb144c1bd/tops?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2175c3923cba2337435c606f867e2970
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "f6ae3691-9409-40b5-803f-0a6b715924ed",
    "name" : "Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 9.84251968503937
    },
    "dip" : {
      "val" : 114.59155902616465
    },
    "azimuth" : {
      "val" : 57.29577951308232
    },
    "dip_classification" : "dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "source",
    "model_info" : "model info"
  }, {
    "uuid" : "7374055f-fd41-49fe-ae2c-6d44ee04abab",
    "name" : "Update Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 13.123359580052492
    },
    "dip" : {
      "val" : 171.88733853924697
    },
    "azimuth" : {
      "val" : 114.59155902616465
    },
    "dip_classification" : "update dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "update source",
    "model_info" : "update model info"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/tops

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Top UUID
content[].name String Top name
content[].topset_name String Topset name
content[].md.val Number Measured depth value in project units
content[].dip.val Number Dip value in degrees
content[].azimuth.val Number Azimuth value in degrees
content[].dip_classification String Dip classification
content[].confidence.val Number Confidence value
content[].source String Top source (manual when not set)
content[].model_info String Model info

Get tops by typewell

Get a list of tops of all typewell topsets by typewell UUID with pagination, in creation order

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/ae079016-5ebe-4335-a07f-24d6915c788e/tops?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/ae079016-5ebe-4335-a07f-24d6915c788e/tops?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 01532f13f718c233f815a71e2d7d1351
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "aef3a266-19bf-4684-8c5e-243e726255a4",
    "name" : "Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 9.84251968503937
    },
    "dip" : {
      "val" : 114.59155902616465
    },
    "azimuth" : {
      "val" : 57.29577951308232
    },
    "dip_classification" : "dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "source",
    "model_info" : "model info"
  }, {
    "uuid" : "9e05cb6d-f48d-4899-a478-9c343a941b31",
    "name" : "Update Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 13.123359580052492
    },
    "dip" : {
      "val" : 171.88733853924697
    },
    "azimuth" : {
      "val" : 114.59155902616465
    },
    "dip_classification" : "update dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "update source",
    "model_info" : "update model info"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/tops

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Top UUID
content[].name String Top name
content[].topset_name String Topset name
content[].md.val Number Measured depth value in project units
content[].dip.val Number Dip value in degrees
content[].azimuth.val Number Azimuth value in degrees
content[].dip_classification String Dip classification
content[].confidence.val Number Confidence value
content[].source String Top source (manual when not set)
content[].model_info String Model info

Get tops by nested well

Get a list of tops of all nested well topsets by nested well UUID with pagination, in creation order

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/2cc3b13a-74e2-4596-bfc1-bff7dbb4f7d7/tops?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/2cc3b13a-74e2-4596-bfc1-bff7dbb4f7d7/tops?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c8ad76fe514c0e47812bbabd95be8ebb
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "50efaeca-3f2f-473f-b795-f56c4373be2b",
    "name" : "Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 9.84251968503937
    },
    "dip" : {
      "val" : 114.59155902616465
    },
    "azimuth" : {
      "val" : 57.29577951308232
    },
    "dip_classification" : "dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "source",
    "model_info" : "model info"
  }, {
    "uuid" : "e11e379b-1ad9-4b56-a3e2-694f032ad199",
    "name" : "Update Top",
    "topset_name" : "Top Set",
    "md" : {
      "val" : 13.123359580052492
    },
    "dip" : {
      "val" : 171.88733853924697
    },
    "azimuth" : {
      "val" : 114.59155902616465
    },
    "dip_classification" : "update dip classification",
    "confidence" : {
      "val" : 0.5
    },
    "source" : "update source",
    "model_info" : "update model info"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/nestedwells/{uuid}/tops

Path parameter Description
uuid Nested well UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Top UUID
content[].name String Top name
content[].topset_name String Topset name
content[].md.val Number Measured depth value in project units
content[].dip.val Number Dip value in degrees
content[].azimuth.val Number Azimuth value in degrees
content[].dip_classification String Dip classification
content[].confidence.val Number Confidence value
content[].source String Top source (manual when not set)
content[].model_info String Model info

Update top

Update top by UUID. Omitted or null fields keep their current values. Returns 403 if the topset is locked or is a private topset of another user

Request

$ curl 'https://solo.cloud/public/api/v1/tops/7374055f-fd41-49fe-ae2c-6d44ee04abab' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New top name",
  "md" : {
    "val" : 999.5
  },
  "dip" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 359.999
  },
  "dip_classification" : "thin_bed",
  "confidence" : {
    "val" : 0.98
  },
  "source" : "ai",
  "model_info" : "model-v1"
}'
PATCH /public/api/v1/tops/7374055f-fd41-49fe-ae2c-6d44ee04abab HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 264

{
  "name" : "New top name",
  "md" : {
    "val" : 999.5
  },
  "dip" : {
    "val" : 90.0
  },
  "azimuth" : {
    "val" : 359.999
  },
  "dip_classification" : "thin_bed",
  "confidence" : {
    "val" : 0.98
  },
  "source" : "ai",
  "model_info" : "model-v1"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3631bdcc85fe42fa648b1e980dce0d08

PATCH /public/api/v1/tops/{uuid}

Path parameter Description
uuid Top UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Top name (up to 1000 characters, required on create)
md Object Measured depth (required on create). If present val is set, otherwise undefined is true
md.val Number Measured depth value in project units, must be in [0;100000] range, otherwise 406 is returned
md.undefined Boolean Set to true if MD is undefined, MD is then stored as 0
dip Object Dip. If present val is set, otherwise undefined is true
dip.val Number Dip value in degrees, must be in [0;90] range, otherwise 400 is returned
dip.undefined Boolean Set to true if dip is undefined
azimuth Object Azimuth. If present val is set, otherwise undefined is true
azimuth.val Number Azimuth value in degrees, must be in [0;360) range, otherwise 400 is returned
azimuth.undefined Boolean Set to true if azimuth is undefined
dip_classification String Dip classification, must be null or one of: bedding, thin_bed, fault, fracture_open, fracture_healed, fracture_induced, otherwise 400 is returned
confidence Object Confidence. If present val is set, otherwise undefined is true
confidence.val Number Confidence value, must be in [0;1] range, otherwise 400 is returned
confidence.undefined Boolean Set to true if confidence is undefined
source String Top source, must be null or one of: manual, ai, otherwise 400 is returned
model_info String Model info

Response body

Empty body

Delete top

Delete top by UUID. Returns 403 if the topset is locked or is a private topset of another user

Request

$ curl 'https://solo.cloud/public/api/v1/tops/7374055f-fd41-49fe-ae2c-6d44ee04abab' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/tops/7374055f-fd41-49fe-ae2c-6d44ee04abab HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1ce5708ecb54b862ba68dd8e0e2b0351

DELETE /public/api/v1/tops/{uuid}

Path parameter Description
uuid Top UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

9. Target lines

Create target line

Create target line from origin and target points by lateral UUID. All fields are required, all coordinates must be defined. A missing field returns 400, an undefined coordinate 406

Request

$ curl 'https://solo.cloud/public/api/v1/wells/3d102590-c921-4002-a725-bcdbd8b57a5a/targetlines' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Target line name",
  "origin_x" : {
    "val" : 100.5
  },
  "origin_y" : {
    "val" : 200.5
  },
  "origin_z" : {
    "val" : 300.5
  },
  "target_x" : {
    "val" : 400.5
  },
  "target_y" : {
    "val" : 500.5
  },
  "target_z" : {
    "val" : 600.5
  }
}'
POST /public/api/v1/wells/3d102590-c921-4002-a725-bcdbd8b57a5a/targetlines HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 273

{
  "name" : "Target line name",
  "origin_x" : {
    "val" : 100.5
  },
  "origin_y" : {
    "val" : 200.5
  },
  "origin_z" : {
    "val" : 300.5
  },
  "target_x" : {
    "val" : 400.5
  },
  "target_y" : {
    "val" : 500.5
  },
  "target_z" : {
    "val" : 600.5
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 100075149511a1fceb5c74eaaf6edad4
Content-Type: application/json

{
  "uuid" : "414c89d9-090f-4dd9-be62-1e3deb0b94bb"
}

POST /public/api/v1/wells/{uuid}/targetlines

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Target line name (up to 1000 characters)
origin_x.val Number Origin point X coordinate (project units)
origin_y.val Number Origin point Y coordinate (project units)
origin_z.val Number Origin point Z coordinate (project units)
target_x.val Number Target point X coordinate (project units)
target_y.val Number Target point Y coordinate (project units)
target_z.val Number Target point Z coordinate (project units)

Response body

Path Type Description
uuid String Created target line UUID

Create target line from waypoints

Create target line from waypoints by lateral UUID. At least two waypoints with defined coordinates and unique order values are required. A missing field returns 400, an undefined coordinate 406, fewer than two waypoints or duplicate order values return 400

Request

$ curl 'https://solo.cloud/public/api/v1/wells/8bdd305e-0486-4f96-8aff-84c6e26094f4/targetlines/fromwaypoints' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Target line name",
  "waypoints" : [ {
    "name" : "Waypoint1",
    "break" : false,
    "order" : 2,
    "x" : {
      "val" : 30.0
    },
    "y" : {
      "val" : 10.0
    },
    "z" : {
      "val" : 40.0
    }
  }, {
    "name" : "Waypoint2",
    "break" : false,
    "order" : 3,
    "x" : {
      "val" : 70.0
    },
    "y" : {
      "val" : 80.0
    },
    "z" : {
      "val" : 90.0
    }
  } ]
}'
POST /public/api/v1/wells/8bdd305e-0486-4f96-8aff-84c6e26094f4/targetlines/fromwaypoints HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 421

{
  "name" : "Target line name",
  "waypoints" : [ {
    "name" : "Waypoint1",
    "break" : false,
    "order" : 2,
    "x" : {
      "val" : 30.0
    },
    "y" : {
      "val" : 10.0
    },
    "z" : {
      "val" : 40.0
    }
  }, {
    "name" : "Waypoint2",
    "break" : false,
    "order" : 3,
    "x" : {
      "val" : 70.0
    },
    "y" : {
      "val" : 80.0
    },
    "z" : {
      "val" : 90.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3b62d606c3d6d308eb246efc131ff1bf
Content-Type: application/json

{
  "uuid" : "125da958-13c2-4e52-afd9-09319935195e"
}

POST /public/api/v1/wells/{uuid}/targetlines/fromwaypoints

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Target line name (up to 1000 characters)
waypoints Array Target line waypoints, at least two
waypoints[].name String Waypoint name (up to 200 characters). Get target lines by lateral returns generated names instead
waypoints[].order Number Waypoint order: waypoints are sorted by it, values must be unique
waypoints[].x.val Number Waypoint X coordinate (project units)
waypoints[].y.val Number Waypoint Y coordinate (project units)
waypoints[].z.val Number Waypoint Z coordinate (project units)
waypoints[].break Boolean Is the waypoint break point or not

Response body

Path Type Description
uuid String Created target line UUID

Get target lines by lateral

Get a list of target lines with their waypoints by lateral UUID with pagination, in creation order. Waypoints are returned sorted by order, renumbered from 0 and named Origin, WP1, WP2, ..., Target

Request

$ curl 'https://solo.cloud/public/api/v1/wells/f3ae775d-6bfa-4051-99e6-ce2a35f08c56/targetlines?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/f3ae775d-6bfa-4051-99e6-ce2a35f08c56/targetlines?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a50098e9444fedbe7da991dcfae724e9
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "b718c274-d4ad-46d2-af82-ec3714b4c3d3",
    "name" : "Target Line",
    "waypoints" : [ {
      "name" : "Origin",
      "order" : 0,
      "x" : {
        "val" : 3.280839895013123
      },
      "y" : {
        "val" : 6.561679790026246
      },
      "z" : {
        "val" : 9.84251968503937
      },
      "top_corridor_tvd" : {
        "undefined" : true
      },
      "base_corridor_tvd" : {
        "undefined" : true
      },
      "left_corridor" : {
        "undefined" : true
      },
      "right_corridor" : {
        "undefined" : true
      },
      "break" : false
    }, {
      "name" : "Target",
      "order" : 1,
      "x" : {
        "val" : 13.123359580052492
      },
      "y" : {
        "val" : 16.404199475065617
      },
      "z" : {
        "val" : 19.68503937007874
      },
      "top_corridor_tvd" : {
        "val" : 25.0
      },
      "base_corridor_tvd" : {
        "val" : 25.0
      },
      "left_corridor" : {
        "val" : 25.0
      },
      "right_corridor" : {
        "val" : 25.0
      },
      "break" : false
    } ]
  }, {
    "uuid" : "34538672-5202-4bd7-8fb4-553a3f719162",
    "name" : "Update Target Line",
    "waypoints" : [ {
      "name" : "Origin",
      "order" : 0,
      "x" : {
        "val" : 36.41732283464567
      },
      "y" : {
        "val" : 39.69816272965879
      },
      "z" : {
        "val" : 42.979002624671914
      },
      "top_corridor_tvd" : {
        "undefined" : true
      },
      "base_corridor_tvd" : {
        "undefined" : true
      },
      "left_corridor" : {
        "undefined" : true
      },
      "right_corridor" : {
        "undefined" : true
      },
      "break" : false
    }, {
      "name" : "Target",
      "order" : 1,
      "x" : {
        "val" : 46.25984251968504
      },
      "y" : {
        "val" : 49.54068241469816
      },
      "z" : {
        "val" : 52.82152230971129
      },
      "top_corridor_tvd" : {
        "val" : 28.608923884514432
      },
      "base_corridor_tvd" : {
        "val" : 28.608923884514432
      },
      "left_corridor" : {
        "val" : 25.0
      },
      "right_corridor" : {
        "val" : 25.0
      },
      "break" : false
    } ]
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/targetlines

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Target line UUID
content[].name String Target line name
content[].waypoints Array Target line waypoints sorted by order
content[].waypoints[].name String Waypoint name: Origin for the first waypoint, Target for the last one, WP1, WP2, ... for the others
content[].waypoints[].order Number Zero-based index of the waypoint in the list
content[].waypoints[].x.val Number Waypoint X coordinate (project units)
content[].waypoints[].y.val Number Waypoint Y coordinate (project units)
content[].waypoints[].z.val Number Waypoint Z coordinate (project units)
content[].waypoints[].top_corridor_tvd Object Waypoint top corridor: vertical distance above the target line. If present val is set, otherwise undefined is true (always for the first waypoint)
content[].waypoints[].top_corridor_tvd.val Number Waypoint top corridor value (project units)
content[].waypoints[].base_corridor_tvd Object Waypoint base corridor: vertical distance below the target line. If present val is set, otherwise undefined is true (always for the first waypoint)
content[].waypoints[].base_corridor_tvd.val Number Waypoint base corridor value (project units)
content[].waypoints[].left_corridor Object Waypoint left corridor width. If present val is set, otherwise undefined is true (always for the first waypoint)
content[].waypoints[].left_corridor.val Number Waypoint left corridor value (project units)
content[].waypoints[].right_corridor Object Waypoint right corridor width. If present val is set, otherwise undefined is true (always for the first waypoint)
content[].waypoints[].right_corridor.val Number Waypoint right corridor value (project units)
content[].waypoints[].break Boolean Is the waypoint break point or not

Get target line data

Get calculated data of a target line by target line UUID. The content array holds one element

Request

$ curl 'https://solo.cloud/public/api/v1/targetlines/6385f9c1-09f9-4b4f-8b5d-0fe44a90e208/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/targetlines/6385f9c1-09f9-4b4f-8b5d-0fe44a90e208/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ef0e8196e3246f95342accbff0ce631b
Content-Type: application/json

{
  "content" : [ {
    "azimuth" : {
      "val" : 45
    },
    "delta_tvd" : {
      "val" : -9.842519685039372
    },
    "delta_vs" : {
      "val" : 9.842519685039374
    },
    "inclination" : {
      "val" : 125.26438968275465
    },
    "length" : {
      "val" : 17.047744168985016
    },
    "name" : "Target Line",
    "origin_base_corridor_tvd" : {
      "val" : 38.1233595800525
    },
    "origin_md" : {
      "val" : 1594.0953719875106
    },
    "origin_top_corridor_tvd" : {
      "val" : -11.876640419947508
    },
    "origin_tvd" : {
      "val" : 13.123359580052496
    },
    "origin_vs" : {
      "val" : -26.246719160104988
    },
    "origin_x" : {
      "val" : 3.280839895013124
    },
    "origin_y" : {
      "val" : 6.561679790026248
    },
    "origin_z" : {
      "val" : 9.842519685039372
    },
    "target_base_corridor_tvd" : {
      "val" : 28.280839895013127
    },
    "target_md" : {
      "val" : 1106.7125786029799
    },
    "target_top_corridor_tvd" : {
      "val" : -21.71916010498688
    },
    "target_tvd" : {
      "val" : 3.2808398950131235
    },
    "target_vs" : {
      "val" : -16.404199475065614
    },
    "target_x" : {
      "val" : 13.123359580052496
    },
    "target_y" : {
      "val" : 16.40419947506562
    },
    "target_z" : {
      "val" : 19.685039370078744
    },
    "tvd_vs" : {
      "val" : -13.123359580052487
    },
    "uuid" : "6385f9c1-09f9-4b4f-8b5d-0fe44a90e208"
  } ]
}

GET /public/api/v1/targetlines/{uuid}/data

Path parameter Description
uuid Target line UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content[].name String Target line name
content[].uuid String Target line UUID
content[].azimuth.val Number Azimuth (degrees)
content[].inclination.val Number Inclination (degrees)
content[].length.val Number Length (project units)
content[].delta_tvd.val Number Target TVD minus origin TVD (project units)
content[].delta_vs.val Number Target VS minus origin VS (project units)
content[].tvd_vs.val Number TVD of the target line at zero VS (TVD@0VS)
content[].origin_vs.val Number Origin point VS (project units)
content[].origin_tvd.val Number Origin point TVD (project units)
content[].origin_x.val Number Origin point X coordinate (project units)
content[].origin_y.val Number Origin point Y coordinate (project units)
content[].origin_z.val Number Origin point Z coordinate (project units)
content[].origin_md Object Origin MD value. If target line belongs to trajectory val is set, otherwise undefined is true
content[].origin_md.val Number Origin MD value (project units)
content[].origin_md.undefined Boolean true if origin MD undefined
content[].origin_base_corridor_tvd Object Base corridor origin TVD. If present val is set, otherwise undefined is true
content[].origin_base_corridor_tvd.val Number Base corridor origin TVD value (project units)
content[].origin_base_corridor_tvd.undefined Boolean true if base corridor origin is undefined
content[].origin_top_corridor_tvd Object Top corridor origin TVD. If present val is set, otherwise undefined is true
content[].origin_top_corridor_tvd.val Number Top corridor origin TVD (project units)
content[].origin_top_corridor_tvd.undefined Boolean true if top TVD corridor is undefined
content[].target_vs.val Number Target point VS (project units)
content[].target_tvd.val Number Target point TVD (project units)
content[].target_x.val Number Target point X coordinate (project units)
content[].target_y.val Number Target point Y coordinate (project units)
content[].target_z.val Number Target point Z coordinate (project units)
content[].target_md Object Target MD. If target line belongs to trajectory val is set, otherwise undefined is true
content[].target_md.val Number Target MD value (project units)
content[].target_md.undefined Boolean true if target MD is undefined
content[].target_base_corridor_tvd Object Base corridor target TVD. If present val is set, otherwise undefined is true
content[].target_base_corridor_tvd.val Number Base corridor target TVD (project units)
content[].target_base_corridor_tvd.undefined Boolean true if base corridor target TVD is undefined
content[].target_top_corridor_tvd Object Top corridor target TVD. If present val is set, otherwise undefined is true
content[].target_top_corridor_tvd.val Number Top corridor target TVD (project units)
content[].target_top_corridor_tvd.undefined Boolean true if top corridor target TVD is undefined

Get target lines data by lateral

Get calculated data of all lateral target lines by lateral UUID with pagination, sorted by target line name

Request

$ curl 'https://solo.cloud/public/api/v1/wells/90d0a345-bb35-47a9-b7a8-783207da1e5f/targetlines/data?offset=0&limit=20' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/90d0a345-bb35-47a9-b7a8-783207da1e5f/targetlines/data?offset=0&limit=20 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2e84e07ac91a7b3b8b66826c097f648f
Content-Type: application/json

{
  "content" : [ {
    "azimuth" : {
      "val" : 45
    },
    "delta_tvd" : {
      "val" : -9.842519685039372
    },
    "delta_vs" : {
      "val" : 9.842519685039374
    },
    "inclination" : {
      "val" : 125.26438968275465
    },
    "length" : {
      "val" : 17.047744168985016
    },
    "name" : "Target Line",
    "origin_base_corridor_tvd" : {
      "val" : 38.1233595800525
    },
    "origin_md" : {
      "val" : 1594.0953719875106
    },
    "origin_top_corridor_tvd" : {
      "val" : -11.876640419947508
    },
    "origin_tvd" : {
      "val" : 13.123359580052496
    },
    "origin_vs" : {
      "val" : -26.246719160104988
    },
    "origin_x" : {
      "val" : 3.280839895013124
    },
    "origin_y" : {
      "val" : 6.561679790026248
    },
    "origin_z" : {
      "val" : 9.842519685039372
    },
    "target_base_corridor_tvd" : {
      "val" : 28.280839895013127
    },
    "target_md" : {
      "val" : 1106.7125786029799
    },
    "target_top_corridor_tvd" : {
      "val" : -21.71916010498688
    },
    "target_tvd" : {
      "val" : 3.2808398950131235
    },
    "target_vs" : {
      "val" : -16.404199475065614
    },
    "target_x" : {
      "val" : 13.123359580052496
    },
    "target_y" : {
      "val" : 16.40419947506562
    },
    "target_z" : {
      "val" : 19.685039370078744
    },
    "tvd_vs" : {
      "val" : -13.123359580052487
    },
    "uuid" : "2493ed20-eb63-48f8-ba2a-7f35ae95130b"
  } ],
  "offset" : 0,
  "limit" : 20,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/targetlines/data

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Target line name
content[].uuid String Target line UUID
content[].azimuth.val Number Azimuth (degrees)
content[].inclination.val Number Inclination (degrees)
content[].length.val Number Length (project units)
content[].delta_tvd.val Number Target TVD minus origin TVD (project units)
content[].delta_vs.val Number Target VS minus origin VS (project units)
content[].tvd_vs.val Number TVD of the target line at zero VS (TVD@0VS)
content[].origin_vs.val Number Origin point VS (project units)
content[].origin_tvd.val Number Origin point TVD (project units)
content[].origin_x.val Number Origin point X coordinate (project units)
content[].origin_y.val Number Origin point Y coordinate (project units)
content[].origin_z.val Number Origin point Z coordinate (project units)
content[].origin_md Object Origin MD value. If target line belongs to trajectory val is set, otherwise undefined is true
content[].origin_md.val Number Origin MD value (project units)
content[].origin_md.undefined Boolean true if origin MD undefined
content[].origin_base_corridor_tvd Object Base corridor origin TVD. If present val is set, otherwise undefined is true
content[].origin_base_corridor_tvd.val Number Base corridor origin TVD value (project units)
content[].origin_base_corridor_tvd.undefined Boolean true if base corridor origin is undefined
content[].origin_top_corridor_tvd Object Top corridor origin TVD. If present val is set, otherwise undefined is true
content[].origin_top_corridor_tvd.val Number Top corridor origin TVD (project units)
content[].origin_top_corridor_tvd.undefined Boolean true if top TVD corridor is undefined
content[].target_vs.val Number Target point VS (project units)
content[].target_tvd.val Number Target point TVD (project units)
content[].target_x.val Number Target point X coordinate (project units)
content[].target_y.val Number Target point Y coordinate (project units)
content[].target_z.val Number Target point Z coordinate (project units)
content[].target_md Object Target MD. If target line belongs to trajectory val is set, otherwise undefined is true
content[].target_md.val Number Target MD value (project units)
content[].target_md.undefined Boolean true if target MD is undefined
content[].target_base_corridor_tvd Object Base corridor target TVD. If present val is set, otherwise undefined is true
content[].target_base_corridor_tvd.val Number Base corridor target TVD (project units)
content[].target_base_corridor_tvd.undefined Boolean true if base corridor target TVD is undefined
content[].target_top_corridor_tvd Object Top corridor target TVD. If present val is set, otherwise undefined is true
content[].target_top_corridor_tvd.val Number Top corridor target TVD (project units)
content[].target_top_corridor_tvd.undefined Boolean true if top corridor target TVD is undefined

Get starred target line by lateral

Get starred target line by lateral UUID. Returns 404 if the lateral has no starred target line

Request

$ curl 'https://solo.cloud/public/api/v1/wells/7b73d44e-0974-49a6-baac-463b2fed53f0/targetlines/starred' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/7b73d44e-0974-49a6-baac-463b2fed53f0/targetlines/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 47177a3fe929e5213b33951ccf755a34
Content-Type: application/json

{
  "name" : "Target Line",
  "uuid" : "d6cb953e-eb56-4deb-909a-596cab00c391"
}

GET /public/api/v1/wells/{uuid}/targetlines/starred

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Target line UUID
name String Target line name

Update target line

Update target line name, origin and target points by UUID. All fields are required, all coordinates must be defined. A missing field returns 400, an undefined coordinate 406

For a line with more than two waypoints, the origin and target points are written to its first two waypoints (Origin and WP1 in Get target lines by lateral) and the other waypoints are kept. Use Update target line from waypoints to change any waypoint

Request

$ curl 'https://solo.cloud/public/api/v1/targetlines/2f9d9447-ad81-4cda-90eb-607f4b53cc9c' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New target line name",
  "origin_x" : {
    "val" : 1000.5
  },
  "origin_y" : {
    "val" : 2000.5
  },
  "origin_z" : {
    "val" : 3000.5
  },
  "target_x" : {
    "val" : 4000.5
  },
  "target_y" : {
    "val" : 5000.5
  },
  "target_z" : {
    "val" : 6000.5
  }
}'
PATCH /public/api/v1/targetlines/2f9d9447-ad81-4cda-90eb-607f4b53cc9c HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 283

{
  "name" : "New target line name",
  "origin_x" : {
    "val" : 1000.5
  },
  "origin_y" : {
    "val" : 2000.5
  },
  "origin_z" : {
    "val" : 3000.5
  },
  "target_x" : {
    "val" : 4000.5
  },
  "target_y" : {
    "val" : 5000.5
  },
  "target_z" : {
    "val" : 6000.5
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9f387e87cc2e52b67524734e0fcf926b

PATCH /public/api/v1/targetlines/{uuid}

Path parameter Description
uuid Target line UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Target line name (up to 1000 characters)
origin_x.val Number Origin point X coordinate (project units)
origin_y.val Number Origin point Y coordinate (project units)
origin_z.val Number Origin point Z coordinate (project units)
target_x.val Number Target point X coordinate (project units)
target_y.val Number Target point Y coordinate (project units)
target_z.val Number Target point Z coordinate (project units)

Response body

Empty body

Update target line from waypoints

Replace target line name and waypoints by UUID. At least two waypoints with defined coordinates and unique order values are required. A missing field returns 400, an undefined coordinate 406, fewer than two waypoints or duplicate order values return 400

Request

$ curl 'https://solo.cloud/public/api/v1/targetlines/1d21d642-fd5e-443f-8160-8cb3620dde47/fromwaypoints' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Target line updated name",
  "waypoints" : [ {
    "name" : "Waypoint100",
    "break" : false,
    "order" : 2,
    "x" : {
      "val" : 30.0
    },
    "y" : {
      "val" : 10.0
    },
    "z" : {
      "val" : 40.0
    }
  }, {
    "name" : "Waypoint500",
    "break" : false,
    "order" : 3,
    "x" : {
      "val" : 70.0
    },
    "y" : {
      "val" : 80.0
    },
    "z" : {
      "val" : 90.0
    }
  } ]
}'
PATCH /public/api/v1/targetlines/1d21d642-fd5e-443f-8160-8cb3620dde47/fromwaypoints HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 433

{
  "name" : "Target line updated name",
  "waypoints" : [ {
    "name" : "Waypoint100",
    "break" : false,
    "order" : 2,
    "x" : {
      "val" : 30.0
    },
    "y" : {
      "val" : 10.0
    },
    "z" : {
      "val" : 40.0
    }
  }, {
    "name" : "Waypoint500",
    "break" : false,
    "order" : 3,
    "x" : {
      "val" : 70.0
    },
    "y" : {
      "val" : 80.0
    },
    "z" : {
      "val" : 90.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 140ba72f0c2fa8df328c8b750d2b70ff

PATCH /public/api/v1/targetlines/{uuid}/fromwaypoints

Path parameter Description
uuid Target line UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Target line name (up to 1000 characters)
waypoints Array Target line waypoints, at least two
waypoints[].name String Waypoint name (up to 200 characters). Get target lines by lateral returns generated names instead
waypoints[].order Number Waypoint order: waypoints are sorted by it, values must be unique
waypoints[].x.val Number Waypoint X coordinate (project units)
waypoints[].y.val Number Waypoint Y coordinate (project units)
waypoints[].z.val Number Waypoint Z coordinate (project units)
waypoints[].break Boolean Is the waypoint break point or not

Response body

Empty body

Delete target line

Delete target line by UUID. Returns 403 if the target line is locked or is a private target line of another user

Request

$ curl 'https://solo.cloud/public/api/v1/targetlines/894e3c24-9427-402a-bc72-d11568b81740' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/targetlines/894e3c24-9427-402a-bc72-d11568b81740 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: da5e505c0b9d32dda7a7397ea4d37f1a

DELETE /public/api/v1/targetlines/{uuid}

Path parameter Description
uuid Target line UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

10. Logs

Create lateral log

Create log by lateral UUID. The log is created without data and is not listed by Get logs by lateral until data is uploaded with Extend log data or Replace log data

Request

$ curl 'https://solo.cloud/public/api/v1/wells/79bdb06b-d3ba-4e4f-ae65-fc21ffecf28e/logs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Log name"
}'
POST /public/api/v1/wells/79bdb06b-d3ba-4e4f-ae65-fc21ffecf28e/logs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 25

{
  "name" : "Log name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 585c9629de01218dca5d7bdfa05434aa
Content-Type: application/json

{
  "uuid" : "464414f6-9166-4e9d-8269-e26f226b3c3e"
}

POST /public/api/v1/wells/{uuid}/logs

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Log name, up to 200 characters
unit String Measure unit of the log data values, up to 100 characters

Response body

Path Type Description
uuid String Created log UUID

Create typewell log

Create log by typewell UUID. The log is created without data and is not listed by Get logs by typewell until data is uploaded with Extend log data or Replace log data

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/b939f0a2-09c0-4324-9084-0720b0e524af/logs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Log name"
}'
POST /public/api/v1/typewells/b939f0a2-09c0-4324-9084-0720b0e524af/logs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 25

{
  "name" : "Log name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1333183e3628ec561dd16e8050f43d75
Content-Type: application/json

{
  "uuid" : "f3ca53b4-b99b-43e4-944a-1505dec001fe"
}

POST /public/api/v1/typewells/{uuid}/logs

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Log name, up to 200 characters
unit String Measure unit of the log data values, up to 100 characters

Response body

Path Type Description
uuid String Created log UUID

Get logs by lateral

Get a list of logs by lateral UUID with pagination, in creation order. Logs that do not contain data will not be included in the response. After creating the log, you need to fill it with data using the commands Extend log data or Replace log data

Request

$ curl 'https://solo.cloud/public/api/v1/wells/a01c5587-c10d-4ec6-a8f4-22bb7be06e9b/logs?offset=0&limit=10&filter=mMa' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/a01c5587-c10d-4ec6-a8f4-22bb7be06e9b/logs?offset=0&limit=10&filter=mMa HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 051f4846f227008f4597602e85d114fa
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "48c02434-006d-461d-937b-6f5a1e22d550",
    "name" : "Gamma Ray",
    "is_discrete" : false
  }, {
    "uuid" : "39632902-1430-44f4-9165-19e3cb6393c2",
    "name" : "Gamma Discrete",
    "is_discrete" : true,
    "discrete_log_palette" : {
      "palette_pairs" : [ {
        "palette" : {
          "name" : "Name 1",
          "color" : "#ffffff00"
        },
        "discrete_value" : 1
      }, {
        "palette" : {
          "name" : "Name 2",
          "color" : "#ff008000"
        },
        "discrete_value" : 2
      }, {
        "palette" : {
          "name" : "Name 3",
          "color" : "#ff000000"
        },
        "discrete_value" : 3
      }, {
        "palette" : {
          "name" : "Name 4",
          "color" : "#ff00bfff"
        },
        "discrete_value" : 4
      } ],
      "out_of_range_color" : "#ff8f9ac1"
    }
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/logs

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the logs whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Log name
content[].unit String Measure unit of the log data values. Absent when not set
content[].is_discrete Boolean true for discrete logs, otherwise false
content[].discrete_log_palette Object Discrete log palette settings. Present only for discrete logs
content[].discrete_log_palette.palette_pairs Array Palette mappings for discrete values
content[].discrete_log_palette.palette_pairs[].palette Object Palette item for the discrete value
content[].discrete_log_palette.palette_pairs[].palette.name String Palette item name
content[].discrete_log_palette.palette_pairs[].palette.color String Palette item color: # followed by 8 hex digits, e.g. #ff00bfff
content[].discrete_log_palette.palette_pairs[].discrete_value Number Discrete value mapped to the palette item
content[].discrete_log_palette.out_of_range_color String Out-of-range color for discrete log palette
content[].uuid String Log UUID

Get logs by typewell

Get a list of logs by typewell UUID with pagination, in creation order. Logs that do not contain data will not be included in the response. After creating the log, you need to fill it with data using the commands Extend log data or Replace log data

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/fc9991f0-60df-40ee-9a50-005ae3265441/logs?offset=0&limit=10&filter=mMa' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/fc9991f0-60df-40ee-9a50-005ae3265441/logs?offset=0&limit=10&filter=mMa HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c4097328888b3c41948244908028ed43
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "efcaf21d-cb0c-4171-8d4e-8d8d30273200",
    "name" : "Gamma Ray",
    "is_discrete" : false
  }, {
    "uuid" : "19f28601-cb31-470b-8b0b-7b262f57a53a",
    "name" : "Gamma Discrete",
    "is_discrete" : true,
    "discrete_log_palette" : {
      "palette_pairs" : [ {
        "palette" : {
          "name" : "Name 1",
          "color" : "#ffffff00"
        },
        "discrete_value" : 1
      }, {
        "palette" : {
          "name" : "Name 2",
          "color" : "#ff008000"
        },
        "discrete_value" : 2
      }, {
        "palette" : {
          "name" : "Name 3",
          "color" : "#ff000000"
        },
        "discrete_value" : 3
      }, {
        "palette" : {
          "name" : "Name 4",
          "color" : "#ff00bfff"
        },
        "discrete_value" : 4
      } ],
      "out_of_range_color" : "#ff8f9ac1"
    }
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/logs

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the logs whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Log name
content[].unit String Measure unit of the log data values. Absent when not set
content[].is_discrete Boolean true for discrete logs, otherwise false
content[].discrete_log_palette Object Discrete log palette settings. Present only for discrete logs
content[].discrete_log_palette.palette_pairs Array Palette mappings for discrete values
content[].discrete_log_palette.palette_pairs[].palette Object Palette item for the discrete value
content[].discrete_log_palette.palette_pairs[].palette.name String Palette item name
content[].discrete_log_palette.palette_pairs[].palette.color String Palette item color: # followed by 8 hex digits, e.g. #ff00bfff
content[].discrete_log_palette.palette_pairs[].discrete_value Number Discrete value mapped to the palette item
content[].discrete_log_palette.out_of_range_color String Out-of-range color for discrete log palette
content[].uuid String Log UUID

Get log data

Get log data by UUID. MD values are returned in the project depth unit, data values as stored. An undefined value is returned as {"undefined": true} instead of {"val": ...}. Returns 404 if the log has no data yet

Request

$ curl 'https://solo.cloud/public/api/v1/logs/c4e3d255-827e-4e2c-ab76-7aacfe0f05da/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/logs/c4e3d255-827e-4e2c-ab76-7aacfe0f05da/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 236196e043f5ed220203c8a1dc6c7b05
Content-Type: application/json

{
  "log_points" : [ {
    "data" : {
      "val" : -3688.6927
    },
    "md" : {
      "val" : 744.6263999999999
    }
  }, {
    "data" : {
      "val" : 16.581
    },
    "md" : {
      "val" : 744.7787999999999
    }
  }, {
    "data" : {
      "val" : -11.85
    },
    "md" : {
      "val" : 744.9311999999999
    }
  }, {
    "data" : {
      "val" : 15.187
    },
    "md" : {
      "val" : 745.0835999999999
    }
  }, {
    "data" : {
      "val" : -4.363
    },
    "md" : {
      "val" : 745.2359999999999
    }
  }, {
    "data" : {
      "val" : -40.475
    },
    "md" : {
      "val" : 745.3883999999999
    }
  }, {
    "data" : {
      "val" : 61.463
    },
    "md" : {
      "val" : 745.5407999999999
    }
  }, {
    "data" : {
      "val" : 82.305
    },
    "md" : {
      "val" : 745.6931999999999
    }
  }, {
    "data" : {
      "val" : 114.139
    },
    "md" : {
      "val" : 745.8455999999999
    }
  }, {
    "data" : {
      "val" : 144.503
    },
    "md" : {
      "val" : 745.9979999999999
    }
  } ]
}

GET /public/api/v1/logs/{uuid}/data

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
log_points Array Points array
log_points[].data Object Point data. For an undefined (null) value it is {"undefined": true} without val
log_points[].data.val Number Point data value in the log unit, as stored
log_points[].md Object Point MD
log_points[].md.val Number Point MD value in the project depth unit (m or ft)

Update log metadata

Update log metadata by UUID. Only the fields present in the request are changed. To make a log discrete, pass is_discrete = true together with discrete_log_palette: the log data must hold integer values only, and the set of palette discrete_value values must be equal to the set of defined log data values. Making a log discrete also sets its display range to the minimum and maximum palette discrete_value

Request

$ curl 'https://solo.cloud/public/api/v1/logs/43ba8edb-3e46-4037-b38d-aad79deff2d1' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New log name",
  "is_discrete" : true,
  "discrete_log_palette" : {
    "palette_pairs" : [ {
      "palette" : {
        "name" : "Name 1",
        "color" : "#ffffff00"
      },
      "discrete_value" : 1
    }, {
      "palette" : {
        "name" : "Name 2",
        "color" : "#ff008000"
      },
      "discrete_value" : 2
    }, {
      "palette" : {
        "name" : "Name 3",
        "color" : "#ff000000"
      },
      "discrete_value" : 3
    }, {
      "palette" : {
        "name" : "Name 4",
        "color" : "#ff00bfff"
      },
      "discrete_value" : 4
    } ],
    "out_of_range_color" : "#ff8f9ac1"
  }
}'
PATCH /public/api/v1/logs/43ba8edb-3e46-4037-b38d-aad79deff2d1 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 640

{
  "name" : "New log name",
  "is_discrete" : true,
  "discrete_log_palette" : {
    "palette_pairs" : [ {
      "palette" : {
        "name" : "Name 1",
        "color" : "#ffffff00"
      },
      "discrete_value" : 1
    }, {
      "palette" : {
        "name" : "Name 2",
        "color" : "#ff008000"
      },
      "discrete_value" : 2
    }, {
      "palette" : {
        "name" : "Name 3",
        "color" : "#ff000000"
      },
      "discrete_value" : 3
    }, {
      "palette" : {
        "name" : "Name 4",
        "color" : "#ff00bfff"
      },
      "discrete_value" : 4
    } ],
    "out_of_range_color" : "#ff8f9ac1"
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bac8f20bf02ad3ad996340548d14d6c3

PATCH /public/api/v1/logs/{uuid}

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New log name, up to 200 characters. Omit it to keep the current name
unit String Measure unit of the log data values, up to 100 characters. The values themselves are not converted
is_discrete Boolean true to make the log discrete (requires discrete_log_palette and log data), false to make it non-discrete. Omit it to keep the current setting
discrete_log_palette Object Discrete log palette settings. Required when is_discrete is true, ignored otherwise
discrete_log_palette.palette_pairs Array Palette mappings for discrete values, 1 to 50 items. The set of discrete_value values must be equal to the set of defined log data values, which must all be integers
discrete_log_palette.palette_pairs[].palette Object Palette item for the discrete value
discrete_log_palette.palette_pairs[].palette.name String Palette item name
discrete_log_palette.palette_pairs[].palette.color String Palette item color: # followed by 8 hex digits, e.g. #ff00bfff
discrete_log_palette.palette_pairs[].discrete_value Number Discrete value mapped to the palette item: an integer, unique within the palette
discrete_log_palette.out_of_range_color String Out-of-range color for discrete log palette: # followed by 8 hex digits

Response body

Empty body

Extend log data

Append points to the log data. Only the request points with MD greater than the last MD of the existing data are added, the other request points are ignored. If the log has no data yet, all points are stored. The new data can become visible in Get log data with a short delay after a successful response

Request

$ curl 'https://solo.cloud/public/api/v1/logs/fbd5cd37-8906-4afc-be58-419a46e44d1f/data' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "log_points" : [ {
    "value" : {
      "val" : 96.36
    },
    "index" : {
      "val" : 6494.5
    }
  }, {
    "value" : {
      "val" : 16.36
    },
    "index" : {
      "val" : -999.25
    }
  } ],
  "value_unit" : "ft",
  "index_unit" : "ft"
}'
PATCH /public/api/v1/logs/fbd5cd37-8906-4afc-be58-419a46e44d1f/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 256

{
  "log_points" : [ {
    "value" : {
      "val" : 96.36
    },
    "index" : {
      "val" : 6494.5
    }
  }, {
    "value" : {
      "val" : 16.36
    },
    "index" : {
      "val" : -999.25
    }
  } ],
  "value_unit" : "ft",
  "index_unit" : "ft"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 274196f99614e753ef096653f5eb2393

PATCH /public/api/v1/logs/{uuid}/data

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
index_unit String Measure unit of the point MD (index) values: m, ft or ftUS (case-sensitive). Defaults to the project depth unit
value_unit String Measure unit of the point data values, up to 100 characters. The values are not converted to another unit. When it differs from the current log unit, the log unit is updated. Omit it to keep the current log unit
log_points Array Log points array, at least one point with a defined index, otherwise 400 is returned. Each point must contain both index and value
log_points[].value.val Number Point data value. For an undefined (null) value pass {"undefined": true} as value. Null-value markers such as -999.25, -999, -9999, -32767 and -99999 are stored as undefined values
log_points[].index.val Number Point MD value in index_unit

Response body

Empty body

Replace log data

Replace all points of the log data with the points of the request. The new data can become visible in Get log data with a short delay after a successful response

Request

$ curl 'https://solo.cloud/public/api/v1/logs/c4e3d255-827e-4e2c-ab76-7aacfe0f05da/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "log_points" : [ {
    "value" : {
      "val" : 96.36
    },
    "index" : {
      "val" : 6494.5
    }
  }, {
    "value" : {
      "val" : 16.36
    },
    "index" : {
      "val" : -999.25
    }
  } ],
  "value_unit" : "ft",
  "index_unit" : "ft"
}'
PUT /public/api/v1/logs/c4e3d255-827e-4e2c-ab76-7aacfe0f05da/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 256

{
  "log_points" : [ {
    "value" : {
      "val" : 96.36
    },
    "index" : {
      "val" : 6494.5
    }
  }, {
    "value" : {
      "val" : 16.36
    },
    "index" : {
      "val" : -999.25
    }
  } ],
  "value_unit" : "ft",
  "index_unit" : "ft"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 38ddfebd0de6455fb8eba21cc6b402df

PUT /public/api/v1/logs/{uuid}/data

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
index_unit String Measure unit of the point MD (index) values: m, ft or ftUS (case-sensitive). Defaults to the project depth unit
value_unit String Measure unit of the point data values, up to 100 characters. The values are not converted to another unit. When it differs from the current log unit, the log unit is updated. Omit it to keep the current log unit
log_points Array Log points array, at least one point with a defined index, otherwise 400 is returned. Each point must contain both index and value
log_points[].value.val Number Point data value. For an undefined (null) value pass {"undefined": true} as value. Null-value markers such as -999.25, -999, -9999, -32767 and -99999 are stored as undefined values
log_points[].index.val Number Point MD value in index_unit

Response body

Empty body

Move log to well folder

Move log into a folder (at any nesting level) of the lateral or typewell it belongs to, or to the well root when folder is null or omitted. A folder that is not found or belongs to another well returns 400

Request

$ curl 'https://solo.cloud/public/api/v1/logs/579d9539-4ce1-4895-bfbc-7b117d386836/folder' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "folder" : "c61e9abc-e9ef-4068-b5d6-d7f3df0d5b40"
}'
PUT /public/api/v1/logs/579d9539-4ce1-4895-bfbc-7b117d386836/folder HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55

{
  "folder" : "c61e9abc-e9ef-4068-b5d6-d7f3df0d5b40"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 095060c9ef52f0408774217399c49ceb

PUT /public/api/v1/logs/{uuid}/folder

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
folder String UUID of a folder of the lateral or typewell the log belongs to. Pass null or omit it to move the log to the well root

Response body

Empty body

Delete log

Delete log by UUID. Returns 403 if the log is locked or is a private log of another user

Request

$ curl 'https://solo.cloud/public/api/v1/logs/579d9539-4ce1-4895-bfbc-7b117d386836' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/logs/579d9539-4ce1-4895-bfbc-7b117d386836 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a05eb36206661c17c7e1db67098aae8c

DELETE /public/api/v1/logs/{uuid}

Path parameter Description
uuid Log UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

11. Images

Create image

Create image by lateral UUID. The image is placed on the lateral vertical section by its bottom_left and top_right corners (VS in the project horizontal unit, TVDSS in the project depth unit, for METER_FOOT VS is in meters and TVDSS in feet), bottom_left values must be less than the top_right ones. The image is created without content, upload it with Upload image

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6df90f07-78c6-4c22-b8fe-fed47e006fce/images' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "image name",
  "azimuth" : {
    "val" : 0.0
  },
  "bottom_left" : {
    "vs" : {
      "val" : -30.0
    },
    "tvdss" : {
      "val" : -67.0
    }
  },
  "top_right" : {
    "vs" : {
      "val" : 50.0
    },
    "tvdss" : {
      "val" : -50.0
    }
  }
}'
POST /public/api/v1/wells/6df90f07-78c6-4c22-b8fe-fed47e006fce/images HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 275

{
  "name" : "image name",
  "azimuth" : {
    "val" : 0.0
  },
  "bottom_left" : {
    "vs" : {
      "val" : -30.0
    },
    "tvdss" : {
      "val" : -67.0
    }
  },
  "top_right" : {
    "vs" : {
      "val" : 50.0
    },
    "tvdss" : {
      "val" : -50.0
    }
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ed2e2719c3c4d44bae513fc85c770e44
Content-Type: application/json

{
  "uuid" : "ce4859c0-71ed-48c3-9e12-101733c3eaa5"
}

POST /public/api/v1/wells/{uuid}/images

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Image name, 2 to 200 characters, must not start or end with a whitespace character
azimuth.val Number Azimuth (degrees) the image applies to. If omitted, the lateral azimuth (0 if the lateral has none) is applied (on update the current image azimuth is not kept)
bottom_left Object Bottom left corner of the image. Its vs and tvdss must be less than those of top_right
top_right Object Top right corner of the image
bottom_left.vs.val Number VS point coordinate value in the project horizontal unit (meters for METER_FOOT)
bottom_left.tvdss.val Number TVDSS point coordinate value in the project depth unit (feet for METER_FOOT)
top_right.vs.val Number VS point coordinate value in the project horizontal unit (meters for METER_FOOT)
top_right.tvdss.val Number TVDSS point coordinate value in the project depth unit (feet for METER_FOOT)

Response body

Path Type Description
uuid String Created image UUID

Update image

Update image name, azimuth and corners by UUID. The image content is not changed. If azimuth is omitted, the lateral azimuth is applied. name, bottom_left and top_right with defined vs and tvdss are required, otherwise 400 is returned

Request

$ curl 'https://solo.cloud/public/api/v1/images/e8b869f6-6380-4a8d-9f0e-9deb95d4c399' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "new image name",
  "azimuth" : {
    "val" : 0.0
  },
  "bottom_left" : {
    "vs" : {
      "val" : -100.0
    },
    "tvdss" : {
      "val" : -50.0
    }
  },
  "top_right" : {
    "vs" : {
      "val" : -50.0
    },
    "tvdss" : {
      "val" : -40.0
    }
  }
}'
PUT /public/api/v1/images/e8b869f6-6380-4a8d-9f0e-9deb95d4c399 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 281

{
  "name" : "new image name",
  "azimuth" : {
    "val" : 0.0
  },
  "bottom_left" : {
    "vs" : {
      "val" : -100.0
    },
    "tvdss" : {
      "val" : -50.0
    }
  },
  "top_right" : {
    "vs" : {
      "val" : -50.0
    },
    "tvdss" : {
      "val" : -40.0
    }
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4a9fe21eecad32673dfe3e96b78dcbd7

PUT /public/api/v1/images/{uuid}

Path parameter Description
uuid Image UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Image name, 2 to 200 characters, must not start or end with a whitespace character
azimuth.val Number Azimuth (degrees) the image applies to. If omitted, the lateral azimuth (0 if the lateral has none) is applied (on update the current image azimuth is not kept)
bottom_left Object Bottom left corner of the image. Its vs and tvdss must be less than those of top_right
top_right Object Top right corner of the image
bottom_left.vs.val Number VS point coordinate value in the project horizontal unit (meters for METER_FOOT)
bottom_left.tvdss.val Number TVDSS point coordinate value in the project depth unit (feet for METER_FOOT)
top_right.vs.val Number VS point coordinate value in the project horizontal unit (meters for METER_FOOT)
top_right.tvdss.val Number TVDSS point coordinate value in the project depth unit (feet for METER_FOOT)

Response body

Empty body

Upload image

Upload image content by UUID, replacing the previous content. The request body is the image file. Only PNG images are accepted (the format is detected from the content), width and height must not exceed 10000 pixels by default, otherwise 400 is returned. Send the file as raw bytes, e.g. curl --data-binary @image.png -H 'Content-Type: image/png' ...

Request

$ curl 'https://solo.cloud/public/api/v1/images/c323be03-2919-40b9-9ab6-e70dfc98f74f/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: image/png; charset=ISO-8859-1' \
    -d '<binary image data>'
PUT /public/api/v1/images/c323be03-2919-40b9-9ab6-e70dfc98f74f/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: image/png; charset=ISO-8859-1
Host: solo.cloud
Content-Length: 19

<binary image data>

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7ca09d1608cbbfc40a3dcd2addaad02c

PUT /public/api/v1/images/{uuid}/data

Path parameter Description
uuid Image UUID
Header Description
Authorization OAuth2 authorization header
Content-Type Must be image/png, the request body is the PNG file

Response body

Empty body

Upload image (multipart)

Same as Upload image, but the file is sent in the image part of a multipart/form-data request

Request

$ curl 'https://solo.cloud/public/api/v1/images/76e0edb5-9a0f-4be3-ab12-ebb6f4f3d1dd/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: multipart/form-data' \
    -F 'image=<binary image data>;type=image/png'
PUT /public/api/v1/images/76e0edb5-9a0f-4be3-ab12-ebb6f4f3d1dd/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: solo.cloud

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image
Content-Type: image/png

<binary image data>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: def2831fb51c0139d76bf8296c299eb8

PUT /public/api/v1/images/{uuid}/data

Path parameter Description
uuid Image UUID
Part Description
image Request part containing PNG image
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

12. Mudlogs

Create lateral mudlog

Create an empty mudlog by lateral UUID. Mudlog names do not have to be unique. The mudlog is not listed by Get mudlogs by lateral until its data is uploaded

Request

$ curl 'https://solo.cloud/public/api/v1/wells/44bb3dac-3f32-44f6-b37f-584dd8eaee08/mudlogs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Mudlog name"
}'
POST /public/api/v1/wells/44bb3dac-3f32-44f6-b37f-584dd8eaee08/mudlogs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 28

{
  "name" : "Mudlog name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4c6c27ac90ced4a7a6f2d3be891839e1
Content-Type: application/json

{
  "uuid" : "bbdff82f-ef39-41b5-b152-5c64b979edf7"
}

POST /public/api/v1/wells/{uuid}/mudlogs

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Mudlog name, up to 200 characters

Response body

Path Type Description
uuid String Created mudlog UUID

Create typewell mudlog

Create an empty mudlog by typewell UUID. Mudlog names do not have to be unique. The mudlog is not listed by Get mudlogs by typewell until its data is uploaded

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/6405ee86-7d34-42e6-a224-21c83e38a3f9/mudlogs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Mudlog name"
}'
POST /public/api/v1/typewells/6405ee86-7d34-42e6-a224-21c83e38a3f9/mudlogs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 28

{
  "name" : "Mudlog name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bd2687eaf51d23b39d98e9c7a0d09792
Content-Type: application/json

{
  "uuid" : "6e1f1f32-67a2-47c4-858b-59b60e061d13"
}

POST /public/api/v1/typewells/{uuid}/mudlogs

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Mudlog name, up to 200 characters

Response body

Path Type Description
uuid String Created mudlog UUID

Get mudlogs by lateral

Get a list of mudlogs by lateral UUID with pagination, in creation order. Mudlogs that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/wells/44bb3dac-3f32-44f6-b37f-584dd8eaee08/mudlogs?offset=0&limit=10&filter=mMa' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/44bb3dac-3f32-44f6-b37f-584dd8eaee08/mudlogs?offset=0&limit=10&filter=mMa HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6a72732b285c4e16f59ccc15831f5eb3
Content-Type: application/json

{
  "content" : [ {
    "name" : "Gamma Ray",
    "uuid" : "7ffc7713-6655-46cf-9b90-43f08010b79e"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/mudlogs

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the mudlogs whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Mudlog name
content[].uuid String Mudlog UUID

Get mudlogs by typewell

Get a list of mudlogs by typewell UUID with pagination, in creation order. Mudlogs that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/6405ee86-7d34-42e6-a224-21c83e38a3f9/mudlogs?offset=0&limit=10&filter=mMa' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/6405ee86-7d34-42e6-a224-21c83e38a3f9/mudlogs?offset=0&limit=10&filter=mMa HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ab69bce4f5dac416de58c32eb15fce0e
Content-Type: application/json

{
  "content" : [ {
    "name" : "Gamma Ray",
    "uuid" : "6f131ec2-c9df-483f-951b-3c6a55845655"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/mudlogs

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the mudlogs whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].name String Mudlog name
content[].uuid String Mudlog UUID

Get mudlog data

Get mudlog data by UUID. MD values are returned in project depth units. Channel display settings (lithology_type, solid_color, pattern_color) are not returned. Returns 400 if the mudlog has no data

Request

$ curl 'https://solo.cloud/public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a2bc07102ca7025e6e046c01133b8f99
Content-Type: application/json

{
  "logs" : [ {
    "uuid" : "818184cd-cd97-4bd8-9f1d-1cc058ae999b",
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "uuid" : "6ab5999e-7897-44ea-8b14-4dc5524d5d37",
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  }, {
    "uuid" : "cd73e32f-2c17-4519-848c-6a005ae9feb2",
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "uuid" : "ee2bbe16-9dc1-49b7-a9de-fa619ab25053",
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  } ]
}

GET /public/api/v1/mudlogs/{uuid}/data

Path parameter Description
uuid Mudlog UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
logs[].uuid String Channel UUID, generated by the server for data uploaded through the public upload and append endpoints
logs[].name String Channel name
logs[].unit String Channel unit
logs[].log_points Array Channel points
logs[].log_points[].md.val Number Point MD value (project depth units)
logs[].log_points[].data.val Number Point data value
logs[].log_points[].data.undefined Boolean true if point data value is undefined

Update mudlog metadata

Rename mudlog by UUID. Only name can be changed, the mudlog data is not changed

Request

$ curl 'https://solo.cloud/public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated mudlog name"
}'
PATCH /public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 36

{
  "name" : "Updated mudlog name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e2b53e9307700fcaea14a2d931c6bf17

PATCH /public/api/v1/mudlogs/{uuid}

Path parameter Description
uuid Mudlog UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New mudlog name, up to 200 characters

Response body

Empty body

Upload\replace mudlog data

Upload mudlog data by UUID, replacing all existing channels. MD values are in project depth units, all channels of the request must have the same set of MD values, points are stored sorted by MD. Channel UUIDs are assigned by the server, the mudlog display settings are rebuilt from defaults with the channel lithology_type, solid_color and pattern_color of the request and visual_bound_max applied

Request

$ curl 'https://solo.cloud/public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data?visual_bound_max=100.5' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "logs" : [ {
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "lithology_type" : "HALITE",
    "solid_color" : "BLUE",
    "pattern_color" : "GREEN",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  } ]
}'
PUT /public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data?visual_bound_max=100.5 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 684

{
  "logs" : [ {
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "lithology_type" : "HALITE",
    "solid_color" : "BLUE",
    "pattern_color" : "GREEN",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 94605404529707c532428fc8621015f0

PUT /public/api/v1/mudlogs/{uuid}/data

Path parameter Description
uuid Mudlog UUID
Parameter Description
visual_bound_max Optional. Upper bound of the mudlog display scale, applied only if greater than 0. If not set, it is calculated from the uploaded data
Header Description
Authorization OAuth2 authorization header
Body field Type Description
logs Array Mudlog channels that replace all existing channels of the mudlog. All channels must have the same set of MD values
logs[].name String Channel name, up to 200 characters
logs[].unit String Optional. Channel unit, up to 100 characters
logs[].lithology_type String Optional. Channel lithology, sets the fill pattern of the channel. Allowed values are 'EMPTY', 'CLAY_SHALE', 'SAND_SANDSTONE', 'ARGILLACEOUS_OR_SHALY_SAND', 'LIMESTONE', 'SANDY_LIMESTONE', 'DOLOMITE', 'GYPSUM', 'SALT', 'CHALK', 'HALITE', 'BRECCIA', 'OPEN_UPWARD_TRIANGLES', 'SANDY_OR_SILTY_SHALE', 'SILTY_LIMESTONE', 'ARGILLACEOUS_SHALY_LIMESTONE', 'DOLOMITIC_LIMESTONE_LIMY_DOLOMITE', 'SANDY_DOLOMITE', 'SILTY_DOLOMITE', 'ARGILLACEOUS_SHALY_DOLOMITE', 'SILT_SILTSTONE', 'DOLOMITIC_SILTSTONE', 'ANHYDRITE', 'IGNEOUS', 'METAMORPHIC', 'CALCARENITE', 'CALCARENITE_DOLOMITE', 'CALCARENITIC_LIMESTONE', 'MARL', 'COARSE_CLASTIC_CARBONATE', 'DOLOMITIC_SAND', 'SILTSTONE', 'INGE', 'HAL', 'TILL', 'CEMENT', 'MARLSTONE', 'CLAY', 'SHALE', 'SCHOL', 'SHGY', 'IGNVOLC', 'CHERT', 'CONGLOMERATE', 'CGL', 'META', 'BENT', 'ANHY', 'GYP', 'SANDSTONE', 'CONGLOMERATIC_SANDSTONE', 'BENTONITE', 'BRECCIAS', 'MARLS', 'PACKSTONE', 'WACKESTONE'
logs[].solid_color String Optional. Channel fill color. Allowed values are 'CYAN_BLUE', 'BLUE', 'INDIGO', 'GREEN', 'TEAL_GREEN', 'TEAL', 'OLIVE_YELLOW', 'GOLD', 'ORANGE', 'RED_ORANGE', 'RED', 'PINK', 'MAGENTA', 'DARK_BLUE_GRAY', 'GRAY'
logs[].pattern_color String Optional. Color of the channel fill pattern. Allowed values are 'CYAN_BLUE', 'BLUE', 'INDIGO', 'GREEN', 'TEAL_GREEN', 'TEAL', 'OLIVE_YELLOW', 'GOLD', 'ORANGE', 'RED_ORANGE', 'RED', 'PINK', 'MAGENTA', 'DARK_BLUE_GRAY', 'GRAY'
logs[].log_points Array Channel points, each point must have md and data
logs[].log_points[].md.val Number Point MD value (project depth units). Must be defined, non-negative and unique within the channel
logs[].log_points[].data.val Number Point data value
logs[].log_points[].data.undefined Boolean true if point data value is undefined

Response body

Empty body

Append mudlog data

Append the channels of the request to the mudlog with the given UUID, the existing channels are kept unchanged. A channel is not merged into an existing channel with the same name, it is added as another channel. The request format is the same as in Upload\replace mudlog data. For a mudlog without data it works as upload

Request

$ curl 'https://solo.cloud/public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data?visual_bound_max=100.5' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "logs" : [ {
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "lithology_type" : "HALITE",
    "solid_color" : "BLUE",
    "pattern_color" : "GREEN",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  } ]
}'
PATCH /public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d/data?visual_bound_max=100.5 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 684

{
  "logs" : [ {
    "name" : "Mudlog channel1",
    "unit" : "Mudlog channel1 unit",
    "lithology_type" : "HALITE",
    "solid_color" : "BLUE",
    "pattern_color" : "GREEN",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "undefined" : true
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "val" : 2.0
      }
    } ]
  }, {
    "name" : "Mudlog channel2",
    "log_points" : [ {
      "md" : {
        "val" : 100.0
      },
      "data" : {
        "val" : 178.0
      }
    }, {
      "md" : {
        "val" : 200.0
      },
      "data" : {
        "undefined" : true
      }
    } ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b226f51705020640621fe4a76ab4de2e

PATCH /public/api/v1/mudlogs/{uuid}/data

Path parameter Description
uuid Mudlog UUID
Parameter Description
visual_bound_max Optional. Upper bound of the mudlog display scale, applied only if greater than 0. If not set, the current value is kept, or it is calculated from the uploaded data if the mudlog has no data yet
Header Description
Authorization OAuth2 authorization header
Body field Type Description
logs Array Mudlog channels to add to the existing channels of the mudlog. All channels in the request must have the same set of MD values
logs[].name String Channel name, up to 200 characters
logs[].unit String Optional. Channel unit, up to 100 characters
logs[].lithology_type String Optional. Channel lithology, sets the fill pattern of the channel. Allowed values are 'EMPTY', 'CLAY_SHALE', 'SAND_SANDSTONE', 'ARGILLACEOUS_OR_SHALY_SAND', 'LIMESTONE', 'SANDY_LIMESTONE', 'DOLOMITE', 'GYPSUM', 'SALT', 'CHALK', 'HALITE', 'BRECCIA', 'OPEN_UPWARD_TRIANGLES', 'SANDY_OR_SILTY_SHALE', 'SILTY_LIMESTONE', 'ARGILLACEOUS_SHALY_LIMESTONE', 'DOLOMITIC_LIMESTONE_LIMY_DOLOMITE', 'SANDY_DOLOMITE', 'SILTY_DOLOMITE', 'ARGILLACEOUS_SHALY_DOLOMITE', 'SILT_SILTSTONE', 'DOLOMITIC_SILTSTONE', 'ANHYDRITE', 'IGNEOUS', 'METAMORPHIC', 'CALCARENITE', 'CALCARENITE_DOLOMITE', 'CALCARENITIC_LIMESTONE', 'MARL', 'COARSE_CLASTIC_CARBONATE', 'DOLOMITIC_SAND', 'SILTSTONE', 'INGE', 'HAL', 'TILL', 'CEMENT', 'MARLSTONE', 'CLAY', 'SHALE', 'SCHOL', 'SHGY', 'IGNVOLC', 'CHERT', 'CONGLOMERATE', 'CGL', 'META', 'BENT', 'ANHY', 'GYP', 'SANDSTONE', 'CONGLOMERATIC_SANDSTONE', 'BENTONITE', 'BRECCIAS', 'MARLS', 'PACKSTONE', 'WACKESTONE'
logs[].solid_color String Optional. Channel fill color. Allowed values are 'CYAN_BLUE', 'BLUE', 'INDIGO', 'GREEN', 'TEAL_GREEN', 'TEAL', 'OLIVE_YELLOW', 'GOLD', 'ORANGE', 'RED_ORANGE', 'RED', 'PINK', 'MAGENTA', 'DARK_BLUE_GRAY', 'GRAY'
logs[].pattern_color String Optional. Color of the channel fill pattern. Allowed values are 'CYAN_BLUE', 'BLUE', 'INDIGO', 'GREEN', 'TEAL_GREEN', 'TEAL', 'OLIVE_YELLOW', 'GOLD', 'ORANGE', 'RED_ORANGE', 'RED', 'PINK', 'MAGENTA', 'DARK_BLUE_GRAY', 'GRAY'
logs[].log_points Array Channel points, each point must have md and data
logs[].log_points[].md.val Number Point MD value (project depth units). Must be defined, non-negative and unique within the channel
logs[].log_points[].data.val Number Point data value
logs[].log_points[].data.undefined Boolean true if point data value is undefined

Response body

Empty body

Delete mudlog

Delete mudlog by UUID. Returns 403 if the mudlog is locked or is a private mudlog of another user

Request

$ curl 'https://solo.cloud/public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/mudlogs/b228826c-a08f-4f44-a61d-2de94f7ed32d HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f1d49005d12158aa4a121f16d93332ca

DELETE /public/api/v1/mudlogs/{uuid}

Path parameter Description
uuid Mudlog UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

13. Drilling traces

Get traces collection

Get the list of traces available to the user's company: system traces, including robot-calculated ones (Rig Activity, KPIs, Slide Sheet), and custom traces of the company

Request

$ curl 'https://solo.cloud/public/api/v1/traces' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/traces HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bb9b04eb176e6b5dd25df9b511dcdfe6
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "f18afa65-7b06-4f6a-9494-746b3f10272f",
    "name" : "Axial Shock"
  }, {
    "uuid" : "97e29152-c59d-4055-b7e3-7d823e3eb122",
    "name" : "Axial Vibration"
  }, {
    "uuid" : "a415fee9-3992-4915-9ba2-262b084500f9",
    "name" : "Azimuth"
  }, {
    "uuid" : "f93bf5a7-9755-4163-9c44-6d107967db4b",
    "name" : "Bit depth"
  }, {
    "uuid" : "508ac83a-8d7e-45e6-b8c7-be7aa5dccbec",
    "name" : "Bit Depth Vertical"
  }, {
    "uuid" : "6a300b55-f00c-49ff-926a-7654a18731b2",
    "name" : "Bit on Bottom"
  }, {
    "uuid" : "cbfc47a9-4bb0-4a69-9747-136b5b5fa453",
    "name" : "Block position"
  }, {
    "uuid" : "1690e9e7-3c19-4053-8788-6935a0b2d034",
    "name" : "Block Velocity"
  }, {
    "uuid" : "a3fcfa5d-8881-499d-91e8-48a7b3dc2215",
    "name" : "MWD Continuous Inclination"
  }, {
    "uuid" : "512cf80d-8872-435f-8e88-bed593b12670",
    "name" : "MWD Continuous Azimuth"
  }, {
    "uuid" : "19d0f8f5-fd1c-41f8-86c4-939a5dada63e",
    "name" : "Caliper"
  }, {
    "uuid" : "e5145f9f-e946-432c-ab0b-6bf0fbe9188c",
    "name" : "Casing Pressure"
  }, {
    "uuid" : "cc9ad146-13ae-4127-801c-4a689be7487d",
    "name" : "Choke Pressure"
  }, {
    "uuid" : "274c2682-91d7-4a31-b0e3-8928ef561f0a",
    "name" : "Circulation hours"
  }, {
    "uuid" : "b7f8a98c-e6b5-46cf-ac77-fcb2a52588f8",
    "name" : "Collar RPM"
  }, {
    "uuid" : "e1f88165-de61-4da0-be1a-ce2d9d788cf3",
    "name" : "D-exponent"
  }, {
    "uuid" : "fd5fdd95-2cd8-4879-8403-2509ee3f66ee",
    "name" : "Density"
  }, {
    "uuid" : "544e3dd7-1464-4196-825b-b4da1085e4ff",
    "name" : "Depth of Cut"
  }, {
    "uuid" : "5e3a4999-9c76-4857-8cbf-eccf51539bbf",
    "name" : "Differential Pressure"
  }, {
    "uuid" : "2fd13e54-cfb7-477a-9c56-55c20b2cadb8",
    "name" : "Dip Angle"
  }, {
    "uuid" : "15be30d7-5ade-4595-ba27-e5ce9d1bf83e",
    "name" : "Downhole MSE"
  }, {
    "uuid" : "1e96aa39-75b9-4990-8042-a02a61a08646",
    "name" : "Downhole TQ"
  }, {
    "uuid" : "627bb479-067b-4e60-b4de-7679c48c6d0f",
    "name" : "Downhole WOB"
  }, {
    "uuid" : "78b342b0-ec47-4d9b-ae3a-0df49448c1ec",
    "name" : "PWD ECD"
  }, {
    "uuid" : "992a7d4e-f854-424d-911a-c674ef8e87f4",
    "name" : "Flow Out %"
  }, {
    "uuid" : "bda8a0dd-ced2-46bd-a82a-1db75b62653c",
    "name" : "Gamma Ray"
  }, {
    "uuid" : "cf0042b1-9c10-4eca-8aa6-3954147f4fad",
    "name" : "Total Gas"
  }, {
    "uuid" : "45fbab1e-efb3-420d-9786-6f3d6f2214ed",
    "name" : "Gas C1"
  }, {
    "uuid" : "fb2bceaf-d7c6-4921-b20b-1f6152f57060",
    "name" : "Gas C2"
  }, {
    "uuid" : "643fbb3b-fe7f-4fda-a276-295fc65ceb67",
    "name" : "Gas C3"
  }, {
    "uuid" : "cb23ab73-57c3-4344-af71-4a1c60cc024c",
    "name" : "Gas C4"
  }, {
    "uuid" : "20853910-11ea-46fb-b3a7-582e63625085",
    "name" : "Gas C5"
  }, {
    "uuid" : "5525d952-8db1-4641-b2fa-18fd185b7c9d",
    "name" : "Gas CO2"
  }, {
    "uuid" : "3ed2dacd-93ac-4e38-95ed-0a7b8b82c60e",
    "name" : "Gas H2S"
  }, {
    "uuid" : "27784730-2602-4442-ac2a-9ec9822baa6c",
    "name" : "Gas iso-C4"
  }, {
    "uuid" : "4b2627a3-6a3d-4751-b818-ce1f95cb3d6a",
    "name" : "Gas iso-C5"
  }, {
    "uuid" : "ecec68ec-9a33-44c6-bedb-609b69c7f022",
    "name" : "Gas nor-C4"
  }, {
    "uuid" : "3f85640e-889e-456e-93bc-3a2a567cd5f9",
    "name" : "Gas nor-C5"
  }, {
    "uuid" : "6a5faaf0-a756-4065-99a9-d84d1fe0bfd2",
    "name" : "Gravity Total"
  }, {
    "uuid" : "f86e140e-b5d0-4b5f-98de-951200fd8038",
    "name" : "GTF"
  }, {
    "uuid" : "d635c218-3d17-4f5d-98b4-026085c4f584",
    "name" : "Hole Depth"
  }, {
    "uuid" : "2d9cbed5-4d21-4243-89e6-586f1bb961ff",
    "name" : "Hole Depth Vertical"
  }, {
    "uuid" : "dfdf09da-5be0-495f-b802-15840ce93066",
    "name" : "Hookload"
  }, {
    "uuid" : "3a655e25-ff42-4c56-b083-9d6cc77a7a8c",
    "name" : "In Slips"
  }, {
    "uuid" : "624e443b-6a3b-4247-a648-53db39d19f1b",
    "name" : "Inclination"
  }, {
    "uuid" : "b2a12c8b-dc98-4b9d-96d6-6e020736ca1b",
    "name" : "Lateral Vibration"
  }, {
    "uuid" : "b6c70cd5-aff7-4bd7-bef6-dfb663c12da9",
    "name" : "Magnetic Field"
  }, {
    "uuid" : "03c53157-8443-40d8-8ef4-087f3205da5f",
    "name" : "Motor RPM"
  }, {
    "uuid" : "805070d4-e80a-4d0d-83d6-430ba7ab00bf",
    "name" : "MTF"
  }, {
    "uuid" : "702c9494-7666-435f-ad46-9c6a3f24faa3",
    "name" : "Flow In Rate"
  }, {
    "uuid" : "65c71407-9a65-484d-aeed-b4ef14b91582",
    "name" : "Flow Out Rate"
  }, {
    "uuid" : "4457de71-ae74-4fd6-ad87-c0f19275806e",
    "name" : "Mud Weight In"
  }, {
    "uuid" : "999d98fd-b761-488f-9af8-dca909ec7bd8",
    "name" : "Mud Weight Out"
  }, {
    "uuid" : "101c98d0-2643-4b75-8012-738faa9025f7",
    "name" : "MWD Turbine RPM"
  }, {
    "uuid" : "92e27c5f-3277-4a5c-a478-b9a989944671",
    "name" : "On bottom hours"
  }, {
    "uuid" : "5f527ef9-c86b-4e55-84c0-2b8df74de1c1",
    "name" : "Oscillate status"
  }, {
    "uuid" : "b7f3fdd3-ad94-4aa4-8e94-50f5ad4dee29",
    "name" : "Pit 1 Volume"
  }, {
    "uuid" : "f1b5479f-4488-47fe-9338-12591f2d48f9",
    "name" : "Pit 2 Volume"
  }, {
    "uuid" : "e5568169-182c-466e-99e0-6957159fe08c",
    "name" : "Pit 3 Volume"
  }, {
    "uuid" : "2f03c515-d6ff-41be-b7d4-83a77c13e6c3",
    "name" : "Pit 4 Volume"
  }, {
    "uuid" : "18accea3-a188-4189-bec9-3e78a207591e",
    "name" : "Pit 5 Volume"
  }, {
    "uuid" : "cce31e79-5444-4e8d-bcae-774314ac6958",
    "name" : "Pit 6 Volume"
  }, {
    "uuid" : "278c87fd-7b22-4118-8b12-84d6474cff5d",
    "name" : "Pit 7 Volume"
  }, {
    "uuid" : "45b1afbb-6d6c-4db5-93ff-0ffa94b802da",
    "name" : "Pit 8 Volume"
  }, {
    "uuid" : "ce850617-0391-4346-8834-1449a32722df",
    "name" : "Pump 1 Cumulative Strokes"
  }, {
    "uuid" : "27a591db-8db8-4148-9115-49d5df10ac7e",
    "name" : "Pump 1 Mud Flow In"
  }, {
    "uuid" : "328949d9-a0db-41fa-9c84-4064137315c7",
    "name" : "Pump 2 Cumulative Strokes"
  }, {
    "uuid" : "5286505c-c31c-4bb8-b3c7-f0900cce9fba",
    "name" : "Pump 2 Mud Flow In"
  }, {
    "uuid" : "a3ddb237-cd23-4f5d-999f-2a3e9f6821ee",
    "name" : "Pump 3 Cumulative Strokes"
  }, {
    "uuid" : "1e15c542-3673-4140-8165-1ad534e2b3dc",
    "name" : "Pump 3 Mud Flow In"
  }, {
    "uuid" : "30ad129a-4854-4bb5-8e1d-3c9065605fe2",
    "name" : "Pump Stroke Count"
  }, {
    "uuid" : "8f46e726-06b1-4c71-b638-203868bc4451",
    "name" : "PWD Annular Pressure"
  }, {
    "uuid" : "4265ba32-99d0-490b-a1a1-b8798206a82a",
    "name" : "Rate of Penetration Instantaneous"
  }, {
    "uuid" : "c4d4b89e-5e6c-404f-9d8d-5ca8b2c26885",
    "name" : "Resistivity"
  }, {
    "uuid" : "78334ca1-783e-4dc3-9f86-c86c391d6bac",
    "name" : "Rig State"
  }, {
    "uuid" : "b68b2510-7858-4dcb-b242-57fcd584e0aa",
    "name" : "ROP"
  }, {
    "uuid" : "f4b9e8ea-ada1-4aaf-b638-064916ece1d3",
    "name" : "RSS Toolface"
  }, {
    "uuid" : "f49024eb-cdf9-42a4-beca-974dc8348281",
    "name" : "Lateral Shock"
  }, {
    "uuid" : "98e64813-b867-400a-be7c-a8f31cb56047",
    "name" : "SPM1"
  }, {
    "uuid" : "9f50ec96-0d33-46c2-8b11-c1628fe39658",
    "name" : "SPM2"
  }, {
    "uuid" : "52a79823-4947-4796-b423-545ccd8194b6",
    "name" : "SPM3"
  }, {
    "uuid" : "0f936580-1edd-449c-b760-9142097dfec6",
    "name" : "SPM Total"
  }, {
    "uuid" : "f764306b-302e-4500-8518-4f149f839a85",
    "name" : "Standpipe Pressure"
  }, {
    "uuid" : "3d1105fa-a8de-4e54-981f-105b75142937",
    "name" : "StickSlip"
  }, {
    "uuid" : "30652f8a-15d2-4a10-9e86-2943a7bd5687",
    "name" : "Surface RPM"
  }, {
    "uuid" : "de8ce461-cf26-4e38-ac68-e2e228c331ab",
    "name" : "Surface Torque"
  }, {
    "uuid" : "8b6023ce-d4d7-46be-b9e1-d9ebc92b2711",
    "name" : "Surface Torque Max"
  }, {
    "uuid" : "354dbda4-8dc0-40e8-9723-8b63b794a003",
    "name" : "Survey MD"
  }, {
    "uuid" : "7a76ccd8-e64f-4155-9184-d5f66ac3a58a",
    "name" : "Temperature In"
  }, {
    "uuid" : "9d444b75-4c6b-496c-a945-f75f003e7a0a",
    "name" : "Temperature Out"
  }, {
    "uuid" : "ac3cc40c-6055-4efa-a4fa-6a9f787bcd9d",
    "name" : "Tool Temperature"
  }, {
    "uuid" : "957a4437-2806-43d6-9b2e-2fdb612be1de",
    "name" : "Torsional Vibration"
  }, {
    "uuid" : "f0ad751b-5c66-4961-b6b9-965b282d38d8",
    "name" : "Total MSE"
  }, {
    "uuid" : "5a89a54f-3c8e-40c9-8fae-fdb7437b8adb",
    "name" : "Bit RPM"
  }, {
    "uuid" : "6565f21c-0d1e-4ce6-bbcf-da4b7900f2f4",
    "name" : "Total Tank Volume"
  }, {
    "uuid" : "86e72bb4-8f89-405b-855b-117e6fdf5f24",
    "name" : "Total Volume Active"
  }, {
    "uuid" : "92e712cc-2fe4-4ebe-967c-603828f1bea5",
    "name" : "Trip Speed"
  }, {
    "uuid" : "107b71c0-ebe1-484f-91c3-c5f57a5ee2ba",
    "name" : "Trip Tank Volume"
  }, {
    "uuid" : "7392915c-10e3-4bd0-8717-3efd4eb2943f",
    "name" : "Time of Penetration"
  }, {
    "uuid" : "5ab9a650-9ccc-4709-a76e-10d5d3ede25a",
    "name" : "RSS Steering Ratio"
  }, {
    "uuid" : "44596b6b-f833-4299-aaf7-519c7b27e8e1",
    "name" : "WOB"
  }, {
    "uuid" : "8595db67-37e0-4389-8f29-6753c9a9e2f7",
    "name" : "WOB Max"
  }, {
    "uuid" : "c1ca14ae-6d00-48cb-9c6f-f0d9840c76b1",
    "name" : "X Accelerometer"
  }, {
    "uuid" : "05c50fad-d7e0-4752-be56-9c610c86e246",
    "name" : "X Magnetometer"
  }, {
    "uuid" : "1ceca6eb-2b67-4015-8930-8f4f64578bba",
    "name" : "Y Accelerometer"
  }, {
    "uuid" : "87cbf376-966b-4252-8368-0428bbeccf7a",
    "name" : "Y Magnetometer"
  }, {
    "uuid" : "8d4a8cb5-80cc-46fa-83c6-783c21598014",
    "name" : "Z Accelerometer"
  }, {
    "uuid" : "4fbd96a1-8606-4067-8b7f-c92a4f8d777d",
    "name" : "Z Magnetometer"
  }, {
    "uuid" : "c6e1722b-2a02-4470-b2d7-bf00f5506719",
    "name" : "Depth of Cut"
  }, {
    "uuid" : "89e07b1a-d50e-4b99-ada9-023f784767d8",
    "name" : "Downhole MSE"
  }, {
    "uuid" : "a1a0e98e-9e28-438e-9c7e-254e68d0c636",
    "name" : "Total MSE"
  }, {
    "uuid" : "5d4acff6-85ea-4dd7-aac1-bbe982f7bdfc",
    "name" : "Recommended WOB"
  }, {
    "uuid" : "3ffc495e-0d17-46a5-b688-e3242884bf67",
    "name" : "Recommended RPM"
  }, {
    "uuid" : "0eef088a-ce96-4670-8b21-4b090f76d177",
    "name" : "Recommended MFI"
  }, {
    "uuid" : "68a640b5-f885-4bea-a07e-49536fa2b93d",
    "name" : "Predicted WOB"
  }, {
    "uuid" : "2d348260-372a-4e87-a8b3-82d66d95196e",
    "name" : "Predicted RPM"
  }, {
    "uuid" : "8be6cd16-906a-465c-a04d-f1fd9459458e",
    "name" : "Predicted MFI"
  }, {
    "uuid" : "027be8e3-7fcb-4fd3-b064-1f50f5c4749b",
    "name" : "Predicted ROP"
  }, {
    "uuid" : "5fe2a454-86ad-4fdc-abbf-686e4f67a4fa",
    "name" : "Trip Out: Connection"
  }, {
    "uuid" : "f65f24d3-a306-4a1c-9765-5b8359aed7c3",
    "name" : "Trip Out: Running"
  }, {
    "uuid" : "43b1d9c6-4420-4866-9c1f-c3f9d1d5f543",
    "name" : "Weight to Weight"
  }, {
    "uuid" : "e3c996b6-9cdb-4876-ac99-0aab694b801a",
    "name" : "Rig Activity"
  }, {
    "uuid" : "6906b6ba-5ad3-4df7-8176-dbc844d02d54",
    "name" : "Slide Sheet"
  }, {
    "uuid" : "0cc5b768-8a11-4e11-9ef2-135344f7b1a2",
    "name" : "RSS DLink"
  }, {
    "uuid" : "07700dd6-bdaf-477a-8b79-c48631b653d6",
    "name" : "RSS Desired TF"
  }, {
    "uuid" : "36f79b61-728b-4524-bc87-b2d97f558be2",
    "name" : "RSS Target Inclination"
  }, {
    "uuid" : "89211184-204e-4f3d-a655-bc742743ccf4",
    "name" : "RSS Target Azimuth"
  }, {
    "uuid" : "6ea4cf91-c576-4941-9515-25fec2014f6d",
    "name" : "RSS Status Word 1"
  }, {
    "uuid" : "3677c17f-bad2-44ca-95bb-6265b9898965",
    "name" : "RSS Status Word 2"
  }, {
    "uuid" : "d2271377-87d2-49b3-b40c-c4fb91d55c37",
    "name" : "RSS Status Word 3"
  }, {
    "uuid" : "b673ea0c-eee0-49b4-99ce-8bb8843365f2",
    "name" : "Zeroed WOB"
  }, {
    "uuid" : "d181ddaf-7921-476a-a45c-fc3206a07198",
    "name" : "Zeroed Differential Pressure"
  }, {
    "uuid" : "2adc5cd8-a1de-48ca-916a-3236ed6ece9a",
    "name" : "Trip Out: Reaming"
  }, {
    "uuid" : "2326a7a3-bb68-4924-a9e5-a16b7b87d192",
    "name" : "Trip In: Reaming"
  }, {
    "uuid" : "ab7e5866-a3da-4e6c-b584-523799719b34",
    "name" : "Slip to slip"
  }, {
    "uuid" : "eb85cf68-047e-43b0-bbbb-75548c8e700e",
    "name" : "Trip In: Connection"
  }, {
    "uuid" : "fed6681e-1f21-466c-bf91-55fed528a07d",
    "name" : "Trip In: Running"
  }, {
    "uuid" : "db16f0ac-2c69-4237-933d-7f6ce24fa1dc",
    "name" : "Trip In: Washing"
  }, {
    "uuid" : "08e28406-7ade-4fb2-8dca-1628936f2b36",
    "name" : "Trip Out: Washing"
  }, {
    "uuid" : "4545b4f1-4f71-41aa-86c3-b87961459f5f",
    "name" : "Rotary Build Rate"
  }, {
    "uuid" : "1f0a45f4-1b62-11f0-902e-77c4b3b98667",
    "name" : "Rotary Turn Rate"
  }, {
    "uuid" : "f09337a9-ca89-411d-a2e6-aad17746b4ee",
    "name" : "Slack off & Drag"
  }, {
    "uuid" : "bf7c700d-de08-41c5-b20b-cb32d649d8e8",
    "name" : "Erratic Torque"
  }, {
    "uuid" : "f0519265-7a47-488a-978a-24997705844e",
    "name" : "Time from Last Connection"
  }, {
    "uuid" : "7136da25-7a78-4558-864e-8dd21623fbe9",
    "name" : "Time From Last Survey"
  }, {
    "uuid" : "b9e0a067-ab3a-4e59-8ec6-c14f33346df4",
    "name" : "Time On Bottom"
  }, {
    "uuid" : "69471b8a-c20a-449e-abc9-0147adaf6d14",
    "name" : "Static Time"
  }, {
    "uuid" : "265d885d-567d-4d27-843e-c9fa39800c1d",
    "name" : "Time to top"
  }, {
    "uuid" : "ef5b8413-dcec-4c4c-b607-6b4200142f7d",
    "name" : "Forecast Confidence"
  }, {
    "uuid" : "11b703b5-b0d2-43c5-a370-d509a9d4604b",
    "name" : "Drill Zone"
  }, {
    "uuid" : "44161596-6117-47bc-ae86-05561b38c773",
    "name" : "Recommended ROP"
  }, {
    "uuid" : "261cea68-1b62-11f0-8a2e-cbc9b8e5e876",
    "name" : "Motor Yield"
  }, {
    "uuid" : "11584aba-59fb-4a81-a12e-cf52e1d819c5",
    "name" : "KPI: Pumps On to Bottom"
  }, {
    "uuid" : "4e2f64a1-eaf9-4d7f-9e3f-616c68084bfd",
    "name" : "KPI: On Bottom to Slips"
  }, {
    "uuid" : "3084fd0c-0ea0-42b6-8024-768c8c26566d",
    "name" : "KPI: Slips to On Bottom"
  }, {
    "uuid" : "9a81e86b-2e78-4d23-87bb-b76232df40f2",
    "name" : "Motor Stall"
  }, {
    "uuid" : "01851a5a-9071-43df-86fc-673655c8f211",
    "name" : "RSS Continuous Azimuth"
  }, {
    "uuid" : "c7d0f834-b1cf-437f-94a6-ca8f07a1f8c9",
    "name" : "RSS Continious Inclination"
  }, {
    "uuid" : "5b30ffb3-2cbe-46ed-a9ec-87c5582ae1eb",
    "name" : "Rig State"
  }, {
    "uuid" : "51cae7eb-6edb-424f-b062-8f86b2532825",
    "name" : "Trip In: Connection Open Hole"
  }, {
    "uuid" : "6ae48c7b-9ba1-4005-920f-f732cf5ea3c5",
    "name" : "Trip In: Connection Cased Hole"
  }, {
    "uuid" : "891a0323-0a88-4ef5-9ddc-ea08fa813d95",
    "name" : "Trip Out: Connection Open Hole"
  }, {
    "uuid" : "e435c663-d8c0-44e7-9b81-35e375797095",
    "name" : "Trip Out: Connection Cased Hole"
  }, {
    "uuid" : "78dc9d6d-8645-47fb-84c3-2b9d1554f41a",
    "name" : "Trip In: Speed"
  }, {
    "uuid" : "46a520d5-ea4d-4c68-889c-8bea1196a3d9",
    "name" : "Trip In: Speed Open Hole"
  }, {
    "uuid" : "a0d13920-55ae-42ff-90ce-ed61f15bf592",
    "name" : "Trip In: Speed Cased Hole"
  }, {
    "uuid" : "1e7d617b-cd89-4d61-bb5f-120dedad77f4",
    "name" : "Trip In: Connection Speed"
  }, {
    "uuid" : "c12fc1c7-97dd-41fe-8c69-8e8ff06918ec",
    "name" : "Trip In: Connection Speed Open Hole"
  }, {
    "uuid" : "08a0ad9d-10ba-484d-9fb2-5ea1ba3b939f",
    "name" : "Trip In: Connection Speed Cased Hole"
  }, {
    "uuid" : "0d22fd91-8af1-4a21-a3fd-ad2f5614ba55",
    "name" : "Trip Out: Speed"
  }, {
    "uuid" : "1ccd4e03-6642-42db-a7a0-80330107f4e1",
    "name" : "Trip Out: Speed Open Hole"
  }, {
    "uuid" : "9c696a89-83c2-461c-88f1-5201bd45eea6",
    "name" : "Trip Out: Speed Cased Hole"
  }, {
    "uuid" : "c6fb2cce-94dc-47d6-bd06-e0e4d84e7904",
    "name" : "Trip Out: Connection Speed"
  }, {
    "uuid" : "aea16bb5-bb27-4564-9aa9-1a673cff29c0",
    "name" : "Trip Out: Connection Speed Open Hole"
  }, {
    "uuid" : "b99f5364-8cbb-4e53-8985-2b69f27c8e31",
    "name" : "Trip Out: Connection Speed Cased Hole"
  }, {
    "uuid" : "cfb51db6-fea7-457a-b5e2-db62f12fb296",
    "name" : "Block Speed"
  }, {
    "uuid" : "488e3f62-1199-46dc-95ed-1f5480487453",
    "name" : "Hookload Raw PU"
  }, {
    "uuid" : "318df66c-f069-4f5c-9308-0786b90691e1",
    "name" : "Hookload Raw SO"
  }, {
    "uuid" : "40ab5113-06c5-4708-9501-aa52b4006745",
    "name" : "Hookload Raw ROB"
  }, {
    "uuid" : "e8d4afac-06c2-41e7-bafe-74483343cb96",
    "name" : "Hookload Raw WU"
  }, {
    "uuid" : "2dc184b9-2009-47e5-8186-44083515ad06",
    "name" : "Hookload Raw WD"
  }, {
    "uuid" : "099e0969-553a-43d7-859e-096301aa3430",
    "name" : "Hookload Raw RU"
  }, {
    "uuid" : "a632b8e2-9dc7-4968-862e-5061fe7812db",
    "name" : "Hookload Raw RD"
  }, {
    "uuid" : "d27be59e-e0b6-4f45-9f7b-5526a378ccf9",
    "name" : "Surface Torque Raw ROB"
  }, {
    "uuid" : "443be365-8a27-4974-bb64-676a09241887",
    "name" : "Surface Torque Raw RU"
  }, {
    "uuid" : "64846188-56c2-4c55-b846-977b431a1d8d",
    "name" : "Surface Torque Raw RD"
  } ]
}

GET /public/api/v1/traces

Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array System traces (including robot-calculated ones such as Rig Activity) and custom traces of the user's company
content[].uuid String Trace UUID
content[].name String Trace name

Get mapped time traces by lateral

Get the list of traces mapped to a lateral. type=TIME returns time traces: WITSML-mapped traces and robot-calculated point traces that have time data. type=CALC returns all robot-calculated traces of the lateral with their hash and time range, without unit and null_value

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/mapped?type=TIME' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/mapped?type=TIME HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5a78dc4dbd01a87fb11ed035e6f5892b
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "30652f8a-15d2-4a10-9e86-2943a7bd5687",
    "name" : "Surface RPM",
    "hash" : "afc0ce6ff0637beee6cb2219a3392e4e",
    "unit" : "1/s",
    "null_value" : "-999.25",
    "start_date_time_index" : "2020-12-29T08:00:00Z",
    "last_date_time_index" : "2020-12-29T08:50:00Z"
  }, {
    "uuid" : "702c9494-7666-435f-ad46-9c6a3f24faa3",
    "name" : "Flow In Rate",
    "hash" : "e9e42fafd3ac26e3fe09178e56eb0ed2",
    "unit" : "m3/s",
    "null_value" : "-999.25",
    "start_date_time_index" : "2020-12-29T08:00:00Z",
    "last_date_time_index" : "2020-12-29T08:50:00Z"
  }, {
    "uuid" : "d635c218-3d17-4f5d-98b4-026085c4f584",
    "name" : "Hole Depth",
    "hash" : "a2b13ce5d923ec2ec6d6a4947be183b4",
    "unit" : "m",
    "null_value" : "-999.25",
    "start_date_time_index" : "2020-12-29T08:00:00Z",
    "last_date_time_index" : "2020-12-29T08:50:00Z"
  }, {
    "uuid" : "dfdf09da-5be0-495f-b802-15840ce93066",
    "name" : "Hookload",
    "hash" : "3257c1cade32555b9c972bfb96c30704",
    "unit" : "N",
    "null_value" : "-999.25",
    "start_date_time_index" : "2020-12-29T08:00:00Z",
    "last_date_time_index" : "2020-12-29T08:50:00Z"
  }, {
    "uuid" : "f93bf5a7-9755-4163-9c44-6d107967db4b",
    "name" : "Bit depth",
    "hash" : "5b5c2d28d742ad06573840eceacd51b8",
    "unit" : "m",
    "null_value" : "-999.25",
    "start_date_time_index" : "2020-12-29T08:00:00Z",
    "last_date_time_index" : "2020-12-29T08:50:00Z"
  } ]
}

GET /public/api/v1/wells/{uuid}/traces/mapped

Path parameter Description
uuid Lateral UUID
Parameter Description
type Trace type: TIME - mapped time traces (WITSML-mapped traces and robot-calculated point traces that have time data), CALC - all robot-calculated traces of the lateral (Rig Activity, KPIs, Slide Sheet, point traces), returned without unit and null_value
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Mapped traces
content[].uuid String Trace UUID
content[].name String Trace name
content[].hash String Hash of the current trace mapping, can be passed as hash to the trace data endpoints
content[].unit String UOM of the trace values: UOM of the mapped curve, base SI unit for robot-calculated traces
content[].null_value String Null value of the mapped curve
content[].start_date_time_index String Date time of the first data point, absent when there is no data
content[].last_date_time_index String Date time of the last data point, absent when there is no data

Get mapped depth traces by lateral

Get the list of depth traces mapped to a lateral: WITSML-mapped traces and robot-calculated point traces that have depth data. Depth values of a trace are in its index_unit, not in project units

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/mapped?type=DEPTH' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/mapped?type=DEPTH HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e509aaff3c9ed0f589603c9f8adccee0
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "d635c218-3d17-4f5d-98b4-026085c4f584",
    "name" : "Hole Depth",
    "hash" : "23ee2b468b723e191eca795408ee8de2",
    "unit" : "m",
    "index_unit" : "m",
    "null_value" : "-999.25",
    "start_depth_index" : 1.0,
    "last_depth_index" : 4.0
  } ]
}

GET /public/api/v1/wells/{uuid}/traces/mapped

Path parameter Description
uuid Lateral UUID
Parameter Description
type Trace type: DEPTH - mapped depth traces (WITSML-mapped traces and robot-calculated point traces that have depth data)
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Mapped traces
content[].uuid String Trace UUID
content[].name String Trace name
content[].hash String Hash of the current trace mapping, can be passed as hash to the trace data endpoints
content[].unit String UOM of the trace values: UOM of the mapped curve, base SI unit for robot-calculated traces
content[].index_unit String Depth index UOM of the mapped curve (m for robot-calculated traces). start_depth_index, last_depth_index and the depth data from/to are in this UOM, not in project units
content[].null_value String Null value of the mapped curve
content[].start_depth_index Number Depth of the first data point in index_unit, absent when there is no data
content[].last_depth_index Number Depth of the last data point in index_unit, absent when there is no data

Get time series data by lateral and trace

Get time series data of a mapped trace by lateral UUID and trace UUID. The requested range is clipped to the trace data range, a range outside of it returns an empty content. Points are sorted by time, at most limit points are returned. 404 is returned if the trace has no time mapping on the lateral or hash does not match

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/d635c218-3d17-4f5d-98b4-026085c4f584/data/time?from=2020-12-29T08%3A00%3A00Z&to=2020-12-29T08%3A50%3A00Z' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/d635c218-3d17-4f5d-98b4-026085c4f584/data/time?from=2020-12-29T08%3A00%3A00Z&to=2020-12-29T08%3A50%3A00Z HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 117bc1254620e393e9a94a902c89b686
Content-Type: application/json

{
  "content" : [ {
    "index" : "2020-12-29T08:00:00.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:01.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:02.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:03.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:04.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:05.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:06.000Z",
    "value" : "20341.2"
  }, {
    "index" : "2020-12-29T08:00:07.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:08.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:09.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:10.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:11.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:12.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:13.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:14.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:15.000Z",
    "value" : "20341.3"
  }, {
    "index" : "2020-12-29T08:00:16.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:17.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:18.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:19.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:20.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:21.000Z",
    "value" : "20341.4"
  }, {
    "index" : "2020-12-29T08:00:22.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:23.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:24.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:25.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:26.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:27.000Z",
    "value" : "20341.5"
  }, {
    "index" : "2020-12-29T08:00:28.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:29.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:30.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:31.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:32.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:33.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:34.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:35.000Z",
    "value" : "20341.6"
  }, {
    "index" : "2020-12-29T08:00:36.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:37.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:38.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:39.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:40.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:41.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:42.000Z",
    "value" : "20341.7"
  }, {
    "index" : "2020-12-29T08:00:43.000Z",
    "value" : "20341.8"
  }, {
    "index" : "2020-12-29T08:00:44.000Z",
    "value" : "20341.8"
  }, {
    "index" : "2020-12-29T08:00:45.000Z",
    "value" : "20341.8"
  }, {
    "index" : "2020-12-29T08:00:46.000Z",
    "value" : "20341.8"
  }, {
    "index" : "2020-12-29T08:00:47.000Z",
    "value" : "20341.8"
  }, {
    "index" : "2020-12-29T08:00:48.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:49.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:50.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:51.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:52.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:53.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:54.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:55.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:56.000Z",
    "value" : "20341.9"
  }, {
    "index" : "2020-12-29T08:00:57.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:00:58.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:00:59.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:00.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:01.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:02.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:03.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:04.000Z",
    "value" : "20342"
  }, {
    "index" : "2020-12-29T08:01:05.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:06.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:07.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:08.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:09.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:10.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:11.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:12.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:13.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:14.000Z",
    "value" : "20342.1"
  }, {
    "index" : "2020-12-29T08:01:15.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:16.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:17.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:18.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:19.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:20.000Z",
    "value" : "20342.2"
  }, {
    "index" : "2020-12-29T08:01:21.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:22.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:23.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:24.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:25.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:26.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:27.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:28.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:29.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:30.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:31.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:32.000Z",
    "value" : "20342.3"
  }, {
    "index" : "2020-12-29T08:01:33.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:34.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:35.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:36.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:37.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:38.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:39.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:40.000Z",
    "value" : "20342.4"
  }, {
    "index" : "2020-12-29T08:01:41.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:42.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:43.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:44.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:45.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:46.000Z",
    "value" : "20342.5"
  }, {
    "index" : "2020-12-29T08:01:47.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:48.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:49.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:50.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:51.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:52.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:53.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:54.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:55.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:56.000Z",
    "value" : "20342.6"
  }, {
    "index" : "2020-12-29T08:01:57.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:01:58.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:01:59.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:00.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:01.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:02.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:03.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:04.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:05.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:06.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:07.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:08.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:09.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:10.000Z",
    "value" : "20342.7"
  }, {
    "index" : "2020-12-29T08:02:11.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:12.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:13.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:14.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:15.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:16.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:17.000Z",
    "value" : "20342.8"
  }, {
    "index" : "2020-12-29T08:02:18.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:19.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:20.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:21.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:22.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:23.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:24.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:25.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:26.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:27.000Z",
    "value" : "20342.9"
  }, {
    "index" : "2020-12-29T08:02:28.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:29.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:30.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:31.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:32.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:33.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:34.000Z",
    "value" : "20343"
  }, {
    "index" : "2020-12-29T08:02:35.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:36.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:37.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:38.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:39.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:40.000Z",
    "value" : "20343.1"
  }, {
    "index" : "2020-12-29T08:02:41.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:42.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:43.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:44.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:45.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:46.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:47.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:48.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:49.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:50.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:51.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:52.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:53.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:54.000Z",
    "value" : "20343.2"
  }, {
    "index" : "2020-12-29T08:02:55.000Z",
    "value" : "20343.3"
  }, {
    "index" : "2020-12-29T08:02:56.000Z",
    "value" : "20343.3"
  }, {
    "index" : "2020-12-29T08:02:57.000Z",
    "value" : "20343.3"
  }, {
    "index" : "2020-12-29T08:02:58.000Z",
    "value" : "20343.3"
  }, {
    "index" : "2020-12-29T08:02:59.000Z",
    "value" : "20343.4"
  }, {
    "index" : "2020-12-29T08:03:00.000Z",
    "value" : "20343.4"
  }, {
    "index" : "2020-12-29T08:03:01.000Z",
    "value" : "20343.5"
  }, {
    "index" : "2020-12-29T08:03:02.000Z",
    "value" : "20343.5"
  }, {
    "index" : "2020-12-29T08:03:03.000Z",
    "value" : "20343.5"
  }, {
    "index" : "2020-12-29T08:03:04.000Z",
    "value" : "20343.6"
  }, {
    "index" : "2020-12-29T08:03:05.000Z",
    "value" : "20343.6"
  }, {
    "index" : "2020-12-29T08:03:06.000Z",
    "value" : "20343.6"
  }, {
    "index" : "2020-12-29T08:03:07.000Z",
    "value" : "20343.7"
  }, {
    "index" : "2020-12-29T08:03:08.000Z",
    "value" : "20343.7"
  }, {
    "index" : "2020-12-29T08:03:09.000Z",
    "value" : "20343.7"
  }, {
    "index" : "2020-12-29T08:03:10.000Z",
    "value" : "20343.7"
  }, {
    "index" : "2020-12-29T08:03:11.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:12.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:13.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:14.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:15.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:16.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:17.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:18.000Z",
    "value" : "20343.8"
  }, {
    "index" : "2020-12-29T08:03:19.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:20.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:21.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:22.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:23.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:24.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:25.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:26.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:27.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:28.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:29.000Z",
    "value" : "20343.9"
  }, {
    "index" : "2020-12-29T08:03:30.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:31.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:32.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:33.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:34.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:35.000Z",
    "value" : "20344"
  }, {
    "index" : "2020-12-29T08:03:36.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:37.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:38.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:39.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:40.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:41.000Z",
    "value" : "20344.1"
  }, {
    "index" : "2020-12-29T08:03:42.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:43.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:44.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:45.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:46.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:47.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:48.000Z",
    "value" : "20344.2"
  }, {
    "index" : "2020-12-29T08:03:49.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:50.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:51.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:52.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:53.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:54.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:55.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:56.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:57.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:58.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:03:59.000Z",
    "value" : "20344.3"
  }, {
    "index" : "2020-12-29T08:04:00.000Z",
    "value" : "20344.4"
  }, {
    "index" : "2020-12-29T08:04:01.000Z",
    "value" : "20344.4"
  }, {
    "index" : "2020-12-29T08:04:02.000Z",
    "value" : "20344.4"
  }, {
    "index" : "2020-12-29T08:04:03.000Z",
    "value" : "20344.4"
  }, {
    "index" : "2020-12-29T08:04:04.000Z",
    "value" : "20344.4"
  }, {
    "index" : "2020-12-29T08:04:05.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:06.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:07.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:08.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:09.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:10.000Z",
    "value" : "20344.5"
  }, {
    "index" : "2020-12-29T08:04:11.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:12.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:13.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:14.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:15.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:16.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:17.000Z",
    "value" : "20344.6"
  }, {
    "index" : "2020-12-29T08:04:18.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:19.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:20.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:21.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:22.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:23.000Z",
    "value" : "20344.7"
  }, {
    "index" : "2020-12-29T08:04:24.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:25.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:26.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:27.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:28.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:29.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:30.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:31.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:32.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:33.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:34.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:35.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:36.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:37.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:38.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:39.000Z",
    "value" : "20344.8"
  }, {
    "index" : "2020-12-29T08:04:40.000Z",
    "value" : "20344.9"
  }, {
    "index" : "2020-12-29T08:04:41.000Z",
    "value" : "20344.9"
  }, {
    "index" : "2020-12-29T08:04:42.000Z",
    "value" : "20344.9"
  }, {
    "index" : "2020-12-29T08:04:43.000Z",
    "value" : "20344.9"
  }, {
    "index" : "2020-12-29T08:04:44.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:45.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:46.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:47.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:48.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:49.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:50.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:51.000Z",
    "value" : "20345"
  }, {
    "index" : "2020-12-29T08:04:52.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:53.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:54.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:55.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:56.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:57.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:58.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:04:59.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:05:00.000Z",
    "value" : "20345.1"
  }, {
    "index" : "2020-12-29T08:05:01.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:02.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:03.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:04.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:05.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:06.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:07.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:08.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:09.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:10.000Z",
    "value" : "20345.2"
  }, {
    "index" : "2020-12-29T08:05:11.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:12.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:13.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:14.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:15.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:16.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:17.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:18.000Z",
    "value" : "20345.3"
  }, {
    "index" : "2020-12-29T08:05:19.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:20.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:21.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:22.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:23.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:24.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:25.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:26.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:27.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:28.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:29.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:30.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:31.000Z",
    "value" : "20345.4"
  }, {
    "index" : "2020-12-29T08:05:32.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:33.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:34.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:35.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:36.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:37.000Z",
    "value" : "20345.5"
  }, {
    "index" : "2020-12-29T08:05:38.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:39.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:40.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:41.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:42.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:43.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:44.000Z",
    "value" : "20345.6"
  }, {
    "index" : "2020-12-29T08:05:45.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:46.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:47.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:48.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:49.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:50.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:51.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:52.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:53.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:54.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:55.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:56.000Z",
    "value" : "20345.7"
  }, {
    "index" : "2020-12-29T08:05:57.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:05:58.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:05:59.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:00.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:01.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:02.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:03.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:04.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:05.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:06.000Z",
    "value" : "20345.8"
  }, {
    "index" : "2020-12-29T08:06:07.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:08.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:09.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:10.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:11.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:12.000Z",
    "value" : "20345.9"
  }, {
    "index" : "2020-12-29T08:06:13.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:14.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:15.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:16.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:17.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:18.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:19.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:20.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:21.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:22.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:23.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:24.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:25.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:26.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:27.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:28.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:29.000Z",
    "value" : "20346"
  }, {
    "index" : "2020-12-29T08:06:30.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:31.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:32.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:33.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:34.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:35.000Z",
    "value" : "20346.1"
  }, {
    "index" : "2020-12-29T08:06:36.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:37.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:38.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:39.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:40.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:41.000Z",
    "value" : "20346.2"
  }, {
    "index" : "2020-12-29T08:06:42.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:43.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:44.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:45.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:46.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:47.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:48.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:49.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:50.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:51.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:52.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:53.000Z",
    "value" : "20346.3"
  }, {
    "index" : "2020-12-29T08:06:54.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:06:55.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:06:56.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:06:57.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:06:58.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:06:59.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:00.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:01.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:02.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:03.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:04.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:05.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:06.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:07.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:08.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:09.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:10.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:11.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:12.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:13.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:14.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:15.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:16.000Z",
    "value" : "20346.4"
  }, {
    "index" : "2020-12-29T08:07:17.000Z",
    "value" : "20346.5"
  }, {
    "index" : "2020-12-29T08:07:18.000Z",
    "value" : "20346.5"
  }, {
    "index" : "2020-12-29T08:07:19.000Z",
    "value" : "20346.5"
  }, {
    "index" : "2020-12-29T08:07:20.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:21.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:22.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:23.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:24.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:25.000Z",
    "value" : "20346.6"
  }, {
    "index" : "2020-12-29T08:07:26.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:27.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:28.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:29.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:30.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:31.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:32.000Z",
    "value" : "20346.7"
  }, {
    "index" : "2020-12-29T08:07:33.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:34.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:35.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:36.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:37.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:38.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:39.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:40.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:41.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:42.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:43.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:44.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:45.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:46.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:47.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:48.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:49.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:50.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:51.000Z",
    "value" : "20346.8"
  }, {
    "index" : "2020-12-29T08:07:52.000Z",
    "value" : "20346.9"
  }, {
    "index" : "2020-12-29T08:07:53.000Z",
    "value" : "20346.9"
  }, {
    "index" : "2020-12-29T08:07:54.000Z",
    "value" : "20346.9"
  }, {
    "index" : "2020-12-29T08:07:55.000Z",
    "value" : "20346.9"
  }, {
    "index" : "2020-12-29T08:07:56.000Z",
    "value" : "20347"
  }, {
    "index" : "2020-12-29T08:07:57.000Z",
    "value" : "20347"
  }, {
    "index" : "2020-12-29T08:07:58.000Z",
    "value" : "20347"
  }, {
    "index" : "2020-12-29T08:07:59.000Z",
    "value" : "20347"
  }, {
    "index" : "2020-12-29T08:08:00.000Z",
    "value" : "20347"
  }, {
    "index" : "2020-12-29T08:08:01.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:02.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:03.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:04.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:05.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:06.000Z",
    "value" : "20347.1"
  }, {
    "index" : "2020-12-29T08:08:07.000Z",
    "value" : "20347.2"
  }, {
    "index" : "2020-12-29T08:08:08.000Z",
    "value" : "20347.2"
  }, {
    "index" : "2020-12-29T08:08:09.000Z",
    "value" : "20347.2"
  }, {
    "index" : "2020-12-29T08:08:30.000Z",
    "value" : "20347.4"
  }, {
    "index" : "2020-12-29T08:08:31.000Z",
    "value" : "20347.5"
  }, {
    "index" : "2020-12-29T08:08:32.000Z",
    "value" : "20347.5"
  }, {
    "index" : "2020-12-29T08:08:33.000Z",
    "value" : "20347.5"
  }, {
    "index" : "2020-12-29T08:08:34.000Z",
    "value" : "20347.5"
  }, {
    "index" : "2020-12-29T08:08:35.000Z",
    "value" : "20347.5"
  }, {
    "index" : "2020-12-29T08:08:36.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:37.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:38.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:39.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:40.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:41.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:42.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:43.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:44.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:45.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:46.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:47.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:48.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:49.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:50.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:51.000Z",
    "value" : "20347.6"
  }, {
    "index" : "2020-12-29T08:08:52.000Z",
    "value" : "20347.7"
  }, {
    "index" : "2020-12-29T08:08:53.000Z",
    "value" : "20347.7"
  }, {
    "index" : "2020-12-29T08:08:54.000Z",
    "value" : "20347.7"
  }, {
    "index" : "2020-12-29T08:08:55.000Z",
    "value" : "20347.7"
  }, {
    "index" : "2020-12-29T08:08:56.000Z",
    "value" : "20347.7"
  }, {
    "index" : "2020-12-29T08:08:57.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:08:58.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:08:59.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:00.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:01.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:02.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:03.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:04.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:05.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:06.000Z",
    "value" : "20347.8"
  }, {
    "index" : "2020-12-29T08:09:07.000Z",
    "value" : "20347.9"
  }, {
    "index" : "2020-12-29T08:09:08.000Z",
    "value" : "20347.9"
  }, {
    "index" : "2020-12-29T08:09:09.000Z",
    "value" : "20347.9"
  }, {
    "index" : "2020-12-29T08:09:10.000Z",
    "value" : "20347.9"
  }, {
    "index" : "2020-12-29T08:09:11.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:12.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:13.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:14.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:15.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:16.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:17.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:18.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:19.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:20.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:21.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:22.000Z",
    "value" : "20348"
  }, {
    "index" : "2020-12-29T08:09:23.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:24.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:25.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:26.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:27.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:28.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:29.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:30.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:31.000Z",
    "value" : "20348.1"
  }, {
    "index" : "2020-12-29T08:09:32.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:33.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:34.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:35.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:36.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:37.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:38.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:39.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:40.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:41.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:42.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:43.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:44.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:45.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:46.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:47.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:48.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:49.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:50.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:51.000Z",
    "value" : "20348.2"
  }, {
    "index" : "2020-12-29T08:09:52.000Z",
    "value" : "20348.3"
  }, {
    "index" : "2020-12-29T08:09:53.000Z",
    "value" : "20348.3"
  }, {
    "index" : "2020-12-29T08:09:54.000Z",
    "value" : "20348.3"
  }, {
    "index" : "2020-12-29T08:09:55.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:09:56.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:09:57.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:09:58.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:09:59.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:00.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:01.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:02.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:03.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:04.000Z",
    "value" : "20348.4"
  }, {
    "index" : "2020-12-29T08:10:05.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:06.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:07.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:08.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:09.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:10.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:11.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:12.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:13.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:14.000Z",
    "value" : "20348.5"
  }, {
    "index" : "2020-12-29T08:10:15.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:16.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:17.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:18.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:19.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:20.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:21.000Z",
    "value" : "20348.6"
  }, {
    "index" : "2020-12-29T08:10:22.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:23.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:24.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:25.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:26.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:27.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:28.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:29.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:30.000Z",
    "value" : "20348.7"
  }, {
    "index" : "2020-12-29T08:10:31.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:32.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:33.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:34.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:35.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:36.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:37.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:38.000Z",
    "value" : "20348.8"
  }, {
    "index" : "2020-12-29T08:10:39.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:40.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:41.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:42.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:43.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:44.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:45.000Z",
    "value" : "20348.9"
  }, {
    "index" : "2020-12-29T08:10:46.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:47.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:48.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:49.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:50.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:51.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:52.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:53.000Z",
    "value" : "20349"
  }, {
    "index" : "2020-12-29T08:10:54.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:10:55.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:10:56.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:10:57.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:10:58.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:10:59.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:00.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:01.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:02.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:03.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:04.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:05.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:06.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:07.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:08.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:09.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:10.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:11.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:12.000Z",
    "value" : "20349.1"
  }, {
    "index" : "2020-12-29T08:11:13.000Z",
    "value" : "20349.2"
  }, {
    "index" : "2020-12-29T08:11:14.000Z",
    "value" : "20349.2"
  }, {
    "index" : "2020-12-29T08:11:15.000Z",
    "value" : "20349.2"
  }, {
    "index" : "2020-12-29T08:11:16.000Z",
    "value" : "20349.2"
  }, {
    "index" : "2020-12-29T08:11:17.000Z",
    "value" : "20349.2"
  }, {
    "index" : "2020-12-29T08:11:18.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:19.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:20.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:21.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:22.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:23.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:24.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:25.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:26.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:27.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:28.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:29.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:30.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:31.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:32.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:33.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:34.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:35.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:36.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:37.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:38.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:39.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:40.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:41.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:42.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:43.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:44.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:45.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:46.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:47.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:48.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:49.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:50.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:51.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:52.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:53.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:54.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:55.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:56.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:57.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:58.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:11:59.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:00.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:01.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:02.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:03.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:04.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:05.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:06.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:07.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:08.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:09.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:10.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:11.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:12.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:13.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:14.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:15.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:16.000Z",
    "value" : "20349.3"
  }, {
    "index" : "2020-12-29T08:12:17.000Z",
    "value" : "20349.4"
  }, {
    "index" : "2020-12-29T08:12:18.000Z",
    "value" : "20349.4"
  }, {
    "index" : "2020-12-29T08:12:19.000Z",
    "value" : "20349.4"
  }, {
    "index" : "2020-12-29T08:12:20.000Z",
    "value" : "20349.5"
  }, {
    "index" : "2020-12-29T08:12:21.000Z",
    "value" : "20349.5"
  }, {
    "index" : "2020-12-29T08:12:22.000Z",
    "value" : "20349.5"
  }, {
    "index" : "2020-12-29T08:12:23.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:24.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:25.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:26.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:27.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:28.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:29.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:30.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:31.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:32.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:33.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:34.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:35.000Z",
    "value" : "20349.6"
  }, {
    "index" : "2020-12-29T08:12:36.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:37.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:38.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:39.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:40.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:41.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:42.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:43.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:44.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:45.000Z",
    "value" : "20349.7"
  }, {
    "index" : "2020-12-29T08:12:46.000Z",
    "value" : "20349.8"
  }, {
    "index" : "2020-12-29T08:12:47.000Z",
    "value" : "20349.8"
  }, {
    "index" : "2020-12-29T08:12:48.000Z",
    "value" : "20349.8"
  }, {
    "index" : "2020-12-29T08:12:49.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:50.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:51.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:52.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:53.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:54.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:55.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:56.000Z",
    "value" : "20349.9"
  }, {
    "index" : "2020-12-29T08:12:57.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:12:58.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:12:59.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:13:00.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:13:01.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:13:02.000Z",
    "value" : "20350"
  }, {
    "index" : "2020-12-29T08:13:03.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:04.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:05.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:06.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:07.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:08.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:09.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:10.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:11.000Z",
    "value" : "20350.1"
  }, {
    "index" : "2020-12-29T08:13:12.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:13.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:14.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:15.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:16.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:17.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:18.000Z",
    "value" : "20350.2"
  }, {
    "index" : "2020-12-29T08:13:19.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:20.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:21.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:22.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:23.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:24.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:25.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:26.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:27.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:28.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:29.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:30.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:31.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:32.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:33.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:34.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:35.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:36.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:37.000Z",
    "value" : "20350.3"
  }, {
    "index" : "2020-12-29T08:13:38.000Z",
    "value" : "20350.4"
  }, {
    "index" : "2020-12-29T08:13:39.000Z",
    "value" : "20350.4"
  }, {
    "index" : "2020-12-29T08:13:40.000Z",
    "value" : "20350.4"
  }, {
    "index" : "2020-12-29T08:13:41.000Z",
    "value" : "20350.4"
  }, {
    "index" : "2020-12-29T08:13:42.000Z",
    "value" : "20350.5"
  }, {
    "index" : "2020-12-29T08:13:43.000Z",
    "value" : "20350.5"
  }, {
    "index" : "2020-12-29T08:13:44.000Z",
    "value" : "20350.5"
  }, {
    "index" : "2020-12-29T08:13:45.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:46.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:47.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:48.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:49.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:50.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:51.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:52.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:53.000Z",
    "value" : "20350.6"
  }, {
    "index" : "2020-12-29T08:13:54.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:13:55.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:13:56.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:13:57.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:13:58.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:13:59.000Z",
    "value" : "20350.7"
  }, {
    "index" : "2020-12-29T08:14:00.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:01.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:02.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:03.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:04.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:05.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:06.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:07.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:08.000Z",
    "value" : "20350.8"
  }, {
    "index" : "2020-12-29T08:14:09.000Z",
    "value" : "20350.9"
  }, {
    "index" : "2020-12-29T08:14:10.000Z",
    "value" : "20350.9"
  }, {
    "index" : "2020-12-29T08:14:11.000Z",
    "value" : "20350.9"
  }, {
    "index" : "2020-12-29T08:14:12.000Z",
    "value" : "20350.9"
  }, {
    "index" : "2020-12-29T08:14:13.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:14.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:15.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:16.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:17.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:18.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:19.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:20.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:21.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:22.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:23.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:24.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:25.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:26.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:27.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:28.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:29.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:30.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:31.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:32.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:33.000Z",
    "value" : "20351"
  }, {
    "index" : "2020-12-29T08:14:34.000Z",
    "value" : "20351.1"
  }, {
    "index" : "2020-12-29T08:14:35.000Z",
    "value" : "20351.1"
  }, {
    "index" : "2020-12-29T08:14:36.000Z",
    "value" : "20351.1"
  }, {
    "index" : "2020-12-29T08:14:37.000Z",
    "value" : "20351.1"
  }, {
    "index" : "2020-12-29T08:14:38.000Z",
    "value" : "20351.1"
  }, {
    "index" : "2020-12-29T08:14:39.000Z",
    "value" : "20351.2"
  }, {
    "index" : "2020-12-29T08:14:40.000Z",
    "value" : "20351.2"
  }, {
    "index" : "2020-12-29T08:14:41.000Z",
    "value" : "20351.2"
  }, {
    "index" : "2020-12-29T08:14:42.000Z",
    "value" : "20351.3"
  }, {
    "index" : "2020-12-29T08:14:43.000Z",
    "value" : "20351.3"
  }, {
    "index" : "2020-12-29T08:14:44.000Z",
    "value" : "20351.3"
  }, {
    "index" : "2020-12-29T08:14:45.000Z",
    "value" : "20351.4"
  }, {
    "index" : "2020-12-29T08:14:46.000Z",
    "value" : "20351.4"
  }, {
    "index" : "2020-12-29T08:14:47.000Z",
    "value" : "20351.4"
  }, {
    "index" : "2020-12-29T08:14:48.000Z",
    "value" : "20351.5"
  }, {
    "index" : "2020-12-29T08:14:49.000Z",
    "value" : "20351.5"
  }, {
    "index" : "2020-12-29T08:14:50.000Z",
    "value" : "20351.5"
  }, {
    "index" : "2020-12-29T08:14:51.000Z",
    "value" : "20351.6"
  }, {
    "index" : "2020-12-29T08:14:52.000Z",
    "value" : "20351.6"
  }, {
    "index" : "2020-12-29T08:14:53.000Z",
    "value" : "20351.7"
  }, {
    "index" : "2020-12-29T08:14:54.000Z",
    "value" : "20351.7"
  }, {
    "index" : "2020-12-29T08:14:55.000Z",
    "value" : "20351.7"
  }, {
    "index" : "2020-12-29T08:14:56.000Z",
    "value" : "20351.7"
  }, {
    "index" : "2020-12-29T08:14:57.000Z",
    "value" : "20351.8"
  }, {
    "index" : "2020-12-29T08:14:58.000Z",
    "value" : "20351.8"
  }, {
    "index" : "2020-12-29T08:14:59.000Z",
    "value" : "20351.9"
  }, {
    "index" : "2020-12-29T08:15:00.000Z",
    "value" : "20351.9"
  }, {
    "index" : "2020-12-29T08:15:01.000Z",
    "value" : "20351.9"
  }, {
    "index" : "2020-12-29T08:15:02.000Z",
    "value" : "20352"
  }, {
    "index" : "2020-12-29T08:15:03.000Z",
    "value" : "20352"
  }, {
    "index" : "2020-12-29T08:15:04.000Z",
    "value" : "20352"
  }, {
    "index" : "2020-12-29T08:15:05.000Z",
    "value" : "20352"
  }, {
    "index" : "2020-12-29T08:15:06.000Z",
    "value" : "20352.1"
  }, {
    "index" : "2020-12-29T08:15:07.000Z",
    "value" : "20352.1"
  }, {
    "index" : "2020-12-29T08:15:08.000Z",
    "value" : "20352.1"
  }, {
    "index" : "2020-12-29T08:15:09.000Z",
    "value" : "20352.2"
  }, {
    "index" : "2020-12-29T08:15:10.000Z",
    "value" : "20352.2"
  }, {
    "index" : "2020-12-29T08:15:11.000Z",
    "value" : "20352.2"
  }, {
    "index" : "2020-12-29T08:15:12.000Z",
    "value" : "20352.2"
  }, {
    "index" : "2020-12-29T08:15:13.000Z",
    "value" : "20352.2"
  }, {
    "index" : "2020-12-29T08:15:14.000Z",
    "value" : "20352.3"
  }, {
    "index" : "2020-12-29T08:15:15.000Z",
    "value" : "20352.3"
  }, {
    "index" : "2020-12-29T08:15:16.000Z",
    "value" : "20352.3"
  }, {
    "index" : "2020-12-29T08:15:17.000Z",
    "value" : "20352.3"
  }, {
    "index" : "2020-12-29T08:15:18.000Z",
    "value" : "20352.4"
  }, {
    "index" : "2020-12-29T08:15:19.000Z",
    "value" : "20352.4"
  }, {
    "index" : "2020-12-29T08:15:20.000Z",
    "value" : "20352.4"
  }, {
    "index" : "2020-12-29T08:15:21.000Z",
    "value" : "20352.4"
  }, {
    "index" : "2020-12-29T08:15:22.000Z",
    "value" : "20352.4"
  }, {
    "index" : "2020-12-29T08:15:23.000Z",
    "value" : "20352.5"
  }, {
    "index" : "2020-12-29T08:15:24.000Z",
    "value" : "20352.5"
  }, {
    "index" : "2020-12-29T08:15:25.000Z",
    "value" : "20352.5"
  }, {
    "index" : "2020-12-29T08:15:26.000Z",
    "value" : "20352.5"
  }, {
    "index" : "2020-12-29T08:15:27.000Z",
    "value" : "20352.5"
  }, {
    "index" : "2020-12-29T08:15:28.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:29.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:30.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:31.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:32.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:33.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:34.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:35.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:36.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:37.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:38.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:39.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:40.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:41.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:42.000Z",
    "value" : "20352.6"
  }, {
    "index" : "2020-12-29T08:15:43.000Z",
    "value" : "20352.7"
  }, {
    "index" : "2020-12-29T08:15:44.000Z",
    "value" : "20352.7"
  }, {
    "index" : "2020-12-29T08:15:45.000Z",
    "value" : "20352.7"
  }, {
    "index" : "2020-12-29T08:15:46.000Z",
    "value" : "20352.7"
  }, {
    "index" : "2020-12-29T08:15:47.000Z",
    "value" : "20352.8"
  }, {
    "index" : "2020-12-29T08:15:48.000Z",
    "value" : "20352.8"
  }, {
    "index" : "2020-12-29T08:15:49.000Z",
    "value" : "20352.8"
  }, {
    "index" : "2020-12-29T08:15:50.000Z",
    "value" : "20352.8"
  }, {
    "index" : "2020-12-29T08:15:51.000Z",
    "value" : "20352.8"
  }, {
    "index" : "2020-12-29T08:15:52.000Z",
    "value" : "20352.9"
  }, {
    "index" : "2020-12-29T08:15:53.000Z",
    "value" : "20352.9"
  }, {
    "index" : "2020-12-29T08:15:54.000Z",
    "value" : "20352.9"
  }, {
    "index" : "2020-12-29T08:15:55.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:15:56.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:15:57.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:15:58.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:15:59.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:00.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:01.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:02.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:03.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:04.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:05.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:06.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:07.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:08.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:09.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:10.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:11.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:12.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:13.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:14.000Z",
    "value" : "20353"
  }, {
    "index" : "2020-12-29T08:16:15.000Z",
    "value" : "20353.1"
  }, {
    "index" : "2020-12-29T08:16:16.000Z",
    "value" : "20353.1"
  }, {
    "index" : "2020-12-29T08:16:17.000Z",
    "value" : "20353.1"
  }, {
    "index" : "2020-12-29T08:16:18.000Z",
    "value" : "20353.2"
  }, {
    "index" : "2020-12-29T08:16:19.000Z",
    "value" : "20353.2"
  }, {
    "index" : "2020-12-29T08:16:20.000Z",
    "value" : "20353.2"
  }, {
    "index" : "2020-12-29T08:16:21.000Z",
    "value" : "20353.2"
  }, {
    "index" : "2020-12-29T08:16:22.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:23.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:24.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:25.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:26.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:27.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:28.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:29.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:30.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:31.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:32.000Z",
    "value" : "20353.3"
  }, {
    "index" : "2020-12-29T08:16:33.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:34.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:35.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:36.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:37.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:38.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:39.000Z",
    "value" : "20353.4"
  }, {
    "index" : "2020-12-29T08:16:40.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:41.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:42.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:43.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:44.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:45.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:46.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:47.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:48.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:49.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:50.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:51.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:52.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:53.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:54.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:55.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:56.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:57.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:58.000Z",
    "value" : "20353.5"
  }, {
    "index" : "2020-12-29T08:16:59.000Z",
    "value" : "20353.6"
  } ]
}

GET /public/api/v1/wells/{lateralUuid}/traces/{traceUuid}/data/time

Path parameter Description
lateralUuid Lateral UUID
traceUuid Trace UUID
Parameter Description
from Optional. Start date, for example: 2020-11-01T00:00:00.000Z. Default - the first data point of the trace
to Optional. End date, for example: 2020-11-01T00:02:00.000Z. Default - the last data point of the trace. from after to returns 400
hash Optional. Trace hash from the mapped traces response. 404 is returned if it does not match the current mapping
valueUnit Optional. UOM symbol to convert the values to, for example ft. 400 is returned if it is not convertible from the trace unit, ignored when the trace has no unit
limit Optional. Maximum number of points to return, in [1;1000000], default 1000. Points are returned in ascending time order starting from from
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Trace data points
content[].index String Date time of the point
content[].value String Trace value in the trace unit, or in valueUnit if set

Get depth series data by lateral and trace

Get depth series data of a mapped trace by lateral UUID and trace UUID. from, to and the returned index are in the trace index_unit (see Get mapped depth traces by lateral), indexUnit and valueUnit convert the returned indexes and values. The requested range is clipped to the trace data range, a range outside of it returns an empty content. Points are sorted by depth, at most limit points are returned. 404 is returned if the trace has no depth mapping on the lateral or hash does not match

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/d635c218-3d17-4f5d-98b4-026085c4f584/data/depth?from=1.0&to=4.0' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/d635c218-3d17-4f5d-98b4-026085c4f584/data/depth?from=1.0&to=4.0 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ff42c3bac3b555b38161fb4ef89cc03b
Content-Type: application/json

{
  "content" : [ {
    "index" : "1",
    "value" : "10"
  }, {
    "index" : "2",
    "value" : "20"
  }, {
    "index" : "3",
    "value" : "30"
  }, {
    "index" : "4",
    "value" : "40"
  } ]
}

GET /public/api/v1/wells/{lateralUuid}/traces/{traceUuid}/data/depth

Path parameter Description
lateralUuid Lateral UUID
traceUuid Trace UUID
Parameter Description
from Optional. Start md in the trace index_unit (see mapped depth traces), for example: 0.0. Default - the first data point of the trace
to Optional. End md in the trace index_unit, for example: 2300. Default - the last data point of the trace. from greater than to returns 400
hash Optional. Trace hash from the mapped traces response. 404 is returned if it does not match the current mapping
indexUnit Optional. Length UOM symbol to convert the returned index values to, for example ft. from and to are not converted
valueUnit Optional. UOM symbol to convert the values to. 400 is returned if it is not convertible from the trace unit, ignored when the trace has no unit
limit Optional. Maximum number of points to return, in [1;1000000], default 1000. Points are returned in ascending depth order starting from from
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Trace data points
content[].index String Md of the point in the trace index_unit, or in indexUnit if set
content[].value String Trace value in the trace unit, or in valueUnit if set

Get Rig Activity and KPIs (by time) by lateral and trace

Get intervals of a robot-calculated trace (Rig Activity, KPIs, etc.) by lateral UUID and trace UUID. All intervals overlapping the requested time range are returned, sorted by start time, without paging. The range defaults to the trace data range. 404 is returned if the trace is not mapped to the lateral or hash does not match. For Rig Activity value is the rig activity code: 0 In Slips, 11 In Slips - Pump, 21 Drilling, 22 Slide Drill, 23 Slide Oscillate Drill, 31 Reaming, 32 Back Reaming, 50 Static, 51 Static - Rotate&Pump, 52 Static - Pump, 53 Static - Rotate, 54 Surface Operations, 61 Run In - Tripping, 62 Run In - Pump, 63 Run In - Rotate, 64 Pull Up - Pump, 65 Pull Up - Rotate, 66 Pull Up - Trip Out, 98 Unknown, 99 Missing Input

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/e3c996b6-9cdb-4876-ac99-0aab694b801a/data/calculated/time' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/e3c996b6-9cdb-4876-ac99-0aab694b801a/data/calculated/time HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6b53113a19fac409aeafaf99bda44263
Content-Type: application/json

{
  "content" : [ {
    "start" : "2020-11-01T00:00:00Z",
    "end" : "2020-11-01T01:00:02Z",
    "value" : "21"
  }, {
    "start" : "2020-12-29T08:00:00Z",
    "end" : "2020-12-29T08:50:00Z",
    "value" : "21"
  } ]
}

GET /public/api/v1/wells/{lateralUuid}/traces/{traceUuid}/data/calculated/time

Path parameter Description
lateralUuid Lateral UUID
traceUuid Robot-calculated trace UUID
Parameter Description
from Optional. Start date, for example: 2020-11-01T00:00:00.000Z. Default - the start of the trace data
to Optional. End date, for example: 2020-11-01T00:02:00.000Z. Default - the end of the trace data. from after to returns 400
hash Optional. Trace hash from the mapped traces response (type=CALC). 404 is returned if it does not match the current mapping
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Intervals overlapping the requested time range, sorted by start time
content[].start String Interval start date time
content[].end String Interval end date time
content[].value String Interval value, for Rig Activity - the rig activity code

Get Rig Activity and KPIs (by depth) by lateral and trace

Get intervals of a robot-calculated trace by lateral UUID and trace UUID whose depth range overlaps from-to, sorted by start depth, without paging. from, to, start and end are in meters regardless of the project unit. Intervals without depth are not returned. 404 is returned if the trace is not mapped to the lateral or hash does not match

Request

$ curl 'https://solo.cloud/public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/e3c996b6-9cdb-4876-ac99-0aab694b801a/data/calculated/depth?from=1.0&to=10.0' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/20626472-cc22-4c7f-869b-ada2d152e5a1/traces/e3c996b6-9cdb-4876-ac99-0aab694b801a/data/calculated/depth?from=1.0&to=10.0 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5106540acfda6be05c8d37bee1746ba6
Content-Type: application/json

{
  "content" : [ {
    "start" : 1.0,
    "end" : 10.0,
    "value" : "21"
  } ]
}

GET /public/api/v1/wells/{lateralUuid}/traces/{traceUuid}/data/calculated/depth

Path parameter Description
lateralUuid Lateral UUID
traceUuid Robot-calculated trace UUID
Parameter Description
from Start depth in meters, regardless of the project unit
to End depth in meters. from greater than to returns 400
hash Optional. Trace hash from the mapped traces response (type=CALC). 404 is returned if it does not match the current mapping
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Intervals whose depth range overlaps the requested range, intervals without depth are not returned
content[].start Number Interval start depth in meters
content[].end Number Interval end depth in meters
content[].value String Interval value, for Rig Activity - the rig activity code

14. Directional Drilling

Get slide sheet intervals

Get Slide Sheet robot intervals by lateral UUID whose depth range overlaps from-to (project depth units), sorted by start depth, without paging. Depths and lengths are returned in project depth units, angles in degrees, other values in the units listed in the response fields. Intervals without slide sheet data are not returned. An empty content is returned if the lateral has no Slide Sheet data

Request

$ curl 'https://solo.cloud/public/api/v1/wells/728f7106-2b00-43ff-9dad-68f6a0f72599/intervals/slide-sheet?from=200.0&to=500.0' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/728f7106-2b00-43ff-9dad-68f6a0f72599/intervals/slide-sheet?from=200.0&to=500.0 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0af425d6ade3c064786e52d21e1f1bec
Content-Type: application/json

{
  "content" : [ {
    "depth_from" : 407.8224,
    "depth_to" : 421.15130400000004,
    "from" : "2023-04-25T03:00:15Z",
    "to" : "2023-04-25T03:12:37Z",
    "mode" : "ROTARY",
    "distance" : 13.328904000000023,
    "rop_avg" : 64.66853692722383,
    "mfi_avg" : 37.97616657081958,
    "diff_pressure_avg" : 28.50240282152303,
    "rpm_avg" : 40.55567116396066
  }, {
    "depth_from" : 421.15130400000004,
    "depth_to" : 426.579792,
    "from" : "2023-04-25T03:18:17Z",
    "to" : "2023-04-25T03:22:35Z",
    "mode" : "ROTARY",
    "distance" : 5.428487999999959,
    "rop_avg" : 75.74634418604595,
    "mfi_avg" : 44.301426562745654,
    "diff_pressure_avg" : 27.84057092289668,
    "rpm_avg" : 40.826889387984245
  }, {
    "depth_from" : 426.579792,
    "depth_to" : 433.09946400000007,
    "from" : "2023-04-25T03:31:29Z",
    "to" : "2023-04-25T03:40:34Z",
    "mode" : "SLIDE",
    "distance" : 6.519672000000071,
    "rop_avg" : 43.065723302752765,
    "mfi_avg" : 44.29881991412529,
    "diff_pressure_avg" : 18.090786997094895,
    "rpm_avg" : 0.11454885460497963,
    "gtf_avg" : -4188.322087125122,
    "mtf_avg" : 12844.874388918157
  }, {
    "depth_from" : 433.09946400000007,
    "depth_to" : 449.61962400000004,
    "from" : "2023-04-25T03:41:42Z",
    "to" : "2023-04-25T03:53:30Z",
    "mode" : "ROTARY",
    "distance" : 16.520159999999976,
    "rop_avg" : 84.00081355932191,
    "mfi_avg" : 44.29301571640074,
    "diff_pressure_avg" : 36.554082604907975,
    "rpm_avg" : 40.80610147601478
  }, {
    "depth_from" : 449.61962400000004,
    "depth_to" : 454.758552,
    "from" : "2023-04-25T03:59:48Z",
    "to" : "2023-04-25T04:02:40Z",
    "mode" : "ROTARY",
    "distance" : 5.138927999999964,
    "rop_avg" : 107.55895813953414,
    "mfi_avg" : 56.44465664867975,
    "diff_pressure_avg" : 34.757457553000386,
    "rpm_avg" : 60.42781138790041
  }, {
    "depth_from" : 454.758552,
    "depth_to" : 455.983848,
    "from" : "2023-04-25T04:04:08Z",
    "to" : "2023-04-25T04:06:15Z",
    "mode" : "SLIDE",
    "distance" : 1.2252960000000144,
    "rop_avg" : 34.73280000000041,
    "mfi_avg" : 56.48777290420894,
    "diff_pressure_avg" : 13.452906542095633,
    "rpm_avg" : 0.1718407960196003,
    "gtf_avg" : -4188.322087125122,
    "mtf_avg" : 12177.835638050661,
    "rotary_build_rate" : -33.10848744832925,
    "rotary_turn_rate" : -17.52802276676857,
    "motor_yield" : 212205.26330565757
  }, {
    "depth_from" : 455.99604,
    "depth_to" : 460.711296,
    "from" : "2023-04-25T04:06:15Z",
    "to" : "2023-04-25T04:11:22Z",
    "mode" : "OSCILLATION_SLIDE",
    "distance" : 4.715256000000011,
    "rop_avg" : 55.29290423452781,
    "mfi_avg" : 56.677411506534895,
    "diff_pressure_avg" : 21.57243815705851,
    "rpm_avg" : 6.967925016160347,
    "gtf_avg" : -4188.322087125122,
    "mtf_avg" : 14358.09873929123,
    "tf_control" : 7850.0,
    "burned_distance" : 3.4,
    "survey_md" : 1274.8155148800001,
    "incl" : 5193.290204884008,
    "azimuth" : 20604.1382455686
  } ]
}

GET /public/api/v1/wells/{lateralUuid}/intervals/slide-sheet

Path parameter Description
lateralUuid Lateral UUID
Parameter Description
from Optional. Start depth in project depth units, default - no lower bound
to Optional. End depth in project depth units, default - no upper bound. from greater than to returns 400
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Slide sheet intervals whose depth range overlaps the requested range
content[].depth_from Number Interval start depth in project depth units
content[].depth_to Number Interval end depth in project depth units
content[].from String Interval start time
content[].to String Interval end time
content[].mode String Drilling mode: ROTARY, SLIDE, OSCILLATION_SLIDE, MANUAL_TF, POWER_V, IH, HIA or AUTO_CURVE
content[].distance Number Distance drilled in project depth units
content[].rop_avg Number Average rate of penetration, m/h in meter projects, ft/h otherwise
content[].wob_avg Number Average weight on bit in the project force unit template if set, otherwise tonf[metric] in meter projects and klbf otherwise
content[].mfi_avg Number Average mud flow in, in the project flow rate unit template if set, otherwise L/s in meter projects and gal[US]/min otherwise
content[].diff_pressure_avg Number Average differential pressure in the project pressure unit template if set, otherwise atm in meter projects and psi otherwise
content[].rpm_avg Number Average rotary speed, RPM
content[].gtf_avg Number Average gravity tool face, degrees
content[].mtf_avg Number Average magnetic tool face, degrees
content[].gtf_effective Number Effective gravity tool face, degrees
content[].tf_control Number Tool face control, %
content[].burned_distance Number Burned distance in project depth units
content[].survey_md Number Survey measured depth in project depth units
content[].incl Number Inclination, degrees
content[].azimuth Number Azimuth, degrees
content[].tvd Number True vertical depth in project depth units
content[].dls Number Dog leg severity, deg/30m in meter projects, deg/100ft otherwise
content[].rotary_build_rate Number Rotary build rate, deg/30m in meter projects, deg/100ft otherwise
content[].rotary_turn_rate Number Rotary turn rate, deg/30m in meter projects, deg/100ft otherwise
content[].motor_yield Number Motor yield, deg/30m in meter projects, deg/100ft otherwise
content[].rss_dlink String RSS D-link
content[].rss_dtf Number RSS DTF, degrees
content[].rss_sr Number RSS steering ratio
content[].rss_tinc Number RSS target inclination, degrees
content[].rss_taz Number RSS target azimuth, degrees

15. Well attributes

Create custom well attribute

Create a custom well attribute by project UUID. name, type and group_uuid are required. A name already used in the project returns 400. For a LIST-type attribute initial options can be passed in the options field. An IDENTIFIER-type attribute holds a string value that must be unique within the project (see the update value endpoints for the conflict behavior)

Request

$ curl 'https://solo.cloud/public/api/v1/projects/672b9544-6dc7-4e54-bb74-dba4a898281e/wellattributes' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Custom attribute name",
  "group_uuid" : "caeb5bb2-18ea-4191-9c36-f2e252259371",
  "type" : "VARCHAR",
  "unit" : "DISTANCE"
}'
POST /public/api/v1/projects/672b9544-6dc7-4e54-bb74-dba4a898281e/wellattributes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 140

{
  "name" : "Custom attribute name",
  "group_uuid" : "caeb5bb2-18ea-4191-9c36-f2e252259371",
  "type" : "VARCHAR",
  "unit" : "DISTANCE"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8da2713522385691fbf31e6c2909b256
Content-Type: application/json

{
  "id" : 10005,
  "uuid" : "8fabfb0f-3562-42c6-b8a0-c74c12c59a11",
  "name" : "Custom attribute name"
}

POST /public/api/v1/projects/{projectUuid}/wellattributes

Path parameter Description
projectUuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Well attribute name, up to 200 characters, unique (case-insensitive) among the project's custom and the predefined attributes
name_short String Well attribute short name, up to 200 characters, defaults to name
type String Well attribute type (VARCHAR, INTEGER, FLOAT, ENUM, DATE, IDENTIFIER, LIST); an IDENTIFIER attribute holds a string value that must be unique within the project
unit String Well attribute domain (POSITION, DISTANCE, DEPTH, ANGLE, VOLUME)
range Varies Allowed values of an ENUM attribute, optional: when present, a non-empty array of non-blank strings, unique case-insensitively, values are trimmed. Kept as is for other types
group_uuid String Well attribute group UUID
options Array Initial list option names for a LIST attribute; request order becomes the display order. Rejected for other types

Response body

Path Type Description
id Number Created well attribute Id
uuid String Created well attribute UUID
name String Created well attribute name (trimmed, inner whitespace collapsed)

Create well attribute list option

Create a new option of a LIST-type well attribute by well attribute UUID. sort_order is an ordering weight, not a strict position: duplicates are allowed, options with equal weight are ordered by name (case-insensitive). A locked attribute is rejected with 403, an attribute that is not LIST-type with 400

Request

$ curl 'https://solo.cloud/public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Crew C",
  "sort_order" : 2
}'
POST /public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 43

{
  "name" : "Crew C",
  "sort_order" : 2
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 33dce9e3849957966233c54a83b096b1
Content-Type: application/json

{
  "id" : 4,
  "uuid" : "a4c412ec-2118-4173-af89-1b4c730e82fd",
  "sort_order" : 2
}

POST /public/api/v1/wellattributes/{wellAttributeUuid}/listoptions

Path parameter Description
wellAttributeUuid LIST-type well attribute UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String List option name, up to 200 characters, unique within the attribute (case-insensitive), a duplicate is rejected with 409
sort_order Number Ordering weight (non-negative integer), not a strict position: duplicates are allowed, options with equal weight are ordered by name (case-insensitive). Appended after the last option when omitted

Response body

Path Type Description
id Number List option Id
uuid String List option UUID
sort_order Number Ordering weight of the created option

Get well attribute groups

Get a list of well attribute groups

Request

$ curl 'https://solo.cloud/public/api/v1/attributegroups' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/attributegroups HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f8fd4639e69a9da21e41de99217c89d0
Content-Type: application/json

[ {
  "name" : "General",
  "uuid" : "caeb5bb2-18ea-4191-9c36-f2e252259371"
}, {
  "name" : "Location",
  "uuid" : "b7ef6059-d428-4f35-9d4a-a786ffff1d83"
}, {
  "name" : "Well Status",
  "uuid" : "47f0b746-16e4-4959-a722-91a03c9d3aaf"
}, {
  "name" : "Dates",
  "uuid" : "a7bf5d85-6294-403e-8909-1ab9fda006f4"
}, {
  "name" : "Production",
  "uuid" : "a5b4f651-1212-4bf2-9ec5-f279480ffdad"
}, {
  "name" : "Completion",
  "uuid" : "d2bde9e4-2042-48b4-a3a2-eb49146c8145"
}, {
  "name" : "Development characteristics",
  "uuid" : "b995079d-7f89-4054-9276-93c69b70a6f5"
} ]

GET /public/api/v1/attributegroups

Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].name String Well attribute group name
[].uuid String Well attribute group UUID

Get predefined well attributes by group

Get a list of predefined well attributes by group UUID. When the optional project_uuid query parameter is passed, options of predefined LIST-type attributes (list_options) are resolved from that project's dictionaries and included in display order

Request

$ curl 'https://solo.cloud/public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/wellattributes?project_uuid=672b9544-6dc7-4e54-bb74-dba4a898281e' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/wellattributes?project_uuid=672b9544-6dc7-4e54-bb74-dba4a898281e HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c6799f3466a2000b5289259d7ae324e4
Content-Type: application/json

[ {
  "id" : 7,
  "uuid" : "00000000-0000-0000-0000-000000000007",
  "name" : "KB",
  "name_short" : "KB",
  "type" : "FLOAT",
  "unit" : "DEPTH"
}, {
  "id" : 78,
  "uuid" : "cd2a61fa-7864-497b-bc0a-03ee2ae8b1bb",
  "name" : "CONVERGENCE_AUTO",
  "name_short" : "CONVERGENCE_AUTO",
  "type" : "INTEGER"
}, {
  "id" : 1,
  "uuid" : "00000000-0000-0000-0000-000000000001",
  "name" : "Name",
  "name_short" : "Name",
  "type" : "VARCHAR"
}, {
  "id" : 2,
  "uuid" : "00000000-0000-0000-0000-000000000002",
  "name" : "API",
  "name_short" : "API",
  "type" : "VARCHAR"
}, {
  "id" : 3,
  "uuid" : "00000000-0000-0000-0000-000000000003",
  "name" : "Well Type",
  "name_short" : "Type",
  "type" : "ENUM",
  "range" : [ "Horizontal", "Deviated", "Vertical", "Directional" ]
}, {
  "id" : 4,
  "uuid" : "00000000-0000-0000-0000-000000000004",
  "name" : "Operator",
  "name_short" : "OP",
  "type" : "VARCHAR"
}, {
  "id" : 5,
  "uuid" : "00000000-0000-0000-0000-000000000005",
  "name" : "Field",
  "name_short" : "Field",
  "type" : "VARCHAR"
}, {
  "id" : 6,
  "uuid" : "00000000-0000-0000-0000-000000000006",
  "name" : "Basin",
  "name_short" : "Basin",
  "type" : "VARCHAR"
}, {
  "id" : 8,
  "uuid" : "00000000-0000-0000-0000-000000000008",
  "name" : "Azimuth VS",
  "name_short" : "Az",
  "type" : "FLOAT",
  "unit" : "ANGLE",
  "range" : {
    "client" : {
      "max" : 360,
      "min" : 0
    }
  }
}, {
  "id" : 9,
  "uuid" : "00000000-0000-0000-0000-000000000009",
  "name" : "Convergence",
  "name_short" : "Conv",
  "type" : "FLOAT",
  "unit" : "ANGLE",
  "range" : {
    "client" : {
      "max" : 180,
      "min" : -180
    },
    "server" : {
      "max" : 360,
      "min" : 0
    }
  }
}, {
  "id" : 60,
  "uuid" : "00000000-0000-0000-0000-000000000060",
  "name" : "Source",
  "name_short" : "Source",
  "type" : "ENUM",
  "range" : [ "PN", "TGS", "Solo Data Factory" ]
}, {
  "id" : 58,
  "uuid" : "00000000-0000-0000-0000-000000000058",
  "name" : "Well System",
  "name_short" : "System",
  "type" : "VARCHAR"
}, {
  "id" : 59,
  "uuid" : "00000000-0000-0000-0000-000000000059",
  "name" : "Pad",
  "name_short" : "Pad",
  "type" : "VARCHAR"
}, {
  "id" : 65,
  "uuid" : "00000000-0000-0000-0000-000000000065",
  "name" : "Rig Type",
  "name_short" : "Rig Type",
  "type" : "ENUM",
  "range" : [ "LAND", "OFFSHORE" ]
}, {
  "id" : 66,
  "uuid" : "00000000-0000-0000-0000-000000000066",
  "name" : "Air gap",
  "name_short" : "Air gap",
  "type" : "FLOAT"
}, {
  "id" : 67,
  "uuid" : "00000000-0000-0000-0000-000000000067",
  "name" : "Ground level",
  "name_short" : "Ground level",
  "type" : "FLOAT"
}, {
  "id" : 68,
  "uuid" : "00000000-0000-0000-0000-000000000068",
  "name" : "Water depth",
  "name_short" : "Water depth",
  "type" : "FLOAT"
}, {
  "id" : 69,
  "uuid" : "00000000-0000-0000-0000-000000000069",
  "name" : "Magnetic sample date",
  "name_short" : "Magnetic sample date",
  "type" : "DATE"
}, {
  "id" : 70,
  "uuid" : "00000000-0000-0000-0000-000000000070",
  "name" : "Magnetic model name",
  "name_short" : "Magnetic model name",
  "type" : "VARCHAR"
}, {
  "id" : 71,
  "uuid" : "00000000-0000-0000-0000-000000000071",
  "name" : "Magnetic field strength",
  "name_short" : "Magnetic field strength",
  "type" : "FLOAT"
}, {
  "id" : 72,
  "uuid" : "00000000-0000-0000-0000-000000000072",
  "name" : "Magnetic dip angle",
  "name_short" : "Magnetic dip angle",
  "type" : "FLOAT"
}, {
  "id" : 73,
  "uuid" : "00000000-0000-0000-0000-000000000073",
  "name" : "Magnetic declination",
  "name_short" : "Magnetic declination",
  "type" : "FLOAT"
}, {
  "id" : 74,
  "uuid" : "00000000-0000-0000-0000-000000000074",
  "name" : "Survey program",
  "name_short" : "Survey program",
  "type" : "VARCHAR"
}, {
  "id" : 77,
  "uuid" : "00000000-0000-0000-0000-000000000077",
  "name" : "Rig",
  "name_short" : "Rig",
  "type" : "VARCHAR"
} ]

GET /public/api/v1/attributegroups/{uuid}/wellattributes

Path parameter Description
uuid Well attribute group UUID
Parameter Description
project_uuid Project UUID; when passed, options of predefined LIST-type attributes (list_options) are resolved from this project's dictionaries and included
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].name String Well attribute name
[].name_short String Well attribute short name
[].id Number Well attribute Id
[].uuid String Well attribute UUID
[].type String Well attribute type (VARCHAR, INTEGER, FLOAT, ENUM, DATE, IDENTIFIER, LIST); an IDENTIFIER attribute carries a string value unique within the project
[].unit String Well attribute domain (POSITION, DISTANCE, DEPTH, ANGLE, VOLUME)
[].range Varies Well attribute range: the array of allowed values for ENUM, value limits (client) for some predefined numeric attributes
[].range.client Object Value limits to check before updating the value; angle limits are in degrees
[].range.client.min Number Minimum value
[].range.client.max Number Maximum value
[].list_options Array Options of a LIST attribute in display order, present only for LIST attributes and only when the project_uuid query parameter is passed
[].list_options[].id Number List option Id
[].list_options[].name String List option name
[].list_options[].sort_order Number List option ordering weight (display order: by weight, then by name)

Get custom well attributes by group and project

Get a list of custom well attributes by group UUID and project UUID. A LIST-type attribute is returned together with its options (list_options) in display order

Request

$ curl 'https://solo.cloud/public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/projects/672b9544-6dc7-4e54-bb74-dba4a898281e/wellattributes' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/projects/672b9544-6dc7-4e54-bb74-dba4a898281e/wellattributes HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b3e4fbc6d6c0a4980bf495e47eed3b49
Content-Type: application/json

[ {
  "id" : 10000,
  "uuid" : "80362f27-07db-46ee-84ad-8d00a543832b",
  "name" : "Well attribute name",
  "type" : "ENUM",
  "unit" : "POSITION",
  "range" : [ "Top", "Middle", "Bottom" ]
}, {
  "id" : 10001,
  "uuid" : "0988c9f0-64c9-4146-9190-7085b2f31c5a",
  "name" : "Frac Crew",
  "type" : "LIST",
  "list_options" : [ {
    "id" : 1,
    "name" : "Crew A",
    "sort_order" : 0
  }, {
    "id" : 2,
    "name" : "Crew B",
    "sort_order" : 1
  }, {
    "id" : 4,
    "name" : "Crew C",
    "sort_order" : 2
  }, {
    "id" : 5,
    "name" : "Crew D updated",
    "sort_order" : 10
  } ]
}, {
  "id" : 10002,
  "uuid" : "e1fed6cd-51bd-4831-8a49-d3e13f8545b0",
  "name" : "UWI",
  "type" : "IDENTIFIER"
}, {
  "id" : 10005,
  "uuid" : "8fabfb0f-3562-42c6-b8a0-c74c12c59a11",
  "name" : "Custom attribute name",
  "name_short" : "Custom attribute name",
  "type" : "VARCHAR",
  "unit" : "DISTANCE"
} ]

GET /public/api/v1/attributegroups/{uuid}/projects/{projectUuid}/wellattributes

Path parameter Description
uuid Well attribute group UUID
projectUuid Project UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].name String Well attribute name
[].name_short String Well attribute short name
[].id Number Well attribute Id
[].uuid String Well attribute uuid
[].type String Well attribute type (VARCHAR, INTEGER, FLOAT, ENUM, DATE, IDENTIFIER, LIST); an IDENTIFIER attribute carries a string value unique within the project
[].unit String Well attribute domain (POSITION, DISTANCE, DEPTH, ANGLE, VOLUME)
[].range Varies Well attribute range: the array of allowed values for ENUM, value limits (client) for some predefined numeric attributes
[].range.client Object Value limits to check before updating the value; angle limits are in degrees
[].range.client.min Number Minimum value
[].range.client.max Number Maximum value
[].list_options Array Options of a LIST attribute in display order; absent for other types
[].list_options[].id Number List option Id
[].list_options[].name String List option name
[].list_options[].sort_order Number List option ordering weight (display order: by weight, then by name)

Get well attribute values by lateral

Get well attribute values by lateral UUID as an object keyed by well attribute name. The KB, lateral length, final MD, final TVD and final TVDSS values are returned in project units, the azimuth VS and convergence values in degrees, X-srf and Y-srf in project units, other numeric values are returned as stored. A value of a LIST-type attribute is returned as the resolved list option object; null if the option no longer exists

Request

$ curl 'https://solo.cloud/public/api/v1/wells/da2e3d16-bf5b-4fb4-9ba2-926469754678/attributevalues/v2' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/da2e3d16-bf5b-4fb4-9ba2-926469754678/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: aac23f3ee851daa94c5ae7b8e1c3cc87
Content-Type: application/json

{
  "Name" : {
    "value" : "nameWell",
    "attribute_id" : 1
  },
  "API" : {
    "value" : "api",
    "attribute_id" : 2
  },
  "Well Type" : {
    "value" : "Deviated",
    "attribute_id" : 3
  },
  "Operator" : {
    "value" : "operator",
    "attribute_id" : 4
  },
  "KB" : {
    "value" : {
      "val" : 3445.211614173228
    },
    "attribute_id" : 7
  },
  "Azimuth VS" : {
    "value" : {
      "val" : 114.59155902616465
    },
    "attribute_id" : 8
  },
  "Convergence" : {
    "value" : {
      "val" : 171.88733853924697
    },
    "attribute_id" : 9
  },
  "State (Province)" : {
    "value" : "Penguin State ",
    "attribute_id" : 10
  },
  "X-srf" : {
    "value" : {
      "val" : 13.123359580052492
    },
    "attribute_id" : 12
  },
  "Y-srf" : {
    "value" : {
      "val" : 16.404199475065617
    },
    "attribute_id" : 13
  },
  "Spud date" : {
    "value" : "2023-12-18T14:16:32.001+00:00",
    "attribute_id" : 17
  },
  "# of Stages" : {
    "value" : 20,
    "attribute_id" : 43
  },
  "Frac Fluid" : {
    "value" : "X-link",
    "attribute_id" : 46
  },
  "Final TVD" : {
    "value" : {
      "val" : 1.6076115485564304
    },
    "attribute_id" : 49
  },
  "Final TVDSS" : {
    "value" : {
      "val" : -1.6404199475065615
    },
    "attribute_id" : 50
  },
  "Formation" : {
    "value" : "test51",
    "attribute_id" : 51
  },
  "Net pay" : {
    "value" : {
      "val" : 52.0
    },
    "attribute_id" : 52
  },
  "Frac Crew" : {
    "value" : {
      "id" : 1,
      "name" : "Crew A",
      "sort_order" : 0
    },
    "attribute_id" : 10001
  },
  "UWI" : {
    "value" : "UWI-0001",
    "attribute_id" : 10002
  }
}

GET /public/api/v1/wells/{uuid}/attributevalues/v2

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
.value Object Well attribute value: a string for VARCHAR, ENUM, IDENTIFIER (unique within the project) and DATE (ISO 8601 date-time), a number for INTEGER, a double value object for FLOAT, a list option object for LIST; null when the value is cleared or the list option no longer exists
.value.val Number Value of a FLOAT attribute; KB, lateral length and final MD/TVD/TVDSS are in project units, azimuth VS and convergence in degrees
.value.undefined Boolean true when a FLOAT value is not set
.value.id Number Resolved list option Id (for LIST type)
.value.name String Resolved list option name (for LIST type)
.value.sort_order Number Resolved list option ordering weight (for LIST type)
*.attribute_id Number Well attribute Id

Get well attribute values by nestedwell

Get well attribute values by nested well UUID as an object keyed by well attribute name. The KB, lateral length, final MD, final TVD and final TVDSS values are returned in project units, the azimuth VS and convergence values in degrees, X-srf and Y-srf in project units, other numeric values are returned as stored. A value of a LIST-type attribute is returned as the resolved list option object; null if the option no longer exists

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/da6cac0e-334a-4aa6-9c5f-a5fb7291003f/attributevalues/v2' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/da6cac0e-334a-4aa6-9c5f-a5fb7291003f/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 90a797d51c12a9bcf7bfd0650dade05e
Content-Type: application/json

{
  "Name" : {
    "value" : "nestedName",
    "attribute_id" : 1
  },
  "API" : {
    "value" : "nestedApi",
    "attribute_id" : 2
  },
  "Operator" : {
    "value" : "nestedOperator",
    "attribute_id" : 4
  },
  "KB" : {
    "value" : {
      "val" : 328.4120734908136
    },
    "attribute_id" : 7
  },
  "Azimuth VS" : {
    "value" : {
      "val" : 5.729577951308232
    },
    "attribute_id" : 8
  },
  "Convergence" : {
    "value" : {
      "val" : 11.459155902616464
    },
    "attribute_id" : 9
  },
  "X-srf" : {
    "value" : {
      "val" : 103.1
    },
    "attribute_id" : 12
  },
  "Y-srf" : {
    "value" : {
      "val" : 104.1
    },
    "attribute_id" : 13
  }
}

GET /public/api/v1/nestedwells/{uuid}/attributevalues/v2

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
.value Object Well attribute value: a string for VARCHAR, ENUM, IDENTIFIER (unique within the project) and DATE (ISO 8601 date-time), a number for INTEGER, a double value object for FLOAT, a list option object for LIST; null when the value is cleared or the list option no longer exists
.value.val Number Value of a FLOAT attribute; KB, lateral length and final MD/TVD/TVDSS are in project units, azimuth VS and convergence in degrees
.value.undefined Boolean true when a FLOAT value is not set
.value.id Number Resolved list option Id (for LIST type)
.value.name String Resolved list option name (for LIST type)
.value.sort_order Number Resolved list option ordering weight (for LIST type)
*.attribute_id Number Well attribute Id

Get well attribute values by typewell

Get well attribute values by typewell UUID as an object keyed by well attribute name. The KB, lateral length, final MD, final TVD and final TVDSS values are returned in project units, the azimuth VS and convergence values in degrees, X-srf and Y-srf in project units, other numeric values are returned as stored. A value of a LIST-type attribute is returned as the resolved list option object; null if the option no longer exists

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/6428b210-b493-4eef-87bf-c0fea48baa8a/attributevalues/v2' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/6428b210-b493-4eef-87bf-c0fea48baa8a/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 07cf9ea47f97d66285335c4e7e73e17d
Content-Type: application/json

{
  "Name" : {
    "value" : "nameWell",
    "attribute_id" : 1
  },
  "API" : {
    "value" : "api",
    "attribute_id" : 2
  },
  "Well Type" : {
    "value" : "Deviated",
    "attribute_id" : 3
  },
  "Operator" : {
    "value" : "operator",
    "attribute_id" : 4
  },
  "KB" : {
    "value" : {
      "val" : 3.280839895013123
    },
    "attribute_id" : 7
  },
  "Azimuth VS" : {
    "value" : {
      "val" : 114.59155902616465
    },
    "attribute_id" : 8
  },
  "Convergence" : {
    "value" : {
      "val" : 171.88733853924697
    },
    "attribute_id" : 9
  },
  "X-srf" : {
    "value" : {
      "val" : 13.123359580052492
    },
    "attribute_id" : 12
  },
  "Y-srf" : {
    "value" : {
      "val" : 16.404199475065617
    },
    "attribute_id" : 13
  },
  "Spud date" : {
    "value" : "2022-11-17T13:15:31.000+00:00",
    "attribute_id" : 17
  },
  "# of Stages" : {
    "value" : 43,
    "attribute_id" : 43
  },
  "Final TVD" : {
    "value" : {
      "val" : 1.6076115485564304
    },
    "attribute_id" : 49
  },
  "Final TVDSS" : {
    "value" : {
      "val" : -1.6404199475065615
    },
    "attribute_id" : 50
  },
  "Formation" : {
    "value" : "test51",
    "attribute_id" : 51
  },
  "Net pay" : {
    "value" : {
      "val" : 52.0
    },
    "attribute_id" : 52
  }
}

GET /public/api/v1/typewells/{uuid}/attributevalues/v2

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
.value Object Well attribute value: a string for VARCHAR, ENUM, IDENTIFIER (unique within the project) and DATE (ISO 8601 date-time), a number for INTEGER, a double value object for FLOAT, a list option object for LIST; null when the value is cleared or the list option no longer exists
.value.val Number Value of a FLOAT attribute; KB, lateral length and final MD/TVD/TVDSS are in project units, azimuth VS and convergence in degrees
.value.undefined Boolean true when a FLOAT value is not set
.value.id Number Resolved list option Id (for LIST type)
.value.name String Resolved list option name (for LIST type)
.value.sort_order Number Resolved list option ordering weight (for LIST type)
*.attribute_id Number Well attribute Id

Update custom well attribute

Update custom well attribute by UUID. At least one field must be present, an absent field keeps its current value. A locked attribute is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/wellattributes/0a0fce37-4653-4771-b75e-bbc55402ad8f' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated well attribute name",
  "name_short" : "New short name",
  "group_uuid" : "b7ef6059-d428-4f35-9d4a-a786ffff1d83"
}'
PATCH /public/api/v1/wellattributes/0a0fce37-4653-4771-b75e-bbc55402ad8f HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 136

{
  "name" : "Updated well attribute name",
  "name_short" : "New short name",
  "group_uuid" : "b7ef6059-d428-4f35-9d4a-a786ffff1d83"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4e0a40ab04c5fc5a128a82403521dbd2

PATCH /public/api/v1/wellattributes/{wellAttributeUuid}

Path parameter Description
wellAttributeUuid Well attribute UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New well attribute name, unique (case-insensitive) among the project's custom and the predefined attributes
name_short String New well attribute short name
group_uuid String Well attribute group UUID to place the attribute in

Response body

Empty body

Update well attribute list option

Update a list option of a LIST-type well attribute by well attribute UUID and option Id. Both fields are optional, but at least one must be present; an absent field keeps its current value. sort_order is an ordering weight, not a strict position: duplicates are allowed, options with equal weight are ordered by name (case-insensitive). A locked attribute is rejected with 403, an attribute that is not LIST-type with 400. An option Id that does not exist returns 400 with type NOT_FOUND

Request

$ curl 'https://solo.cloud/public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions/5' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Crew D updated",
  "sort_order" : 10
}'
PATCH /public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions/5 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 52

{
  "name" : "Crew D updated",
  "sort_order" : 10
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9cddcebf694bea4cdaac1c301b10ee6b

PATCH /public/api/v1/wellattributes/{wellAttributeUuid}/listoptions/{optionId}

Path parameter Description
wellAttributeUuid LIST-type well attribute UUID
optionId List option Id
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New list option name, up to 200 characters, unique within the attribute (case-insensitive), a duplicate is rejected with 409
sort_order Number New ordering weight (non-negative integer): duplicates are allowed, options with equal weight are ordered by name (case-insensitive)

Response body

Empty body

Update well attribute values by lateral

Update well attribute values by lateral UUID. Only the listed attributes are changed, the values of locked attributes are ignored. Returns 403 if the lateral is locked or is a private lateral of another user. The values to be changed must be pre-checked for validity using the range constraints returned by Get predefined well attributes by group and Get custom well attributes by group and project (if applicable). This path takes the KB, lateral length, final MD, final TVD and final TVDSS values in meters and the azimuth VS and convergence values in radians, without conversion, /wells/{uuid}/attributevalues/v2 takes them in project units and degrees, as returned by Get well attribute values by lateral. Other values are stored as submitted. For this path compare the azimuth VS and convergence values with the range limits converted to radians. For a LIST-type attribute pass the Id of one of the attribute's list options as the value; null clears the value. An unknown attribute_id, a LIST value that is not an Id of the attribute's options, a negative KB, lateral length, final MD or final TVD, and an azimuth VS outside [0; 360] degrees or a convergence outside [-180; 180] degrees (radians on this path) are rejected with 406. A value whose JSON type does not match the attribute type is rejected with 400. For an IDENTIFIER-type attribute the value must be unique within the project (case-insensitive, leading/trailing spaces ignored; laterals and typewells share one uniqueness scope): a duplicate is rejected with 409 (NOT_ACCEPTED), null clears the value and releases it

Request

$ curl 'https://solo.cloud/public/api/v1/wells/da2e3d16-bf5b-4fb4-9ba2-926469754678/attributevalues' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '[ {
  "value" : "Penguin State ",
  "attribute_id" : 10
}, {
  "value" : {
    "val" : 1050.1005
  },
  "attribute_id" : 7
}, {
  "value" : 20,
  "attribute_id" : 43
}, {
  "value" : "2023-12-18T14:16:32.001+00:00",
  "attribute_id" : 17
}, {
  "value" : "X-link",
  "attribute_id" : 46
} ]'
PATCH /public/api/v1/wells/da2e3d16-bf5b-4fb4-9ba2-926469754678/attributevalues HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 290

[ {
  "value" : "Penguin State ",
  "attribute_id" : 10
}, {
  "value" : {
    "val" : 1050.1005
  },
  "attribute_id" : 7
}, {
  "value" : 20,
  "attribute_id" : 43
}, {
  "value" : "2023-12-18T14:16:32.001+00:00",
  "attribute_id" : 17
}, {
  "value" : "X-link",
  "attribute_id" : 46
} ]

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 44b89411e1763d863b35f18c5148868c

PATCH /public/api/v1/wells/{uuid}/attributevalues

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
[].attribute_id Number Well attribute Id; attributes that are not listed keep their values
[].value Varies New value: a string for VARCHAR, ENUM and IDENTIFIER, an ISO 8601 date-time string for DATE, an integer for INTEGER, a double value object for FLOAT, a list option Id for LIST; null clears the value
[].value.val Number Value of a FLOAT attribute; on this path KB, lateral length and final MD/TVD/TVDSS are in meters, azimuth VS and convergence in radians
[].value.undefined Boolean Set to true to store an undefined FLOAT value

Response body

Empty body

Update well attribute values by typewell

Update well attribute values by typewell UUID. Only the listed attributes are changed, the values of locked attributes are ignored. Returns 403 if the typewell is locked or is a private typewell of another user. The values to be changed must be pre-checked for validity using the range constraints returned by Get predefined well attributes by group and Get custom well attributes by group and project (if applicable). This path takes the KB, lateral length, final MD, final TVD and final TVDSS values in meters and the azimuth VS and convergence values in radians, without conversion, /typewells/{uuid}/attributevalues/v2 takes them in project units and degrees, as returned by Get well attribute values by typewell. Other values are stored as submitted. For this path compare the azimuth VS and convergence values with the range limits converted to radians. For a LIST-type attribute pass the Id of one of the attribute's list options as the value; null clears the value. An unknown attribute_id, a LIST value that is not an Id of the attribute's options, a negative KB, lateral length, final MD or final TVD, and an azimuth VS outside [0; 360] degrees or a convergence outside [-180; 180] degrees (radians on this path) are rejected with 406. A value whose JSON type does not match the attribute type is rejected with 400. For an IDENTIFIER-type attribute the value must be unique within the project (case-insensitive, leading/trailing spaces ignored; laterals and typewells share one uniqueness scope): a duplicate is rejected with 409 (NOT_ACCEPTED), null clears the value and releases it

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/6428b210-b493-4eef-87bf-c0fea48baa8a/attributevalues' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '[ {
  "value" : "Penguin State ",
  "attribute_id" : 10
}, {
  "value" : {
    "val" : 1050.1005
  },
  "attribute_id" : 7
}, {
  "value" : 20,
  "attribute_id" : 43
}, {
  "value" : "2023-12-18T14:16:32.001+00:00",
  "attribute_id" : 17
}, {
  "value" : "X-link",
  "attribute_id" : 46
} ]'
PATCH /public/api/v1/typewells/6428b210-b493-4eef-87bf-c0fea48baa8a/attributevalues HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 290

[ {
  "value" : "Penguin State ",
  "attribute_id" : 10
}, {
  "value" : {
    "val" : 1050.1005
  },
  "attribute_id" : 7
}, {
  "value" : 20,
  "attribute_id" : 43
}, {
  "value" : "2023-12-18T14:16:32.001+00:00",
  "attribute_id" : 17
}, {
  "value" : "X-link",
  "attribute_id" : 46
} ]

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c679ea5a0116dfd136ef8b8424fd01b6

PATCH /public/api/v1/typewells/{uuid}/attributevalues

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
[].attribute_id Number Well attribute Id; attributes that are not listed keep their values
[].value Varies New value: a string for VARCHAR, ENUM and IDENTIFIER, an ISO 8601 date-time string for DATE, an integer for INTEGER, a double value object for FLOAT, a list option Id for LIST; null clears the value
[].value.val Number Value of a FLOAT attribute; on this path KB, lateral length and final MD/TVD/TVDSS are in meters, azimuth VS and convergence in radians
[].value.undefined Boolean Set to true to store an undefined FLOAT value

Response body

Empty body

Delete custom well attribute

Delete custom well attribute by UUID. Its values are no longer returned for wells. A locked attribute is rejected with 403

Request

$ curl 'https://solo.cloud/public/api/v1/wellattributes/2ca12a7b-e043-4f65-8150-6ea1e4ef0ae7' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/wellattributes/2ca12a7b-e043-4f65-8150-6ea1e4ef0ae7 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 146e03b3d9fd2292ac92a88f2c8048c0

DELETE /public/api/v1/wellattributes/{wellAttributeUuid}

Path parameter Description
wellAttributeUuid Well attribute UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete well attribute list option

Delete a list option of a LIST-type well attribute by well attribute UUID and option Id. Well attribute values that reference the deleted option are returned as null. A locked attribute is rejected with 403, an attribute that is not LIST-type with 400. An option Id that does not exist returns 400 with type NOT_FOUND

Request

$ curl 'https://solo.cloud/public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions/3' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/wellattributes/0988c9f0-64c9-4146-9190-7085b2f31c5a/listoptions/3 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: fa435f4f64b08861e66022a7ca900426

DELETE /public/api/v1/wellattributes/{wellAttributeUuid}/listoptions/{optionId}

Path parameter Description
wellAttributeUuid LIST-type well attribute UUID
optionId List option Id
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

16. Grids

Create grid

Create an empty grid by project UUID (a virtual project UUID is also accepted). The grid is not listed by Get grids by project until its data is uploaded. A grid created with a virtual project UUID belongs to the global project and is added to the virtual project only if its first data upload is made with Upload grid data to VP

Request

$ curl 'https://solo.cloud/public/api/v1/projects/535ec7bc-2792-44ad-baf5-54ceaa101e84/grids' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Grid name"
}'
POST /public/api/v1/projects/535ec7bc-2792-44ad-baf5-54ceaa101e84/grids HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 26

{
  "name" : "Grid name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7fd9378358b62954b5fa7c016cfb3744
Content-Type: application/json

{
  "uuid" : "107301cc-ca81-4bc2-8552-238ffd67748c"
}

POST /public/api/v1/projects/{uuid}/grids

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Grid name. Must not be blank, up to 200 characters

Response body

Path Type Description
uuid String Created grid UUID

Get grids by project

Get a list of grids by project UUID with pagination, sorted by name. For a virtual project UUID, only grids of the virtual project are returned. Grids that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/projects/535ec7bc-2792-44ad-baf5-54ceaa101e84/grids?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/535ec7bc-2792-44ad-baf5-54ceaa101e84/grids?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e7a6f0e235a4f10f4462ac5f7d98c2be
Content-Type: application/json

{
  "content" : [ {
    "name" : "Grid one",
    "uuid" : "7b573a87-645e-4a0d-8ae2-2a94ddcb364f"
  }, {
    "name" : "One more grid",
    "uuid" : "bfe57f9d-8b87-48fa-9d32-5ad9fd9b721e"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/grids

Path parameter Description
uuid Project UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the grids whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Grid UUID
content[].name String Grid name

Get grid metadata

Get grid metadata by UUID. Coordinates and steps are in project units, the angle is in degrees. Returns 404 if the grid has no data

Request

$ curl 'https://solo.cloud/public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/metadata' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/metadata HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c365a2f2ddb9b8ea15d4dce967167be3
Content-Type: application/json

{
  "start_x" : 1761026.4432000222,
  "start_y" : 508018.38319997117,
  "step_x" : 50.00000000089999,
  "step_y" : 50.000899999999994,
  "angle" : 3.4377511537473244E-4,
  "columns" : 10,
  "rows" : 5
}

GET /public/api/v1/grids/{uuid}/metadata

Path parameter Description
uuid Grid UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
start_x Number X coordinate of the grid origin in project units
start_y Number Y coordinate of the grid origin in project units
step_x Number Grid X-axis step in project units
step_y Number Grid Y-axis step in project units
angle Number Grid rotation angle (degrees)
columns Number Number of grid columns (values in each row)
rows Number Number of grid rows

Get grid data

Get grid metadata and values by UUID. data contains rows rows numbered from 1, each with columns values. Grid values are returned as stored, without unit conversion. Returns 404 if the grid has no data

Request

$ curl 'https://solo.cloud/public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7ed91d56ecf15900ab8b880cb483ed03
Content-Type: application/json

{
  "metadata" : {
    "start_x" : 1761026.4432000222,
    "start_y" : 508018.38319997117,
    "step_x" : 50.00000000089999,
    "step_y" : 50.000899999999994,
    "angle" : 3.4377511537473244E-4,
    "columns" : 10,
    "rows" : 5
  },
  "data" : [ {
    "row_number" : 1,
    "values" : [ -4004.1541, -4005.4883, -4006.1639, -4004.9126, -4003.3309, -4001.4009, -3998.938, -3996.5938, -3994.3135, -3991.4742 ]
  }, {
    "row_number" : 2,
    "values" : [ -4006.5755, -4007.4856, -4008.077, -4006.9102, -4005.2642, -4002.824, -4000.285, -3998.0855, -3996.1604, -3993.5733 ]
  }, {
    "row_number" : 3,
    "values" : [ -4009.1927, -4010.4065, -4011.1248, -4009.6104, -4007.5018, -4004.8636, -4002.7835, -4000.7776, -3998.6927, -3994.7417 ]
  }, {
    "row_number" : 4,
    "values" : [ -4012.2437, -4013.699, -4014.2129, -4012.1336, -4009.8895, -4007.2583, -4005.5298, -4003.5118, -3999.9412, -3995.8165 ]
  }, {
    "row_number" : 5,
    "values" : [ -4016.2227, -4016.9622, -4016.6907, -4014.7264, -4012.2242, -4009.7496, -4008.4166, -4005.1592, -4001.252, -3996.7496 ]
  } ]
}

GET /public/api/v1/grids/{uuid}/data

Path parameter Description
uuid Grid UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
metadata.start_x Number X coordinate of the grid origin in project units
metadata.start_y Number Y coordinate of the grid origin in project units
metadata.step_x Number Grid X-axis step in project units
metadata.step_y Number Grid Y-axis step in project units
metadata.angle Number Grid rotation angle (degrees)
metadata.columns Number Number of grid columns (values in each row)
metadata.rows Number Number of grid rows
data Array Grid rows in row_number order
data[].row_number Number Row number, starting from 1
data[].values Array Row values, one per column. Returned as stored, without unit conversion

Upload grid data to GP

Upload grid data by grid UUID, replacing the existing grid data. metadata must be the first field of the body and data the second one. The grid must have at least 5 rows, 5 columns and 50 nodes, data must contain exactly rows rows numbered 1, 2, ... in order, each with exactly columns values. A body that breaks these rules or cannot be read, including a row without values, is rejected with 406 (INVALID_REQUEST_BODY_FORMAT). If the data cannot be saved, the error status of the Solo data service is returned (type INVALID_REQUEST). Coordinates and steps are in project units, the angle is in degrees, grid values are stored without unit conversion. Requires the Update permission in the global project

Request

$ curl 'https://solo.cloud/public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "metadata" : {
    "start_x" : 111.5,
    "start_y" : 555.1,
    "step_x" : 10,
    "step_y" : 20,
    "angle" : 120,
    "columns" : 10,
    "rows" : 5
  },
  "data" : [ {
    "row_number" : 1,
    "values" : [ -4004.1541, -4005.4883, -4006.1639, -4004.9126, -4003.3309, -4001.4009, -3998.938, -3996.5938, -3994.3135, -3991.4742 ]
  }, {
    "row_number" : 2,
    "values" : [ -4006.5755, -4007.4856, -4008.077, -4006.9102, -4005.2642, -4002.824, -4000.285, -3998.0855, -3996.1604, -3993.5733 ]
  }, {
    "row_number" : 3,
    "values" : [ -4009.1927, -4010.4065, -4011.1248, -4009.6104, -4007.5018, -4004.8636, -4002.7835, -4000.7776, -3998.6927, -3994.7417 ]
  }, {
    "row_number" : 4,
    "values" : [ -4012.2437, -4013.699, -4014.2129, -4012.1336, -4009.8895, -4007.2583, -4005.5298, -4003.5118, -3999.9412, -3995.8165 ]
  }, {
    "row_number" : 5,
    "values" : [ -4016.2227, -4016.9622, -4016.6907, -4014.7264, -4012.2242, -4009.7496, -4008.4166, -4005.1592, -4001.252, -3996.7496 ]
  } ]
}'
PUT /public/api/v1/grids/217b0197-76a0-416b-afb5-ee38b4a5655a/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1006

{
  "metadata" : {
    "start_x" : 111.5,
    "start_y" : 555.1,
    "step_x" : 10,
    "step_y" : 20,
    "angle" : 120,
    "columns" : 10,
    "rows" : 5
  },
  "data" : [ {
    "row_number" : 1,
    "values" : [ -4004.1541, -4005.4883, -4006.1639, -4004.9126, -4003.3309, -4001.4009, -3998.938, -3996.5938, -3994.3135, -3991.4742 ]
  }, {
    "row_number" : 2,
    "values" : [ -4006.5755, -4007.4856, -4008.077, -4006.9102, -4005.2642, -4002.824, -4000.285, -3998.0855, -3996.1604, -3993.5733 ]
  }, {
    "row_number" : 3,
    "values" : [ -4009.1927, -4010.4065, -4011.1248, -4009.6104, -4007.5018, -4004.8636, -4002.7835, -4000.7776, -3998.6927, -3994.7417 ]
  }, {
    "row_number" : 4,
    "values" : [ -4012.2437, -4013.699, -4014.2129, -4012.1336, -4009.8895, -4007.2583, -4005.5298, -4003.5118, -3999.9412, -3995.8165 ]
  }, {
    "row_number" : 5,
    "values" : [ -4016.2227, -4016.9622, -4016.6907, -4014.7264, -4012.2242, -4009.7496, -4008.4166, -4005.1592, -4001.252, -3996.7496 ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8c5fd6083350252da2921cdceae1eebf

PUT /public/api/v1/grids/{uuid}/data

Path parameter Description
uuid Grid UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
metadata.start_x Number X coordinate of the grid origin in project units
metadata.start_y Number Y coordinate of the grid origin in project units
metadata.step_x Number Grid X-axis step in project units
metadata.step_y Number Grid Y-axis step in project units
metadata.angle Number Grid rotation angle in degrees, range [-180; 180]
metadata.columns Number Number of grid columns (values in each row), at least 5
metadata.rows Number Number of grid rows, at least 5. rows * columns must be at least 50
data Array Grid rows, exactly rows elements. Must follow metadata in the body
data[].row_number Number Row number. Rows must go in order 1, 2, ..., rows
data[].values Array Row values, exactly columns numbers. Stored as is, without unit conversion

Response body

Empty body

Upload grid data to VP

Upload grid data by grid UUID and virtual project UUID, with the same body and rules as Upload grid data to GP. The grid must belong to the global project of the virtual project, otherwise 400 is returned. The Update permission is checked in the virtual project. Grid data is shared, so the upload replaces the data seen in the global project and in all its virtual projects. If the grid had no data before, it is also added to the given virtual project

Request

$ curl 'https://solo.cloud/public/api/v1/projects/60320d93-5c16-46b8-9254-dc7745d4f26c/grids/bfe57f9d-8b87-48fa-9d32-5ad9fd9b721e/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "metadata" : {
    "start_x" : 111.5,
    "start_y" : 555.1,
    "step_x" : 10,
    "step_y" : 20,
    "angle" : 120,
    "columns" : 10,
    "rows" : 5
  },
  "data" : [ {
    "row_number" : 1,
    "values" : [ -4004.1541, -4005.4883, -4006.1639, -4004.9126, -4003.3309, -4001.4009, -3998.938, -3996.5938, -3994.3135, -3991.4742 ]
  }, {
    "row_number" : 2,
    "values" : [ -4006.5755, -4007.4856, -4008.077, -4006.9102, -4005.2642, -4002.824, -4000.285, -3998.0855, -3996.1604, -3993.5733 ]
  }, {
    "row_number" : 3,
    "values" : [ -4009.1927, -4010.4065, -4011.1248, -4009.6104, -4007.5018, -4004.8636, -4002.7835, -4000.7776, -3998.6927, -3994.7417 ]
  }, {
    "row_number" : 4,
    "values" : [ -4012.2437, -4013.699, -4014.2129, -4012.1336, -4009.8895, -4007.2583, -4005.5298, -4003.5118, -3999.9412, -3995.8165 ]
  }, {
    "row_number" : 5,
    "values" : [ -4016.2227, -4016.9622, -4016.6907, -4014.7264, -4012.2242, -4009.7496, -4008.4166, -4005.1592, -4001.252, -3996.7496 ]
  } ]
}'
PUT /public/api/v1/projects/60320d93-5c16-46b8-9254-dc7745d4f26c/grids/bfe57f9d-8b87-48fa-9d32-5ad9fd9b721e/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1006

{
  "metadata" : {
    "start_x" : 111.5,
    "start_y" : 555.1,
    "step_x" : 10,
    "step_y" : 20,
    "angle" : 120,
    "columns" : 10,
    "rows" : 5
  },
  "data" : [ {
    "row_number" : 1,
    "values" : [ -4004.1541, -4005.4883, -4006.1639, -4004.9126, -4003.3309, -4001.4009, -3998.938, -3996.5938, -3994.3135, -3991.4742 ]
  }, {
    "row_number" : 2,
    "values" : [ -4006.5755, -4007.4856, -4008.077, -4006.9102, -4005.2642, -4002.824, -4000.285, -3998.0855, -3996.1604, -3993.5733 ]
  }, {
    "row_number" : 3,
    "values" : [ -4009.1927, -4010.4065, -4011.1248, -4009.6104, -4007.5018, -4004.8636, -4002.7835, -4000.7776, -3998.6927, -3994.7417 ]
  }, {
    "row_number" : 4,
    "values" : [ -4012.2437, -4013.699, -4014.2129, -4012.1336, -4009.8895, -4007.2583, -4005.5298, -4003.5118, -3999.9412, -3995.8165 ]
  }, {
    "row_number" : 5,
    "values" : [ -4016.2227, -4016.9622, -4016.6907, -4014.7264, -4012.2242, -4009.7496, -4008.4166, -4005.1592, -4001.252, -3996.7496 ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8a1e854d654064779e89352139ec9e9d

PUT /public/api/v1/projects/{projectUuid}/grids/{gridUuid}/data

Path parameter Description
projectUuid Virtual project UUID
gridUuid UUID of a grid of the global project of the virtual project
Header Description
Authorization OAuth2 authorization header
Body field Type Description
metadata.start_x Number X coordinate of the grid origin in project units
metadata.start_y Number Y coordinate of the grid origin in project units
metadata.step_x Number Grid X-axis step in project units
metadata.step_y Number Grid Y-axis step in project units
metadata.angle Number Grid rotation angle in degrees, range [-180; 180]
metadata.columns Number Number of grid columns (values in each row), at least 5
metadata.rows Number Number of grid rows, at least 5. rows * columns must be at least 50
data Array Grid rows, exactly rows elements. Must follow metadata in the body
data[].row_number Number Row number. Rows must go in order 1, 2, ..., rows
data[].values Array Row values, exactly columns numbers. Stored as is, without unit conversion

Response body

Empty body

17. Polygons

Create polygon

Create an empty polygon by project UUID (a virtual project UUID is also accepted). The polygon is not listed by Get polygons by project until its data is uploaded. A polygon created with a virtual project UUID belongs to the global project and is added to the virtual project only if its first data upload is made with Upload polygon data to VP. Returns 409 if the polygon cannot be saved

Request

$ curl 'https://solo.cloud/public/api/v1/projects/8bc3b31b-8d5e-41c6-8d50-40011beced5b/polygons' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Polygon name"
}'
POST /public/api/v1/projects/8bc3b31b-8d5e-41c6-8d50-40011beced5b/polygons HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 29

{
  "name" : "Polygon name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bfc0b507f6566ec3af29f5b7888f67b0
Content-Type: application/json

{
  "uuid" : "7fb93210-a95b-4638-95f7-20a16e52f14b"
}

POST /public/api/v1/projects/{uuid}/polygons

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Polygon name. Must not be blank, up to 200 characters

Response body

Path Type Description
uuid String Created polygon UUID

Get polygons by project

Get a list of polygons by project UUID with pagination, sorted by name. For a virtual project UUID, only polygons of the virtual project are returned. Polygons that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/projects/8bc3b31b-8d5e-41c6-8d50-40011beced5b/polygons?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/8bc3b31b-8d5e-41c6-8d50-40011beced5b/polygons?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 580514b6f5b3e6c081252df964a819e4
Content-Type: application/json

{
  "content" : [ {
    "name" : "One more polygon",
    "uuid" : "05b3e744-7467-4511-bc08-bb71e05286f3"
  }, {
    "name" : "Polygon one",
    "uuid" : "af534ddd-d041-4f7d-a510-1d4911ddbc5d"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/polygons

Path parameter Description
uuid Project UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the polygons whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Polygon UUID
content[].name String Polygon name

Get polygon data

Get the polylines of a polygon by UUID. Coordinates are in project units. Returns 404 if the polygon has no data

Request

$ curl 'https://solo.cloud/public/api/v1/polygons/90b9da76-477c-4458-afe0-775850ffb2b6/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/polygons/90b9da76-477c-4458-afe0-775850ffb2b6/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7fc5aa2617e267d7210a33a2db4aa3de
Content-Type: application/json

[ {
  "label" : "",
  "points_count" : 24,
  "xyz_points" : [ {
    "x" : 1791071.9272422243,
    "y" : 2.505124146981627E7,
    "z" : 1.6404199507874015E8
  }, {
    "x" : 1789698.1627296587,
    "y" : 2.505965649606299E7,
    "z" : -1.6404199507874015E8
  }, {
    "x" : 1795150.2624671916,
    "y" : 2.504813877952756E7,
    "z" : -5389.763779527559
  }, {
    "x" : 1796545.93175853,
    "y" : 2.5044033464566927E7,
    "z" : -5406.496062992126
  }, {
    "x" : 1790436.0236220472,
    "y" : 2.50544937664042E7,
    "z" : -5390.419947506562
  }, {
    "x" : 1798453.7401574801,
    "y" : 2.5044123031496063E7,
    "z" : -5395.997375328084
  }, {
    "x" : 1788395.9973753279,
    "y" : 2.505090649606299E7,
    "z" : -5406.824146981627
  }, {
    "x" : 1794440.6167979,
    "y" : 2.5046503280839894E7,
    "z" : -5392.716535433071
  }, {
    "x" : 1786367.4540682416,
    "y" : 2.5062931430446193E7,
    "z" : -5452.755905511811
  }, {
    "x" : 1788224.7375328084,
    "y" : 2.5057265748031493E7,
    "z" : -5404.85564304462
  }, {
    "x" : 1789879.2650918632,
    "y" : 2.50643156167979E7,
    "z" : -5464.238845144357
  }, {
    "x" : 1796062.6640419948,
    "y" : 2.5055903871391077E7,
    "z" : -5512.795275590551
  }, {
    "x" : 1789700.1312335955,
    "y" : 2.5059661089238845E7,
    "z" : -5548.884514435695
  }, {
    "x" : 1796443.2414698163,
    "y" : 2.5047924212598424E7,
    "z" : -5404.199475065617
  }, {
    "x" : 1782251.968503937,
    "y" : 2.505876902887139E7,
    "z" : -5779.85564304462
  }, {
    "x" : 1793879.2650918635,
    "y" : 2.5047021325459316E7,
    "z" : -5394.028871391076
  }, {
    "x" : 1795888.1233595798,
    "y" : 2.5046238845144354E7,
    "z" : -5369.422572178477
  }, {
    "x" : 1794775.2624671916,
    "y" : 2.5049992782152228E7,
    "z" : -5404.527559055117
  }, {
    "x" : 1793214.2388451442,
    "y" : 2.5048931102362204E7,
    "z" : -5332.677165354331
  }, {
    "x" : 1797323.490813648,
    "y" : 2.5047011811023623E7,
    "z" : -5422.900262467192
  }, {
    "x" : 1789103.3464566926,
    "y" : 2.505270866141732E7,
    "z" : -5341.535433070866
  }, {
    "x" : 1788217.847769029,
    "y" : 2.505421062992126E7,
    "z" : -5350.0656167979005
  }, {
    "x" : 1789805.4461942255,
    "y" : 2.5062502952755906E7,
    "z" : -5399.278215223097
  }, {
    "x" : 1788417.3228346454,
    "y" : 2.5061791994750656E7,
    "z" : -5383.202099737532
  } ]
} ]

GET /public/api/v1/polygons/{uuid}/data

Path parameter Description
uuid Polygon UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].label String Polyline label, an empty string if the label is not set
[].points_count Number Number of points in the polyline
[].xyz_points Array Polyline XYZ points
[].xyz_points[].x Number Point X coordinate (project units)
[].xyz_points[].y Number Point Y coordinate (project units)
[].xyz_points[].z Number Point Z coordinate (project depth units)

Upload polygon data to GP

Upload polygon data by polygon UUID, replacing all polylines of the polygon. The body is an array of polylines, a polyline with an empty xyz_points array is skipped. An unreadable body, for example a polyline without xyz_points, is rejected with 406. If the data cannot be saved, the error status of the Solo data service is returned (type INVALID_REQUEST). Coordinates are in project units. Requires the Update permission in the global project

Request

$ curl 'https://solo.cloud/public/api/v1/polygons/90b9da76-477c-4458-afe0-775850ffb2b6/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '[ {
  "label" : "polyline1",
  "xyz_points" : [ {
    "x" : 178821.8,
    "y" : 250542.6,
    "z" : -5350.0
  }, {
    "x" : 178980.4,
    "y" : 250625.7,
    "z" : -5399.2
  }, {
    "x" : 178841.3,
    "y" : 250617.9,
    "z" : -5383.5
  } ]
}, {
  "xyz_points" : [ {
    "x" : 17.0,
    "y" : 25.0,
    "z" : -53.1
  }, {
    "x" : 11.0,
    "y" : 225.7,
    "z" : -154.0
  } ]
} ]'
PUT /public/api/v1/polygons/90b9da76-477c-4458-afe0-775850ffb2b6/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 384

[ {
  "label" : "polyline1",
  "xyz_points" : [ {
    "x" : 178821.8,
    "y" : 250542.6,
    "z" : -5350.0
  }, {
    "x" : 178980.4,
    "y" : 250625.7,
    "z" : -5399.2
  }, {
    "x" : 178841.3,
    "y" : 250617.9,
    "z" : -5383.5
  } ]
}, {
  "xyz_points" : [ {
    "x" : 17.0,
    "y" : 25.0,
    "z" : -53.1
  }, {
    "x" : 11.0,
    "y" : 225.7,
    "z" : -154.0
  } ]
} ]

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 04dbada26ca2e1be0d55fd2d1af0e244

PUT /public/api/v1/polygons/{uuid}/data

Path parameter Description
uuid Polygon UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
[].label String Polyline label
[].xyz_points Array Polyline XYZ points. A polyline with an empty array is skipped
[].xyz_points[].x Number Point X coordinate (project units)
[].xyz_points[].y Number Point Y coordinate (project units)
[].xyz_points[].z Number Point Z coordinate (project depth units)

Response body

Empty body

Upload polygon data to VP

Upload polygon data by polygon UUID and virtual project UUID, with the same body and rules as Upload polygon data to GP. The polygon must belong to the global project of the virtual project, otherwise 400 is returned. The Update permission is checked in the virtual project. Polygon data is shared, so the upload replaces the data seen in the global project and in all its virtual projects. If the polygon had no data before, it is also added to the given virtual project

Request

$ curl 'https://solo.cloud/public/api/v1/projects/6895f3bb-22f2-4b0e-9bf1-bf5100edd80a/polygons/05b3e744-7467-4511-bc08-bb71e05286f3/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '[ {
  "label" : "polyline1",
  "xyz_points" : [ {
    "x" : 178821.8,
    "y" : 250542.6,
    "z" : -5350.0
  }, {
    "x" : 178980.4,
    "y" : 250625.7,
    "z" : -5399.2
  }, {
    "x" : 178841.3,
    "y" : 250617.9,
    "z" : -5383.5
  } ]
}, {
  "xyz_points" : [ {
    "x" : 17.0,
    "y" : 25.0,
    "z" : -53.1
  }, {
    "x" : 11.0,
    "y" : 225.7,
    "z" : -154.0
  } ]
} ]'
PUT /public/api/v1/projects/6895f3bb-22f2-4b0e-9bf1-bf5100edd80a/polygons/05b3e744-7467-4511-bc08-bb71e05286f3/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 384

[ {
  "label" : "polyline1",
  "xyz_points" : [ {
    "x" : 178821.8,
    "y" : 250542.6,
    "z" : -5350.0
  }, {
    "x" : 178980.4,
    "y" : 250625.7,
    "z" : -5399.2
  }, {
    "x" : 178841.3,
    "y" : 250617.9,
    "z" : -5383.5
  } ]
}, {
  "xyz_points" : [ {
    "x" : 17.0,
    "y" : 25.0,
    "z" : -53.1
  }, {
    "x" : 11.0,
    "y" : 225.7,
    "z" : -154.0
  } ]
} ]

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 747f0da8ae2511ab91e037e7e7822cef

PUT /public/api/v1/projects/{projectUuid}/polygons/{polygonUuid}/data

Path parameter Description
projectUuid Virtual project UUID
polygonUuid UUID of a polygon of the global project of the virtual project
Header Description
Authorization OAuth2 authorization header
Body field Type Description
[].label String Polyline label
[].xyz_points Array Polyline XYZ points. A polyline with an empty array is skipped
[].xyz_points[].x Number Point X coordinate (project units)
[].xyz_points[].y Number Point Y coordinate (project units)
[].xyz_points[].z Number Point Z coordinate (project depth units)

Response body

Empty body

18. Sticks

Create stick

Create stick with its trajectory by project UUID (a virtual project UUID is also accepted, the stick is then added to the virtual project). Coordinates and TVDSS are in project units. The trajectory must contain at least one point

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ac6a019f-8c98-4dd6-8539-f61bbed8519f/sticks' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Stick name",
  "trajectory" : [ {
    "tvdss" : {
      "undefined" : true
    },
    "type" : "SHL",
    "x" : {
      "undefined" : true
    },
    "y" : {
      "undefined" : true
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "LP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "TD",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -300263.133640553
    }
  } ]
}'
POST /public/api/v1/projects/ac6a019f-8c98-4dd6-8539-f61bbed8519f/sticks HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 548

{
  "name" : "Stick name",
  "trajectory" : [ {
    "tvdss" : {
      "undefined" : true
    },
    "type" : "SHL",
    "x" : {
      "undefined" : true
    },
    "y" : {
      "undefined" : true
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "LP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "TD",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -300263.133640553
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: ea6865f64d1d51f675992a708aa1452b
Content-Type: application/json

{
  "uuid" : "b7a79a7f-35f5-4478-8c68-48d3a8d3ffa8"
}

POST /public/api/v1/projects/{uuid}/sticks

Path parameter Description
uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Stick name. Must not be blank, up to 200 characters
trajectory Array Trajectory points in order, see type for the order rules. Every point needs defined x, y and tvdss, only an SHL may have all three undefined, else 406
trajectory[].x.val Number X coordinate (project units)
trajectory[].y.val Number Y coordinate (project units)
trajectory[].tvdss.val Number True vertical depth below sea level (project units)
trajectory[].type String Required. Point type (possible values: SHL for Surface Hole Location, LP for Landing Point, TD for Total Depth, WP). SHL must be the first point. LP and TD are optional and allowed once each, TD must be the last point and requires a preceding LP. A point without a type or a trajectory that breaks these rules is rejected with 406

Response body

Path Type Description
uuid String Created stick UUID

Get sticks by project

Get a list of sticks with their trajectories by project UUID with pagination, in creation order. For a virtual project UUID, only sticks of the virtual project are returned

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ac6a019f-8c98-4dd6-8539-f61bbed8519f/sticks?offset=0&limit=10&filter=oNe' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/ac6a019f-8c98-4dd6-8539-f61bbed8519f/sticks?offset=0&limit=10&filter=oNe HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b02558c4e64efb0cd00dda145ed416b4
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "ac4d93d0-c0e4-4bb3-9700-2710f6b8015c",
    "name" : "Stick one",
    "trajectory" : [ {
      "type" : "SHL",
      "x" : {
        "val" : 0.9713488677186246
      },
      "y" : {
        "val" : 0.23360085726961555
      },
      "tvdss" : {
        "val" : 2.5192238586208777
      }
    }, {
      "type" : "LP",
      "x" : {
        "val" : 0.1255312449181175
      },
      "y" : {
        "val" : 0.7517026874824956
      },
      "tvdss" : {
        "val" : 2.1822750141711436
      }
    }, {
      "type" : "TD",
      "x" : {
        "val" : 0.06235369996970652
      },
      "y" : {
        "val" : 0.4245712139027623
      },
      "tvdss" : {
        "val" : 2.036233570388418
      }
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/sticks

Path parameter Description
uuid Project UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the sticks whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Stick UUID
content[].name String Stick name
content[].trajectory Array Trajectory points
content[].trajectory[].x.val Number X coordinate (project units)
content[].trajectory[].y.val Number Y coordinate (project units)
content[].trajectory[].tvdss.val Number True vertical depth below sea level (project units)
content[].trajectory[].type String Point type (possible values: SHL for Surface Hole Location, LP for Landing Point, TD for Total Depth, WP)

Update stick

Replace the name and the trajectory of a stick by UUID. Both name and trajectory are required, the trajectory is replaced as a whole

Request

$ curl 'https://solo.cloud/public/api/v1/sticks/ac4d93d0-c0e4-4bb3-9700-2710f6b8015c' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated stick name",
  "trajectory" : [ {
    "tvdss" : {
      "undefined" : true
    },
    "type" : "SHL",
    "x" : {
      "undefined" : true
    },
    "y" : {
      "undefined" : true
    }
  }, {
    "tvdss" : {
      "val" : -1524
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -2286
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "LP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -301513.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "TD",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -300263.133640553
    }
  } ]
}'
PATCH /public/api/v1/sticks/ac4d93d0-c0e4-4bb3-9700-2710f6b8015c HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1063

{
  "name" : "Updated stick name",
  "trajectory" : [ {
    "tvdss" : {
      "undefined" : true
    },
    "type" : "SHL",
    "x" : {
      "undefined" : true
    },
    "y" : {
      "undefined" : true
    }
  }, {
    "tvdss" : {
      "val" : -1524
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -2286
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "LP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -305263.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "WP",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -301513.133640553
    }
  }, {
    "tvdss" : {
      "val" : -3048
    },
    "type" : "TD",
    "x" : {
      "val" : 617886.755760369
    },
    "y" : {
      "val" : -300263.133640553
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3e5a46d42544fe43650937f1c76e8a68

PATCH /public/api/v1/sticks/{uuid}

Path parameter Description
uuid Stick UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Stick name. Must not be blank, up to 200 characters
trajectory Array Trajectory points in order, see type for the order rules. Every point needs defined x, y and tvdss, only an SHL may have all three undefined, else 406
trajectory[].x.val Number X coordinate (project units)
trajectory[].y.val Number Y coordinate (project units)
trajectory[].tvdss.val Number True vertical depth below sea level (project units)
trajectory[].type String Required. Point type (possible values: SHL for Surface Hole Location, LP for Landing Point, TD for Total Depth, WP). SHL must be the first point. LP and TD are optional and allowed once each, TD must be the last point and requires a preceding LP. A point without a type or a trajectory that breaks these rules is rejected with 406

Response body

Empty body

Delete stick

Delete stick by UUID. Returns 403 if the stick is locked or is a private stick of another user

Request

$ curl 'https://solo.cloud/public/api/v1/sticks/d54cbbeb-f9cb-438f-a66a-dfd9cda43290' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/sticks/d54cbbeb-f9cb-438f-a66a-dfd9cda43290 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2454075ef09a4b2803c679556d47689f

DELETE /public/api/v1/sticks/{uuid}

Path parameter Description
uuid Stick UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

19. Earth models

Create earth model

Create earth model by interpretation UUID. The earth model is created without data and is not listed by Get earth models by interpretation until its data is uploaded. Returns 403 if the interpretation is locked or is a private interpretation of another user. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/4651f9c5-4322-475c-93a3-9cadfe4595e8/earthmodels' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Earth model name"
}'
POST /public/api/v1/interpretations/4651f9c5-4322-475c-93a3-9cadfe4595e8/earthmodels HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 33

{
  "name" : "Earth model name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 110f44975fc5610342ef88fa53a33c6c
Content-Type: application/json

{
  "uuid" : "451a6130-012f-43e7-ab1e-f7a4aed1b857"
}

POST /public/api/v1/interpretations/{uuid}/earthmodels

Path parameter Description
uuid Interpretation UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Earth model name, required, not blank, at most 200 characters

Response body

Path Type Description
uuid String Created earth model UUID

Get earth models by interpretation

Get a list of earth models by interpretation UUID with pagination, sorted by name. Earth models that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/interpretations/4651f9c5-4322-475c-93a3-9cadfe4595e8/earthmodels?offset=0&limit=10&filter=EM' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/interpretations/4651f9c5-4322-475c-93a3-9cadfe4595e8/earthmodels?offset=0&limit=10&filter=EM HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 20344aa66b21da4304af162d443988fe
Content-Type: application/json

{
  "content" : [ {
    "name" : "EM 1",
    "uuid" : "9f5e789f-f2b4-4062-bb44-7146b9cc8e9f"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/interpretations/{uuid}/earthmodels

Path parameter Description
uuid Interpretation UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the earth models whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Earth model UUID
content[].name String Earth model name

Get earth model data

Get earth model data by UUID

Request

$ curl 'https://solo.cloud/public/api/v1/earthmodels/9f5e789f-f2b4-4062-bb44-7146b9cc8e9f/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/earthmodels/9f5e789f-f2b4-4062-bb44-7146b9cc8e9f/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 790f450baf49dc03e9cc07437e131f43
Content-Type: application/json

{
  "sections" : [ {
    "layers" : [ ],
    "md" : {
      "val" : 0.0
    }
  }, {
    "layers" : [ ],
    "md" : {
      "val" : 328.0839895013124
    }
  } ]
}

GET /public/api/v1/earthmodels/{uuid}/data

Path parameter Description
uuid Earth model UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
sections Array Earth model sections
sections[].md.val Number Measured Depth value (project units)
sections[].layers Array Earth model section layers
sections[].layers[].resistivity_horizontal.val Number Horizontal resistivity value
sections[].layers[].resistivity_vertical.val Number Vertical resistivity value
sections[].layers[].tvd.val Number True vertical depth value (project units)

Upload earth model data

Upload earth model data by UUID. The uploaded sections replace the current data of the earth model, depths are in project units. Every section requires md and layers, every layer requires tvd, resistivity_horizontal and resistivity_vertical. md and the layer values are double value objects. The anisotropy of a layer, resistivity_vertical / resistivity_horizontal, must be from 1 to 25. A request that breaks these rules is rejected with 400. A layer the calculation refuses is named in the message by its TVD in project units. Returns 403 if the interpretation is locked or is a private interpretation of another user. A service (AUTO) interpretation is rejected with 400

Request

$ curl 'https://solo.cloud/public/api/v1/earthmodels/9f5e789f-f2b4-4062-bb44-7146b9cc8e9f/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "sections" : [ {
    "layers" : [ {
      "resistivity_horizontal" : {
        "val" : 10.0
      },
      "resistivity_vertical" : {
        "val" : 10.0
      },
      "tvd" : {
        "val" : -100000
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 994.0
      },
      "resistivity_vertical" : {
        "val" : 1988.0
      },
      "tvd" : {
        "val" : 16.4592
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 994.0
      },
      "resistivity_vertical" : {
        "val" : 1988.0
      },
      "tvd" : {
        "val" : 30.48
      }
    } ],
    "md" : {
      "val" : 10.0
    }
  }, {
    "layers" : [ {
      "resistivity_horizontal" : {
        "val" : 20.0
      },
      "resistivity_vertical" : {
        "val" : 20.0
      },
      "tvd" : {
        "val" : -100000
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 99.0
      },
      "resistivity_vertical" : {
        "val" : 988.0
      },
      "tvd" : {
        "val" : 31
      }
    } ],
    "md" : {
      "val" : 30.0
    }
  } ]
}'
PUT /public/api/v1/earthmodels/9f5e789f-f2b4-4062-bb44-7146b9cc8e9f/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1074

{
  "sections" : [ {
    "layers" : [ {
      "resistivity_horizontal" : {
        "val" : 10.0
      },
      "resistivity_vertical" : {
        "val" : 10.0
      },
      "tvd" : {
        "val" : -100000
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 994.0
      },
      "resistivity_vertical" : {
        "val" : 1988.0
      },
      "tvd" : {
        "val" : 16.4592
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 994.0
      },
      "resistivity_vertical" : {
        "val" : 1988.0
      },
      "tvd" : {
        "val" : 30.48
      }
    } ],
    "md" : {
      "val" : 10.0
    }
  }, {
    "layers" : [ {
      "resistivity_horizontal" : {
        "val" : 20.0
      },
      "resistivity_vertical" : {
        "val" : 20.0
      },
      "tvd" : {
        "val" : -100000
      }
    }, {
      "resistivity_horizontal" : {
        "val" : 99.0
      },
      "resistivity_vertical" : {
        "val" : 988.0
      },
      "tvd" : {
        "val" : 31
      }
    } ],
    "md" : {
      "val" : 30.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2e4a2d65808f181ff75fcf480441aa3d

PUT /public/api/v1/earthmodels/{uuid}/data

Path parameter Description
uuid Earth model UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
sections Array Earth model sections
sections[].md.val Number Measured Depth value (project units)
sections[].layers Array Earth model section layers
sections[].layers[].resistivity_horizontal.val Number Horizontal resistivity value
sections[].layers[].resistivity_vertical.val Number Vertical resistivity value
sections[].layers[].tvd.val Number True vertical depth value (project units)

Response body

Empty body

20. Reference lists

Get reference list categories

Get a list of reference list categories

Request

$ curl 'https://solo.cloud/public/api/v1/referencelistcategories' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/referencelistcategories HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 77e569b8d13ce625914d54359160364e
Content-Type: application/json

[ {
  "name" : "welllist",
  "uuid" : "f6665da9-e922-42a7-ae92-a45a5b367eaf",
  "applicable_to" : [ "laterals", "typewells" ]
} ]

GET /public/api/v1/referencelistcategories

Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].name String Reference list category name
[].uuid String Reference list category UUID
[].applicable_to Array Object types the category applies to, for example laterals, typewells

Get reference lists with items

Get a list of reference lists with the UUIDs of their objects by project UUID and category UUID with pagination, sorted by name. For a virtual project UUID, only lists of the virtual project are returned and object_ids contains only objects included in it. Returns 404 for an unknown category

Request

$ curl 'https://solo.cloud/public/api/v1/projects/8dda9ea4-5216-495a-b942-6cfe6840bfb4/listcategories/f6665da9-e922-42a7-ae92-a45a5b367eaf/referencelists?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/8dda9ea4-5216-495a-b942-6cfe6840bfb4/listcategories/f6665da9-e922-42a7-ae92-a45a5b367eaf/referencelists?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b699172daba28463f826fc728dc82882
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "b92b8871-8f8c-4e43-bbfb-b26a43fddcf4",
    "name" : "name",
    "owner" : {
      "description" : "",
      "email" : "a.zhuravlev+support@rogii.com",
      "first_name" : "AAAAAA",
      "last_name" : "BBB"
    },
    "object_ids" : [ ]
  }, {
    "uuid" : "d2cee908-003e-4aa6-a8ec-e24d12dafe3c",
    "name" : "Reference List Name",
    "owner" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    },
    "object_ids" : [ "f643fc77-6640-461b-9221-ec97576bc70f", "922fa776-8f64-4ae1-9aa1-b1d4edc2914d" ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{projectUuid}/listcategories/{categoryUuid}/referencelists

Path parameter Description
projectUuid Project UUID (a virtual project UUID is also accepted)
categoryUuid Reference list category UUID, see Get reference list categories
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Reference list UUID
content[].name String Reference list name
content[].object_ids Array UUIDs of the objects in the list. For a virtual project, only objects included in the virtual project
content[].owner Object User info of the reference list owner (absent if the list has no owner or the owner user no longer exists)
content[].owner.description String User description
content[].owner.email String User email
content[].owner.first_name String User first name
content[].owner.last_name String User last name

Get well lists with items

Get a list of well lists with the UUIDs of their objects by project UUID with pagination, sorted by name. For a virtual project UUID, only well lists of the virtual project are returned and object_ids contains only objects included in it

Request

$ curl 'https://solo.cloud/public/api/v1/projects/8dda9ea4-5216-495a-b942-6cfe6840bfb4/welllists?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/8dda9ea4-5216-495a-b942-6cfe6840bfb4/welllists?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6c3e3e2b6e8f60d583a4a25cb4ea006b
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "b92b8871-8f8c-4e43-bbfb-b26a43fddcf4",
    "name" : "name",
    "owner" : {
      "description" : "",
      "email" : "a.zhuravlev+support@rogii.com",
      "first_name" : "AAAAAA",
      "last_name" : "BBB"
    },
    "object_ids" : [ ]
  }, {
    "uuid" : "d2cee908-003e-4aa6-a8ec-e24d12dafe3c",
    "name" : "Reference List Name",
    "owner" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    },
    "object_ids" : [ "f643fc77-6640-461b-9221-ec97576bc70f", "922fa776-8f64-4ae1-9aa1-b1d4edc2914d" ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{projectUuid}/welllists

Path parameter Description
projectUuid Project UUID (a virtual project UUID is also accepted)
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Well list UUID
content[].name String Well list name
content[].object_ids Array UUIDs of the objects in the well list. For a virtual project, only objects included in the virtual project
content[].owner Object User info of the well list owner (absent if the list has no owner or the owner user no longer exists)
content[].owner.description String User description
content[].owner.email String User email
content[].owner.first_name String User first name
content[].owner.last_name String User last name

Get well list wells

Get wells of a well list by well list UUID, sorted by name. Available to any user of the company that owns the well list's project. Returns 404 if the list does not exist, is not a well list or belongs to another company

Request

$ curl 'https://solo.cloud/public/api/v1/welllists/d2cee908-003e-4aa6-a8ec-e24d12dafe3c' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/welllists/d2cee908-003e-4aa6-a8ec-e24d12dafe3c HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 20d982e237c377bdce674253bcbfbf84
Content-Type: application/json

{
  "name" : "Reference List Name",
  "owner" : {
    "description" : "Bot manager",
    "email" : "a.bortnikov+manager@rogii.com",
    "first_name" : "Bot",
    "last_name" : "Manager"
  },
  "wells" : [ {
    "name" : "Lateral 22H",
    "api" : "42-501-20130",
    "uuid" : "f643fc77-6640-461b-9221-ec97576bc70f",
    "type" : "WELL"
  }, {
    "name" : "Typewell A",
    "uuid" : "922fa776-8f64-4ae1-9aa1-b1d4edc2914d",
    "type" : "TYPEWELL"
  } ]
}

GET /public/api/v1/welllists/{uuid}

Path parameter Description
uuid Well list UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
name String Well list name
owner Object User info of the well list owner (absent if the list has no owner or the owner user no longer exists)
owner.description String User description
owner.email String User email
owner.first_name String User first name
owner.last_name String User last name
wells Array Wells included in the well list, sorted by name
wells[].name String Well name
wells[].api String Well API number (absent if not set)
wells[].uuid String Well UUID
wells[].type String Well type: WELL, TYPEWELL or NESTEDWELL

21. Comments

Create comment

Create comment by lateral UUID, returns its UUID. Comment names do not have to be unique

Request

$ curl 'https://solo.cloud/public/api/v1/wells/542bbdf7-22eb-4e9e-b3b8-fd651c9cf794/comments' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Comment name"
}'
POST /public/api/v1/wells/542bbdf7-22eb-4e9e-b3b8-fd651c9cf794/comments HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 29

{
  "name" : "Comment name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3c2c6bebe098e53a3cd79613fd0f9d14
Content-Type: application/json

{
  "uuid" : "7ec443ce-7294-4fa3-a9a8-88709a071d88"
}

POST /public/api/v1/wells/{uuid}/comments

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Comment name, required, not blank, up to 200 characters

Response body

Path Type Description
uuid String Created comment UUID

Create comment box

Create comment box by comment UUID, returns its UUID. anchor_md is in project depth units, when it is omitted the box has no MD anchor

Request

$ curl 'https://solo.cloud/public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e/commentboxes' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "text" : "Comment box text",
  "anchor_md" : {
    "val" : 1205.8
  }
}'
POST /public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e/commentboxes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 75

{
  "text" : "Comment box text",
  "anchor_md" : {
    "val" : 1205.8
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4061bccbca5e8836efb6895727c9e301
Content-Type: application/json

{
  "uuid" : "46ad262e-9917-4c40-b893-1f4bf74f21ce"
}

POST /public/api/v1/comments/{uuid}/commentboxes

Path parameter Description
uuid Comment UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
text String Comment box text, up to 8192 characters
anchor_md.val Number Comment box placement measured depth value in project units

Response body

Path Type Description
uuid String Created comment box UUID

Get comments

Get comments with comment boxes by lateral UUID with pagination, in creation order. anchor_md is returned in project depth units

Request

$ curl 'https://solo.cloud/public/api/v1/wells/542bbdf7-22eb-4e9e-b3b8-fd651c9cf794/comments?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
GET /public/api/v1/wells/542bbdf7-22eb-4e9e-b3b8-fd651c9cf794/comments?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 856c168de2ec09b0e5a09ef6222b2c9f
Content-Type: application/json

{
  "content" : [ {
    "comment_id" : "c24d17c3-242b-4fd6-9496-b6c443910f9e",
    "name" : "Updated comment name",
    "comment_boxes" : [ {
      "commentbox_id" : "c45cb337-9e9e-4172-bbbc-83681bef005a",
      "text" : "New Comment Text",
      "anchor_md" : {
        "val" : 2375.2755905511813
      }
    }, {
      "commentbox_id" : "46ad262e-9917-4c40-b893-1f4bf74f21ce",
      "text" : "Comment box text",
      "anchor_md" : {
        "val" : 1205.8
      }
    } ]
  }, {
    "comment_id" : "80d60c7d-d302-48f9-bafb-a73b2f21af33",
    "name" : "Comment",
    "comment_boxes" : [ {
      "commentbox_id" : "68312974-6373-4984-8821-6cbe5a0d3658",
      "text" : "New Comment Text",
      "anchor_md" : {
        "val" : 2375.2755905511813
      }
    }, {
      "commentbox_id" : "5c9909cb-e106-417b-90ec-d5e6651be795",
      "text" : "New Comment Text",
      "anchor_md" : {
        "val" : 2375.2755905511813
      }
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/comments

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].comment_id String Comment UUID
content[].name String Comment name
content[].comment_boxes[].commentbox_id String Comment box UUID
content[].comment_boxes[].text String Comment box text
content[].comment_boxes[].anchor_md.val Number Comment box placement measured depth value in project units

Update comment

Rename comment by UUID. name is required

Request

$ curl 'https://solo.cloud/public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated comment name"
}'
PATCH /public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 37

{
  "name" : "Updated comment name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: dc5e68d9cdb334c194eff1b73d4ed7d5

PATCH /public/api/v1/comments/{uuid}

Path parameter Description
uuid Comment UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New comment name, required, not blank, up to 200 characters

Response body

Empty body

Update comment box

Update comment box by UUID. Omitted fields are not changed. Setting text discards the rich text formatting of the box

Request

$ curl 'https://solo.cloud/public/api/v1/commentboxes/c45cb337-9e9e-4172-bbbc-83681bef005a' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "text" : "Updated comment box text",
  "anchor_md" : {
    "val" : 333.8
  }
}'
PATCH /public/api/v1/commentboxes/c45cb337-9e9e-4172-bbbc-83681bef005a HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 82

{
  "text" : "Updated comment box text",
  "anchor_md" : {
    "val" : 333.8
  }
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: aa3a2927e6a8c289812999edd4ac357b

PATCH /public/api/v1/commentboxes/{uuid}

Path parameter Description
uuid Comment box UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
text String New comment box text, up to 8192 characters. Not changed when omitted, setting it discards the rich text formatting of the box
anchor_md.val Number New comment box placement measured depth value in project units. Not changed when anchor_md is omitted

Response body

Empty body

Delete comment

Delete comment by UUID together with all its comment boxes. Returns 403 if the comment or one of its comment boxes is locked or is a private object of another user

Request

$ curl 'https://solo.cloud/public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/comments/c24d17c3-242b-4fd6-9496-b6c443910f9e HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b450c92625e32753bcb36a007b5a00c7

DELETE /public/api/v1/comments/{uuid}

Path parameter Description
uuid Comment UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete comment box

Delete comment box by UUID. Returns 403 if the comment box is locked or is a private comment box of another user

Request

$ curl 'https://solo.cloud/public/api/v1/commentboxes/c45cb337-9e9e-4172-bbbc-83681bef005a' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json'
DELETE /public/api/v1/commentboxes/c45cb337-9e9e-4172-bbbc-83681bef005a HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 58adf82bf7ae48958d2b76ae823ac2de

DELETE /public/api/v1/commentboxes/{uuid}

Path parameter Description
uuid Comment box UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

22. Log families

Get laterals log families list

Get log families of the project that match at least one lateral log, with pagination, in creation order. A log matches a log family when the log name equals one of the family mnemonics, case-insensitive. Mudlog and image log families are not returned

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/wells/logs/logfamilies?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/wells/logs/logfamilies?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 227ab364ae9f55d8930aebf32bb29b6c
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "03cde97a-2469-49b9-8f6c-a81d9696b268",
    "name" : "Log Family",
    "group_mnemonics" : [ "mnemonic1", "mnemonic2", "mnemonic3" ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/wells/logs/logfamilies

Path parameter Description
uuid Project UUID (a virtual project UUID is also accepted)
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the log families whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Log family UUID
content[].name String Log family name
content[].group_mnemonics Array Mnemonics list

Get typewells log families list

Get log families of the project that match at least one typewell log, with pagination, in creation order. A log matches a log family when the log name equals one of the family mnemonics, case-insensitive. Mudlog and image log families are not returned

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/typewells/logs/logfamilies?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/typewells/logs/logfamilies?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 70d7f6e2d237d58161bc3b394c68f10e
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "03cde97a-2469-49b9-8f6c-a81d9696b268",
    "name" : "Log Family",
    "group_mnemonics" : [ "mnemonic1", "mnemonic2", "mnemonic3" ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/typewells/logs/logfamilies

Path parameter Description
uuid Project UUID (a virtual project UUID is also accepted)
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
filter Optional. Returns only the log families whose name contains this substring, case insensitive
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Log family UUID
content[].name String Log family name
content[].group_mnemonics Array Mnemonics list

Get laterals log list by log family in specific project

Get lateral logs of the project that match the log family, that is logs whose name equals one of the family mnemonics, case-insensitive, with pagination, in creation order. Returns 400 if the log family belongs to another project and 404 for an unknown log family

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/logfamilies/03cde97a-2469-49b9-8f6c-a81d9696b268/wells/logs?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/logfamilies/03cde97a-2469-49b9-8f6c-a81d9696b268/wells/logs?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f998995dc33b4a4735f163be53577d7f
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "30f0a6da-c066-4336-bf2f-5e84541f2999",
    "name" : "mnemonic1"
  }, {
    "uuid" : "9ebc593f-cfb2-4205-b6af-f6cb46f26811",
    "name" : "mnemonic3"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{project_id}/logfamilies/{log_family_id}/wells/logs

Path parameter Description
project_id Project UUID (a virtual project UUID is also accepted)
log_family_id Log family UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Log UUID
content[].name String Log name

Get typewells log list by log family in specific project

Get typewell logs of the project that match the log family, that is logs whose name equals one of the family mnemonics, case-insensitive, with pagination, in creation order. Returns 400 if the log family belongs to another project and 404 for an unknown log family

Request

$ curl 'https://solo.cloud/public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/logfamilies/03cde97a-2469-49b9-8f6c-a81d9696b268/typewells/logs?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/ed552332-497e-4fa9-8c5b-8eb565d2dae7/logfamilies/03cde97a-2469-49b9-8f6c-a81d9696b268/typewells/logs?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6273b78f05cb4f91f2317dd52036e2e5
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "4672a2a5-b172-4db8-b0a6-24a4ceb02661",
    "name" : "mnemonic1"
  }, {
    "uuid" : "1b19ca71-ec1b-44aa-b7e1-c6e238de64eb",
    "name" : "mnemonic3"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{project_id}/logfamilies/{log_family_id}/typewells/logs

Path parameter Description
project_id Project UUID (a virtual project UUID is also accepted)
log_family_id Log family UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Log UUID
content[].name String Log name

23. Objects update info

Get update info by lateral

Get update info of the lateral and its child objects by lateral UUID. The lateral itself is returned without parent_uuid. Deleted objects are not returned, so a child object missing from the response no longer exists. Only objects of the types listed for type are returned

Request

$ curl 'https://solo.cloud/public/api/v1/wells/877fe2e8-f7b7-46ec-91db-977154906b89/updateinfo' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/877fe2e8-f7b7-46ec-91db-977154906b89/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 61dbdfcfc33aaf04868a9be2fbf1939e
Content-Type: application/json

{
  "content" : [ {
    "type" : "LOG",
    "uuid" : "753b5518-1ca1-4291-aedd-e48472999af2",
    "updated_at" : "2026-11-09T11:55:54.133523Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.133523Z"
  }, {
    "type" : "IMAGELOG",
    "uuid" : "9cc3c7b4-f51c-4258-bec8-cf828162131d",
    "updated_at" : "2026-11-09T11:55:54.178858Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.178858Z"
  }, {
    "type" : "IMAGE",
    "uuid" : "69cd11c7-f454-43af-8a75-83233af417f1",
    "updated_at" : "2026-11-09T11:55:54.246679Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.246679Z"
  }, {
    "type" : "NESTEDWELL",
    "uuid" : "433f019a-bb85-46ad-829d-d82acb09bee8",
    "updated_at" : "2026-11-09T11:55:54.571459Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.614119Z"
  }, {
    "type" : "TOPSET",
    "uuid" : "df513fc8-44a0-4b5b-9197-eb7911ab0495",
    "updated_at" : "2026-11-09T11:55:54.614119Z",
    "parent_uuid" : "433f019a-bb85-46ad-829d-d82acb09bee8",
    "modified_at" : "2026-11-09T11:55:54.614119Z"
  }, {
    "type" : "IMAGE",
    "uuid" : "538e2c31-93fb-4561-b286-96047adfa0f7",
    "updated_at" : "2026-11-09T11:55:54.401244Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.401244Z"
  }, {
    "type" : "TARGETLINE",
    "uuid" : "c873c144-daa7-4952-bc92-5e00b640e83c",
    "updated_at" : "2026-11-09T11:55:54.828985Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.828985Z"
  }, {
    "type" : "MUDLOG",
    "uuid" : "aecd0e5d-bdaa-4dee-918b-035d06f9d772",
    "updated_at" : "2026-11-09T11:55:54.473865Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.473865Z"
  }, {
    "type" : "TOPSET",
    "uuid" : "b9e36aba-db38-400b-a55e-5bf3d672f5ad",
    "updated_at" : "2026-11-09T11:55:54.646501Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:55.108110Z"
  }, {
    "type" : "TOP",
    "uuid" : "be964060-5f1f-4b31-b101-92109e795bdc",
    "updated_at" : "2026-11-09T11:55:54.685520Z",
    "parent_uuid" : "b9e36aba-db38-400b-a55e-5bf3d672f5ad",
    "modified_at" : "2026-11-09T11:55:54.685520Z"
  }, {
    "type" : "COMMENT",
    "uuid" : "8aae1303-90d3-4459-b5a1-8b216198831b",
    "updated_at" : "2026-11-09T11:55:54.754239Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.754239Z"
  }, {
    "type" : "EARTHMODEL",
    "uuid" : "d3a69abf-62a8-4642-8184-97239a857454",
    "updated_at" : "2026-11-09T11:55:54.901205Z",
    "parent_uuid" : "54c26023-0f20-4c1b-9334-f0604a0142e8",
    "modified_at" : "2026-11-09T11:55:54.950200Z"
  }, {
    "type" : "INTERPRETATION",
    "uuid" : "54c26023-0f20-4c1b-9334-f0604a0142e8",
    "updated_at" : "2026-11-09T11:55:54.284404Z",
    "parent_uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "modified_at" : "2026-11-09T11:55:54.950200Z"
  }, {
    "type" : "WELL",
    "uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "updated_at" : "2026-11-09T11:55:54.058087Z",
    "modified_at" : "2026-11-09T11:55:55.108110Z"
  } ]
}

GET /public/api/v1/wells/{uuid}/updateinfo

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type: WELL, TYPEWELL, GRID, POLYGON, STICK, LOG, IMAGE, IMAGELOG, INTERPRETATION, MUDLOG, NESTEDWELL, TOPSET, TOP, COMMENT, TARGETLINE, EARTHMODEL or WELLATTRIBUTE
content[].parent_uuid String Parent object UUID, absent for the requested object itself
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)

Get update info by typewell

Get update info of the typewell and its child objects by typewell UUID. The typewell itself is returned without parent_uuid. Deleted objects are not returned, so a child object missing from the response no longer exists. Only objects of the types listed for type are returned

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/1dda5df9-1929-4914-9d39-ab3894659a92/updateinfo' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/1dda5df9-1929-4914-9d39-ab3894659a92/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a3be62b73aca458dbf89fc1e090f9cf4
Content-Type: application/json

{
  "content" : [ {
    "type" : "TYPEWELL",
    "uuid" : "1dda5df9-1929-4914-9d39-ab3894659a92",
    "updated_at" : "2026-11-09T11:55:53.794308Z",
    "modified_at" : "2026-11-09T11:55:53.984083Z"
  }, {
    "type" : "LOG",
    "uuid" : "93c61fa7-c045-400e-b905-ff984d63c220",
    "updated_at" : "2026-11-09T11:55:53.845685Z",
    "parent_uuid" : "1dda5df9-1929-4914-9d39-ab3894659a92",
    "modified_at" : "2026-11-09T11:55:53.845685Z"
  }, {
    "type" : "TOPSET",
    "uuid" : "7d078bb2-9f69-4c5f-832a-a2445f8655dd",
    "updated_at" : "2026-11-09T11:55:53.865380Z",
    "parent_uuid" : "1dda5df9-1929-4914-9d39-ab3894659a92",
    "modified_at" : "2026-11-09T11:55:53.984083Z"
  }, {
    "type" : "MUDLOG",
    "uuid" : "8d21ed07-1e00-4a72-bace-eda680b3d7bf",
    "updated_at" : "2026-11-09T11:55:53.925885Z",
    "parent_uuid" : "1dda5df9-1929-4914-9d39-ab3894659a92",
    "modified_at" : "2026-11-09T11:55:53.925885Z"
  }, {
    "type" : "TOP",
    "uuid" : "64dd6836-cfd2-4aa4-ab86-1c831558e049",
    "updated_at" : "2026-11-09T11:55:53.984083Z",
    "parent_uuid" : "7d078bb2-9f69-4c5f-832a-a2445f8655dd",
    "modified_at" : "2026-11-09T11:55:53.984083Z"
  } ]
}

GET /public/api/v1/typewells/{uuid}/updateinfo

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type: WELL, TYPEWELL, GRID, POLYGON, STICK, LOG, IMAGE, IMAGELOG, INTERPRETATION, MUDLOG, NESTEDWELL, TOPSET, TOP, COMMENT, TARGETLINE, EARTHMODEL or WELLATTRIBUTE
content[].parent_uuid String Parent object UUID, absent for the requested object itself
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)

Get grid update info

Get grid update info by UUID

Request

$ curl 'https://solo.cloud/public/api/v1/grids/06505e14-9b59-408a-8c81-4c622d1590b5/updateinfo' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/06505e14-9b59-408a-8c81-4c622d1590b5/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d084f79cdd3fa146c9152902c81fd9ff
Content-Type: application/json

{
  "content" : [ {
    "type" : "GRID",
    "uuid" : "06505e14-9b59-408a-8c81-4c622d1590b5",
    "updated_at" : "2026-11-09T11:55:55.287640Z",
    "modified_at" : "2026-11-09T11:55:55.287640Z"
  } ]
}

GET /public/api/v1/grids/{uuid}/updateinfo

Path parameter Description
uuid Grid UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type: WELL, TYPEWELL, GRID, POLYGON, STICK, LOG, IMAGE, IMAGELOG, INTERPRETATION, MUDLOG, NESTEDWELL, TOPSET, TOP, COMMENT, TARGETLINE, EARTHMODEL or WELLATTRIBUTE
content[].parent_uuid String Parent object UUID, absent for the requested object itself
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)

Get polygon update info

Get polygon update info by UUID

Request

$ curl 'https://solo.cloud/public/api/v1/polygons/8b1a0aa7-f6ad-478c-8df8-470482332866/updateinfo' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/polygons/8b1a0aa7-f6ad-478c-8df8-470482332866/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 29ff7abaa58b048b25b5aefb8858bcff
Content-Type: application/json

{
  "content" : [ {
    "type" : "POLYGON",
    "uuid" : "8b1a0aa7-f6ad-478c-8df8-470482332866",
    "updated_at" : "2026-11-09T11:55:55.210613Z",
    "modified_at" : "2026-11-09T11:55:55.210613Z"
  } ]
}

GET /public/api/v1/polygons/{uuid}/updateinfo

Path parameter Description
uuid Polygon UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type: WELL, TYPEWELL, GRID, POLYGON, STICK, LOG, IMAGE, IMAGELOG, INTERPRETATION, MUDLOG, NESTEDWELL, TOPSET, TOP, COMMENT, TARGETLINE, EARTHMODEL or WELLATTRIBUTE
content[].parent_uuid String Parent object UUID, absent for the requested object itself
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)

Get stick update info

Get stick update info by UUID

Request

$ curl 'https://solo.cloud/public/api/v1/sticks/85475709-cf18-47ee-af39-d1ff90983ccf/updateinfo' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/sticks/85475709-cf18-47ee-af39-d1ff90983ccf/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f60f5a5f32280fa620fb485323df1f17
Content-Type: application/json

{
  "content" : [ {
    "type" : "STICK",
    "uuid" : "85475709-cf18-47ee-af39-d1ff90983ccf",
    "updated_at" : "2026-11-09T11:55:55.334076Z",
    "modified_at" : "2026-11-09T11:55:55.334076Z"
  } ]
}

GET /public/api/v1/sticks/{uuid}/updateinfo

Path parameter Description
uuid Stick UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type: WELL, TYPEWELL, GRID, POLYGON, STICK, LOG, IMAGE, IMAGELOG, INTERPRETATION, MUDLOG, NESTEDWELL, TOPSET, TOP, COMMENT, TARGETLINE, EARTHMODEL or WELLATTRIBUTE
content[].parent_uuid String Parent object UUID, absent for the requested object itself
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)

Get last change user info

Get information about users who made the last changes to specified objects. At most 1000 distinct UUIDs are accepted per request (a server setting), otherwise 400 is returned. Objects that are not found in the company of the current user are skipped. Deleted objects are also returned, with their last change before deletion. Objects without a known updating user are skipped

Request

$ curl 'https://solo.cloud/public/api/v1/lastchange/userinfo' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "object_uuids" : [ "877fe2e8-f7b7-46ec-91db-977154906b89", "1dda5df9-1929-4914-9d39-ab3894659a92", "06505e14-9b59-408a-8c81-4c622d1590b5" ]
}'
POST /public/api/v1/lastchange/userinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 145

{
  "object_uuids" : [ "877fe2e8-f7b7-46ec-91db-977154906b89", "1dda5df9-1929-4914-9d39-ab3894659a92", "06505e14-9b59-408a-8c81-4c622d1590b5" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f7935c82115ad7d7af576fe3b0c02233
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "1dda5df9-1929-4914-9d39-ab3894659a92",
    "type" : "TYPEWELL",
    "updated_at" : "2026-11-09T11:55:53.794308Z",
    "modified_at" : "2026-11-09T11:55:53.984083Z",
    "updated_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    },
    "modified_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    }
  }, {
    "uuid" : "877fe2e8-f7b7-46ec-91db-977154906b89",
    "type" : "WELL",
    "updated_at" : "2026-11-09T11:55:54.058087Z",
    "modified_at" : "2026-11-09T11:55:55.108110Z",
    "updated_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    },
    "modified_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    }
  }, {
    "uuid" : "06505e14-9b59-408a-8c81-4c622d1590b5",
    "type" : "GRID",
    "updated_at" : "2026-11-09T11:55:55.287640Z",
    "modified_at" : "2026-11-09T11:55:55.287640Z",
    "updated_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    },
    "modified_by" : {
      "description" : "Bot manager",
      "email" : "a.bortnikov+manager@rogii.com",
      "first_name" : "Bot",
      "last_name" : "Manager"
    }
  } ]
}

POST /public/api/v1/lastchange/userinfo

Header Description
Authorization OAuth2 authorization header
Body field Type Description
object_uuids Array List of object UUIDs, at most 1000 distinct values. Objects that are not found in the company of the current user are skipped

Response body

Path Type Description
content Array Content array
content[].uuid String The object UUID
content[].type String Object type, for example WELL, TYPEWELL, GRID or LOG
content[].updated_at String Timestamp showing when the object itself was updated (UTC time)
content[].modified_at String Timestamp showing when either one of the child objects or object itself was updated (UTC time)
content[].updated_by Object User info of who last updated the object
content[].updated_by.description String User description
content[].updated_by.email String User email
content[].updated_by.first_name String User first name
content[].updated_by.last_name String User last name
content[].modified_by Object User info of who last modified the object or its children
content[].modified_by.description String User description
content[].modified_by.email String User email
content[].modified_by.first_name String User first name
content[].modified_by.last_name String User last name

24. Toolcodes

Get toolcodes

Get built-in toolcodes and custom toolcodes of the user's company, sorted by prefix and short_name

Request

$ curl 'https://solo.cloud/public/api/v1/toolcodes' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/toolcodes HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f43413b6f665e536d098e02659bfb605
Content-Type: application/json

[ {
  "short_name" : "MWD+SRGM",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with no additional corrections",
  "prefix" : "A001Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM_Fl",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with no additional corrections on a Floating Rig",
  "prefix" : "A001Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM+SAG",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) and Sag Correction",
  "prefix" : "A002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM+SAG_Fl",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) and Sag Correction on a Floating Rig",
  "prefix" : "A002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "TEST_TOOLCODE",
  "description" : "A002Mb/ISC4: BGGM dec + sag corrections",
  "prefix" : "A002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : true
}, {
  "short_name" : "MWD+SRGM+AX",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction",
  "prefix" : "A003Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM+AX_Fl",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction on a Floating Rig",
  "prefix" : "A003Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM+AX+SAG",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction",
  "prefix" : "A004Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+SRGM+AX+SAG_Fl",
  "description" : "MWD using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "A004Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction)",
  "prefix" : "A005Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) on a Floating Rig",
  "prefix" : "A005Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+AX",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction",
  "prefix" : "A006Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+AX_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction on a Floating Rig",
  "prefix" : "A006Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+AX+SAG",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction and Sag Correction",
  "prefix" : "A007Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+AX+SAG_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "A007Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+MS",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Multi-Station Correction. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A008Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+MS_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Multi-Station Correction on a Floating Rig. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A008Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+SAG",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Sag Correction",
  "prefix" : "A009Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+SAG_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) and Sag Correction on a Floating Rig",
  "prefix" : "A009Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+SAG+MS",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) with Sag and Multi-Station Correction. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A010Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR1+SAG+MS_Fl",
  "description" : "MWD with IFR1 (IFR or Crustal Anomaly Correction) with Sag and Multi-Station Correction on a Floating Rig. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A010Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+AX+SAG",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) and Axial Correction and Sag Correction",
  "prefix" : "A011Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+AX+SAG_Fl",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) and Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "A011Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+SAG",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) and Sag Correction",
  "prefix" : "A012Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+SAG_Fl",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) and Sag Correction on a Floating Rig",
  "prefix" : "A012Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+SAG+MS",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) with Sag and Multi-Station Correction. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A013Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+IFR2+SAG+MS_Fl",
  "description" : "MWD with IFR2 (IIFR or Crustal Anomaly with Time Varying Corrections) with Sag and Multi-Station Correction on a Floating Rig. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "A013Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR2",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with no additional corrections",
  "prefix" : "A014Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with no additional corrections on a Floating Rig",
  "prefix" : "A014Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+AX",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction",
  "prefix" : "A015Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+AX_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction on a Floating Rig",
  "prefix" : "A015Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+AX+SAG",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction",
  "prefix" : "A016Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+AX+SAG_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "A016Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+SAG",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) and Sag Correction",
  "prefix" : "A017Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+SRGM+SAG_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) and Sag Correction on a Floating Rig",
  "prefix" : "A017Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "DIPMETER",
  "description" : "Wireline logging tool survey data e.g. Schlumberger GPIT OBDT BGT or Atlas ORIT",
  "prefix" : "A018Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Dipmeter",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "DIPMETER_Fl",
  "description" : "Wireline logging tool survey data e.g. Schlumberger GPIT OBDT BGT or Atlas ORIT on a Floating Rig",
  "prefix" : "A018Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Dipmeter",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "GYRO-MWD",
  "description" : "Generic Gyro MWD. CARE TO BE TAKEN - Tool model fails at 90 deg inclination.",
  "prefix" : "A019Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Gyro MWD",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "GYRO-MWD_Fl",
  "description" : "Generic Gyro MWD on a Floating Rig. CARE TO BE TAKEN - Tool model fails at 90 deg inclination.",
  "prefix" : "A019Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Gyro MWD",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "GYRO-NS",
  "description" : "Generic North Seeking Gyrocompass Gyro. CARE TO BE TAKEN - Tool model fails at 90 deg inclination.",
  "prefix" : "A020Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Gyro Compass",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "GYRO-NS_Fl",
  "description" : "Generic North Seeking Gyrocompass Gyro on a Floating Rig. CARE TO BE TAKEN - Tool model fails at 90 deg inclination.",
  "prefix" : "A020Gb",
  "custom" : false
}, {
  "short_name" : "GYRO-NS-CT",
  "description" : "Generic Hybrid Static Gyrocompass and Continuous Survey",
  "prefix" : "A021Gc",
  "tool_category" : "Gyro",
  "tool_type" : "Continuous",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "GYRO-NS-CT_Fl",
  "description" : "Generic Hybrid Static Gyrocompass and Continuous Survey on a Floating Rig",
  "prefix" : "A021Gc",
  "tool_category" : "Gyro",
  "tool_type" : "Continuous",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_GMS",
  "description" : "Conventional free gyro e.g. Level Rotor Gyro (LRG). CARE TO BE TAKEN – Tool model fails at 90 deg inclination.",
  "prefix" : "A022Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Camera Based",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_GMS_Fl",
  "description" : "Conventional free gyro e.g. Level Rotor Gyro (LRG) on a Floating Rig. CARE TO BE TAKEN – Tool model fails at 90 deg inclination.",
  "prefix" : "A022Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Camera Based",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_GSS",
  "description" : "Conventional free gyro e.g. Level Rotor Gyro (LRG). CARE TO BE TAKEN – Tool model fails at 90 deg inclination.",
  "prefix" : "A023Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Camera Based",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_GSS_Fl",
  "description" : "Conventional free gyro e.g. Level Rotor Gyro (LRG) on a Floating Rig. CARE TO BE TAKEN – Tool model fails at 90 deg inclination.",
  "prefix" : "A023Gb",
  "tool_category" : "Gyro",
  "tool_type" : "Camera Based",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_MMS",
  "description" : "Camera Based Film Magnetic Multi-Shot with adequate length and spacing in NMDC",
  "prefix" : "A024Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Camera Based",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_MMS_Fl",
  "description" : "Camera Based Film Magnetic Multi-Shot with adequate length and spacing in NMDC on a Floating Rig",
  "prefix" : "A024Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Camera Based",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_MSS",
  "description" : "Camera Based Film Magnetic Single Shot with adequate length and spacing in NMDC",
  "prefix" : "A025Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Camera Based",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "CB_Film_MSS_Fl",
  "description" : "Camera Based Film Magnetic Single Shot with adequate length and spacing in NMDC on a Floating Rig",
  "prefix" : "A025Mb",
  "tool_category" : "Magnetic",
  "tool_type" : "Camera Based",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "BLIND",
  "description" : "Where no survey information was recorded or where the information no longer exists and there is no other supporting information to justify the use of another error model.",
  "prefix" : "A026Ua",
  "tool_category" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "BLIND_Fl",
  "description" : "Where no survey information was recorded or where the information no longer exists and there is no other supporting information to justify the use of another error model. On a Floating Rig",
  "prefix" : "A026Ua",
  "tool_category" : "Utility",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "INC-ONLY",
  "description" : "Inclination only surveys for vertical wells with inclinations less than 5 deg (e.g. Totco Teledrift and Anderdrift)",
  "prefix" : "A027Ub",
  "tool_category" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "INC-ONLY_Fl",
  "description" : "Inclination only surveys for vertical wells with inclinations less than 5 deg (e.g. Totco Teledrift and Anderdrift) on a Floating Rig",
  "prefix" : "A027Ub",
  "tool_category" : "Utility",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "INC-ONLY_PLANNED",
  "description" : "Inclination only surveys for planned vertical wells with inclinations less than 5 deg (e.g. Totco Teledrift and Anderdrift)",
  "prefix" : "A028Ub",
  "tool_category" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "INC-ONLY_PLANNED_Fl",
  "description" : "Inclination only surveys for planned vertical wells with inclinations less than 5 deg (e.g. Totco Teledrift and Anderdrift) on a Floating Rig",
  "prefix" : "A028Ub",
  "tool_category" : "Utility",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "UNKNOWN",
  "description" : "For use when survey data exists at any interval not exceeding 200ft but the origin or legacy quality of the data is unknown",
  "prefix" : "A029Ub",
  "tool_category" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "UNKNOWN_Fl",
  "description" : "For use when survey data exists at any interval not exceeding 200ft but the origin or legacy quality of the data is unknown. On a Floating Rig",
  "prefix" : "A029Ub",
  "tool_category" : "Utility",
  "rig_type" : "Floating",
  "revision" : "ISCWSA Rev5",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "ZERO-ERROR",
  "description" : "To give zero position uncertainty down to a particular depth.",
  "prefix" : "A030Ua",
  "tool_category" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD)",
  "prefix" : "B001Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM_Fl",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) on a Floating Rig",
  "prefix" : "B001Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+AX",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Axial Correction",
  "prefix" : "B002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+AX_Fl",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Axial Correction on a Floating Rig",
  "prefix" : "B002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+AX+SAG",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Axial Correction and Sag Correction",
  "prefix" : "B003Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+AX+SAG_Fl",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B003Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+SAG",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) and Sag Correction",
  "prefix" : "B004Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+SAG_Fl",
  "description" : "MWD using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) and Sag Correction on a Floating Rig",
  "prefix" : "B004Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+SAG+MS",
  "description" : "MWD Using a High Resolution Geomagnetic Model (HRGM) with spherical harmonic degree of 720 or higher (e.g. HDGM or MVHD) with Sag Correction and Multi-Station Correction. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "B005Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+HRGM+SAG+MS_Fl",
  "description" : "MWD Using a High Resolution Geomagnetic Model (HRGM) with spherical harmonic degree of 720 or higher (e.g. HDGM or MVHD) with Sag Correction and Multi-Station Correction on a Floating Rig. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "B005Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM)",
  "prefix" : "B006Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM_Fl",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) on a Floating Rig",
  "prefix" : "B006Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+AX",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction",
  "prefix" : "B007Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+AX_Fl",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction on a Floating Rig",
  "prefix" : "B007Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+AX+SAG",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction and Sag Correction",
  "prefix" : "B008Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+AX+SAG_Fl",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B008Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+SAG",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Sag Correction",
  "prefix" : "B009Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "MWD+LRGM+SAG_Fl",
  "description" : "MWD using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Sag Correction on a Floating Rig",
  "prefix" : "B009Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+AX+SAG",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction and Sag Correction",
  "prefix" : "B010Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+AX+SAG_Fl",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) and Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B010Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+SAG",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) and Sag Correction",
  "prefix" : "B011Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+SAG_Fl",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) and Sag Correction on a Floating Rig",
  "prefix" : "B011Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+SAG+MS",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) with Sag and Multi-Station Correction. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "B012Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+IFR1+SAG+MS_Fl",
  "description" : "EMS with IFR1 (IFR or Crustal Anomaly Correction) with Sag and Multi-Station Correction on a Floating Rig. CARE TO BE TAKEN WHILE PLANNING A WELL – Refer to Survey Management Specialist to ensure MS is valid.",
  "prefix" : "B012Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "MS",
  "geomagnetic_reference" : "IFR1",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM",
  "description" : "EMS using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD)",
  "prefix" : "B013Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM_Fl",
  "description" : "EMS using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) on a Floating Rig",
  "prefix" : "B013Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+AX",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction",
  "prefix" : "B014Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+AX_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction on a Floating Rig",
  "prefix" : "B014Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+AX+SAG",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction",
  "prefix" : "B015Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+AX+SAG_Fl",
  "description" : "EMS using 1-Year Standard Resolution Geomagnetic Mode (e.g. BGGM up to 2018, MVSD) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B015Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+SAG",
  "description" : "EMS using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Sag Correction",
  "prefix" : "B016Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+HRGM+SAG_Fl",
  "description" : "EMS using 1-year High Resolution Geomagnetic Model with spherical harmonic degree of 720 or higher (e.g. BGGM2019+, HDGM, MVHD) with Sag Correction on a Floating Rig",
  "prefix" : "B016Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "HRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM)",
  "prefix" : "B017Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM_Fl",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) on a Floating Rig",
  "prefix" : "B017Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM+AX",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction",
  "prefix" : "B018Md",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM+AX_Fl",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction on a Floating Rig",
  "prefix" : "B018Md",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EEMS+LRGM+AX+SAG_Fl",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B019Md",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM+AX+SAG",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Axial Correction and Sag Correction on a Floating Rig",
  "prefix" : "B019Md",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM+SAG",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Sag Correction",
  "prefix" : "B020Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "EMS+LRGM+SAG_Fl",
  "description" : "EMS using Low Resolution Geomagnetic Model (e.g. Updated less frequently than yearly, EMM, CGRF, IGRF, WMM) with Sag Correction on a Floating Rig",
  "prefix" : "B020Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "EMS",
  "rig_type" : "Floating",
  "sag_correction" : "SAG",
  "geomagnetic_reference" : "LRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "FINDS",
  "description" : "Ferranti FINDS Inertial Surveys",
  "prefix" : "B021Ga",
  "tool_category" : "Utility",
  "tool_type" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev1",
  "revision_date" : "2022-09-23",
  "custom" : false
}, {
  "short_name" : "BLIND+TREND",
  "description" : "Where no survey information was recorded but where some other information exists such as the BHA records or Bit-run summaries or some other relevant formation or drilling knowledge exists concerning the expected trends of the wellpath. May only be assigned for specific cases with a Dispensation.",
  "prefix" : "B022Ua",
  "tool_category" : "Utility",
  "tool_type" : "Utility",
  "rig_type" : "Fixed",
  "revision" : "ISCWSA Rev1",
  "revision_date" : "2022-09-23",
  "custom" : false
} ]

GET /public/api/v1/toolcodes

Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].short_name String Toolcode short name
[].description String Description
[].prefix String Prefix
[].tool_category String Tool category
[].tool_type String Tool type
[].rig_type String Rig type
[].sag_correction String Sag correction
[].magnetic_correction String Magnetic correction
[].geomagnetic_reference String Geomagnetic reference
[].revision String Revision
[].revision_date String Revision date, yyyy-MM-dd
[].custom Boolean true for a custom toolcode of the user's company, false for a built-in toolcode

Get toolcode terms

Get the error model terms of a built-in or custom toolcode by short name as plain text: the uploaded toolcode file without the lines starting with #. 404 is returned if there is no such toolcode. Encode + in the short name as %2B

Request

$ curl 'https://solo.cloud/public/api/v1/toolcodes/terms?short_name=MWD%252BSRGM' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/toolcodes/terms?short_name=MWD%252BSRGM HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0e17d4e71a4b9636b6e9e684fc00db48
Content-Type: text/plain;charset=UTF-8

drfr    e   r   m   0.35    1.0
dsfs    e   s   -   0.00056 tmd
dstg    e   g   im  2.5e-007    tmd*tvd
xym1    i   s   d   0.1 abs(sin(inc))
xym2    a   s   d   0.1 -1.0
xym3e   i   r   d   0.3 cos(inc)*cos(azi)*max(1,sqrt(10/smd))
xym3e   a   r   d   0.3 -(cos(inc)*sin(azi)/sin(inc))*max(1,sqrt(10/smd))
xym4e   i   r   d   0.3 cos(inc)*sin(azi)*max(1,sqrt(10/smd))
xym4e   a   r   d   0.3 (cos(inc)*cos(azi)/sin(inc))*max(1,sqrt(10/smd))
sage    i   s   d   0.2 (sin(inc))^0.25
decu    a   w   d   0.16    1.0
decos   a   g   d   0.24    1.0
decoh   a   g   d   0.21    1.0
decoi   a   g   d   0.05    1.0
decr    a   r   d   0.1 1.0
dbhu    a   w   dnt 2350    1.0/(mtot*cos(dip))
dbhos   a   g   dnt 3359    1.0/(mtot*cos(dip))
dbhoh   a   g   dnt 2840    1.0/(mtot*cos(dip))
dbhoi   a   g   dnt 356 1.0/(mtot*cos(dip))
dbhr    a   r   dnt 3000    1.0/(mtot*cos(dip))
amil    a   s   nt  220 sin(inc)*sin(azm)/(mtot*cos(dip))
abxy_ti1    i   s   -   0.004   (-cos(inc))/gtot
abxy_ti1    a   s   -   0.004   (tan(dip)*cos(inc)*sin(azm))/gtot
abxy_ti2    a   s   -   0.004   ((tan((pi()/2)-inc))-tan(dip)*cos(azm))/gtot
abz i   s   -   0.004   (-sin(inc))/gtot
abz a   s   -   0.004   (tan(dip)*sin(inc)*sin(azm))/gtot
asxy_ti1    i   s   -   0.0005  (sin(inc)*cos(inc))/(2^0.5)
asxy_ti1    a   s   -   0.0005  (-(tan(dip)*sin(inc)*cos(inc)*sin(azm)))/(2^0.5)
asxy_ti2    i   s   -   0.0005  (sin(inc)*cos(inc))/2
asxy_ti2    a   s   -   0.0005  (-(tan(dip)*sin(inc)*cos(inc)*sin(azm)))/2
asxy_ti3    a   s   -   0.0005  (tan(dip)*sin(inc)*cos(azm)-cos(inc))/2
asz i   s   -   0.0005  (-sin(inc)*cos(inc))
asz a   s   -   0.0005  (tan(dip)*sin(inc)*cos(inc)*sin(azm))
mbxy_ti1    a   s   nt  70  (-(cos(inc)*sin(azm)))/(mtot*cos(dip))
mbxy_ti2    a   s   nt  70  (cos(azm))/(mtot*cos(dip))
mbz a   s   nt  70  (-sin(inc)*sin(azm))/(mtot*cos(dip))
msxy_ti1    a   s   -   0.0016  (sin(inc)*sin(azm)*(tan(dip)*cos(inc)+sin(inc)*cos(azm)))/(2^0.5)
msxy_ti2    a   s   -   0.0016  (sin(azm)*(tan(dip)*sin(inc)*cos(inc)-(cos(inc))^2*cos(azm)-cos(azm)))/2
msxy_ti3    a   s   -   0.0016  (cos(inc)*(cos(azm))^2-cos(inc)*(sin(azm))^2-tan(dip)*sin(inc)*cos(azm))/2
msz a   s   -   0.0016  (-(sin(inc)*cos(azm)+tan(dip)*cos(inc))*sin(inc)*sin(azm))
xcla    a   r   -   0.167   max(sin(abs(daz)),0.00018*smd/sin(inc))
xclh    i   r   -   0.167   max(abs(dic),0.00018*smd)

GET /public/api/v1/toolcodes/terms

Parameter Description
short_name Short name of a built-in or custom toolcode, encode + as %2B
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Create or update toolcode

Create a custom toolcode of the user's company from a toolcode file, or completely replace the custom toolcode with the same ShortName (fields missing in the file are cleared). A built-in toolcode cannot be replaced, 400 is returned. Returns the saved toolcode

Request

$ curl 'https://solo.cloud/public/api/v1/toolcodes' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: multipart/form-data' \
    -F 'data=@toolcode_with_all_fields.txt;type=application/octet-stream'
PUT /public/api/v1/toolcodes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: solo.cloud

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=data; filename=toolcode_with_all_fields.txt
Content-Type: application/octet-stream

#ShortName:TEST_TOOLCODE
#Prefix:A002Mc
#Description:A002Mb/ISC4: BGGM dec + sag corrections
#ToolCategory:Magnetic
#ToolType:MWD
#RigType:Fixed
#SagCorrection:SAG
#MagneticCorrection:AX
#GeomagneticReference:SRGM
#Revision:ISCWSA Rev5.1
#RevisionDate:23/09/2022
#Name   Vector  Tie-On  Unit    Value   Formula
drfr    e   r   m   0.35    1.0
dsfs    e   s   -   0.00056 tmd
dstg    e   g   im  2.5e-007    tmd*tvd
xym1    i   s   d   0.1 abs(sin(inc))
xym2    a   s   d   0.1 -1.0
xym3e   i   r   d   0.3 cos(inc)*cos(azi)*max(1,sqrt(10/smd))
xym3e   a   r   d   0.3 -(cos(inc)*sin(azi)/sin(inc))*max(1,sqrt(10/smd))
xym4e   i   r   d   0.3 cos(inc)*sin(azi)*max(1,sqrt(10/smd))
xym4e   a   r   d   0.3 (cos(inc)*cos(azi)/sin(inc))*max(1,sqrt(10/smd))
sage    i   s   d   0.08    (sin(inc))^0.25
decu    a   w   d   0.16    1.0
decos   a   g   d   0.24    1.0
decoh   a   g   d   0.21    1.0
decoi   a   g   d   0.05    1.0
decr    a   r   d   0.1 1.0
dbhu    a   w   dnt 2350    1.0/(mtot*cos(dip))
dbhos   a   g   dnt 3359    1.0/(mtot*cos(dip))
dbhoh   a   g   dnt 2840    1.0/(mtot*cos(dip))
dbhoi   a   g   dnt 356 1.0/(mtot*cos(dip))
dbhr    a   r   dnt 3000    1.0/(mtot*cos(dip))
amil    a   s   nt  220 sin(inc)*sin(azm)/(mtot*cos(dip))
abxy_ti1    i   s   -   0.004   (-cos(inc))/gtot
abxy_ti1    a   s   -   0.004   (tan(dip)*cos(inc)*sin(azm))/gtot
abxy_ti2    a   s   -   0.004   ((tan((pi()/2)-inc))-tan(dip)*cos(azm))/gtot
abz i   s   -   0.004   (-sin(inc))/gtot
abz a   s   -   0.004   (tan(dip)*sin(inc)*sin(azm))/gtot
asxy_ti1    i   s   -   0.0005  (sin(inc)*cos(inc))/(2^0.5)
asxy_ti1    a   s   -   0.0005  (-(tan(dip)*sin(inc)*cos(inc)*sin(azm)))/(2^0.5)
asxy_ti2    i   s   -   0.0005  (sin(inc)*cos(inc))/2
asxy_ti2    a   s   -   0.0005  (-(tan(dip)*sin(inc)*cos(inc)*sin(azm)))/2
asxy_ti3    a   s   -   0.0005  (tan(dip)*sin(inc)*cos(azm)-cos(inc))/2
asz i   s   -   0.0005  (-sin(inc)*cos(inc))
asz a   s   -   0.0005  (tan(dip)*sin(inc)*cos(inc)*sin(azm))
mbxy_ti1    a   s   nt  70  (-(cos(inc)*sin(azm)))/(mtot*cos(dip))
mbxy_ti2    a   s   nt  70  (cos(azm))/(mtot*cos(dip))
mbz a   s   nt  70  (-sin(inc)*sin(azm))/(mtot*cos(dip))
msxy_ti1    a   s   -   0.0016  (sin(inc)*sin(azm)*(tan(dip)*cos(inc)+sin(inc)*cos(azm)))/(2^0.5)
msxy_ti2    a   s   -   0.0016  (sin(azm)*(tan(dip)*sin(inc)*cos(inc)-(cos(inc))^2*cos(azm)-cos(azm)))/2
msxy_ti3    a   s   -   0.0016  (cos(inc)*(cos(azm))^2-cos(inc)*(sin(azm))^2-tan(dip)*sin(inc)*cos(azm))/2
msz a   s   -   0.0016  (-(sin(inc)*cos(azm)+tan(dip)*cos(inc))*sin(inc)*sin(azm))
xcla    a   r   -   0.167   max(sin(abs(daz)),0.00018*smd/sin(inc))
xclh    i   r   -   0.167   max(abs(dic),0.00018*smd)
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 021517e650d5a650514c7e11ca61fbac
Content-Type: application/json

{
  "short_name" : "TEST_TOOLCODE",
  "description" : "A002Mb/ISC4: BGGM dec + sag corrections",
  "prefix" : "A002Mc",
  "tool_category" : "Magnetic",
  "tool_type" : "MWD",
  "rig_type" : "Fixed",
  "sag_correction" : "SAG",
  "magnetic_correction" : "AX",
  "geomagnetic_reference" : "SRGM",
  "revision" : "ISCWSA Rev5.1",
  "revision_date" : "2022-09-23",
  "custom" : true
}

PUT /public/api/v1/toolcodes

Part Description
data Toolcode file: #Key:Value header lines (ShortName and Description are required, optional Prefix, ToolCategory, ToolType, RigType, SagCorrection, MagneticCorrection, GeomagneticReference, Revision, RevisionDate as dd/MM/yyyy) followed by the error model terms, up to 10000 characters
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
short_name String Toolcode short name
description String Description
prefix String Prefix
tool_category String Tool category
tool_type String Tool type
rig_type String Rig type
sag_correction String Sag correction
magnetic_correction String Magnetic correction
geomagnetic_reference String Geomagnetic reference
revision String Revision
revision_date String Revision date, yyyy-MM-dd
custom Boolean true for a custom toolcode of the user's company, false for a built-in toolcode

Delete toolcode

Delete a custom toolcode of the user's company by short name. A built-in toolcode cannot be deleted, 400 is returned. Deleting a missing toolcode also returns 204

Request

$ curl 'https://solo.cloud/public/api/v1/toolcodes?short_name=TEST_TOOLCODE' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/toolcodes?short_name=TEST_TOOLCODE HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 204 No Content
X-Solo-Trace-Id: 172e070227b6fbac7016776d91d0d983

DELETE /public/api/v1/toolcodes

Parameter Description
short_name Short name of a custom toolcode of the user's company, encode + as %2B
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

25. Trajectories

Get lateral trajectory

Get lateral trajectory data by lateral UUID. A lateral without a trajectory answers 400 with the type NOT_FOUND

Request

$ curl 'https://solo.cloud/public/api/v1/wells/43235a2e-0408-4a4a-9f60-eda3dec7cb1b/trajectory' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/43235a2e-0408-4a4a-9f60-eda3dec7cb1b/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b9dcb4cfa60717b3d1583db910a4ae4f
Content-Type: application/json

{
  "content" : [ {
    "md" : {
      "val" : 0.0
    },
    "incl" : {
      "val" : 0.0
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 3280.839895013124
    },
    "incl" : {
      "val" : 0.4583662361046284
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 4921.259842519686
    },
    "incl" : {
      "val" : 84.79775367935625
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  }, {
    "md" : {
      "val" : 13123.359580052496
    },
    "incl" : {
      "val" : 89.95437383553333
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  } ]
}

GET /public/api/v1/wells/{uuid}/trajectory

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Trajectory points array
content[].md.val Number Measured Depth value in project units
content[].incl.val Number Inclination value (degrees)
content[].azim.val Number Azimuth value (degrees)

Extend lateral trajectory

Extend lateral trajectory with the sent stations. Sent stations shallower than the first existing station are ignored, as are stations with an undefined incl or azi. Existing stations from the first to the last remaining sent station (by MD) are replaced by them, stations outside that range are kept. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the lateral is locked or is a private lateral of another user

Request

$ curl 'https://solo.cloud/public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/trajectory' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PATCH /public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f4396e3aa60169533e23852654c56177

PATCH /public/api/v1/wells/{uuid}/trajectory

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Lateral trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Replace lateral trajectory

Replace lateral trajectory with the sent stations. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the lateral is locked or is a private lateral of another user

Request

$ curl 'https://solo.cloud/public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/trajectory' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PUT /public/api/v1/wells/dcf4253d-15d1-4c03-a934-e58e05e0b0d5/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e8f6c16cdacc582f13463ad15910946e

PUT /public/api/v1/wells/{uuid}/trajectory

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Lateral trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Get typewell trajectory

Get typewell trajectory data by typewell UUID. A typewell without a trajectory answers 400 with the type NOT_FOUND

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/a856980f-092e-415a-ae9b-d842693dd8dd/trajectory' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/a856980f-092e-415a-ae9b-d842693dd8dd/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f23f1e8e5b4a5f0e192798809bb7e664
Content-Type: application/json

{
  "content" : [ {
    "md" : {
      "val" : 0.0
    },
    "incl" : {
      "val" : 0.0
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 3280.839895013124
    },
    "incl" : {
      "val" : 0.4583662361046284
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 4921.259842519686
    },
    "incl" : {
      "val" : 84.79775367935625
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  }, {
    "md" : {
      "val" : 13123.359580052496
    },
    "incl" : {
      "val" : 89.95437383553333
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  } ]
}

GET /public/api/v1/typewells/{uuid}/trajectory

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Trajectory points array
content[].md.val Number Measured Depth value in project units
content[].incl.val Number Inclination value (degrees)
content[].azim.val Number Azimuth value (degrees)

Extend typewell trajectory

Extend typewell trajectory with the sent stations. Sent stations shallower than the first existing station are ignored, as are stations with an undefined incl or azi. Existing stations from the first to the last remaining sent station (by MD) are replaced by them, stations outside that range are kept. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the typewell is locked or is a private typewell of another user

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0/trajectory' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PATCH /public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1ea8e32ad364b55d9deea02236783d4b

PATCH /public/api/v1/typewells/{uuid}/trajectory

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Typewell trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Replace typewell trajectory

Replace typewell trajectory with the sent stations. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the typewell is locked or is a private typewell of another user

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0/trajectory' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PUT /public/api/v1/typewells/adef3745-2e28-4c69-8e2f-82ca8b994da0/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 05df3c1fea0913b53468baaf154d9fa5

PUT /public/api/v1/typewells/{uuid}/trajectory

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Typewell trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Get nested well trajectory

Get nested well trajectory data by nested well UUID. A nested well without a trajectory answers 400 with the type NOT_FOUND

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/dbbda05f-633b-4ea0-a1ff-7f9cd87eb476/trajectory' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/dbbda05f-633b-4ea0-a1ff-7f9cd87eb476/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 73bf3a1118ebac4b5e77ca2d70730a82
Content-Type: application/json

{
  "content" : [ {
    "md" : {
      "val" : 0.0
    },
    "incl" : {
      "val" : 0.0
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 3280.839895013124
    },
    "incl" : {
      "val" : 0.4583662361046284
    },
    "azim" : {
      "val" : 0.0
    }
  }, {
    "md" : {
      "val" : 4921.259842519686
    },
    "incl" : {
      "val" : 84.79775367935625
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  }, {
    "md" : {
      "val" : 13123.359580052496
    },
    "incl" : {
      "val" : 89.95437383553333
    },
    "azim" : {
      "val" : 9.740282517223354
    }
  } ]
}

GET /public/api/v1/nestedwells/{uuid}/trajectory

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Trajectory points array
content[].md.val Number Measured Depth value in project units
content[].incl.val Number Inclination value (degrees)
content[].azim.val Number Azimuth value (degrees)

Extend nested well trajectory

Extend nested well trajectory with the sent stations. Sent stations shallower than the first existing station are ignored, as are stations with an undefined incl or azi. Existing stations from the first to the last remaining sent station (by MD) are replaced by them, stations outside that range are kept. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the nested well is locked or is a private nested well of another user

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/f6dce4cc-c85b-4bb7-877c-c76abcff331f/trajectory' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PATCH /public/api/v1/nestedwells/f6dce4cc-c85b-4bb7-877c-c76abcff331f/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1f8f44dd8e9cfdeeb3fe33600d4b3f55

PATCH /public/api/v1/nestedwells/{uuid}/trajectory

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Nested well trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Replace nested well trajectory

Replace nested well trajectory with the sent stations. md_uom, incl_uom and azi_uom are required, the stations array must not be empty, every station must have md, incl and azi (azim can be used instead of azi, if both are sent azim is used). Returns 403 if the nested well is locked or is a private nested well of another user

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/b3d73080-ee83-44e0-b4bc-a28ee0907e5e/trajectory' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}'
PUT /public/api/v1/nestedwells/b3d73080-ee83-44e0-b4bc-a28ee0907e5e/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 344

{
  "md_uom" : "m",
  "incl_uom" : "dega",
  "azi_uom" : "rad",
  "trajectory_stations" : [ {
    "md" : {
      "val" : 1389
    },
    "incl" : {
      "val" : 1.1
    },
    "azi" : {
      "val" : 1.63
    }
  }, {
    "md" : {
      "val" : 1489
    },
    "incl" : {
      "val" : 2.1
    },
    "azi" : {
      "val" : 1.43
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f7a865ecdea07d3ded834e0d21a0cff2

PUT /public/api/v1/nestedwells/{uuid}/trajectory

Path parameter Description
uuid Nested well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
md_uom String Required. Measure unit of the station md values. Accepted values (case-sensitive): m, ft, ftUS
incl_uom String Required. Measure unit of the station incl values. Accepted values (case-sensitive): dega (degrees), rad (radians)
azi_uom String Required. Measure unit of the station azi values. Accepted values (case-sensitive): dega (degrees), rad (radians)
trajectory_stations Array Nested well trajectory stations array, must not be empty
trajectory_stations[].md.val Number Station measured depth in md_uom units, required
trajectory_stations[].incl.val Number Station inclination in incl_uom units, required
trajectory_stations[].azi.val Number Station azimuth in azi_uom units, required. azim is accepted instead of azi, if both are sent azim is used

Response body

Empty body

Get multiple trajectories

Get multiple trajectories by their UUIDs. At most 100 distinct UUIDs can be requested in total, otherwise 400 is returned. UUIDs that are not found, not accessible or listed under a wrong type are skipped (even if also listed under the right one), as are wells without a readable trajectory, a UUID listed twice in the same array is returned once, the order of the result is not guaranteed

Request

$ curl 'https://solo.cloud/public/api/v1/trajectories' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "wells" : [ "43235a2e-0408-4a4a-9f60-eda3dec7cb1b", "9341cf7d-56f2-4891-bb7d-c9fe7ac7fc8d" ],
  "typewells" : [ "a856980f-092e-415a-ae9b-d842693dd8dd" ],
  "nestedwells" : [ "dbbda05f-633b-4ea0-a1ff-7f9cd87eb476" ]
}'
POST /public/api/v1/trajectories HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 220

{
  "wells" : [ "43235a2e-0408-4a4a-9f60-eda3dec7cb1b", "9341cf7d-56f2-4891-bb7d-c9fe7ac7fc8d" ],
  "typewells" : [ "a856980f-092e-415a-ae9b-d842693dd8dd" ],
  "nestedwells" : [ "dbbda05f-633b-4ea0-a1ff-7f9cd87eb476" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 761ec595e71d4a87c22c46287f29bb73
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "43235a2e-0408-4a4a-9f60-eda3dec7cb1b",
    "trajectory" : [ {
      "md" : {
        "val" : 0.0
      },
      "incl" : {
        "val" : 0.0
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 3280.839895013124
      },
      "incl" : {
        "val" : 0.4583662361046284
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 4921.259842519686
      },
      "incl" : {
        "val" : 84.79775367935625
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    }, {
      "md" : {
        "val" : 13123.359580052496
      },
      "incl" : {
        "val" : 89.95437383553333
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    } ]
  }, {
    "uuid" : "dbbda05f-633b-4ea0-a1ff-7f9cd87eb476",
    "trajectory" : [ {
      "md" : {
        "val" : 0.0
      },
      "incl" : {
        "val" : 0.0
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 3280.839895013124
      },
      "incl" : {
        "val" : 0.4583662361046284
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 4921.259842519686
      },
      "incl" : {
        "val" : 84.79775367935625
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    }, {
      "md" : {
        "val" : 13123.359580052496
      },
      "incl" : {
        "val" : 89.95437383553333
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    } ]
  }, {
    "uuid" : "a856980f-092e-415a-ae9b-d842693dd8dd",
    "trajectory" : [ {
      "md" : {
        "val" : 0.0
      },
      "incl" : {
        "val" : 0.0
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 3280.839895013124
      },
      "incl" : {
        "val" : 0.4583662361046284
      },
      "azim" : {
        "val" : 0.0
      }
    }, {
      "md" : {
        "val" : 4921.259842519686
      },
      "incl" : {
        "val" : 84.79775367935625
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    }, {
      "md" : {
        "val" : 13123.359580052496
      },
      "incl" : {
        "val" : 89.95437383553333
      },
      "azim" : {
        "val" : 9.740282517223354
      }
    } ]
  }, {
    "uuid" : "9341cf7d-56f2-4891-bb7d-c9fe7ac7fc8d",
    "trajectory" : [ {
      "md" : {
        "val" : 0.0
      },
      "incl" : {
        "val" : 0.0
      },
      "azim" : {
        "val" : 71.543
      }
    }, {
      "md" : {
        "val" : 61.198660000000004
      },
      "incl" : {
        "val" : 0.35
      },
      "azim" : {
        "val" : 176.083
      }
    }, {
      "md" : {
        "val" : 100.42002000000001
      },
      "incl" : {
        "val" : 0.25
      },
      "azim" : {
        "val" : 259.043
      }
    }, {
      "md" : {
        "val" : 124.93996000000001
      },
      "incl" : {
        "val" : 0.28
      },
      "azim" : {
        "val" : 227.59299999999996
      }
    }, {
      "md" : {
        "val" : 174.66991
      },
      "incl" : {
        "val" : 1.13
      },
      "azim" : {
        "val" : 154.423
      }
    }, {
      "md" : {
        "val" : 201.38989
      },
      "incl" : {
        "val" : 1.2599999999999998
      },
      "azim" : {
        "val" : 140.38299999999998
      }
    }, {
      "md" : {
        "val" : 225.35998000000004
      },
      "incl" : {
        "val" : 1.2999999999999998
      },
      "azim" : {
        "val" : 153.713
      }
    }, {
      "md" : {
        "val" : 3280.839895013124
      },
      "incl" : {
        "val" : 1.33
      },
      "azim" : {
        "val" : 149.253
      }
    } ]
  } ]
}

POST /public/api/v1/trajectories

Header Description
Authorization OAuth2 authorization header
Body field Type Description
wells Array Lateral UUIDs to download trajectories for
typewells Array Typewell UUIDs to download trajectories for
nestedwells Array Nested well UUIDs to download trajectories for

Response body

Path Type Description
content Array List of trajectories, one per found and accessible object, in no particular order
content[].uuid String Lateral, typewell or nested well UUID
content[].trajectory Array Trajectory points of the lateral, typewell or nested well
content[].trajectory[].md.val Number Measured depth value in project units
content[].trajectory[].incl.val Number Inclination value (degrees)
content[].trajectory[].azim.val Number Azimuth value (degrees)

26. Public data

Get nearby wells

Search wells of the Solo public data projects whose surface location is within radius_miles of the given point. The point is given, and the well latitude and longitude are returned, in degrees in the geographic CRS set by epsg_mnemonic or epsg_crs_code. The response is not paged, at most 50000 wells are returned. KB elevation is returned in the units of the well's project (measure_unit). Returns 406 if neither or both of epsg_mnemonic and epsg_crs_code are set or radius_miles is greater than 100 (a server setting), and 400 if a value is out of range or the CRS cannot be transformed

Request

$ curl 'https://solo.cloud/public/api/v1/publicdata/nearbywells' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "epsg_mnemonic" : "NAD83",
  "latitude" : 30.9807,
  "longitude" : -115.9835,
  "radius_miles" : 5.0
}'
POST /public/api/v1/publicdata/nearbywells HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 106

{
  "epsg_mnemonic" : "NAD83",
  "latitude" : 30.9807,
  "longitude" : -115.9835,
  "radius_miles" : 5.0
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 94a702b98194b5053d844a5446d03c67
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "1bc3a48c-b4a5-4e37-8151-f39afe364b6b",
    "name" : "Lateral",
    "api" : "string",
    "operator" : "string",
    "latitude" : 30.980717619255476,
    "longitude" : -115.98346038234884,
    "latitude_wgs84" : 30.980717618422293,
    "longitude_wgs84" : -115.98346038234884,
    "project_uuid" : "a620afb6-28af-4982-8a5a-ca0f77b51cd4",
    "measure_unit" : "FOOT",
    "elevation" : {
      "val" : 22.96587926509186
    },
    "tvd" : {
      "val" : 10000.0
    },
    "convergence" : {
      "val" : 0.0
    },
    "is_true_north_azimuth" : false,
    "state" : "Baja California",
    "county" : "Mexico",
    "type" : "WELL"
  } ]
}

POST /public/api/v1/publicdata/nearbywells

Header Description
Authorization OAuth2 authorization header
Body field Type Description
epsg_mnemonic String EPSG mnemonic: NAD27 (EPSG:4267) or NAD83 (EPSG:4269). Exactly one of 'epsg_mnemonic' and 'epsg_crs_code' must be set
epsg_crs_code Number EPSG code of a geographic CRS (degrees) in which the search center is given and the well latitude and longitude are returned
latitude Number Latitude of the search center in degrees in the request CRS, range [-90; 90]
longitude Number Longitude of the search center in degrees in the request CRS, range [-180; 180]
radius_miles Number Search radius in miles, greater than 0 and not greater than 100

Response body

Path Type Description
content Array Wells of the Solo public data projects whose surface location is within the radius. The list is not paged, at most 50000 wells are returned
content[].uuid String Well UUID
content[].name String Well name
content[].api String Well API number
content[].operator String Well operator
content[].latitude Number Well surface latitude in degrees in the request CRS
content[].longitude Number Well surface longitude in degrees in the request CRS
content[].latitude_wgs84 Number Well surface latitude in WGS84 (degrees)
content[].longitude_wgs84 Number Well surface longitude in WGS84 (degrees)
content[].project_uuid String UUID of the public data project of the well
content[].measure_unit String Project measure unit: FOOT, METER or METER_FOOT
content[].elevation.val Number Well KB elevation (project units)
content[].tvd.val Number Well final TVD value (project units)
content[].convergence.val Number Well convergence angle in degrees, range [-180; 180)
content[].is_true_north_azimuth Boolean true if the well convergence is set and non-zero, otherwise false
content[].state String State or province of the well surface location, absent if not determined
content[].county String Country (not county) of the well surface location, absent if not determined
content[].type String Well type: WELL, TYPEWELL or NESTEDWELL

27. Image logs

Create image log by lateral

Create an empty image log by lateral UUID. The image log is not listed by Get image logs by lateral until its data is uploaded

Request

$ curl 'https://solo.cloud/public/api/v1/wells/374a50f8-b2c5-4d4d-acfd-6b9fa69fa314/imagelogs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Image log name"
}'
POST /public/api/v1/wells/374a50f8-b2c5-4d4d-acfd-6b9fa69fa314/imagelogs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 31

{
  "name" : "Image log name"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c82dc3b773df687a457c28a2aee87e53
Content-Type: application/json

{
  "uuid" : "891a37a5-2a5a-4307-81b7-084be5ba07f5"
}

POST /public/api/v1/wells/{uuid}/imagelogs

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Image log name, up to 200 characters

Response body

Path Type Description
uuid String Created image log UUID

Get image logs by lateral

Get a list of image logs by lateral UUID with pagination, in creation order. Image logs that do not contain data will not be included in the response

Request

$ curl 'https://solo.cloud/public/api/v1/wells/3dde0755-77df-4e89-9c09-f132bda2b207/imagelogs?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3dde0755-77df-4e89-9c09-f132bda2b207/imagelogs?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 360a80ad6f92f216559cdc81c6e115a7
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "1a89ff4c-5401-4da0-b684-ecad65077922",
    "name" : "Acoustic Image"
  }, {
    "uuid" : "046fc46a-92a5-41ef-9ecc-7b766513986b",
    "name" : "Resistivity Image",
    "is_data_content_outdated" : false,
    "data_content" : [ {
      "order_index" : 0,
      "log_uid" : "RES_UID0",
      "log_name" : "RES_NAME0",
      "sector" : "Up",
      "unit" : "OHMM"
    }, {
      "order_index" : 1,
      "log_uid" : "RES_UID1",
      "log_name" : "RES_NAME1",
      "sector" : "Down",
      "unit" : "OHMM"
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/imagelogs

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Image log UUID
content[].name String Image log name
content[].is_data_content_outdated Boolean true if data_content was recorded for an older version of the image log data than the current one. Absent if there is no data_content
content[].data_content Array Source logs the image log was assembled from by real-time streaming, taken from the latest data version that has them. Absent if the image log has no such data
content[].data_content[].order_index Number Order index of the log inside image log data content
content[].data_content[].log_uid String UID of the log used as a source for image log data content
content[].data_content[].log_name String Name of the log used as a source for image log data content
content[].data_content[].sector String Sector of the log used as a source for image log data content
content[].data_content[].unit String Unit of the log used as a source for image log data content

Get image log data

Get image log data by UUID. MD values are returned in project depth units. Returns 404 if the image log has no data

Request

$ curl 'https://solo.cloud/public/api/v1/imagelogs/f4e7defc-2c81-46b0-8f3f-8d2588c18129/data' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/imagelogs/f4e7defc-2c81-46b0-8f3f-8d2588c18129/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 488666b44d647f954541a0ed9c7bae1a
Content-Type: application/json

{
  "log_points" : [ {
    "channels" : [ {
      "data" : [ {
        "val" : -83.6675
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 68.125
      }, {
        "val" : 68.125
      }, {
        "val" : 75.144
      }, {
        "val" : 75.144
      }, {
        "val" : 73.038
      }, {
        "val" : 65.318
      } ],
      "description" : "",
      "mnemonic" : ""
    }, {
      "data" : [ {
        "val" : -83.6675
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 68.125
      }, {
        "val" : 68.125
      }, {
        "val" : 75.144
      }, {
        "val" : 75.144
      }, {
        "val" : 73.038
      }, {
        "val" : 65.318
      } ],
      "description" : "",
      "mnemonic" : ""
    }, {
      "data" : [ {
        "val" : -83.6675
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 68.125
      }, {
        "val" : 68.125
      }, {
        "val" : 75.144
      }, {
        "val" : 75.144
      }, {
        "val" : 73.038
      }, {
        "val" : 65.318
      } ],
      "description" : "",
      "mnemonic" : ""
    }, {
      "data" : [ {
        "val" : -83.6675
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 61.808
      }, {
        "val" : 68.125
      }, {
        "val" : 68.125
      }, {
        "val" : 75.144
      }, {
        "val" : 75.144
      }, {
        "val" : 73.038
      }, {
        "val" : 65.318
      } ],
      "description" : "",
      "mnemonic" : ""
    } ],
    "md" : [ {
      "val" : 2478.4999999999995
    }, {
      "val" : 2480.4999999999995
    }, {
      "val" : 2480.9999999999995
    }, {
      "val" : 2481.4999999999995
    }, {
      "val" : 2481.9999999999995
    }, {
      "val" : 2482.4999999999995
    }, {
      "val" : 2482.9999999999995
    }, {
      "val" : 2483.4999999999995
    }, {
      "val" : 2483.9999999999995
    }, {
      "val" : 2484.4999999999995
    } ]
  } ]
}

GET /public/api/v1/imagelogs/{uuid}/data

Path parameter Description
uuid Image log UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
log_points Array Image log points array
log_points[].md Array Measured depth values array
log_points[].md[].val Number Measured depth value in project depth units
log_points[].channels Array Image log point data channels array
log_points[].channels[].mnemonic String Data channel mnemonic
log_points[].channels[].description String Data channel description
log_points[].channels[].data Array Data channel values array
log_points[].channels[].data[].val Number Data value, absent if the value is undefined
log_points[].channels[].data[].undefined Boolean true if the data value is undefined

Upload\replace image log data

Upload image log data by UUID, replacing the existing data. log_points must contain exactly one element with the md array and at least one channel. MD values are in project depth units, they must be defined and non-decreasing, every channel data array must have the same length as md. A request that breaks these rules is rejected with 400, an unreadable body with 406

Request

$ curl 'https://solo.cloud/public/api/v1/imagelogs/3b9a700e-19a3-4a43-88a1-1833530140fc/data' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "log_points" : [ {
    "md" : [ {
      "val" : 100.0
    }, {
      "val" : 101.0
    } ],
    "channels" : [ {
      "mnemonic" : "GR",
      "description" : "Gamma Ray",
      "data" : [ {
        "val" : 45.0
      }, {
        "val" : 46.0
      } ]
    }, {
      "mnemonic" : "RES",
      "description" : "Resistivity",
      "data" : [ {
        "val" : 12.0
      }, {
        "val" : 13.0
      } ]
    } ]
  } ]
}'
PUT /public/api/v1/imagelogs/3b9a700e-19a3-4a43-88a1-1833530140fc/data HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 428

{
  "log_points" : [ {
    "md" : [ {
      "val" : 100.0
    }, {
      "val" : 101.0
    } ],
    "channels" : [ {
      "mnemonic" : "GR",
      "description" : "Gamma Ray",
      "data" : [ {
        "val" : 45.0
      }, {
        "val" : 46.0
      } ]
    }, {
      "mnemonic" : "RES",
      "description" : "Resistivity",
      "data" : [ {
        "val" : 12.0
      }, {
        "val" : 13.0
      } ]
    } ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: b71234e212a96a9174d008f5a1e0cc3b

PUT /public/api/v1/imagelogs/{uuid}/data

Path parameter Description
uuid Image log UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
log_points Array Array with exactly one element that holds the MD array and the channels
log_points[].md Array Measured depth values array, at least one value
log_points[].md[].val Number Measured depth value in project depth units. Values must be defined and non-decreasing
log_points[].channels Array Image log channels array, at least one channel
log_points[].channels[].mnemonic String Data channel mnemonic, required string
log_points[].channels[].description String Data channel description, required string
log_points[].channels[].data Array Data channel values array, one value per MD value (same length as md)
log_points[].channels[].data[].val Number Data value, when it is undefined omit it and send "undefined": true
log_points[].channels[].data[].undefined Boolean true if the data value is undefined

Response body

Empty body

Delete image log

Delete image log by UUID. Returns 403 if the image log is locked or is a private image log of another user

Request

$ curl 'https://solo.cloud/public/api/v1/imagelogs/a9728099-9db4-457c-bfa4-b3fb343f5e42' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/imagelogs/a9728099-9db4-457c-bfa4-b3fb343f5e42 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 69dfa868644a7699ec22ce48b223c399

DELETE /public/api/v1/imagelogs/{uuid}

Path parameter Description
uuid Image log UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

28. Folders

Create lateral folder

Create lateral folder

Request

$ curl 'https://solo.cloud/public/api/v1/wells/f0bf0dfa-d947-4b6f-b5e2-97af7f2e6f6e/folders' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New lateral nested folder",
  "parent_folder" : "5dc60c37-bc49-478b-a717-b17be45d4027"
}'
POST /public/api/v1/wells/f0bf0dfa-d947-4b6f-b5e2-97af7f2e6f6e/folders HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 102

{
  "name" : "New lateral nested folder",
  "parent_folder" : "5dc60c37-bc49-478b-a717-b17be45d4027"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 6114b323572162580488e48ffc9a7a8f
Content-Type: application/json

{
  "uuid" : "f08069cb-417a-48e4-83f0-293e54ff3e22"
}

POST /public/api/v1/wells/{uuid}/folders

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Folder name, up to 200 characters
parent_folder String UUID of the parent folder of the same lateral or typewell. Omit it or pass null to create a top-level folder. An unknown folder or a folder of another well is rejected with 400

Response body

Path Type Description
uuid String Created folder UUID

Create typewell folder

Create typewell folder

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/869afb47-dd62-4c75-aee4-2f164c2a494c/folders' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "New typewell root folder"
}'
POST /public/api/v1/typewells/869afb47-dd62-4c75-aee4-2f164c2a494c/folders HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 41

{
  "name" : "New typewell root folder"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 34bbe9fbb7c0c2956d079ac917d0bf33
Content-Type: application/json

{
  "uuid" : "ced6eb64-dd2c-48c7-b30e-1aced609f9c1"
}

POST /public/api/v1/typewells/{uuid}/folders

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Folder name, up to 200 characters
parent_folder String UUID of the parent folder of the same lateral or typewell. Omit it or pass null to create a top-level folder. An unknown folder or a folder of another well is rejected with 400

Response body

Path Type Description
uuid String Created folder UUID

Get folders by lateral

Get a list of all folders of the lateral (at any nesting level) with pagination, in creation order. Use relative_path to rebuild the folder tree

Request

$ curl 'https://solo.cloud/public/api/v1/wells/f0bf0dfa-d947-4b6f-b5e2-97af7f2e6f6e/folders?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/f0bf0dfa-d947-4b6f-b5e2-97af7f2e6f6e/folders?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5152f78e54a230dd969f41baba14b007
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "7e6b8c73-4516-4a6a-afe9-9a38a317673c",
    "name" : "Lateral folder"
  }, {
    "uuid" : "38ead9b5-27a6-49c8-835e-7fe4b28c7ca4",
    "name" : "Nested folder",
    "relative_path" : [ "7e6b8c73-4516-4a6a-afe9-9a38a317673c" ]
  }, {
    "uuid" : "5dc60c37-bc49-478b-a717-b17be45d4027",
    "name" : "Deeply nested folder",
    "relative_path" : [ "7e6b8c73-4516-4a6a-afe9-9a38a317673c", "38ead9b5-27a6-49c8-835e-7fe4b28c7ca4" ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 3,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/folders

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Folder UUID
content[].name String Folder name
content[].relative_path Array UUIDs of the ancestor folders, from the top-level folder down to the parent folder. Absent for top-level folders

Get folders by typewell

Get a list of all folders of the typewell (at any nesting level) with pagination, in creation order. Use relative_path to rebuild the folder tree

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/869afb47-dd62-4c75-aee4-2f164c2a494c/folders?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/869afb47-dd62-4c75-aee4-2f164c2a494c/folders?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7b05522729305d9db87766401f71bcec
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "1de26279-285a-4ed3-b42a-2b44fa51bf0b",
    "name" : "Typewell folder"
  }, {
    "uuid" : "192e73dd-e9e8-4fae-a7f8-d994002f4e31",
    "name" : "Typewell nested folder",
    "relative_path" : [ "1de26279-285a-4ed3-b42a-2b44fa51bf0b" ]
  }, {
    "uuid" : "16b763a0-97ba-4984-ba36-ef2ae1361b03",
    "name" : "Typewell deeply nested folder",
    "relative_path" : [ "1de26279-285a-4ed3-b42a-2b44fa51bf0b", "192e73dd-e9e8-4fae-a7f8-d994002f4e31" ]
  }, {
    "uuid" : "ced6eb64-dd2c-48c7-b30e-1aced609f9c1",
    "name" : "New typewell root folder"
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 4,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/folders

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Folder UUID
content[].name String Folder name
content[].relative_path Array UUIDs of the ancestor folders, from the top-level folder down to the parent folder. Absent for top-level folders

29. Completions

Create completion by lateral

Create completion by lateral UUID

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6fbd23f1-1fce-45bf-9d2e-2c9f52b19af8/completions' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Public lateral completion",
  "stages" : [ {
    "name" : "Public lateral stage",
    "top_md" : {
      "val" : 200.0
    },
    "base_md" : {
      "val" : 225.5
    }
  } ]
}'
POST /public/api/v1/wells/6fbd23f1-1fce-45bf-9d2e-2c9f52b19af8/completions HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 191

{
  "name" : "Public lateral completion",
  "stages" : [ {
    "name" : "Public lateral stage",
    "top_md" : {
      "val" : 200.0
    },
    "base_md" : {
      "val" : 225.5
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 2f8ba1408c485c73d51fbc36c88091ac
Content-Type: application/json

{
  "uuid" : "6a3a5df4-f862-4d70-b494-52d1065e8623"
}

POST /public/api/v1/wells/{uuid}/completions

Path parameter Description
uuid Lateral UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Completion name, up to 200 characters
stages Array Completion stages
stages[].name String Stage name, required, up to 200 characters
stages[].top_md.val Number Stage top MD value in project units, required, in range [0;100000]
stages[].base_md.val Number Stage base MD value in project units, required, in range [0;100000]
stages[].properties String Ignored: stages are always created with the default display properties

Response body

Path Type Description
uuid String Created completion UUID

Create completion by typewell

Create completion by typewell UUID

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/9be1a1e3-7cee-482a-b579-48118db59662/completions' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Public typewell completion",
  "stages" : [ {
    "name" : "Public typewell stage",
    "top_md" : {
      "val" : 300.0
    },
    "base_md" : {
      "val" : 330.0
    }
  } ]
}'
POST /public/api/v1/typewells/9be1a1e3-7cee-482a-b579-48118db59662/completions HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 193

{
  "name" : "Public typewell completion",
  "stages" : [ {
    "name" : "Public typewell stage",
    "top_md" : {
      "val" : 300.0
    },
    "base_md" : {
      "val" : 330.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0daad30c223c02c8f33c906af0e020ee
Content-Type: application/json

{
  "uuid" : "a2e1281c-221a-438f-a93c-a9a2a786f069"
}

POST /public/api/v1/typewells/{uuid}/completions

Path parameter Description
uuid Typewell UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Completion name, up to 200 characters
stages Array Completion stages
stages[].name String Stage name, required, up to 200 characters
stages[].top_md.val Number Stage top MD value in project units, required, in range [0;100000]
stages[].base_md.val Number Stage base MD value in project units, required, in range [0;100000]
stages[].properties String Ignored: stages are always created with the default display properties

Response body

Path Type Description
uuid String Created completion UUID

Create completion attribute

Create completion stage attribute by completion UUID. The attribute is created with the FLOAT type, its stage values are set with Create completion stages and Update completion stage

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Treating pressure"
}'
POST /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 34

{
  "name" : "Treating pressure"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: eeda36d5e1be6a14c7893aeaeee1a215
Content-Type: application/json

{
  "uuid" : "9960fddb-5ab1-4b7b-829d-dc8dfc0039ec"
}

POST /public/api/v1/completions/{uuid}/attributes

Path parameter Description
uuid Completion UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Attribute name, up to 200 characters; length (case-insensitive) is reserved
properties String Attribute display properties JSON string; the default properties are used when omitted

Response body

Path Type Description
uuid String Created attribute UUID

Create completion stages

Create completion stages by completion UUID

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/stages' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "stages" : [ {
    "name" : "Public created stage",
    "top_md" : {
      "val" : 400.0
    },
    "base_md" : {
      "val" : 425.25
    },
    "attribute_values" : [ {
      "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
      "value" : {
        "val" : 12.25
      }
    } ]
  } ]
}'
POST /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/stages HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 303

{
  "stages" : [ {
    "name" : "Public created stage",
    "top_md" : {
      "val" : 400.0
    },
    "base_md" : {
      "val" : 425.25
    },
    "attribute_values" : [ {
      "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
      "value" : {
        "val" : 12.25
      }
    } ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: cc033fe029f0361ee770882d386c95e5
Content-Type: application/json

{
  "uuids" : [ "f38f8fee-2348-4250-a49a-9bd69106b6a5" ]
}

POST /public/api/v1/completions/{uuid}/stages

Path parameter Description
uuid Completion UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
stages Array Completion stages to create, at least one
stages[].name String Stage name, required, up to 200 characters
stages[].top_md.val Number Stage top MD value in project units, in range [0;100000]
stages[].base_md.val Number Stage base MD value in project units, in range [0;100000]
stages[].properties String Ignored: stages are always created with the default display properties
stages[].attribute_values Array Stage attribute values; each attribute must be a FLOAT attribute of this completion and may be listed once
stages[].attribute_values[].attribute_uuid String Attribute UUID
stages[].attribute_values[].value.val Number Attribute value in range [-1000000000;1000000000]; an entry without a value is skipped

Response body

Path Type Description
uuids Array Created stage UUIDs in request order

Get completions by project and name

Get a list of completions of the project wells whose name exactly matches the name query parameter, with pagination, in creation order. For a virtual project UUID, only completions of the virtual project wells are returned. Completion names do not have to be unique. The name, offset and limit parameters are required. Only stages that have both top and base MD are returned, sorted by base MD descending. Only user-defined FLOAT stage attributes are returned, and a stage lists values only for the attributes that have one

Request

$ curl 'https://solo.cloud/public/api/v1/projects/81fc959d-7689-4c5e-8dc7-f1e85252f063/completions?name=Lateral%20completion&offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/81fc959d-7689-4c5e-8dc7-f1e85252f063/completions?name=Lateral%20completion&offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: cd1e4129ff3e8a3bff7051c800edb6b1
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "8d120d4d-9e98-4355-9271-fb3fb9fa09a1",
    "name" : "Lateral completion",
    "parent_well" : {
      "uuid" : "3612498d-92f0-45a3-af50-eaf08832ae3a",
      "name" : "Completion lateral",
      "type" : "WELL"
    },
    "attributes" : [ {
      "uuid" : "9960fddb-5ab1-4b7b-829d-dc8dfc0039ec",
      "name" : "Treating pressure",
      "type" : "FLOAT"
    }, {
      "uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
      "name" : "Proppant concentration",
      "type" : "FLOAT"
    } ],
    "stages" : [ {
      "uuid" : "f38f8fee-2348-4250-a49a-9bd69106b6a5",
      "name" : "Public created stage",
      "stage" : 1,
      "top_md" : {
        "val" : 400.0
      },
      "base_md" : {
        "val" : 425.25
      },
      "length" : {
        "val" : 25.25
      },
      "attribute_values" : [ {
        "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
        "value" : {
          "val" : 12.25
        }
      } ]
    }, {
      "uuid" : "7531a583-e168-4b07-a3e5-dc94070025cf",
      "name" : "Second stage",
      "stage" : 2,
      "top_md" : {
        "val" : 130.0
      },
      "base_md" : {
        "val" : 155.25
      },
      "length" : {
        "val" : 25.25
      },
      "attribute_values" : [ {
        "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
        "value" : {
          "val" : 9.75
        }
      } ]
    }, {
      "uuid" : "df6373a3-ca4d-4712-ade8-9162b9d2891c",
      "name" : "First stage",
      "stage" : 3,
      "top_md" : {
        "val" : 100.0
      },
      "base_md" : {
        "val" : 125.5
      },
      "length" : {
        "val" : 25.5
      },
      "attribute_values" : [ {
        "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
        "value" : {
          "val" : 8.5
        }
      } ]
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/completions

Path parameter Description
uuid Project UUID
Parameter Description
name Completion name to match exactly
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Completion UUID
content[].name String Completion name
content[].attributes Array Completion stage attributes sorted by name in descending order, case-insensitive, only user-defined FLOAT attributes are listed
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type, always FLOAT
content[].stages Array Completion stages that have both top and base MD, sorted by base MD descending
content[].stages[].uuid String Stage UUID
content[].stages[].name String Stage name
content[].stages[].stage Number Stage number, from 1 for the stage with the largest base MD
content[].stages[].top_md.val Number Stage top MD value in project units
content[].stages[].base_md.val Number Stage base MD value in project units
content[].stages[].length.val Number Stage length (base MD minus top MD) in project units; absent when top MD is not less than base MD
content[].stages[].attribute_values Array Stage attribute values in the order of attributes, only attributes that have a value for the stage are listed
content[].stages[].attribute_values[].attribute_uuid String Attribute UUID
content[].stages[].attribute_values[].value.val Number Attribute value
content[].parent_well Object Parent well metadata
content[].parent_well.uuid String Parent well UUID
content[].parent_well.name String Parent well name
content[].parent_well.type String Parent well type: WELL for a lateral, TYPEWELL for a typewell

Get completions by lateral

Get a list of completions by lateral UUID with pagination, in creation order. Only stages that have both top and base MD are returned, sorted by base MD descending. Only user-defined FLOAT stage attributes are returned, and a stage lists values only for the attributes that have one

Request

$ curl 'https://solo.cloud/public/api/v1/wells/3612498d-92f0-45a3-af50-eaf08832ae3a/completions?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3612498d-92f0-45a3-af50-eaf08832ae3a/completions?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 38385c084a40ed5c7d0a9fd4e2273b15
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "8d120d4d-9e98-4355-9271-fb3fb9fa09a1",
    "name" : "Lateral completion",
    "attributes" : [ {
      "uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
      "name" : "Proppant concentration",
      "type" : "FLOAT"
    } ],
    "stages" : [ {
      "uuid" : "7531a583-e168-4b07-a3e5-dc94070025cf",
      "name" : "Second stage",
      "stage" : 1,
      "top_md" : {
        "val" : 130.0
      },
      "base_md" : {
        "val" : 155.25
      },
      "length" : {
        "val" : 25.25
      },
      "attribute_values" : [ {
        "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
        "value" : {
          "val" : 9.75
        }
      } ]
    }, {
      "uuid" : "df6373a3-ca4d-4712-ade8-9162b9d2891c",
      "name" : "First stage",
      "stage" : 2,
      "top_md" : {
        "val" : 100.0
      },
      "base_md" : {
        "val" : 125.5
      },
      "length" : {
        "val" : 25.5
      },
      "attribute_values" : [ {
        "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
        "value" : {
          "val" : 8.5
        }
      } ]
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/completions

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Completion UUID
content[].name String Completion name
content[].attributes Array Completion stage attributes sorted by name in descending order, case-insensitive, only user-defined FLOAT attributes are listed
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type, always FLOAT
content[].stages Array Completion stages that have both top and base MD, sorted by base MD descending
content[].stages[].uuid String Stage UUID
content[].stages[].name String Stage name
content[].stages[].stage Number Stage number, from 1 for the stage with the largest base MD
content[].stages[].top_md.val Number Stage top MD value in project units
content[].stages[].base_md.val Number Stage base MD value in project units
content[].stages[].length.val Number Stage length (base MD minus top MD) in project units; absent when top MD is not less than base MD
content[].stages[].attribute_values Array Stage attribute values in the order of attributes, only attributes that have a value for the stage are listed
content[].stages[].attribute_values[].attribute_uuid String Attribute UUID
content[].stages[].attribute_values[].value.val Number Attribute value

Get completions by typewell

Get a list of completions by typewell UUID with pagination, in creation order. Only stages that have both top and base MD are returned, sorted by base MD descending. Only user-defined FLOAT stage attributes are returned, and a stage lists values only for the attributes that have one

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/dfab4fa7-cda0-4624-8f02-d6623126f821/completions?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/dfab4fa7-cda0-4624-8f02-d6623126f821/completions?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3d49c2c4c64f6d42d5bae452e9045347
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "69317615-df33-49bf-904a-4a9ef49ec4f7",
    "name" : "Typewell completion",
    "attributes" : [ {
      "uuid" : "f8bc2533-d45e-4014-a56b-9b02ffdec7cc",
      "name" : "Proppant concentration",
      "type" : "FLOAT"
    } ],
    "stages" : [ {
      "uuid" : "3da30e30-b3be-47a1-99f6-eecdd6c2ed37",
      "name" : "Second stage",
      "stage" : 1,
      "top_md" : {
        "val" : 130.0
      },
      "base_md" : {
        "val" : 155.25
      },
      "length" : {
        "val" : 25.25
      },
      "attribute_values" : [ {
        "attribute_uuid" : "f8bc2533-d45e-4014-a56b-9b02ffdec7cc",
        "value" : {
          "val" : 9.75
        }
      } ]
    }, {
      "uuid" : "3941f5bd-6621-435c-8690-993a1006d3f4",
      "name" : "First stage",
      "stage" : 2,
      "top_md" : {
        "val" : 100.0
      },
      "base_md" : {
        "val" : 125.5
      },
      "length" : {
        "val" : 25.5
      },
      "attribute_values" : [ {
        "attribute_uuid" : "f8bc2533-d45e-4014-a56b-9b02ffdec7cc",
        "value" : {
          "val" : 8.5
        }
      } ]
    } ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/completions

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Completion UUID
content[].name String Completion name
content[].attributes Array Completion stage attributes sorted by name in descending order, case-insensitive, only user-defined FLOAT attributes are listed
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type, always FLOAT
content[].stages Array Completion stages that have both top and base MD, sorted by base MD descending
content[].stages[].uuid String Stage UUID
content[].stages[].name String Stage name
content[].stages[].stage Number Stage number, from 1 for the stage with the largest base MD
content[].stages[].top_md.val Number Stage top MD value in project units
content[].stages[].base_md.val Number Stage base MD value in project units
content[].stages[].length.val Number Stage length (base MD minus top MD) in project units; absent when top MD is not less than base MD
content[].stages[].attribute_values Array Stage attribute values in the order of attributes, only attributes that have a value for the stage are listed
content[].stages[].attribute_values[].attribute_uuid String Attribute UUID
content[].stages[].attribute_values[].value.val Number Attribute value

Update completion

Update completion by UUID

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated lateral completion"
}'
PATCH /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 43

{
  "name" : "Updated lateral completion"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5b3a5761fbd3532c89993c856253222a

PATCH /public/api/v1/completions/{uuid}

Path parameter Description
uuid Completion UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New completion name, up to 200 characters

Response body

Empty body

Update completion attribute

Update completion attribute name by completion UUID and attribute UUID. Returns 400 if the attribute does not belong to the completion

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes/e84d760d-be46-4be7-8e74-59edc058c153' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated proppant concentration"
}'
PATCH /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes/e84d760d-be46-4be7-8e74-59edc058c153 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 47

{
  "name" : "Updated proppant concentration"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4f521a16f8cdcbe522af0f9745e5dd7c

PATCH /public/api/v1/completions/{completionUuid}/attributes/{attributeUuid}

Path parameter Description
completionUuid Completion UUID
attributeUuid Attribute UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New attribute name, up to 200 characters; length (case-insensitive) is reserved

Response body

Empty body

Update completion stage

Update completion stage by stage UUID. An absent field keeps its current value. Only the listed attribute values are changed, an entry without a value clears the attribute value

Request

$ curl 'https://solo.cloud/public/api/v1/stages/df6373a3-ca4d-4712-ade8-9162b9d2891c' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Updated first stage",
  "top_md" : {
    "val" : 105.0
  },
  "base_md" : {
    "val" : 129.5
  },
  "attribute_values" : [ {
    "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
    "value" : {
      "val" : 10.5
    }
  } ]
}'
PATCH /public/api/v1/stages/df6373a3-ca4d-4712-ade8-9162b9d2891c HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 251

{
  "name" : "Updated first stage",
  "top_md" : {
    "val" : 105.0
  },
  "base_md" : {
    "val" : 129.5
  },
  "attribute_values" : [ {
    "attribute_uuid" : "e84d760d-be46-4be7-8e74-59edc058c153",
    "value" : {
      "val" : 10.5
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bc69980bf1fd7d4afe31aeb95850a313

PATCH /public/api/v1/stages/{stageUuid}

Path parameter Description
stageUuid Stage UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String New stage name, up to 200 characters
top_md.val Number New stage top MD value in project units, in range [0;100000]
base_md.val Number New stage base MD value in project units, in range [0;100000]
attribute_values Array Stage attribute values to change; each attribute must be a FLOAT attribute of the stage completion and may be listed once, attributes that are not listed keep their values
attribute_values[].attribute_uuid String Attribute UUID
attribute_values[].value.val Number New attribute value in range [-1000000000;1000000000]; an entry without a value clears the attribute value

Response body

Empty body

Delete completion

Delete completion by UUID together with all its stages. Returns 403 if the completion or one of its stages is locked or is a private object of another user

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e3d518f611573ef34a431d2b85fda93f

DELETE /public/api/v1/completions/{uuid}

Path parameter Description
uuid Completion UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete completion attribute

Delete completion attribute by completion UUID and attribute UUID. The attribute values are deleted from all stages of the completion. Returns 400 if the attribute does not belong to the completion

Request

$ curl 'https://solo.cloud/public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes/e84d760d-be46-4be7-8e74-59edc058c153' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/completions/8d120d4d-9e98-4355-9271-fb3fb9fa09a1/attributes/e84d760d-be46-4be7-8e74-59edc058c153 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 868c8d7d75af634723f159ea31138516

DELETE /public/api/v1/completions/{completionUuid}/attributes/{attributeUuid}

Path parameter Description
completionUuid Completion UUID
attributeUuid Attribute UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Delete completion stage

Delete completion stage by stage UUID. Returns 403 if the stage is locked or is a private stage of another user

Request

$ curl 'https://solo.cloud/public/api/v1/stages/df6373a3-ca4d-4712-ade8-9162b9d2891c' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/stages/df6373a3-ca4d-4712-ade8-9162b9d2891c HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 1519c946b86b940f3cf774d0482e922d

DELETE /public/api/v1/stages/{stageUuid}

Path parameter Description
stageUuid Stage UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

30. Production data

Create or update production curves

Bulk create or update production curves (monthly production data) for wells in the project.

A request may contain multiple wells (laterals or typewells) and multiple curves per well; each well_uuid + metric pair must be unique within the request, otherwise the request is rejected with 400. If any well is not found in the project, the whole request is rejected with 404 NOT_FOUND. If a curve for the same well and metric already exists, it is updated: its name, granularity and value type are taken from the request and its points are fully replaced, otherwise a new curve is created. The response lists one result per requested curve in request order. A curve already stored with the same name, granularity, value type and points is not written again and is answered as UNCHANGED, so a request repeated after the earlier one finished writes nothing again. A request that timed out may still be applied: wait a few minutes before repeating it.

One request carries at most 500 wells (a server setting), a larger request is rejected with 400 naming the limit. Nothing is written when a request is rejected.

Point values are production volumes in cubic meters (m3) submitted as plain finite numbers; they are stored as submitted, no unit conversion is performed.

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/bulk' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "wells" : [ {
    "well_uuid" : "cf9d7f69-c8d6-4375-8778-94dcb3264867",
    "curves" : [ {
      "name" : "Gas production curve",
      "metric" : "GAS",
      "granularity" : "MONTHLY",
      "value_type" : "PERIOD",
      "points" : [ {
        "period_start" : "2024-01-01",
        "value" : 250000.0
      }, {
        "period_start" : "2024-02-01",
        "value" : 235500.5
      } ]
    } ]
  } ]
}'
POST /public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 411

{
  "wells" : [ {
    "well_uuid" : "cf9d7f69-c8d6-4375-8778-94dcb3264867",
    "curves" : [ {
      "name" : "Gas production curve",
      "metric" : "GAS",
      "granularity" : "MONTHLY",
      "value_type" : "PERIOD",
      "points" : [ {
        "period_start" : "2024-01-01",
        "value" : 250000.0
      }, {
        "period_start" : "2024-02-01",
        "value" : 235500.5
      } ]
    } ]
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 5ae1aae8d06bc0b1eb54e86780736615
Content-Type: application/json

[ {
  "well_uuid" : "cf9d7f69-c8d6-4375-8778-94dcb3264867",
  "curve_uuid" : "5da9e80f-8898-4533-92ac-0ab76722152b",
  "name" : "Gas production curve",
  "action" : "CREATED"
} ]

POST /public/api/v1/projects/{project_uuid}/production-curves/bulk

Path parameter Description
project_uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
wells Array Wells to create or update production curves for
wells[].well_uuid String Well UUID (lateral or typewell in the project); a well UUID not found in the project rejects the whole request with 404 NOT_FOUND
wells[].curves Array Production curves of the well; each well_uuid + metric pair must be unique within the request
wells[].curves[].name String Production curve name (up to 200 characters); replaces the name of an existing curve
wells[].curves[].metric String Production metric (OIL, GAS, WATER or CONDENSATE)
wells[].curves[].granularity String Points granularity (MONTHLY)
wells[].curves[].value_type String Points value type (PERIOD - each point holds the volume produced during its period, CUMULATIVE is reserved)
wells[].curves[].points Array Production curve points; on update the existing points are fully replaced
wells[].curves[].points[].period_start String Period start (ISO date, yyyy-MM-dd)
wells[].curves[].points[].value Number Production volume for the period in cubic meters (m3), a finite number

Response body

Path Type Description
[].well_uuid String Well UUID
[].curve_uuid String Production curve UUID
[].name String Production curve name
[].action String CREATED if a new curve was created, UPDATED if the existing curve for the same well and metric was updated, UNCHANGED if it already had the same name, granularity, value type and points and was not written

Get production curves by well

Get a list of production curves of the well with metadata (without points). Returns an empty array when the well has no production curves.

The caller must have read access to the project. A well that is not a lateral or typewell of the project is rejected with 404 NOT_FOUND.

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/wells/ec459331-68db-4fcd-a43a-8b5296caf6f0/production-curves' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/wells/ec459331-68db-4fcd-a43a-8b5296caf6f0/production-curves HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: dee666476d697803d4f4fcd82d178fd6
Content-Type: application/json

[ {
  "well_uuid" : "ec459331-68db-4fcd-a43a-8b5296caf6f0",
  "curve_uuid" : "40bb134e-a695-4274-8fa4-6abd5420871f",
  "name" : "Oil production curve",
  "metric" : "OIL",
  "granularity" : "MONTHLY",
  "value_type" : "PERIOD",
  "curve_data_version" : 1
} ]

GET /public/api/v1/projects/{project_uuid}/wells/{well_uuid}/production-curves

Path parameter Description
project_uuid Project UUID
well_uuid Well UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
[].well_uuid String Well UUID
[].curve_uuid String Production curve UUID
[].name String Production curve name
[].metric String Production metric (OIL, GAS, WATER or CONDENSATE)
[].granularity String Points granularity (MONTHLY)
[].value_type String Points value type (PERIOD - each point holds the volume produced during its period, CUMULATIVE is reserved)
[].curve_data_version Number Version of the curve points data, changes when the points are updated

Query production curves

Get production curves (monthly production data) with points for the requested wells in the project, sorted by well UUID, then by metric.

Each curve holds one production metric (OIL, GAS, WATER or CONDENSATE) with MONTHLY granularity; point values are volumes in cubic meters (m3), conversion to display units is the consumer's responsibility. Point value is a double value object.

The caller must have read access to the project. The endpoint is available when advanced data management is enabled for the company, otherwise the request is rejected with 403.

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/query' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "well_uuids" : [ "ec459331-68db-4fcd-a43a-8b5296caf6f0" ],
  "metrics" : [ "OIL" ]
}'
POST /public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/query HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 88

{
  "well_uuids" : [ "ec459331-68db-4fcd-a43a-8b5296caf6f0" ],
  "metrics" : [ "OIL" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9f70a6bc00568a27a66a07b9cfcb93ce
Content-Type: application/json

[ {
  "curve_uuid" : "40bb134e-a695-4274-8fa4-6abd5420871f",
  "well_uuid" : "ec459331-68db-4fcd-a43a-8b5296caf6f0",
  "name" : "Oil production curve",
  "metric" : "OIL",
  "granularity" : "MONTHLY",
  "value_type" : "PERIOD",
  "points" : [ {
    "value" : {
      "val" : 1500.0
    },
    "period_start" : "2024-01-01T00:00:00Z"
  }, {
    "value" : {
      "val" : 1420.5
    },
    "period_start" : "2024-02-01T00:00:00Z"
  } ]
} ]

POST /public/api/v1/projects/{project_uuid}/production-curves/query

Path parameter Description
project_uuid Project UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
well_uuids Array Well UUIDs to return production curves for, 1 to 1000 wells, wells outside the project are ignored
metrics Array Production metrics filter (OIL, GAS, WATER, CONDENSATE); empty or missing means all metrics

Response body

Path Type Description
[].curve_uuid String Production curve UUID
[].well_uuid String Well UUID
[].name String Production curve name
[].metric String Production metric (OIL, GAS, WATER or CONDENSATE)
[].granularity String Points granularity (MONTHLY)
[].value_type String Points value type (PERIOD - each point holds the volume produced during its period, CUMULATIVE is reserved)
[].points Array Production curve points
[].points[].period_start String Period start (ISO instant, UTC)
[].points[].value.val Number Production volume for the period in cubic meters (m3)

Delete production curve

Delete a production curve from the project by curve UUID. An unknown curve UUID is rejected with 404, a locked curve or a private curve of another user with 403

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/e968cfe4-9745-4de8-9ae3-fd58e3e96e27' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/projects/4ff39546-9f8d-4c21-b67d-94f05da411d7/production-curves/e968cfe4-9745-4de8-9ae3-fd58e3e96e27 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 95b2c3699a80f4a87ebdd2f88ca714d4

DELETE /public/api/v1/projects/{project_uuid}/production-curves/{curve_uuid}

Path parameter Description
project_uuid Project UUID
curve_uuid Production curve UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

31. Well construction

The construction of a well is kept per object type: hole sections, BHA runs and casings. A BHA run and a casing hold their components, which are read and written together with them: components have no endpoints of their own.

Solo validates the construction of a well as a whole: an object with missing or inconsistent values, or one that does not fit the other objects of the well, is stored but does not pass validation. Every create, update and delete validates all objects of the well again. The lists by well return a content array, empty when the well holds no objects of that type, with the objects that pass validation only and without their components, so a count taken from them can be lower than the number of objects stored for the well. A read by UUID returns the object whatever its validity, with its components, valid and the validation_errors that tell what to correct.

An object is addressed through the well it belongs to, under another well of the project it is 404. Create returns the UUID Solo assigns to the new object and its valid. Update changes only the fields that are sent: started_at or finished_at sent as null clears the date, a number sent as {"undefined": true} clears the number, an empty name removes the name, a null one keeps it. A type of a hole section or a casing that the project does not have yet is added to the types of the project. A value Solo cannot store the object without is rejected with 400, for example CASING_OUTER_DIAMETER_REQUIRED for a casing string without its outer diameter.

Every component needs its type and its own position, 1 or more: the components are read in the order of position. components of an update is the new set of components: a component with the uuid of a current component of the object keeps it and changes the other fields that are sent, a component without uuid is added, the current components missing from the list are deleted. A uuid that is not a current component of the object is rejected with 400. Without components the components stay as they are. Delete removes the object with its components.

Get hole sections by well

Get the hole sections of a well, ordered from the shallowest to the deepest. top_depth is computed on read: it is the hole depth of the preceding section, which may itself be omitted, and 0 for the first section.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/hole-sections' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/hole-sections HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4e5190f2ec76017ab33a080bf046780a
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "e9f4be05-ae03-4470-a51c-b2c1abe806ea",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "type" : "Surface",
    "hole_size" : {
      "val" : 0.4445
    },
    "hole_depth" : {
      "val" : 600.0
    },
    "top_depth" : {
      "val" : 0.0
    },
    "started_at" : "2026-03-01T00:00:00Z",
    "finished_at" : "2026-03-06T00:00:00Z"
  }, {
    "uuid" : "f736f127-f764-4162-9de2-a902a35ccb76",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "type" : "Production",
    "hole_size" : {
      "val" : 0.3112
    },
    "hole_depth" : {
      "val" : 5000.0
    },
    "top_depth" : {
      "val" : 600.0
    },
    "started_at" : "2026-03-06T00:00:00Z",
    "finished_at" : "2026-03-20T00:00:00Z"
  } ]
}

GET /public/api/v1/wells/{well_uuid}/hole-sections

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Hole sections of the well
content[].uuid String Hole section UUID
content[].well_id String UUID of the well the hole section belongs to
content[].name String Hole section name
content[].type String Hole section type, for example Surface or Production
content[].hole_size.val Number Hole diameter, m
content[].hole_depth.val Number Depth of the hole section bottom, m
content[].top_depth.val Number Depth of the hole section top, m. Computed as the previous section's hole depth
content[].started_at String Start of drilling, ISO-8601
content[].finished_at String End of drilling, ISO-8601

Get hole section

Get a hole section of a well by UUID, whatever its validity. top_depth is computed as in the list.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/4ba0a898-e663-4cfb-aa65-306c5570f89b/hole-sections/8871ee9e-fa0a-418a-82b4-81d61a1eb575' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/4ba0a898-e663-4cfb-aa65-306c5570f89b/hole-sections/8871ee9e-fa0a-418a-82b4-81d61a1eb575 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3f28c2da596cf610406f395aa619b11c
Content-Type: application/json

{
  "uuid" : "8871ee9e-fa0a-418a-82b4-81d61a1eb575",
  "well_id" : "4ba0a898-e663-4cfb-aa65-306c5570f89b",
  "name" : "Surface section",
  "type" : "Surface",
  "hole_size" : {
    "val" : 0.4445
  },
  "hole_depth" : {
    "val" : 600.0
  },
  "top_depth" : {
    "val" : 0.0
  },
  "started_at" : "2026-03-01T00:00:00Z",
  "finished_at" : "2026-03-06T00:00:00Z",
  "valid" : true,
  "validation_errors" : [ ]
}

GET /public/api/v1/wells/{well_uuid}/hole-sections/{hole_section_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
hole_section_uuid Hole section UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Object UUID
well_id String UUID of the well the object belongs to
name String Hole section name, an empty string for none
type String Hole section type, for example Surface or Production
hole_size.val Number Hole diameter, m
hole_depth.val Number Depth of the hole section bottom, m. A section without it passes validation only if its hole size is the smallest of the well
started_at String Start of drilling, ISO-8601, null on update clears it
finished_at String End of drilling, ISO-8601, null on update clears it
top_depth.val Number Depth of the hole section top, m. Computed as the previous section's hole depth
valid Boolean true if the object passes validation
validation_errors Array Why the object does not pass validation, empty when it does
validation_errors[].field String Field of the error as the request body names it, for example hole_size
validation_errors[].code String Error code, for example REQUIRED or DEPTH_IN_LESS_THAN_DEPTH_OUT
validation_errors[].related Array Objects the value conflicts with: uuid, object_type and their value

Create hole section

Create a hole section in a well. type and hole_size are needed, a section without hole_depth passes validation only if its hole_size is the smallest of the well.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/52c1a426-18c3-4144-b8c5-5ecc00059a7f/hole-sections' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Surface section",
  "type" : "Surface",
  "hole_size" : {
    "val" : 0.4445
  },
  "hole_depth" : {
    "val" : 600.0
  },
  "started_at" : "2026-03-01T00:00:00Z",
  "finished_at" : "2026-03-06T00:00:00Z"
}'
POST /public/api/v1/wells/52c1a426-18c3-4144-b8c5-5ecc00059a7f/hole-sections HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 221

{
  "name" : "Surface section",
  "type" : "Surface",
  "hole_size" : {
    "val" : 0.4445
  },
  "hole_depth" : {
    "val" : 600.0
  },
  "started_at" : "2026-03-01T00:00:00Z",
  "finished_at" : "2026-03-06T00:00:00Z"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e312453b7c3ac738bc25350ee811ab60
Content-Type: application/json

{
  "uuid" : "56d5c6af-8504-4258-8f17-58eeb8980c79",
  "valid" : true
}

POST /public/api/v1/wells/{well_uuid}/hole-sections

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Hole section name, an empty string for none
type String Hole section type, for example Surface or Production
hole_size.val Number Hole diameter, m
hole_depth.val Number Depth of the hole section bottom, m. A section without it passes validation only if its hole size is the smallest of the well
started_at String Start of drilling, ISO-8601, null on update clears it
finished_at String End of drilling, ISO-8601, null on update clears it

Response body

Path Type Description
uuid String UUID of the new object
valid Boolean true if the object passes validation, only then the list of the well returns it

Update hole section

Update a hole section of a well, the fields that are not sent keep their values.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/928509db-16ed-4b85-b670-909526fb4a0c/hole-sections/87c4980a-b543-4cb7-8915-c9d9b7d0bf33' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Surface hole",
  "hole_depth" : {
    "val" : 650.0
  },
  "finished_at" : "2026-03-07T00:00:00Z"
}'
PATCH /public/api/v1/wells/928509db-16ed-4b85-b670-909526fb4a0c/hole-sections/87c4980a-b543-4cb7-8915-c9d9b7d0bf33 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 113

{
  "name" : "Surface hole",
  "hole_depth" : {
    "val" : 650.0
  },
  "finished_at" : "2026-03-07T00:00:00Z"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 19ed9a8a09f6527447bcc2b5f1c81615

PATCH /public/api/v1/wells/{well_uuid}/hole-sections/{hole_section_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
hole_section_uuid Hole section UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Hole section name, an empty string for none
type String Hole section type, for example Surface or Production
hole_size.val Number Hole diameter, m
hole_depth.val Number Depth of the hole section bottom, m. A section without it passes validation only if its hole size is the smallest of the well
started_at String Start of drilling, ISO-8601, null on update clears it
finished_at String End of drilling, ISO-8601, null on update clears it

Response body

Empty body

Delete hole section

Delete a hole section of a well.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/2fa05d9c-0113-4d8b-a98e-67b765d008ed/hole-sections/241aa70d-118a-45b6-9528-c5f27ae3eb2a' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/wells/2fa05d9c-0113-4d8b-a98e-67b765d008ed/hole-sections/241aa70d-118a-45b6-9528-c5f27ae3eb2a HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 06d6d8374e08afa6822aec7a12ca2263

DELETE /public/api/v1/wells/{well_uuid}/hole-sections/{hole_section_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
hole_section_uuid Hole section UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Get BHA runs by well

Get the BHA runs of a well, ordered by run_number.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/bha-runs' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/bha-runs HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8282c263bef616c28c53dcfbca214321
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "ce4d5a30-13f0-4d26-a8e7-54e5ba8a05d0",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "run_number" : 1,
    "type" : "DRILLING",
    "bha_type" : "MUD_MOTOR",
    "hole_size" : {
      "val" : 0.4445
    },
    "depth_in" : {
      "val" : 0.0
    },
    "depth_out" : {
      "val" : 600.0
    },
    "max_outer_diameter" : {
      "val" : 0.4445
    },
    "started_at" : "2026-03-01T06:00:00Z",
    "finished_at" : "2026-03-04T00:00:00Z",
    "reason_pulled" : "TD",
    "description" : "Surface hole drilled to casing point",
    "sliding_rpm" : {
      "val" : 60.0
    }
  }, {
    "uuid" : "777e62a7-bd91-4c15-97e9-19db6cb9be01",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "run_number" : 2,
    "type" : "DRILLING",
    "bha_type" : "ROTOSTEER_PLUS_MUD_MOTOR",
    "hole_size" : {
      "val" : 0.3112
    },
    "depth_in" : {
      "val" : 600.0
    },
    "depth_out" : {
      "val" : 5000.0
    },
    "max_outer_diameter" : {
      "val" : 0.3112
    },
    "started_at" : "2026-03-08T00:00:00Z",
    "finished_at" : "2026-03-18T00:00:00Z",
    "reason_pulled" : "TD",
    "description" : "Production hole drilled to total depth",
    "sliding_rpm" : {
      "val" : 45.0
    }
  } ]
}

GET /public/api/v1/wells/{well_uuid}/bha-runs

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array BHA runs of the well
content[].uuid String BHA run UUID
content[].well_id String UUID of the well the BHA run belongs to
content[].name String BHA run name
content[].run_number Number Sequential number of the run within the well
content[].type String Run type: DRILLING, HOLE_CONDITIONING, LOGGING or OTHER
content[].bha_type String Assembly type: MUD_MOTOR, RSS, MUD_MOTOR_PLUS_RSS, ROTARY or ROTOSTEER_PLUS_MUD_MOTOR
content[].hole_size.val Number Hole diameter the run was made in, m
content[].depth_in.val Number Depth the run started at, m
content[].depth_out.val Number Depth the run ended at, m
content[].max_outer_diameter.val Number Largest of the max outer diameters of the run's components, m
content[].started_at String Start of the run, ISO-8601
content[].finished_at String End of the run, ISO-8601
content[].reason_pulled String Why the assembly was pulled: TD, BHA_FAILURE, LOW_ROP or OTHER
content[].description String Free-form comment
content[].sliding_rpm.val Number Rotation speed while sliding, rpm

Get BHA run

Get a BHA run of a well by UUID with its components, whatever its validity.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/53392b49-a04f-4c5b-b7bc-128eaa0e59b6/bha-runs/35663b36-0b9f-41f6-ab0f-6ca1366aa271' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/53392b49-a04f-4c5b-b7bc-128eaa0e59b6/bha-runs/35663b36-0b9f-41f6-ab0f-6ca1366aa271 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f30b600f51855beed9b40ebc63b2c51d
Content-Type: application/json

{
  "uuid" : "35663b36-0b9f-41f6-ab0f-6ca1366aa271",
  "well_id" : "53392b49-a04f-4c5b-b7bc-128eaa0e59b6",
  "name" : "Production run 1",
  "run_number" : 1,
  "type" : "DRILLING",
  "bha_type" : "MUD_MOTOR",
  "hole_size" : {
    "val" : 0.3112
  },
  "depth_in" : {
    "val" : 600.0
  },
  "depth_out" : {
    "val" : 2500.0
  },
  "max_outer_diameter" : {
    "val" : 0.3112
  },
  "started_at" : "2026-03-08T00:00:00Z",
  "finished_at" : "2026-03-12T00:00:00Z",
  "reason_pulled" : "TD",
  "description" : "Drilled to the casing point",
  "sliding_rpm" : {
    "val" : 60.0
  },
  "valid" : true,
  "validation_errors" : [ ],
  "components" : [ {
    "uuid" : "33e9e70c-77d6-4fd0-aae5-c5e39337ee0e",
    "position" : 1,
    "type" : "BIT",
    "material" : "Steel",
    "description" : "BIT of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.3112
    },
    "inner_diameter" : {
      "val" : 0.2612
    },
    "max_outer_diameter" : {
      "val" : 0.3112
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    },
    "valid" : true,
    "validation_errors" : [ ]
  }, {
    "uuid" : "94ece46f-cabb-480c-8216-e4dff36b0358",
    "position" : 2,
    "type" : "MUD_MOTOR",
    "material" : "Steel",
    "description" : "MUD_MOTOR of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2032
    },
    "inner_diameter" : {
      "val" : 0.1532
    },
    "max_outer_diameter" : {
      "val" : 0.2032
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    },
    "valid" : true,
    "validation_errors" : [ ]
  } ]
}

GET /public/api/v1/wells/{well_uuid}/bha-runs/{bha_run_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
bha_run_uuid BHA run UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Object UUID
well_id String UUID of the well the object belongs to
name String BHA run name, an empty string for none
type String Run type: DRILLING, HOLE_CONDITIONING, LOGGING or OTHER
hole_size.val Number Hole diameter the run is made in, m
bha_type String Assembly type: MUD_MOTOR, RSS, MUD_MOTOR_PLUS_RSS, ROTARY or ROTOSTEER_PLUS_MUD_MOTOR. A run without it does not pass validation
depth_in.val Number Depth the run starts at, m. A run without it does not pass validation
depth_out.val Number Depth the run ends at, m
sliding_rpm.val Number Rotation speed while sliding, rpm
started_at String Start of the run, ISO-8601, null on update clears it
finished_at String End of the run, ISO-8601, null on update clears it
reason_pulled String Why the assembly was pulled: TD, BHA_FAILURE, LOW_ROP or OTHER
description String Free-form comment, up to 200 characters
run_number Number Sequential number of the run within the well
max_outer_diameter.val Number Largest of the max outer diameters of the run's components, m
valid Boolean true if the object passes validation
validation_errors Array Why the object does not pass validation, empty when it does
validation_errors[].field String Field of the error as the request body names it, for example hole_size
validation_errors[].code String Error code, for example REQUIRED or DEPTH_IN_LESS_THAN_DEPTH_OUT
validation_errors[].related Array Objects the value conflicts with: uuid, object_type and their value
components Array Components of the object, in the order of position
components[].uuid String Component UUID
components[].valid Boolean true if the component passes validation
components[].validation_errors Array Why the component does not pass validation, empty when it does
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Create BHA run

Create a BHA run in a well, with its components. type and hole_size are needed. Solo gives the run the next run_number of the well and computes max_outer_diameter from the components.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/85d24361-2ea3-410f-8098-51bed4f20a2e/bha-runs' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Production run 1",
  "type" : "DRILLING",
  "bha_type" : "MUD_MOTOR",
  "hole_size" : {
    "val" : 0.3112
  },
  "depth_in" : {
    "val" : 600.0
  },
  "depth_out" : {
    "val" : 2500.0
  },
  "sliding_rpm" : {
    "val" : 60.0
  },
  "started_at" : "2026-03-08T00:00:00Z",
  "finished_at" : "2026-03-12T00:00:00Z",
  "reason_pulled" : "TD",
  "description" : "Drilled to the casing point",
  "components" : [ {
    "type" : "BIT",
    "position" : 1,
    "material" : "Steel",
    "description" : "BIT of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.3112
    },
    "inner_diameter" : {
      "val" : 0.2612
    },
    "max_outer_diameter" : {
      "val" : 0.3112
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  }, {
    "type" : "MUD_MOTOR",
    "position" : 2,
    "material" : "Steel",
    "description" : "MUD_MOTOR of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2032
    },
    "inner_diameter" : {
      "val" : 0.1532
    },
    "max_outer_diameter" : {
      "val" : 0.2032
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}'
POST /public/api/v1/wells/85d24361-2ea3-410f-8098-51bed4f20a2e/bha-runs HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1883

{
  "name" : "Production run 1",
  "type" : "DRILLING",
  "bha_type" : "MUD_MOTOR",
  "hole_size" : {
    "val" : 0.3112
  },
  "depth_in" : {
    "val" : 600.0
  },
  "depth_out" : {
    "val" : 2500.0
  },
  "sliding_rpm" : {
    "val" : 60.0
  },
  "started_at" : "2026-03-08T00:00:00Z",
  "finished_at" : "2026-03-12T00:00:00Z",
  "reason_pulled" : "TD",
  "description" : "Drilled to the casing point",
  "components" : [ {
    "type" : "BIT",
    "position" : 1,
    "material" : "Steel",
    "description" : "BIT of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.3112
    },
    "inner_diameter" : {
      "val" : 0.2612
    },
    "max_outer_diameter" : {
      "val" : 0.3112
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  }, {
    "type" : "MUD_MOTOR",
    "position" : 2,
    "material" : "Steel",
    "description" : "MUD_MOTOR of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2032
    },
    "inner_diameter" : {
      "val" : 0.1532
    },
    "max_outer_diameter" : {
      "val" : 0.2032
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0612f1de4edb2799839ec2a92ae72c3c
Content-Type: application/json

{
  "uuid" : "7c34ec0e-cb40-4050-8c92-90432fb990b1",
  "valid" : true
}

POST /public/api/v1/wells/{well_uuid}/bha-runs

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String BHA run name, an empty string for none
type String Run type: DRILLING, HOLE_CONDITIONING, LOGGING or OTHER
hole_size.val Number Hole diameter the run is made in, m
bha_type String Assembly type: MUD_MOTOR, RSS, MUD_MOTOR_PLUS_RSS, ROTARY or ROTOSTEER_PLUS_MUD_MOTOR. A run without it does not pass validation
depth_in.val Number Depth the run starts at, m. A run without it does not pass validation
depth_out.val Number Depth the run ends at, m
sliding_rpm.val Number Rotation speed while sliding, rpm
started_at String Start of the run, ISO-8601, null on update clears it
finished_at String End of the run, ISO-8601, null on update clears it
reason_pulled String Why the assembly was pulled: TD, BHA_FAILURE, LOW_ROP or OTHER
description String Free-form comment, up to 200 characters
components Array Components of the object, in the order of position
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Response body

Path Type Description
uuid String UUID of the new object
valid Boolean true if the object passes validation, only then the list of the well returns it

Update BHA run

Update a BHA run of a well, the fields that are not sent keep their values. run_number does not change.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/43c274c5-062f-4362-85cd-cba0017c9e9a/bha-runs/f6cb87dc-99c1-4486-aeda-387ce7342fd6' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "depth_out" : {
    "val" : 2600.0
  },
  "reason_pulled" : "BHA_FAILURE",
  "components" : [ {
    "uuid" : "4c47c07d-436a-471f-84c8-b9cef17352e1",
    "type" : "BIT",
    "position" : 1,
    "outer_diameter" : {
      "val" : 0.3112
    }
  }, {
    "type" : "ROTARY_STEERABLE",
    "position" : 2,
    "material" : "Steel",
    "description" : "ROTARY_STEERABLE of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2032
    },
    "inner_diameter" : {
      "val" : 0.1532
    },
    "max_outer_diameter" : {
      "val" : 0.2032
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}'
PATCH /public/api/v1/wells/43c274c5-062f-4362-85cd-cba0017c9e9a/bha-runs/f6cb87dc-99c1-4486-aeda-387ce7342fd6 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 999

{
  "depth_out" : {
    "val" : 2600.0
  },
  "reason_pulled" : "BHA_FAILURE",
  "components" : [ {
    "uuid" : "4c47c07d-436a-471f-84c8-b9cef17352e1",
    "type" : "BIT",
    "position" : 1,
    "outer_diameter" : {
      "val" : 0.3112
    }
  }, {
    "type" : "ROTARY_STEERABLE",
    "position" : 2,
    "material" : "Steel",
    "description" : "ROTARY_STEERABLE of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2032
    },
    "inner_diameter" : {
      "val" : 0.1532
    },
    "max_outer_diameter" : {
      "val" : 0.2032
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: e253bc542212a66354249fa47e7de8e6

PATCH /public/api/v1/wells/{well_uuid}/bha-runs/{bha_run_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
bha_run_uuid BHA run UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String BHA run name, an empty string for none
type String Run type: DRILLING, HOLE_CONDITIONING, LOGGING or OTHER
hole_size.val Number Hole diameter the run is made in, m
bha_type String Assembly type: MUD_MOTOR, RSS, MUD_MOTOR_PLUS_RSS, ROTARY or ROTOSTEER_PLUS_MUD_MOTOR. A run without it does not pass validation
depth_in.val Number Depth the run starts at, m. A run without it does not pass validation
depth_out.val Number Depth the run ends at, m
sliding_rpm.val Number Rotation speed while sliding, rpm
started_at String Start of the run, ISO-8601, null on update clears it
finished_at String End of the run, ISO-8601, null on update clears it
reason_pulled String Why the assembly was pulled: TD, BHA_FAILURE, LOW_ROP or OTHER
description String Free-form comment, up to 200 characters
components Array The new set of components: a current component missing from it is deleted, without this field the components stay as they are
components[].uuid String UUID of a current component of the object to keep it, omit it for a new component
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Response body

Empty body

Delete BHA run

Delete a BHA run of a well with its components. The numbers of the other runs do not change.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/d5753e19-75af-406a-8da6-06fba3fa3b9b/bha-runs/cf34ba4e-183f-409a-a23e-93a78f647cf6' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/wells/d5753e19-75af-406a-8da6-06fba3fa3b9b/bha-runs/cf34ba4e-183f-409a-a23e-93a78f647cf6 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bda2846a8993ad5ac7cf42ce10222897

DELETE /public/api/v1/wells/{well_uuid}/bha-runs/{bha_run_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
bha_run_uuid BHA run UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Get BHA run torque and drag models

Get the torque and drag models of a BHA run, the calculated model first.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/bha-runs/f29a84bc-8c70-46e9-8dbe-a2cd83506e55/torque-drag-models' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/bha-runs/f29a84bc-8c70-46e9-8dbe-a2cd83506e55/torque-drag-models HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9c7fe69937f813a36d7496f724c984c7
Content-Type: application/json

{
  "content" : [ {
    "model_id" : "9bbeccca-8ee2-419b-897b-ae742578e6e4",
    "name" : "auto",
    "data_type" : "CALCULATED_BROOMSTICK",
    "created_at" : "2026-11-09T11:55:37.835881Z",
    "updated_at" : "2026-11-09T11:55:37.835881Z"
  }, {
    "model_id" : "bb5cdc48-99fa-4c4b-9fa4-ca22267537ad",
    "name" : "report.csv",
    "data_type" : "USER_BROOMSTICK",
    "created_at" : "2026-11-09T11:55:38.255140Z",
    "updated_at" : "2026-11-09T11:55:38.255140Z"
  } ]
}

GET /public/api/v1/wells/{well_uuid}/bha-runs/{bha_run_uuid}/torque-drag-models

Path parameter Description
well_uuid Well (lateral) UUID
bha_run_uuid BHA run UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Torque and drag models: at most one calculated model, listed first, then imported ones from the newest
content[].model_id String Model UUID
content[].name String Display name, not unique: auto for the calculated model, the file name for an imported one
content[].data_type String Model kind, use it to tell models apart: CALCULATED_BROOMSTICK for the calculated model, USER_BROOMSTICK for an imported one
content[].created_at String Creation time, ISO-8601
content[].updated_at String Last update time, ISO-8601

Get BHA run torque and drag model

Get a torque and drag model of a BHA run with its curves.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/bha-runs/f29a84bc-8c70-46e9-8dbe-a2cd83506e55/torque-drag-models/9bbeccca-8ee2-419b-897b-ae742578e6e4' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/bha-runs/f29a84bc-8c70-46e9-8dbe-a2cd83506e55/torque-drag-models/9bbeccca-8ee2-419b-897b-ae742578e6e4 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7720bc7b862d88f721856df8c5cbc111
Content-Type: application/json

{
  "model_id" : "9bbeccca-8ee2-419b-897b-ae742578e6e4",
  "data_type" : "CALCULATED_BROOMSTICK",
  "updated_at" : "2026-11-09T11:55:37.835881Z",
  "start" : 0.0,
  "end" : 27.229999896,
  "block_weight" : null,
  "hoist_limit" : null,
  "torque_limit" : null,
  "curves" : [ {
    "mode" : "PU",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38247.66,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29906.27,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38213.98,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29890.75,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38264.51,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29914.03,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38197.15,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29882.99,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38281.36,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29921.79,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38180.33,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29875.24,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38298.22,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29929.55,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38163.52,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29867.48,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38315.09,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29937.32,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38146.71,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29859.72,
      "torque" : null
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : null,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38230.82,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29898.51,
      "torque" : null
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 1.58
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 0.75
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 3.16
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 1.5
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 4.74
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 2.24
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 6.32
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 2.99
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 7.89
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 3.74
    } ]
  } ]
}

GET /public/api/v1/wells/{well_uuid}/bha-runs/{bha_run_uuid}/torque-drag-models/{model_id}

Path parameter Description
well_uuid Well (lateral) UUID
bha_run_uuid BHA run UUID
model_id Model UUID from the model list
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
model_id String Model UUID
data_type String Model kind, use it to tell models apart: CALCULATED_BROOMSTICK for the calculated model, USER_BROOMSTICK for an imported one
updated_at String Last update time, ISO-8601
start Number Top of the measured-depth range the model covers, m
end Number Deepest bit position the model was computed for, m. Can be shallower than the hole depth
block_weight Number Block weight, N
hoist_limit Number Hoisting limit, N
torque_limit Number Torque limit, N*m
curves Array Model curves, empty when nothing has been computed
curves[].mode String PU (pick up), SO (slack off) or ROB (rotating off bottom)
curves[].friction_factor Number Friction factor, null for the ROB hookload curve
curves[].points Array Curve points, ordered by index
curves[].points[].index Number Distance from the deepest bit position to the bit, m
curves[].points[].hookload Number Hookload, N. Null where the curve carries torque
curves[].points[].torque Number Torque, N*m. Null where the curve carries hookload

Get casings by well

Get the casings of a well, ordered by casing_top, then by shoe_depth.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/casings' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/50786e94-898e-4b26-ab1a-962f678fa80b/casings HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9b7630ffaf7c9b828252c0aa950969e7
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "7963667f-8cd6-4325-9e26-9b83435bfb3a",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "type" : "Conductor",
    "outer_diameter" : {
      "val" : 0.3397
    },
    "hole_size" : {
      "val" : 0.4445
    },
    "inner_diameter" : {
      "val" : 0.3151
    },
    "casing_top" : {
      "val" : 0.0
    },
    "shoe_depth" : {
      "val" : 600.0
    },
    "string_type" : "Casing",
    "drift_diameter" : {
      "val" : 0.3151
    },
    "started_at" : "2026-03-04T00:00:00Z",
    "finished_at" : "2026-03-05T12:00:00Z",
    "centralizers" : [ {
      "type" : "RIGID",
      "top_to_shoe" : 120.0,
      "devices_per_joints" : "1/1"
    } ],
    "floatation_type" : "BOTTOM_UP",
    "fluid_density" : {
      "val" : 1200.0
    },
    "air_density" : {
      "val" : 1.2
    },
    "floatation_sub_from_bottom" : {
      "val" : 250.0
    }
  }, {
    "uuid" : "05c78c88-8120-4c5b-8ab1-4af4d6233e01",
    "well_id" : "50786e94-898e-4b26-ab1a-962f678fa80b",
    "name" : "",
    "type" : "Production",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "hole_size" : {
      "val" : 0.3112
    },
    "inner_diameter" : {
      "val" : 0.2205
    },
    "casing_top" : {
      "val" : 0.0
    },
    "shoe_depth" : {
      "val" : 5000.0
    },
    "string_type" : "Casing",
    "drift_diameter" : {
      "val" : 0.2205
    },
    "started_at" : "2026-03-18T00:00:00Z",
    "finished_at" : "2026-03-19T12:00:00Z",
    "centralizers" : [ {
      "type" : "RIGID",
      "top_to_shoe" : 120.0,
      "devices_per_joints" : "1/1"
    } ],
    "floatation_type" : "BOTTOM_UP",
    "fluid_density" : {
      "val" : 1200.0
    },
    "air_density" : {
      "val" : 1.2
    },
    "floatation_sub_from_bottom" : {
      "val" : 250.0
    }
  } ]
}

GET /public/api/v1/wells/{well_uuid}/casings

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Casings of the well
content[].uuid String Casing UUID
content[].well_id String UUID of the well the casing belongs to
content[].name String Casing name
content[].type String Casing type, for example Conductor or Production
content[].string_type String String type: Casing, Liner or Open Hole
content[].outer_diameter.val Number Outer diameter, m
content[].inner_diameter.val Number Inner diameter, m
content[].drift_diameter.val Number Smallest inner diameter among the casing's components, m
content[].hole_size.val Number Diameter of the hole the casing was run in, m
content[].casing_top.val Number Depth of the casing top, m
content[].shoe_depth.val Number Depth of the casing shoe, m
content[].started_at String Start of running the casing, ISO-8601
content[].finished_at String End of running the casing, ISO-8601
content[].centralizers Array Centralizer intervals
content[].floatation_type String Floatation type
content[].fluid_density.val Number Floatation fluid density, kg/m3
content[].air_density.val Number Floatation air density, kg/m3
content[].floatation_sub_from_bottom.val Number Distance from the shoe to the floatation sub, m

Get casing

Get a casing of a well by UUID with its components, whatever its validity. drift_diameter is computed from the components.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/b3876a6e-ce80-4207-95ad-f95c79610cce/casings/74ca2b47-412a-4750-a1f5-83d29d1b31dd' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/b3876a6e-ce80-4207-95ad-f95c79610cce/casings/74ca2b47-412a-4750-a1f5-83d29d1b31dd HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d969f7a6e914cd778a26d2ed9f5286a1
Content-Type: application/json

{
  "uuid" : "74ca2b47-412a-4750-a1f5-83d29d1b31dd",
  "well_id" : "b3876a6e-ce80-4207-95ad-f95c79610cce",
  "name" : "Intermediate casing",
  "type" : "Intermediate",
  "outer_diameter" : {
    "val" : 0.2445
  },
  "hole_size" : {
    "val" : 0.3112
  },
  "inner_diameter" : {
    "val" : 0.2205
  },
  "casing_top" : {
    "val" : 0.0
  },
  "shoe_depth" : {
    "val" : 2400.0
  },
  "string_type" : "Casing",
  "drift_diameter" : {
    "val" : 0.1945
  },
  "started_at" : "2026-03-12T00:00:00Z",
  "finished_at" : "2026-03-13T12:00:00Z",
  "centralizers" : [ {
    "type" : "RIGID",
    "top_to_shoe" : 120.0,
    "bottom_to_shoe" : 0.0,
    "devices_per_joints" : "1/2"
  } ],
  "floatation_type" : "BOTTOM_UP",
  "fluid_density" : {
    "val" : 1200.0
  },
  "air_density" : {
    "val" : 1.2
  },
  "floatation_sub_from_bottom" : {
    "val" : 250.0
  },
  "valid" : true,
  "validation_errors" : [ ],
  "components" : [ {
    "uuid" : "529210d7-25a8-4c4f-96c1-c1bb269d0ee1",
    "position" : 1,
    "type" : "CASING",
    "material" : "Steel",
    "description" : "CASING of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    },
    "valid" : true,
    "validation_errors" : [ ]
  }, {
    "uuid" : "e126388a-af05-463a-89be-cd0043a30629",
    "position" : 2,
    "type" : "CASING_SHOE",
    "material" : "Steel",
    "description" : "CASING_SHOE of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    },
    "valid" : true,
    "validation_errors" : [ ]
  } ]
}

GET /public/api/v1/wells/{well_uuid}/casings/{casing_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
casing_uuid Casing UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Object UUID
well_id String UUID of the well the object belongs to
name String Casing name, an empty string for none
type String Casing type, for example Conductor or Production
string_type String String type: Casing, Liner or Open Hole. A Casing or Liner needs outer_diameter, an Open Hole needs hole_size
outer_diameter.val Number Outer diameter, m
inner_diameter.val Number Inner diameter, m. Needed to pass validation, except for an Open Hole
hole_size.val Number Diameter of the hole the casing is run in, m
casing_top.val Number Depth of the casing top, m. Needed to pass validation, except for an Open Hole
shoe_depth.val Number Depth of the casing shoe, m. A casing without it does not pass validation
started_at String Start of running the casing, ISO-8601, null on update clears it
finished_at String End of running the casing, ISO-8601, null on update clears it
centralizers Array Centralizer intervals, up to 10, stored and returned as sent
floatation_type String Floatation type, up to 50 characters
fluid_density.val Number Floatation fluid density, kg/m3
air_density.val Number Floatation air density, kg/m3
floatation_sub_from_bottom.val Number Distance from the shoe to the floatation sub, m
drift_diameter.val Number Smallest inner diameter among the casing's components, m
valid Boolean true if the object passes validation
validation_errors Array Why the object does not pass validation, empty when it does
validation_errors[].field String Field of the error as the request body names it, for example hole_size
validation_errors[].code String Error code, for example REQUIRED or DEPTH_IN_LESS_THAN_DEPTH_OUT
validation_errors[].related Array Objects the value conflicts with: uuid, object_type and their value
components Array Components of the object, in the order of position
components[].uuid String Component UUID
components[].valid Boolean true if the component passes validation
components[].validation_errors Array Why the component does not pass validation, empty when it does
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Create casing

Create a casing in a well, with its components. type is needed, and outer_diameter for a Casing or a Liner string or hole_size for an Open Hole one. string_type may be omitted, then outer_diameter is needed.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/a97b5584-e48d-4294-8ca4-d7770248eb81/casings' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Intermediate casing",
  "type" : "Intermediate",
  "string_type" : "Casing",
  "outer_diameter" : {
    "val" : 0.2445
  },
  "inner_diameter" : {
    "val" : 0.2205
  },
  "hole_size" : {
    "val" : 0.3112
  },
  "casing_top" : {
    "val" : 0.0
  },
  "shoe_depth" : {
    "val" : 2400.0
  },
  "started_at" : "2026-03-12T00:00:00Z",
  "finished_at" : "2026-03-13T12:00:00Z",
  "centralizers" : [ {
    "type" : "RIGID",
    "top_to_shoe" : 120.0,
    "bottom_to_shoe" : 0.0,
    "devices_per_joints" : "1/2"
  } ],
  "floatation_type" : "BOTTOM_UP",
  "fluid_density" : {
    "val" : 1200.0
  },
  "air_density" : {
    "val" : 1.2
  },
  "floatation_sub_from_bottom" : {
    "val" : 250.0
  },
  "components" : [ {
    "type" : "CASING",
    "position" : 1,
    "material" : "Steel",
    "description" : "CASING of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  }, {
    "type" : "CASING_SHOE",
    "position" : 2,
    "material" : "Steel",
    "description" : "CASING_SHOE of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}'
POST /public/api/v1/wells/a97b5584-e48d-4294-8ca4-d7770248eb81/casings HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 2198

{
  "name" : "Intermediate casing",
  "type" : "Intermediate",
  "string_type" : "Casing",
  "outer_diameter" : {
    "val" : 0.2445
  },
  "inner_diameter" : {
    "val" : 0.2205
  },
  "hole_size" : {
    "val" : 0.3112
  },
  "casing_top" : {
    "val" : 0.0
  },
  "shoe_depth" : {
    "val" : 2400.0
  },
  "started_at" : "2026-03-12T00:00:00Z",
  "finished_at" : "2026-03-13T12:00:00Z",
  "centralizers" : [ {
    "type" : "RIGID",
    "top_to_shoe" : 120.0,
    "bottom_to_shoe" : 0.0,
    "devices_per_joints" : "1/2"
  } ],
  "floatation_type" : "BOTTOM_UP",
  "fluid_density" : {
    "val" : 1200.0
  },
  "air_density" : {
    "val" : 1.2
  },
  "floatation_sub_from_bottom" : {
    "val" : 250.0
  },
  "components" : [ {
    "type" : "CASING",
    "position" : 1,
    "material" : "Steel",
    "description" : "CASING of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  }, {
    "type" : "CASING_SHOE",
    "position" : 2,
    "material" : "Steel",
    "description" : "CASING_SHOE of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 0c0b2fcda50d38724493ef7e0cfce68e
Content-Type: application/json

{
  "uuid" : "13eaa5ee-a1ee-4f95-aa27-2ff35b1af456",
  "valid" : true
}

POST /public/api/v1/wells/{well_uuid}/casings

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Casing name, an empty string for none
type String Casing type, for example Conductor or Production
string_type String String type: Casing, Liner or Open Hole. A Casing or Liner needs outer_diameter, an Open Hole needs hole_size
outer_diameter.val Number Outer diameter, m
inner_diameter.val Number Inner diameter, m. Needed to pass validation, except for an Open Hole
hole_size.val Number Diameter of the hole the casing is run in, m
casing_top.val Number Depth of the casing top, m. Needed to pass validation, except for an Open Hole
shoe_depth.val Number Depth of the casing shoe, m. A casing without it does not pass validation
started_at String Start of running the casing, ISO-8601, null on update clears it
finished_at String End of running the casing, ISO-8601, null on update clears it
centralizers Array Centralizer intervals, up to 10, stored and returned as sent
floatation_type String Floatation type, up to 50 characters
fluid_density.val Number Floatation fluid density, kg/m3
air_density.val Number Floatation air density, kg/m3
floatation_sub_from_bottom.val Number Distance from the shoe to the floatation sub, m
centralizers[].type String Centralizer type, RIGID or BOWSPRING
centralizers[].top_to_shoe Number Distance from the shoe to the top of the interval, m
centralizers[].bottom_to_shoe Number Distance from the shoe to the bottom of the interval, m
centralizers[].devices_per_joints String Centralizers per joints, for example 1/2
components Array Components of the object, in the order of position
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Response body

Path Type Description
uuid String UUID of the new object
valid Boolean true if the object passes validation, only then the list of the well returns it

Update casing

Update a casing of a well, the fields that are not sent keep their values. centralizers replaces all intervals.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/4a07aa83-7a43-47f7-9548-5eea98507b49/casings/25c0efdc-f4de-4b07-8d51-09991c9a23e1' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "Production casing",
  "shoe_depth" : {
    "val" : 2450.0
  },
  "components" : [ {
    "uuid" : "5b6ec12d-c698-4f47-8ab8-b041fc74bf1c",
    "type" : "CASING",
    "position" : 1,
    "outer_diameter" : {
      "val" : 0.2445
    }
  }, {
    "type" : "FLOAT_COLLAR",
    "position" : 2,
    "material" : "Steel",
    "description" : "FLOAT_COLLAR of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}'
PATCH /public/api/v1/wells/4a07aa83-7a43-47f7-9548-5eea98507b49/casings/25c0efdc-f4de-4b07-8d51-09991c9a23e1 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 992

{
  "name" : "Production casing",
  "shoe_depth" : {
    "val" : 2450.0
  },
  "components" : [ {
    "uuid" : "5b6ec12d-c698-4f47-8ab8-b041fc74bf1c",
    "type" : "CASING",
    "position" : 1,
    "outer_diameter" : {
      "val" : 0.2445
    }
  }, {
    "type" : "FLOAT_COLLAR",
    "position" : 2,
    "material" : "Steel",
    "description" : "FLOAT_COLLAR of the example",
    "manufacturer" : "Example Tools",
    "outer_diameter" : {
      "val" : 0.2445
    },
    "inner_diameter" : {
      "val" : 0.1945
    },
    "max_outer_diameter" : {
      "val" : 0.2445
    },
    "length" : {
      "val" : 9.5
    },
    "weight" : {
      "val" : 650.0
    },
    "linear_weight" : {
      "val" : 68.4
    },
    "density" : {
      "val" : 7850.0
    },
    "non_magnetic" : false,
    "young_modulus" : {
      "val" : 2.07E11
    },
    "poisson_ratio" : {
      "val" : 0.3
    },
    "top_mut" : {
      "val" : 25000.0
    },
    "bot_mut" : {
      "val" : 25000.0
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8627fee59b5c68acc2d51e37eb30dfdd

PATCH /public/api/v1/wells/{well_uuid}/casings/{casing_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
casing_uuid Casing UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Casing name, an empty string for none
type String Casing type, for example Conductor or Production
string_type String String type: Casing, Liner or Open Hole. A Casing or Liner needs outer_diameter, an Open Hole needs hole_size
outer_diameter.val Number Outer diameter, m
inner_diameter.val Number Inner diameter, m. Needed to pass validation, except for an Open Hole
hole_size.val Number Diameter of the hole the casing is run in, m
casing_top.val Number Depth of the casing top, m. Needed to pass validation, except for an Open Hole
shoe_depth.val Number Depth of the casing shoe, m. A casing without it does not pass validation
started_at String Start of running the casing, ISO-8601, null on update clears it
finished_at String End of running the casing, ISO-8601, null on update clears it
centralizers Array Centralizer intervals, up to 10, stored and returned as sent
floatation_type String Floatation type, up to 50 characters
fluid_density.val Number Floatation fluid density, kg/m3
air_density.val Number Floatation air density, kg/m3
floatation_sub_from_bottom.val Number Distance from the shoe to the floatation sub, m
centralizers[].type String Centralizer type, RIGID or BOWSPRING
centralizers[].top_to_shoe Number Distance from the shoe to the top of the interval, m
centralizers[].bottom_to_shoe Number Distance from the shoe to the bottom of the interval, m
centralizers[].devices_per_joints String Centralizers per joints, for example 1/2
components Array The new set of components: a current component missing from it is deleted, without this field the components stay as they are
components[].uuid String UUID of a current component of the object to keep it, omit it for a new component
components[].type String Component type: ACCELERATOR, AGITATOR, BENT_SUB, BIT, CASING, CASING_SHOE, CROSSOVER, DRILL_COLLAR, DRILL_PIPE, FLEX_COLLAR, FLOAT_COLLAR, HOLE_OPENER, HWDP, JAR, LWD, MISC_SUB, MUD_MOTOR, MWD, REAMER, ROTARY_STEERABLE, STABILIZER or TURBINE
components[].position Number Order in the object, from 1, unique
components[].material String Material
components[].description String Free-form comment
components[].manufacturer String Manufacturer
components[].outer_diameter.val Number Outer diameter, m
components[].inner_diameter.val Number Inner diameter, m
components[].max_outer_diameter.val Number Largest outer diameter, m
components[].length.val Number Length, m
components[].weight.val Number Weight, SI units
components[].linear_weight.val Number Weight per length, SI units
components[].density.val Number Material density, kg/m3
components[].non_magnetic Boolean true for a non-magnetic component
components[].young_modulus.val Number Young's modulus of the material, SI units
components[].poisson_ratio.val Number Poisson's ratio of the material
components[].top_mut.val Number Make-up torque of the top connection, SI units
components[].bot_mut.val Number Make-up torque of the bottom connection, SI units

Response body

Empty body

Delete casing

Delete a casing of a well with its components.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/43af09b3-f634-4f2f-8a2c-126a2b5dafe5/casings/d130bdfb-7f27-48cb-9e7b-ddd0102ff5b0' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/wells/43af09b3-f634-4f2f-8a2c-126a2b5dafe5/casings/d130bdfb-7f27-48cb-9e7b-ddd0102ff5b0 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 60e7d1d47294c82675c264a6db1697e5

DELETE /public/api/v1/wells/{well_uuid}/casings/{casing_uuid}

Path parameter Description
well_uuid Well (lateral) UUID
casing_uuid Casing UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Get casing torque and drag models

Get the torque and drag models of a casing, the calculated model first.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/casings/bcc0a827-392c-4d80-9c6a-891c4cc3a05d/torque-drag-models' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/casings/bcc0a827-392c-4d80-9c6a-891c4cc3a05d/torque-drag-models HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: aa375338125aa75d2574282c9cb951c2
Content-Type: application/json

{
  "content" : [ {
    "model_id" : "3794282c-fa5d-4aad-b424-0c1bb7da9e03",
    "name" : "auto",
    "data_type" : "CALCULATED_BROOMSTICK",
    "created_at" : "2026-11-09T11:55:38.313749Z",
    "updated_at" : "2026-11-09T11:55:38.313749Z"
  } ]
}

GET /public/api/v1/wells/{well_uuid}/casings/{casing_uuid}/torque-drag-models

Path parameter Description
well_uuid Well (lateral) UUID
casing_uuid Casing UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Torque and drag models: at most one calculated model, listed first, then imported ones from the newest
content[].model_id String Model UUID
content[].name String Display name, not unique: auto for the calculated model, the file name for an imported one
content[].data_type String Model kind, use it to tell models apart: CALCULATED_BROOMSTICK for the calculated model, USER_BROOMSTICK for an imported one
content[].created_at String Creation time, ISO-8601
content[].updated_at String Last update time, ISO-8601

Get casing torque and drag model

Get a torque and drag model of a casing with its curves.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/casings/bcc0a827-392c-4d80-9c6a-891c4cc3a05d/torque-drag-models/3794282c-fa5d-4aad-b424-0c1bb7da9e03' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e5fb6676-5c58-42b9-a9c2-895584a3dbef/casings/bcc0a827-392c-4d80-9c6a-891c4cc3a05d/torque-drag-models/3794282c-fa5d-4aad-b424-0c1bb7da9e03 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8b8920b2fc9e54a3295f73a81a06dd4d
Content-Type: application/json

{
  "model_id" : "3794282c-fa5d-4aad-b424-0c1bb7da9e03",
  "data_type" : "CALCULATED_BROOMSTICK",
  "updated_at" : "2026-11-09T11:55:38.313749Z",
  "start" : 0.0,
  "end" : 27.229999896,
  "block_weight" : null,
  "hoist_limit" : null,
  "torque_limit" : null,
  "curves" : [ {
    "mode" : "PU",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38247.66,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29906.27,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38213.98,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29890.75,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38264.51,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29914.03,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38197.15,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29882.99,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38281.36,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29921.79,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38180.33,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29875.24,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38298.22,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29929.55,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38163.52,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29867.48,
      "torque" : null
    } ]
  }, {
    "mode" : "PU",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38315.09,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29937.32,
      "torque" : null
    } ]
  }, {
    "mode" : "SO",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38146.71,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29859.72,
      "torque" : null
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : null,
    "points" : [ {
      "index" : 0.0,
      "hookload" : 38230.82,
      "torque" : null
    }, {
      "index" : 7.229999895999999,
      "hookload" : 29898.51,
      "torque" : null
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.1,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 1.58
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 0.75
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.2,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 3.16
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 1.5
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.3,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 4.74
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 2.24
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.4,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 6.32
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 2.99
    } ]
  }, {
    "mode" : "ROB",
    "friction_factor" : 0.5,
    "points" : [ {
      "index" : 0.0,
      "hookload" : null,
      "torque" : 7.89
    }, {
      "index" : 7.229999895999999,
      "hookload" : null,
      "torque" : 3.74
    } ]
  } ]
}

GET /public/api/v1/wells/{well_uuid}/casings/{casing_uuid}/torque-drag-models/{model_id}

Path parameter Description
well_uuid Well (lateral) UUID
casing_uuid Casing UUID
model_id Model UUID from the model list
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
model_id String Model UUID
data_type String Model kind, use it to tell models apart: CALCULATED_BROOMSTICK for the calculated model, USER_BROOMSTICK for an imported one
updated_at String Last update time, ISO-8601
start Number Top of the measured-depth range the model covers, m
end Number Deepest bit position the model was computed for, m. Can be shallower than the hole depth
block_weight Number Block weight, N
hoist_limit Number Hoisting limit, N
torque_limit Number Torque limit, N*m
curves Array Model curves, empty when nothing has been computed
curves[].mode String PU (pick up), SO (slack off) or ROB (rotating off bottom)
curves[].friction_factor Number Friction factor, null for the ROB hookload curve
curves[].points Array Curve points, ordered by index
curves[].points[].index Number Distance from the deepest bit position to the bit, m
curves[].points[].hookload Number Hookload, N. Null where the curve carries torque
curves[].points[].torque Number Torque, N*m. Null where the curve carries hookload

32. Drive files

Files attached to a well in Solo Drive: scanned logs, reports, plans and other documents. A well keeps its files in default folders addressed by a token: drilling_program, well_plans, bha, surveys, well_logs, geosteering_reports, daily_drilling_reports, mud_reports, cementing_reports, casing_pipe_tally, well_schematics, completions, core. Where folder is optional, omitting it addresses the well root. An unknown token is rejected: with 406 in the folder query parameter of listing and upload, with 400 inside the body of move and delete.

filenames takes explicit names or the single element "*" meaning every file of the folder; "*" combined with other names is rejected with 400. Names are matched case-insensitively. A request that names files which do not exist still succeeds with 200, the missing names come back in failed_filenames.

Access follows the role on the well's project and the Solo Drive role matrix: reading for listing (every role), creating for upload and for the target well of a move (Geotech and higher), updating for the source well of a move (Interpreter and higher), deleting for delete (Power Interpreter and Manager). An unknown well is 404. Files uploaded here appear in Solo Drive for the same well, and files added in Solo Drive are listed here.

Get well files

Get the files of one folder of a well, or of the well root when folder is omitted. Folders themselves are not listed. A well that holds no files yet answers 200 with an empty content.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files?folder=well_logs' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files?folder=well_logs HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3bc9c725a0803a9cd73c55d67d70aa50
Content-Type: application/json

{
  "content" : [ {
    "name" : "run1.las",
    "folder" : "well_logs",
    "size_bytes" : 31,
    "created_at" : "2026-10-02T11:06:12.750327Z",
    "updated_at" : "2026-10-02T11:06:12.750299Z"
  }, {
    "name" : "run2.las",
    "folder" : "well_logs",
    "size_bytes" : 31,
    "created_at" : "2026-10-02T11:06:12.822538Z",
    "updated_at" : "2026-10-02T11:06:12.822506Z"
  } ]
}

GET /public/api/v1/wells/{uuid}/files

Path parameter Description
uuid Well UUID
Parameter Description
folder Default folder token: drilling_program, well_plans, bha, surveys, well_logs, geosteering_reports, daily_drilling_reports, mud_reports, cementing_reports, casing_pipe_tally, well_schematics, completions, core. The well root when omitted
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Files of the folder, empty when it holds none
content[].name String File name
content[].folder String Folder token, absent for a file of the well root
content[].size_bytes Number Size in bytes, null when it is unknown for a legacy file
content[].created_at String Creation time, ISO 8601 UTC
content[].updated_at String Last change time, ISO 8601 UTC

Upload well file

Upload one file into a default folder of a well, well_logs when folder is omitted. The folder is created when the well does not have it yet. Any file format is accepted, up to 250 MB, a larger file is rejected with 413. A file whose name already exists in the folder is stored next to it as name (N).ext, the stored name is returned in file_name. The file is sent in the file part of a multipart/form-data request.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files?folder=bha' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: multipart/form-data' \
    -F 'file=@plan.pdf;type=application/pdf' \
    -F 'folder=bha'
POST /public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files?folder=bha HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: solo.cloud

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=folder

bha
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=plan.pdf
Content-Type: application/pdf

%PDF-1.4 sample Solo Drive file
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: af35d90824a57244ba92338ae2a6acf0
Content-Type: application/json

{
  "folder" : "bha",
  "file_name" : "plan.pdf",
  "size_bytes" : 31
}

POST /public/api/v1/wells/{uuid}/files

Path parameter Description
uuid Well UUID
Parameter Description
folder Default folder token: drilling_program, well_plans, bha, surveys, well_logs, geosteering_reports, daily_drilling_reports, mud_reports, cementing_reports, casing_pipe_tally, well_schematics, completions, core. well_logs when omitted
Part Description
file The file to store, any format, up to 250 MB
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
file_name String Stored file name: name (N).ext when the folder already held a file with the uploaded name
folder String Folder token the file was stored in
size_bytes Number Stored size in bytes

Move well files

Move files from a folder of the well to a folder of the same or another well of the same company, a target well the user cannot write to is rejected with 403, a well of another company with 400. The target well must already hold files, a well without any is rejected with 404, while the target folder is created when missing. A name that already exists in the target folder is stored as name (N).ext. Moving to the same folder is a no-op answered with moved_count: 0.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files/move' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "folder" : "surveys",
  "filenames" : [ "survey.las" ],
  "target_well_uuid" : "6a910ddb-afb9-4842-b485-8c7d309e4915",
  "target_folder" : "surveys"
}'
POST /public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files/move HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 159

{
  "folder" : "surveys",
  "filenames" : [ "survey.las" ],
  "target_well_uuid" : "6a910ddb-afb9-4842-b485-8c7d309e4915",
  "target_folder" : "surveys"
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 505aea4cc96a2fee5a714f3a126200cd
Content-Type: application/json

{
  "source_well_uuid" : "ef4af66d-f8c1-419a-a8c4-1f913d093adc",
  "target_well_uuid" : "6a910ddb-afb9-4842-b485-8c7d309e4915",
  "moved_count" : 1,
  "failed_filenames" : [ ]
}

POST /public/api/v1/wells/{uuid}/files/move

Path parameter Description
uuid Source well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
folder String Source folder. Default folder token: drilling_program, well_plans, bha, surveys, well_logs, geosteering_reports, daily_drilling_reports, mud_reports, cementing_reports, casing_pipe_tally, well_schematics, completions, core. The well root when omitted
filenames Array File names to process, or the single element * for every file of the folder. Names are matched case-insensitively, names that hold no file are returned in failed_filenames
target_well_uuid String Target well UUID of the same company, the source well itself to move between its folders
target_folder String Target folder token, created when missing. The well root when omitted

Response body

Path Type Description
source_well_uuid String Source well UUID
target_well_uuid String Target well UUID
moved_count Number Number of moved files, 0 when source and target are the same folder
failed_filenames Array Requested names that held no file in the source folder

Delete well files

Delete the named files, or every file with "*", from a folder of the well. Deleted files disappear from the listings immediately, the folder itself is kept. A well that holds no files is 404.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files/delete' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "folder" : "bha",
  "filenames" : [ "old-plan.pdf" ]
}'
POST /public/api/v1/wells/ef4af66d-f8c1-419a-a8c4-1f913d093adc/files/delete HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 61

{
  "folder" : "bha",
  "filenames" : [ "old-plan.pdf" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3815a7aa5415b193e8bc7912237b0114
Content-Type: application/json

{
  "folder" : "bha",
  "well_uuid" : "ef4af66d-f8c1-419a-a8c4-1f913d093adc",
  "deleted_count" : 1,
  "failed_filenames" : [ ]
}

POST /public/api/v1/wells/{uuid}/files/delete

Path parameter Description
uuid Well UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
folder String Default folder token: drilling_program, well_plans, bha, surveys, well_logs, geosteering_reports, daily_drilling_reports, mud_reports, cementing_reports, casing_pipe_tally, well_schematics, completions, core. The well root when omitted
filenames Array File names to process, or the single element * for every file of the folder. Names are matched case-insensitively, names that hold no file are returned in failed_filenames

Response body

Path Type Description
well_uuid String Well UUID
folder String Folder token of the request, absent for the well root
deleted_count Number Number of deleted files
failed_filenames Array Requested names that held no file in the folder

33. Driller's Roadmap

A Driller's Roadmap holds the planned drilling parameters of a well per depth interval. A well can hold several roadmaps. A roadmap is readable here once DrillSpot has saved data into it: a roadmap that was created but never saved is neither listed nor readable.

Get roadmaps by well

Get the roadmaps of a well as a content array of uuid and name, ordered by name. The array is empty when the well holds no roadmaps.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/e180565f-324b-4da7-8266-c1cf4215a637/roadmaps' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/e180565f-324b-4da7-8266-c1cf4215a637/roadmaps HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bed44c4fa5848e9f359bc257d888cf03
Content-Type: application/json

{
  "content" : [ {
    "name" : "Roadmap 1",
    "uuid" : "4475c591-3006-4acf-8595-4e513de663c4"
  }, {
    "name" : "Roadmap 2",
    "uuid" : "274fde33-2441-4cde-9f98-96c45a45292e"
  } ]
}

GET /public/api/v1/wells/{well_uuid}/roadmaps

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Roadmaps of the well that hold data, ordered by name
content[].uuid String Roadmap UUID
content[].name String Roadmap name

Get roadmap by uuid

Get the latest saved version of a roadmap. The document is returned exactly as DrillSpot stores it: unlike the rest of this API its keys are in camelCase, and the format is defined by DrillSpot, so new fields may appear in it over time. Values are in SI units: metres for depths and diameters, radians for angles, m/s for ROP, N for WOB, Pa for MSE and differential pressure, rev/s for RPM and m3/s for flow rate.

data.entity holds the rows, one per depth station:

data.calculationSnapshots records the inputs the generated intervals were computed from: the topset (topsetUuid), the well plan (wellPlanUuid), the offset wells (offsetUuids), the hole section (holeSectionUuid), the depth range (minMd, maxMd), holeSize, offsetRadius, granularity, the objective, the parameter constraints and the bha type. The numbers in a snapshot are plain values, not wrapped in {val}. The references are stored as they were at generation time and may point to objects deleted since.

Request

$ curl 'https://solo.cloud/public/api/v1/roadmaps/4475c591-3006-4acf-8595-4e513de663c4' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/roadmaps/4475c591-3006-4acf-8595-4e513de663c4 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 170faf56491234a9b267c474582c4650
Content-Type: application/json

{
  "data" : {
    "entity" : [ {
      "formationTop" : "Top Hole",
      "md" : {
        "val" : 0
      },
      "tvd" : {
        "val" : 0
      },
      "incl" : {
        "val" : 0
      },
      "azim" : {
        "val" : 0
      },
      "openHole" : {
        "val" : 0.250825
      },
      "comments" : "",
      "rowType" : "generated",
      "isTopset" : false,
      "parameters" : {
        "rop" : {
          "median" : {
            "val" : 0.03547644444444444
          },
          "min" : {
            "val" : 0.022267144444444446
          },
          "max" : {
            "val" : 0.3145747222222222
          }
        },
        "mse" : {
          "median" : {
            "val" : 0
          },
          "min" : {
            "val" : 0
          },
          "max" : {
            "val" : 0
          }
        },
        "wob" : {
          "median" : {
            "val" : 36401.82
          },
          "min" : {
            "val" : -43750.62
          },
          "max" : {
            "val" : 58987.26
          }
        },
        "differentialPressure" : {
          "median" : {
            "val" : 1056987
          },
          "min" : {
            "val" : -45587.7
          },
          "max" : {
            "val" : 2046832
          }
        },
        "surfaceRpm" : {
          "median" : {
            "val" : 0.4537001666666667
          },
          "min" : {
            "val" : 0.014788998333333333
          },
          "max" : {
            "val" : 0.6666648333333334
          }
        },
        "flowRate" : {
          "median" : {
            "val" : 0.02841498333333333
          },
          "min" : {
            "val" : 0
          },
          "max" : {
            "val" : 0.04134635
          }
        }
      },
      "customParameters" : {
        "5a89a54f-3c8e-40c9-8fae-fdb7437b8adb" : { }
      }
    }, {
      "formationTop" : "Sand A",
      "md" : {
        "val" : 1524
      },
      "tvd" : {
        "val" : 1500.2
      },
      "incl" : {
        "val" : 0.0523
      },
      "azim" : {
        "val" : 1.5708
      },
      "openHole" : {
        "val" : 0.250825
      },
      "comments" : "top of Sand A",
      "rowType" : "topset",
      "isTopset" : true,
      "parameters" : {
        "rop" : {
          "median" : {
            "val" : 0.0312
          },
          "min" : {
            "val" : 0.0201
          },
          "max" : {
            "val" : 0.0455
          }
        },
        "wob" : {
          "median" : {
            "val" : 40210.5
          },
          "min" : {
            "val" : 35100.0
          },
          "max" : {
            "val" : 44800.0
          }
        }
      },
      "customParameters" : { }
    } ],
    "calculationSnapshots" : [ {
      "topsetUuid" : "adbdb0b8-6c94-42c1-a7c1-23e629448841",
      "wellPlanUuid" : "a8a1dcad-a141-4e9a-8117-04bcf327f347",
      "offsetUuids" : [ "2b6fb0f0-bb55-4874-86cd-dd8301ad32df", "971aee78-3580-44d6-9211-e797cc4fc829" ],
      "minMd" : 0,
      "maxMd" : 6096,
      "holeSize" : 0.250825,
      "holeSectionUuid" : "535f01eb-4350-55ea-84f5-d295a5e31884",
      "offsetRadius" : 10,
      "granularity" : 0,
      "objective" : "max_rop",
      "constraints" : {
        "surfaceRpm" : {
          "max" : 1.6666666666666667
        }
      },
      "bha" : null
    } ]
  }
}

GET /public/api/v1/roadmaps/{roadmap_uuid}

Path parameter Description
roadmap_uuid Roadmap UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
data.entity Array Rows of the roadmap, one per depth station
data.entity[].md.val Number Measured depth, m
data.entity[].tvd.val Number True vertical depth, m
data.entity[].incl.val Number Inclination, rad
data.entity[].azim.val Number Azimuth, rad
data.entity[].openHole.val Number Open hole diameter, m
data.entity[].formationTop String Formation top the row falls into
data.entity[].comments String Free-text comment
data.entity[].rowType String Where the row came from, see the chapter text
data.entity[].isTopset Boolean Whether the row was added from a topset
data.entity[].parameters Object Standard drilling parameters: rop (m/s), mse (Pa), wob (N), differentialPressure (Pa), surfaceRpm (rev/s), flowRate (m3/s), each as median, min and max, each wrapped in {val}. A parameter not computed for the row is absent
data.entity[].customParameters Object User-added trace columns keyed by trace UUID, each as median, min and max, each wrapped in {val}. {} means no value
data.calculationSnapshots Array Inputs the generated intervals were computed from: topsetUuid, wellPlanUuid, offsetUuids, holeSectionUuid, minMd, maxMd, holeSize, offsetRadius, granularity, objective, constraints, bha. Numbers here are plain, not wrapped in {val}

34. Daily drilling reports

A daily drilling report (DDR) holds the rig activity of a well: operations, each covering a time interval with its activity code, depth reached and non-productive time, and summaries, each describing a period with its primary activities and critical points. A well holds at most one report. Operations and summaries are added in batches and never changed one by one: to replace them, delete all of them and add the new ones with new UUIDs, the UUIDs of deleted rows stay taken.

Times are ISO 8601 values. is_local_time of the report says how to read them: true means the rig local clock written as UTC, false a true UTC instant. Depths are in the unit given by depth_reached_uom, as the source of the report gave them, not converted to the project units.

Create daily drilling report

Create the report of a well. Repeating the request with the UUID of the existing report changes nothing, any other UUID when the well already has a report is rejected with 409. Read the existing report with Get daily drilling report by well.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/f21870e9-fd2d-4706-bfe4-cc7995afa821/ddr' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "uuid" : "cf10cc5a-cfd9-4568-bb96-5b182aaf0596",
  "name" : "DailyReport for Well 1",
  "is_local_time" : false
}'
POST /public/api/v1/wells/f21870e9-fd2d-4706-bfe4-cc7995afa821/ddr HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 117

{
  "uuid" : "cf10cc5a-cfd9-4568-bb96-5b182aaf0596",
  "name" : "DailyReport for Well 1",
  "is_local_time" : false
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: d5b97b7dd5e194e04556f5731d1505f4
Content-Type: application/json

{
  "uuid" : "cf10cc5a-cfd9-4568-bb96-5b182aaf0596"
}

POST /public/api/v1/wells/{well_uuid}/ddr

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
uuid String UUID of the new report, required
name String Report name, required
is_local_time Boolean true if the times of the rows are the rig local clock, false by default
comment_uuid String UUID of the StarSteer comment the summaries go to, set on create only

Response body

Path Type Description
uuid String Daily drilling report UUID

Get daily drilling report by well

Get the report of a well. Returns 404 if the well has no report.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 4ab7d6cc1eed39dda65bc65fe9a177fb
Content-Type: application/json

{
  "uuid" : "29030c37-e969-4834-81b1-2c52f0a29feb",
  "well_uuid" : "40e468c9-ae64-4334-a285-1c089b8334cc",
  "name" : "DailyReport",
  "is_local_time" : false,
  "time_of_last_data_update" : "2026-11-09T11:54:39.055620Z"
}

GET /public/api/v1/wells/{well_uuid}/ddr

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Daily drilling report UUID
well_uuid String Well (lateral) UUID
name String Report name
is_local_time Boolean true if the times of the rows are the rig local clock, false if they are UTC
comment_uuid String UUID of the StarSteer comment the summaries go to
time_of_last_data_update String When operations or summaries were last added, ISO 8601 UTC

Update daily drilling report

Update the report by UUID. An absent field is left as it is. Rejected with 403 if the report is locked or is a private report of another user.

Request

$ curl 'https://solo.cloud/public/api/v1/ddrs/c3c6caef-ee08-4a48-b0e6-25e2168112e3' -i -X PATCH \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "name" : "DailyReport renamed",
  "is_local_time" : true
}'
PATCH /public/api/v1/ddrs/c3c6caef-ee08-4a48-b0e6-25e2168112e3 HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 62

{
  "name" : "DailyReport renamed",
  "is_local_time" : true
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 589c85c5dcdc7d396fed2d351859a942

PATCH /public/api/v1/ddrs/{ddr_uuid}

Path parameter Description
ddr_uuid Daily drilling report UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
name String Report name
is_local_time Boolean true if the times of the rows are the rig local clock

Response body

Empty body

Delete daily drilling report

Delete the report by UUID together with all its operations and summaries. Rejected with 403 if the report is locked or is a private report of another user.

Request

$ curl 'https://solo.cloud/public/api/v1/ddrs/663853f0-b200-4ae7-bd5a-03a77d31ac05' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/ddrs/663853f0-b200-4ae7-bd5a-03a77d31ac05 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9ddc5549d5b4ab1bb162db512d7cb092

DELETE /public/api/v1/ddrs/{ddr_uuid}

Path parameter Description
ddr_uuid Daily drilling report UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

Get daily drilling report operations

Get a range of the operations of a well, ordered by start time. Deleted operations are not returned. The range is empty if the well has no report.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/operations?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/operations?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a5cf3fdd777e8c9438c272e79185b036
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "da70a909-f5a1-4e96-be7b-85599cdc589b",
    "d_tim_start" : "2026-01-10T06:00:00Z",
    "d_tim_end" : "2026-01-10T08:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    },
    "is_local_time" : false
  }, {
    "uuid" : "055bd08c-892e-4f98-bea4-0aafad44211f",
    "d_tim_start" : "2026-01-10T08:00:00Z",
    "d_tim_end" : "2026-01-10T10:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    },
    "is_local_time" : false
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{well_uuid}/ddr/operations

Path parameter Description
well_uuid Well (lateral) UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Operation UUID
content[].is_local_time Boolean The is_local_time of the report, repeated on every row
content[].d_tim_start String Operation start, ISO 8601
content[].d_tim_end String Operation end, ISO 8601
content[].depth_reached Number Depth reached, in depth_reached_uom as the source gave it
content[].depth_reached_uom String Unit of depth_reached, absent when unknown
content[].proprietary_code String Activity code, may be empty
content[].proprietary_sub_code String Activity sub code
content[].proprietary_sub_sub_code String Activity sub-sub code
content[].comments String Operation comments
content[].duration Number Operation duration, hours
content[].non_productive_time Object Non-productive time
content[].non_productive_time.identified Boolean true if non-productive time was identified
content[].non_productive_time.duration Number Non-productive time, hours
content[].non_productive_time.comments String Non-productive time comments

Get actual daily drilling report operations

Get the operations that start within 24 hours before the end of the latest operation, ordered by start time. Returns 404 if the well has no operations.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/operations/actual' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/operations/actual HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: c15e9b1461255fd4e370e6c38bfe58e0
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "da70a909-f5a1-4e96-be7b-85599cdc589b",
    "d_tim_start" : "2026-01-10T06:00:00Z",
    "d_tim_end" : "2026-01-10T08:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    },
    "is_local_time" : false
  }, {
    "uuid" : "055bd08c-892e-4f98-bea4-0aafad44211f",
    "d_tim_start" : "2026-01-10T08:00:00Z",
    "d_tim_end" : "2026-01-10T10:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    },
    "is_local_time" : false
  } ]
}

GET /public/api/v1/wells/{well_uuid}/ddr/operations/actual

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Operations
content[].uuid String Operation UUID
content[].is_local_time Boolean The is_local_time of the report, repeated on every row
content[].d_tim_start String Operation start, ISO 8601
content[].d_tim_end String Operation end, ISO 8601
content[].depth_reached Number Depth reached, in depth_reached_uom as the source gave it
content[].depth_reached_uom String Unit of depth_reached, absent when unknown
content[].proprietary_code String Activity code, may be empty
content[].proprietary_sub_code String Activity sub code
content[].proprietary_sub_sub_code String Activity sub-sub code
content[].comments String Operation comments
content[].duration Number Operation duration, hours
content[].non_productive_time Object Non-productive time
content[].non_productive_time.identified Boolean true if non-productive time was identified
content[].non_productive_time.duration Number Non-productive time, hours
content[].non_productive_time.comments String Non-productive time comments

Get daily drilling report summaries

Get a range of the summaries of a well in the order they were added. Deleted summaries are not returned. The range is empty if the well has no report.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/summaries?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/summaries?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 7e8e7cd96b94c16b9d8c47578003358f
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "547f9fca-b1e6-4841-bf50-95cc439ef65b",
    "d_tim_start" : "2026-01-10T00:00:00Z",
    "d_tim_end" : "2026-01-11T00:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "primary_activities" : "Drilled the lateral section",
    "critical_points" : [ "Lost circulation at 3480 ft" ],
    "non_productive_time" : {
      "identified" : true,
      "duration" : 1.5,
      "comments" : "Waiting on weather"
    },
    "report_status" : "PARTIAL",
    "is_local_time" : false
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{well_uuid}/ddr/summaries

Path parameter Description
well_uuid Well (lateral) UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Summary UUID
content[].is_local_time Boolean The is_local_time of the report, repeated on every row
content[].d_tim_start String Summary period start, ISO 8601
content[].d_tim_end String Summary period end, ISO 8601
content[].depth_reached Number Depth reached, not negative, in depth_reached_uom
content[].depth_reached_uom String Unit of depth_reached, absent when unknown
content[].primary_activities String Primary activities of the period, not empty
content[].critical_points Array Critical points of the period, an array of strings
content[].report_status String PARTIAL or COMPLETE: whether the rig signed the report off, NOV reports only
content[].non_productive_time Object Non-productive time
content[].non_productive_time.identified Boolean true if non-productive time was identified
content[].non_productive_time.duration Number Non-productive time, hours
content[].non_productive_time.comments String Non-productive time comments

Get actual daily drilling report summary

Get the summary with the latest end, the earliest added one among summaries with the same end. Returns 404 if the well has no summaries.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/summaries/actual' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/40e468c9-ae64-4334-a285-1c089b8334cc/ddr/summaries/actual HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: fe3a9456d241e4294a2583d74ce0a1e7
Content-Type: application/json

{
  "uuid" : "547f9fca-b1e6-4841-bf50-95cc439ef65b",
  "d_tim_start" : "2026-01-10T00:00:00Z",
  "d_tim_end" : "2026-01-11T00:00:00Z",
  "depth_reached" : 3520.0,
  "depth_reached_uom" : "ft",
  "primary_activities" : "Drilled the lateral section",
  "critical_points" : [ "Lost circulation at 3480 ft" ],
  "non_productive_time" : {
    "identified" : true,
    "duration" : 1.5,
    "comments" : "Waiting on weather"
  },
  "report_status" : "PARTIAL",
  "is_local_time" : false
}

GET /public/api/v1/wells/{well_uuid}/ddr/summaries/actual

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
uuid String Summary UUID
is_local_time Boolean The is_local_time of the report, repeated on every row
d_tim_start String Summary period start, ISO 8601
d_tim_end String Summary period end, ISO 8601
depth_reached Number Depth reached, not negative, in depth_reached_uom
depth_reached_uom String Unit of depth_reached, absent when unknown
primary_activities String Primary activities of the period, not empty
critical_points Array Critical points of the period, an array of strings
report_status String PARTIAL or COMPLETE: whether the rig signed the report off, NOV reports only
non_productive_time Object Non-productive time
non_productive_time.identified Boolean true if non-productive time was identified
non_productive_time.duration Number Non-productive time, hours
non_productive_time.comments String Non-productive time comments

Add daily drilling report operations

Add from 1 to 1000 operations to the report by UUID. A request with an operation UUID that is taken, also by a deleted operation, or is repeated in the request, or with a required field missing, is rejected with 400 and adds nothing. An operation is skipped without an error when its d_tim_start, d_tim_end and depth_reached equal those of an operation the report already has (a deleted one does not count) or of an earlier operation of the same request, whatever its UUID: the stored operation is not changed. Times are compared to the microsecond, depth exactly. Rejected with 403 if the report is locked or is a private report of another user.

Request

$ curl 'https://solo.cloud/public/api/v1/ddrs/8e4f8d9d-fec8-4cff-8743-af90bc760ffb/operations' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "items" : [ {
    "uuid" : "8e56e5c5-02e7-46f3-8f7b-6455b9a493fb",
    "d_tim_start" : "2026-01-10T10:00:00Z",
    "d_tim_end" : "2026-01-10T12:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    }
  } ]
}'
POST /public/api/v1/ddrs/8e4f8d9d-fec8-4cff-8743-af90bc760ffb/operations HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 521

{
  "items" : [ {
    "uuid" : "8e56e5c5-02e7-46f3-8f7b-6455b9a493fb",
    "d_tim_start" : "2026-01-10T10:00:00Z",
    "d_tim_end" : "2026-01-10T12:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "proprietary_code" : "DRL",
    "proprietary_sub_code" : "ROT",
    "proprietary_sub_sub_code" : "",
    "comments" : "Drilled ahead from 3410 ft to 3520 ft",
    "duration" : 2.0,
    "non_productive_time" : {
      "identified" : false,
      "duration" : 0.0,
      "comments" : ""
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a96a40f0df1137484e6ed1adbe7c0281

POST /public/api/v1/ddrs/{ddr_uuid}/operations

Path parameter Description
ddr_uuid Daily drilling report UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
items Array Operations to add, from 1 to 1000
items[].uuid String Operation UUID, generated when absent
items[].d_tim_start String Operation start, ISO 8601
items[].d_tim_end String Operation end, ISO 8601
items[].depth_reached Number Depth reached, in depth_reached_uom as the source gave it
items[].depth_reached_uom String Unit of depth_reached, absent when unknown
items[].proprietary_code String Activity code, may be empty
items[].proprietary_sub_code String Activity sub code
items[].proprietary_sub_sub_code String Activity sub-sub code
items[].comments String Operation comments
items[].duration Number Operation duration, hours
items[].non_productive_time Object Non-productive time
items[].non_productive_time.identified Boolean true if non-productive time was identified
items[].non_productive_time.duration Number Non-productive time, hours
items[].non_productive_time.comments String Non-productive time comments

Response body

Empty body

Add daily drilling report summaries

Add from 1 to 1000 summaries to the report by UUID, all of them or none, rejected with 400 on the same terms as operations. A summary is never skipped as a repeat. depth_reached must not be negative and primary_activities must not be empty. Rejected with 403 if the report is locked or is a private report of another user.

Request

$ curl 'https://solo.cloud/public/api/v1/ddrs/906dc02f-752f-478e-82f6-04e0c9798a6f/summaries' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "items" : [ {
    "uuid" : "932650a0-3080-4087-87eb-8309a0474e15",
    "d_tim_start" : "2026-01-11T00:00:00Z",
    "d_tim_end" : "2026-01-12T00:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "primary_activities" : "Drilled the lateral section",
    "critical_points" : [ "Lost circulation at 3480 ft" ],
    "non_productive_time" : {
      "identified" : true,
      "duration" : 1.5,
      "comments" : "Waiting on weather"
    },
    "report_status" : "PARTIAL"
  } ]
}'
POST /public/api/v1/ddrs/906dc02f-752f-478e-82f6-04e0c9798a6f/summaries HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 503

{
  "items" : [ {
    "uuid" : "932650a0-3080-4087-87eb-8309a0474e15",
    "d_tim_start" : "2026-01-11T00:00:00Z",
    "d_tim_end" : "2026-01-12T00:00:00Z",
    "depth_reached" : 3520.0,
    "depth_reached_uom" : "ft",
    "primary_activities" : "Drilled the lateral section",
    "critical_points" : [ "Lost circulation at 3480 ft" ],
    "non_productive_time" : {
      "identified" : true,
      "duration" : 1.5,
      "comments" : "Waiting on weather"
    },
    "report_status" : "PARTIAL"
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 70f4ec2889f8b9a2ab6185f20a6aa1ed

POST /public/api/v1/ddrs/{ddr_uuid}/summaries

Path parameter Description
ddr_uuid Daily drilling report UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
items Array Summaries to add, from 1 to 1000
items[].uuid String Summary UUID, generated when absent
items[].d_tim_start String Summary period start, ISO 8601
items[].d_tim_end String Summary period end, ISO 8601
items[].depth_reached Number Depth reached, not negative, in depth_reached_uom
items[].depth_reached_uom String Unit of depth_reached, absent when unknown
items[].primary_activities String Primary activities of the period, not empty
items[].critical_points Array Critical points of the period, an array of strings
items[].report_status String PARTIAL or COMPLETE: whether the rig signed the report off, NOV reports only
items[].non_productive_time Object Non-productive time
items[].non_productive_time.identified Boolean true if non-productive time was identified
items[].non_productive_time.duration Number Non-productive time, hours
items[].non_productive_time.comments String Non-productive time comments

Response body

Empty body

Delete daily drilling report operations and summaries

Delete all operations and summaries of the report by UUID and keep the report. time_of_last_data_update of the report does not change, and the UUIDs of the deleted rows cannot be used again. Rejected with 403 if the report is locked or is a private report of another user.

Request

$ curl 'https://solo.cloud/public/api/v1/ddrs/97a7a1c9-6ab5-422d-b8c9-29a7330321d0/operations-and-summaries' -i -X DELETE \
    -H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/ddrs/97a7a1c9-6ab5-422d-b8c9-29a7330321d0/operations-and-summaries HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9b8173694564153b8fd040224e004ef0

DELETE /public/api/v1/ddrs/{ddr_uuid}/operations-and-summaries

Path parameter Description
ddr_uuid Daily drilling report UUID
Header Description
Authorization OAuth2 authorization header

Response body

Empty body

35. Mud checks

Mud checks hold the drilling fluid properties measured on a lateral: the time and depth of the check, the mud type and class, the rheometer readings and a set of measures. A measure is an object of value, uom and datum and keeps the unit it was stored with: nothing is converted to the project units, and uom is absent when the source gave none. ph and cuttings_sg are plain numbers. Every measure sits at the root of the check.

Every mud check of the lateral is listed and can be replaced or deleted here, the ones loaded by data sources included, unless a user keeps it private or locked in Solo: a mud check private to another user is not listed, and a mud check that is locked or private to another user is not replaced or deleted (403). A request takes from 1 to 1000 checks or uuids. A uuid of a mud check of another lateral answers 409 MUD_CHECK_ALREADY_EXISTS on create and replace and 404 MUD_CHECK_NOT_FOUND on delete.

Get mud checks by well

Get every mud check of a lateral as a content array ordered by dtim, the checks without dtim last. A mud check private to another user is not listed. The array is empty when the lateral holds no mud checks.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: f808935b95e81c9d7956f795594945d4
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "bc1bc187-759e-442d-b15c-23f870085499",
    "uid" : "MC-0001",
    "dtim" : "2026-10-21T06:00:00Z",
    "type" : "WBM",
    "mud_class" : "WATERBASED",
    "rheology_input" : "FANN_READINGS",
    "source_type" : "EMAIL",
    "description" : "Morning check",
    "engineer" : "J. Smith",
    "company_name" : "Mud Co",
    "location_sample" : "Pit 2",
    "asg" : "2.6",
    "poly_type" : "PAC",
    "md" : {
      "value" : 3118.0,
      "uom" : "m",
      "datum" : "KB"
    },
    "pv" : {
      "value" : 18.0,
      "uom" : "cP"
    },
    "mud_weight" : {
      "value" : 9.8,
      "uom" : "ppg"
    },
    "ph" : 9.5,
    "rheometer" : {
      "uid" : "rh-1",
      "temp_rheom" : {
        "value" : 49.0,
        "uom" : "degC"
      },
      "vis3_rpm" : 4.0,
      "vis6_rpm" : 6.0,
      "vis100_rpm" : 22.0,
      "vis200_rpm" : 33.0,
      "vis300_rpm" : 40.0,
      "vis600_rpm" : 58.0
    },
    "extension_name_value" : [ {
      "uid" : "env-1",
      "name" : "Flowline temperature",
      "value" : {
        "value" : 48.0,
        "uom" : "degC"
      },
      "data_type" : "double"
    } ]
  }, {
    "uuid" : "b7366869-4688-4d78-8576-5eb52df908fc",
    "dtim" : "2026-10-21T12:00:00Z",
    "mud_weight" : {
      "value" : 9.9
    }
  }, {
    "uuid" : "83bcf75b-c10e-403b-869f-e321f174f1aa",
    "pv" : {
      "value" : 21.0,
      "uom" : "cP"
    }
  } ]
}

GET /public/api/v1/wells/{well_uuid}/mud-checks

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Mud checks of the well, ordered by dtim, checks without dtim last. The measures are fields of the check, there is no measures key: md, tvd, pres_bop_rating, temp_vis, temp_hthp, pres_hthp, filtrate_hthp, filter_cake_hthp, solids_calc_pc, barite_pc, temp_ph, alkalinity_p1, alkalinity_p2, magnesium, potassium, brine_pc, elect_stab, calcium_chloride, solids_hi_grav_pc, polymer, sol_cor_pc, oil_ctg, hardness_ca, sulfide, pv, yp, filter_cake_ltlp, calcium, chloride, filtrate_ltlp, temperature, gel10_sec, gel10_min, gel30_min, lcm, solids_low_grav_pc, lime, mbt, mf, mud_weight, oil_pc, pm_filtrate, pm, sand_pc, solids_pc, vis_funnel, water_pc, water_phase_salinity and cuttings_size are measures {value, uom, datum} in the unit the source gave, ph and cuttings_sg are plain numbers
content[].uuid String Check UUID
content[].source_type String Source of the check: SOLOBOX, EMAIL, PASON, NABORS, INNOVA, NOV, DRIVE or WELLVIEW. Absent for a check entered by hand
content[].uid String Identifier of the check in its source system, up to 200 characters
content[].dtim String Time of the check, ISO 8601
content[].type String Mud type: WBM, OBM or SBM
content[].mud_class String Mud class: WATERBASED, OILBASED, OTHER, PNEUMATIC or UNKNOWN
content[].rheology_input String How the rheology was given: FANN_READINGS or PV_YP
content[].description String Free text, up to 8000 characters
content[].engineer String Mud engineer, up to 200 characters
content[].company_name String Mud company, up to 200 characters
content[].location_sample String Where the sample was taken, up to 200 characters
content[].asg String Average specific gravity of the solids as the source gave it, up to 200 characters
content[].poly_type String Polymer type, up to 200 characters
content[].md Object Measured depth of the check, a measure {value, uom, datum}
content[].mud_weight Object Mud weight (density), a measure {value, uom, datum}
content[].pv Object Plastic viscosity, a measure {value, uom, datum}
content[].ph Number pH, a plain number
content[].rheometer Object Rheometer readings: uid, the measures temp_rheom and pres_rheom, the dial readings vis3_rpm, vis6_rpm, vis100_rpm, vis200_rpm, vis300_rpm, vis600_rpm and extension_name_value as in the check
content[].extension_name_value Array Name-value pairs the source attached to the check: uid, name, value (a measure), data_type, dtim, md (a measure), index (an integer), measure_class, description

Create mud checks

Add mud checks to a lateral. uuid is optional, a missing one is generated: the response lists the uuids of the checks in the request order. A uuid repeated in the request answers 400 DUPLICATE_MUD_CHECK_UUID, a uuid of any existing mud check answers 409 MUD_CHECK_ALREADY_EXISTS: use replace to change a check. source_type is set on creation only.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "checks" : [ {
    "uuid" : "c7269838-f7f6-4a57-8dd8-a06c2f7cb04d",
    "uid" : "MC-0003",
    "dtim" : "2026-10-21T18:00:00Z",
    "type" : "WBM",
    "mud_class" : "WATERBASED",
    "rheology_input" : "FANN_READINGS",
    "source_type" : "EMAIL",
    "description" : "Morning check",
    "engineer" : "J. Smith",
    "company_name" : "Mud Co",
    "location_sample" : "Pit 2",
    "asg" : "2.6",
    "poly_type" : "PAC",
    "md" : {
      "value" : 3118.0,
      "uom" : "m",
      "datum" : "KB"
    },
    "mud_weight" : {
      "value" : 9.8,
      "uom" : "ppg"
    },
    "pv" : {
      "value" : 18.0,
      "uom" : "cP"
    },
    "ph" : 9.5,
    "rheometer" : {
      "uid" : "rh-1",
      "temp_rheom" : {
        "value" : 49.0,
        "uom" : "degC"
      },
      "vis3_rpm" : 4.0,
      "vis6_rpm" : 6.0,
      "vis100_rpm" : 22.0,
      "vis200_rpm" : 33.0,
      "vis300_rpm" : 40.0,
      "vis600_rpm" : 58.0
    },
    "extension_name_value" : [ {
      "uid" : "env-1",
      "name" : "Flowline temperature",
      "value" : {
        "value" : 48.0,
        "uom" : "degC"
      },
      "data_type" : "double"
    } ]
  }, {
    "dtim" : "2026-10-22T00:00:00Z",
    "mud_weight" : {
      "value" : 10.0,
      "uom" : "ppg"
    }
  } ]
}'
POST /public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 1266

{
  "checks" : [ {
    "uuid" : "c7269838-f7f6-4a57-8dd8-a06c2f7cb04d",
    "uid" : "MC-0003",
    "dtim" : "2026-10-21T18:00:00Z",
    "type" : "WBM",
    "mud_class" : "WATERBASED",
    "rheology_input" : "FANN_READINGS",
    "source_type" : "EMAIL",
    "description" : "Morning check",
    "engineer" : "J. Smith",
    "company_name" : "Mud Co",
    "location_sample" : "Pit 2",
    "asg" : "2.6",
    "poly_type" : "PAC",
    "md" : {
      "value" : 3118.0,
      "uom" : "m",
      "datum" : "KB"
    },
    "mud_weight" : {
      "value" : 9.8,
      "uom" : "ppg"
    },
    "pv" : {
      "value" : 18.0,
      "uom" : "cP"
    },
    "ph" : 9.5,
    "rheometer" : {
      "uid" : "rh-1",
      "temp_rheom" : {
        "value" : 49.0,
        "uom" : "degC"
      },
      "vis3_rpm" : 4.0,
      "vis6_rpm" : 6.0,
      "vis100_rpm" : 22.0,
      "vis200_rpm" : 33.0,
      "vis300_rpm" : 40.0,
      "vis600_rpm" : 58.0
    },
    "extension_name_value" : [ {
      "uid" : "env-1",
      "name" : "Flowline temperature",
      "value" : {
        "value" : 48.0,
        "uom" : "degC"
      },
      "data_type" : "double"
    } ]
  }, {
    "dtim" : "2026-10-22T00:00:00Z",
    "mud_weight" : {
      "value" : 10.0,
      "uom" : "ppg"
    }
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 454264ff66484808ecd95d3912ebfbac
Content-Type: application/json

{
  "uuids" : [ "c7269838-f7f6-4a57-8dd8-a06c2f7cb04d", "e97aea7c-dfe6-4976-b994-ddffbf4eee29" ]
}

POST /public/api/v1/wells/{well_uuid}/mud-checks

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
checks Array Checks to add, 1 to 1000. The measures are fields of the check, there is no measures key: md, tvd, pres_bop_rating, temp_vis, temp_hthp, pres_hthp, filtrate_hthp, filter_cake_hthp, solids_calc_pc, barite_pc, temp_ph, alkalinity_p1, alkalinity_p2, magnesium, potassium, brine_pc, elect_stab, calcium_chloride, solids_hi_grav_pc, polymer, sol_cor_pc, oil_ctg, hardness_ca, sulfide, pv, yp, filter_cake_ltlp, calcium, chloride, filtrate_ltlp, temperature, gel10_sec, gel10_min, gel30_min, lcm, solids_low_grav_pc, lime, mbt, mf, mud_weight, oil_pc, pm_filtrate, pm, sand_pc, solids_pc, vis_funnel, water_pc, water_phase_salinity and cuttings_size are measures {value, uom, datum} in the unit the source gave, ph and cuttings_sg are plain numbers
checks[].uuid String Check UUID, generated when omitted
checks[].source_type String Source of the check: SOLOBOX, EMAIL, PASON, NABORS, INNOVA, NOV, DRIVE or WELLVIEW. Omit it for a check entered by hand. Set on creation only
checks[].uid String Identifier of the check in its source system, up to 200 characters
checks[].dtim String Time of the check, ISO 8601
checks[].type String Mud type: WBM, OBM or SBM
checks[].mud_class String Mud class: WATERBASED, OILBASED, OTHER, PNEUMATIC or UNKNOWN
checks[].rheology_input String How the rheology was given: FANN_READINGS or PV_YP
checks[].description String Free text, up to 8000 characters
checks[].engineer String Mud engineer, up to 200 characters
checks[].company_name String Mud company, up to 200 characters
checks[].location_sample String Where the sample was taken, up to 200 characters
checks[].asg String Average specific gravity of the solids as the source gave it, up to 200 characters
checks[].poly_type String Polymer type, up to 200 characters
checks[].md Object Measured depth of the check, a measure {value, uom, datum}
checks[].mud_weight Object Mud weight (density), a measure {value, uom, datum}
checks[].pv Object Plastic viscosity, a measure {value, uom, datum}
checks[].ph Number pH, a plain number
checks[].rheometer Object Rheometer readings: uid, the measures temp_rheom and pres_rheom, the dial readings vis3_rpm, vis6_rpm, vis100_rpm, vis200_rpm, vis300_rpm, vis600_rpm and extension_name_value as in the check
checks[].extension_name_value Array Name-value pairs the source attached to the check: uid, name, value (a measure), data_type, dtim, md (a measure), index (an integer), measure_class, description

Response body

Path Type Description
uuids Array UUIDs of the added checks in request order

Replace mud checks

Replace the listed mud checks of a lateral as a whole: a field that is not sent is cleared, only source_type keeps its stored value. uuid is required for every check, a check without it answers 400, and a uuid that is not taken adds a new check. Checks that are not listed are kept. A uuid repeated in the request answers 400 DUPLICATE_MUD_CHECK_UUID. A mud check that is locked or private to another user answers 403 and nothing is replaced.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks' -i -X PUT \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "checks" : [ {
    "uuid" : "bc1bc187-759e-442d-b15c-23f870085499",
    "dtim" : "2026-10-21T06:00:00Z",
    "type" : "WBM",
    "mud_class" : "WATERBASED",
    "rheology_input" : "PV_YP",
    "description" : "Morning check, corrected",
    "engineer" : "J. Smith",
    "md" : {
      "value" : 3118.0,
      "uom" : "m",
      "datum" : "KB"
    },
    "mud_weight" : {
      "value" : 9.7,
      "uom" : "ppg"
    },
    "pv" : {
      "value" : 17.0,
      "uom" : "cP"
    },
    "ph" : 9.6
  } ]
}'
PUT /public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 506

{
  "checks" : [ {
    "uuid" : "bc1bc187-759e-442d-b15c-23f870085499",
    "dtim" : "2026-10-21T06:00:00Z",
    "type" : "WBM",
    "mud_class" : "WATERBASED",
    "rheology_input" : "PV_YP",
    "description" : "Morning check, corrected",
    "engineer" : "J. Smith",
    "md" : {
      "value" : 3118.0,
      "uom" : "m",
      "datum" : "KB"
    },
    "mud_weight" : {
      "value" : 9.7,
      "uom" : "ppg"
    },
    "pv" : {
      "value" : 17.0,
      "uom" : "cP"
    },
    "ph" : 9.6
  } ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: fcdfa2bdf2bbe204e3aa6b27d3648698

PUT /public/api/v1/wells/{well_uuid}/mud-checks

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
checks Array Checks to replace or to add, 1 to 1000, each with its uuid. A field that is not sent is cleared. The measures are fields of the check, there is no measures key: md, tvd, pres_bop_rating, temp_vis, temp_hthp, pres_hthp, filtrate_hthp, filter_cake_hthp, solids_calc_pc, barite_pc, temp_ph, alkalinity_p1, alkalinity_p2, magnesium, potassium, brine_pc, elect_stab, calcium_chloride, solids_hi_grav_pc, polymer, sol_cor_pc, oil_ctg, hardness_ca, sulfide, pv, yp, filter_cake_ltlp, calcium, chloride, filtrate_ltlp, temperature, gel10_sec, gel10_min, gel30_min, lcm, solids_low_grav_pc, lime, mbt, mf, mud_weight, oil_pc, pm_filtrate, pm, sand_pc, solids_pc, vis_funnel, water_pc, water_phase_salinity and cuttings_size are measures {value, uom, datum} in the unit the source gave, ph and cuttings_sg are plain numbers
checks[].uuid String UUID of the check to replace, or of a new check
checks[].source_type String Source of a new check: SOLOBOX, EMAIL, PASON, NABORS, INNOVA, NOV, DRIVE or WELLVIEW. A stored check keeps its stored source
checks[].uid String Identifier of the check in its source system, up to 200 characters
checks[].dtim String Time of the check, ISO 8601
checks[].type String Mud type: WBM, OBM or SBM
checks[].mud_class String Mud class: WATERBASED, OILBASED, OTHER, PNEUMATIC or UNKNOWN
checks[].rheology_input String How the rheology was given: FANN_READINGS or PV_YP
checks[].description String Free text, up to 8000 characters
checks[].engineer String Mud engineer, up to 200 characters
checks[].company_name String Mud company, up to 200 characters
checks[].location_sample String Where the sample was taken, up to 200 characters
checks[].asg String Average specific gravity of the solids as the source gave it, up to 200 characters
checks[].poly_type String Polymer type, up to 200 characters
checks[].md Object Measured depth of the check, a measure {value, uom, datum}
checks[].mud_weight Object Mud weight (density), a measure {value, uom, datum}
checks[].pv Object Plastic viscosity, a measure {value, uom, datum}
checks[].ph Number pH, a plain number
checks[].rheometer Object Rheometer readings: uid, the measures temp_rheom and pres_rheom, the dial readings vis3_rpm, vis6_rpm, vis100_rpm, vis200_rpm, vis300_rpm, vis600_rpm and extension_name_value as in the check
checks[].extension_name_value Array Name-value pairs the source attached to the check: uid, name, value (a measure), data_type, dtim, md (a measure), index (an integer), measure_class, description

Response body

Empty body

Delete mud checks

Delete the listed mud checks of a lateral. A uuid of no mud check is skipped. A mud check that is locked or private to another user answers 403 and nothing is deleted. The deletion cannot be undone through the API.

Request

$ curl 'https://solo.cloud/public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks/delete' -i -X POST \
    -H 'Authorization: Bearer <your_access_token>' \
    -H 'Content-Type: application/json' \
    -d '{
  "uuids" : [ "83bcf75b-c10e-403b-869f-e321f174f1aa" ]
}'
POST /public/api/v1/wells/6c1edf81-130c-4308-9fd1-1f0b386ef071/mud-checks/delete HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 58

{
  "uuids" : [ "83bcf75b-c10e-403b-869f-e321f174f1aa" ]
}

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a52e697a32aea00622a444a00d239523

POST /public/api/v1/wells/{well_uuid}/mud-checks/delete

Path parameter Description
well_uuid Well (lateral) UUID
Header Description
Authorization OAuth2 authorization header
Body field Type Description
uuids Array UUIDs of the checks to delete, 1 to 1000

Response body

Empty body

36. Drilling events

Drilling events record what happened on a well, at which MD and time. Events sit in event groups on a lateral, a typewell or a nested well, a group sets the custom attributes of its events. Categories belong to the project. A private event group or attribute of another user is not listed.

Get event groups by lateral

Get the drilling event groups of a lateral in creation order, with their attributes sorted by name and the number of events. A private group or attribute of another user is left out. Read the events by Get events by event group

Request

$ curl 'https://solo.cloud/public/api/v1/wells/b8872547-c8e2-43d2-9959-4800191bbd52/eventgroups?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/b8872547-c8e2-43d2-9959-4800191bbd52/eventgroups?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 3edcd1ca13a377bbbdb38206f53a75c3
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "2034554c-8995-49ef-a4db-7fc3ad5675bc",
    "name" : "Events",
    "attributes" : [ {
      "uuid" : "dd1673fb-3eb3-4710-a48c-78bf9b1ec431",
      "name" : "Cost",
      "type" : "NUMBER"
    }, {
      "uuid" : "3cb19767-d93a-4e5d-8d49-08aa1d60bf42",
      "name" : "Due",
      "type" : "DATE"
    }, {
      "uuid" : "92263453-f9b1-41d9-b43e-df9b623593df",
      "name" : "Note",
      "type" : "TEXT"
    } ],
    "events_count" : 2
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/wells/{uuid}/eventgroups

Path parameter Description
uuid Lateral UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event group UUID
content[].name String Event group name, not unique
content[].attributes Array Custom attributes of the events of the group, sorted by name
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type: NUMBER, TEXT or DATE
content[].events_count Number Number of events in the group

Get event groups by typewell

Get the drilling event groups of a typewell in creation order, with their attributes sorted by name and the number of events. A private group or attribute of another user is left out. Read the events by Get events by event group

Request

$ curl 'https://solo.cloud/public/api/v1/typewells/bcb181fb-8750-4021-92b9-4d77f3522664/eventgroups?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/bcb181fb-8750-4021-92b9-4d77f3522664/eventgroups?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: bae63f07711a9715f43cfcb4396c5138
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "13f81a0a-83db-4df1-b907-3b2865a064e2",
    "name" : "Events",
    "attributes" : [ ],
    "events_count" : 0
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/typewells/{uuid}/eventgroups

Path parameter Description
uuid Typewell UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event group UUID
content[].name String Event group name, not unique
content[].attributes Array Custom attributes of the events of the group, sorted by name
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type: NUMBER, TEXT or DATE
content[].events_count Number Number of events in the group

Get event groups by nested well

Get the drilling event groups of a nested well in creation order, with their attributes sorted by name and the number of events. A private group or attribute of another user is left out. Read the events by Get events by event group

Request

$ curl 'https://solo.cloud/public/api/v1/nestedwells/dfdac4a3-3184-41f5-9e35-022948ff6551/eventgroups?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/dfdac4a3-3184-41f5-9e35-022948ff6551/eventgroups?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a892642724575fef9a7012ad1943cf0b
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "01397655-f5b6-4859-9607-e4809143abb0",
    "name" : "Events",
    "attributes" : [ ],
    "events_count" : 0
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 1,
  "first" : true,
  "last" : true
}

GET /public/api/v1/nestedwells/{uuid}/eventgroups

Path parameter Description
uuid Nested well UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event group UUID
content[].name String Event group name, not unique
content[].attributes Array Custom attributes of the events of the group, sorted by name
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type: NUMBER, TEXT or DATE
content[].events_count Number Number of events in the group

Get event groups by project and name

Get the drilling event groups named name on all wells of a project in creation order, each with its parent well, its attributes sorted by name and the number of events. The name matches trimmed and case-insensitive. For a virtual project, only the groups of its wells and of their nested wells are returned. A private group or attribute of another user is left out. Read the events by Get events by event group

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4b31d56d-d727-46ed-a922-dd4ff321fc42/eventgroups?name=Events&offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/4b31d56d-d727-46ed-a922-dd4ff321fc42/eventgroups?name=Events&offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: a6260b9df36d7bfe0b3bdc2b249f37b1
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "2034554c-8995-49ef-a4db-7fc3ad5675bc",
    "name" : "Events",
    "parent_well" : {
      "uuid" : "b8872547-c8e2-43d2-9959-4800191bbd52",
      "name" : "Events lateral",
      "type" : "WELL"
    },
    "attributes" : [ {
      "uuid" : "dd1673fb-3eb3-4710-a48c-78bf9b1ec431",
      "name" : "Cost",
      "type" : "NUMBER"
    }, {
      "uuid" : "3cb19767-d93a-4e5d-8d49-08aa1d60bf42",
      "name" : "Due",
      "type" : "DATE"
    }, {
      "uuid" : "92263453-f9b1-41d9-b43e-df9b623593df",
      "name" : "Note",
      "type" : "TEXT"
    } ],
    "events_count" : 2
  }, {
    "uuid" : "01397655-f5b6-4859-9607-e4809143abb0",
    "name" : "Events",
    "parent_well" : {
      "uuid" : "dfdac4a3-3184-41f5-9e35-022948ff6551",
      "name" : "Events plan",
      "type" : "NESTEDWELL"
    },
    "attributes" : [ ],
    "events_count" : 0
  }, {
    "uuid" : "13f81a0a-83db-4df1-b907-3b2865a064e2",
    "name" : "Events",
    "parent_well" : {
      "uuid" : "bcb181fb-8750-4021-92b9-4d77f3522664",
      "name" : "Events typewell",
      "type" : "TYPEWELL"
    },
    "attributes" : [ ],
    "events_count" : 0
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 3,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/eventgroups

Path parameter Description
uuid Project UUID
Parameter Description
name Event group name, trimmed and case-insensitive
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event group UUID
content[].name String Event group name, not unique
content[].attributes Array Custom attributes of the events of the group, sorted by name
content[].attributes[].uuid String Attribute UUID
content[].attributes[].name String Attribute name
content[].attributes[].type String Attribute type: NUMBER, TEXT or DATE
content[].events_count Number Number of events in the group
content[].parent_well Object The well the group belongs to
content[].parent_well.uuid String Parent well UUID
content[].parent_well.name String Parent well name
content[].parent_well.type String Parent well type: WELL for a lateral, TYPEWELL or NESTEDWELL

Get events by event group

Get the drilling events of a group sorted by MD start, with their attribute values. MDs are in project units, times are UTC, a DATE value is a UTC time. category_uuid refers to Get event categories by project. Returns 403 for a private group of another user

Request

$ curl 'https://solo.cloud/public/api/v1/eventgroups/2034554c-8995-49ef-a4db-7fc3ad5675bc/events?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/eventgroups/2034554c-8995-49ef-a4db-7fc3ad5675bc/events?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 9ec18abf597b9e7c404274818fbf28dc
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "0dff0740-f81e-49a1-8b57-c42b12313e62",
    "category_uuid" : "f975426d-ad1f-432f-9d28-468a48896f2d",
    "md_start" : {
      "val" : 10250.0
    },
    "md_end" : {
      "val" : 10310.5
    },
    "start_time" : "2026-08-21T10:15:00Z",
    "end_time" : "2026-08-21T12:00:00Z",
    "severity" : "HIGH",
    "description" : "Stuck at the shoe",
    "attribute_values" : [ {
      "attribute_uuid" : "dd1673fb-3eb3-4710-a48c-78bf9b1ec431",
      "value" : {
        "val" : 1200.0
      }
    }, {
      "attribute_uuid" : "3cb19767-d93a-4e5d-8d49-08aa1d60bf42",
      "value" : "2026-08-22T00:00:00Z"
    }, {
      "attribute_uuid" : "92263453-f9b1-41d9-b43e-df9b623593df",
      "value" : "Rig down"
    } ]
  }, {
    "uuid" : "dda1175b-c9a4-4fab-ae65-41bbeb0029c8",
    "category_uuid" : "f975426d-ad1f-432f-9d28-468a48896f2d",
    "md_start" : {
      "val" : 10400.0
    },
    "attribute_values" : [ ]
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 2,
  "first" : true,
  "last" : true
}

GET /public/api/v1/eventgroups/{uuid}/events

Path parameter Description
uuid Event group UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event UUID
content[].category_uuid String Event category UUID, see Get event categories by project
content[].md_start.val Number MD start in project units
content[].md_end.val Number MD end in project units, absent when not set
content[].start_time String Start time, ISO-8601 UTC, absent when not set
content[].end_time String End time, ISO-8601 UTC, absent when not set
content[].severity String INSIGNIFICANT, LOW, MEDIUM, HIGH or EXTREME, absent when not set
content[].description String Event description, absent when not set
content[].attribute_values Array Values of the attributes of the group the event has, in the order of the attributes
content[].attribute_values[].attribute_uuid String Attribute UUID
content[].attribute_values[].value Varies {"val": number} for NUMBER, a string for TEXT, an ISO-8601 UTC time for DATE
content[].attribute_values[].value.val Number NUMBER value

Get event categories by project

Get the drilling event categories of a project: the predefined categories first, then those of the project in creation order. A virtual project lists the categories of its global project

Request

$ curl 'https://solo.cloud/public/api/v1/projects/4b31d56d-d727-46ed-a922-dd4ff321fc42/eventcategories?offset=0&limit=10' -i -X GET \
    -H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/4b31d56d-d727-46ed-a922-dd4ff321fc42/eventcategories?offset=0&limit=10 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud

Response

HTTP/1.1 200 OK
X-Solo-Trace-Id: 8361b4021ba4afa7fcab5e5bd4bf2df9
Content-Type: application/json

{
  "content" : [ {
    "uuid" : "9dd76105-000c-40ad-a787-59f663a70262",
    "name" : "Lost Circulation",
    "predefined" : true
  }, {
    "uuid" : "28000293-a2fb-458b-b816-ccac761b4af7",
    "name" : "Tight Hole",
    "predefined" : true
  }, {
    "uuid" : "81c912ab-c8f9-4502-9513-aea455867c57",
    "name" : "Downhole failure",
    "predefined" : true
  }, {
    "uuid" : "e3ab2db2-7ebb-48c2-a3f5-dfd14983597e",
    "name" : "Well Control",
    "predefined" : true
  }, {
    "uuid" : "a747716d-5b75-429c-930a-dd5a27f3c3d9",
    "name" : "Overpressure",
    "predefined" : true
  }, {
    "uuid" : "df94e69c-8144-4710-b9a2-4f2731a9797a",
    "name" : "Depletion",
    "predefined" : true
  }, {
    "uuid" : "b7836ebe-fe33-4613-8ac5-94df47f56116",
    "name" : "Stuck Pipe",
    "predefined" : true
  }, {
    "uuid" : "f975426d-ad1f-432f-9d28-468a48896f2d",
    "name" : "Low ROP",
    "predefined" : false
  } ],
  "offset" : 0,
  "limit" : 10,
  "total" : 8,
  "first" : true,
  "last" : true
}

GET /public/api/v1/projects/{uuid}/eventcategories

Path parameter Description
uuid Project UUID
Parameter Description
offset Index of the first record to return by a request from the list of all records
limit Maximum number of records to return by a request from the list of all records, starting with 'offset'
Header Description
Authorization OAuth2 authorization header

Response body

Path Type Description
content Array Content array
offset Number Index of the first record returned by a request from the list of all records
limit Number Maximum number of records returned by a request from the list of all records, starting with 'offset'
total Number Total number of records
first Boolean true if the current records range is the first, otherwise - false
last Boolean true if the current records range is the last, otherwise - false
content[].uuid String Event category UUID
content[].name String Event category name
content[].predefined Boolean true for a predefined category shared by every project

Errors

Error response body

All the errors have the following structure:

Path Type Description
message String The error details
type String Type of the error
trace_id String Trace ID of the request
solo_object_uuid String Optional. UUID of the object the error relates to, present only for some errors
solo_object_name String Optional. Name of the object the error relates to, present only for some errors
folder_uuid String Optional. UUID of the folder the error relates to, present only for some errors

400 Bad Request

The request cannot be fulfilled due to bad syntax, validation errors, missing data, etc. The type field tells the reason, for example INVALID_PARAMETER (a required query parameter is missing), INVALID_PARAMETER_TYPE (a parameter value, such as a UUID, is malformed) or INVALID_REQUEST_BODY (the request body is invalid or cannot be read). Data refused by the calculation engine, such as the layers of an earth model, is rejected with INVALID_REQUEST_BODY too, the message names the reason.

Response

HTTP/1.1 400 Bad Request
{
  "message": "Missing required request parameters: offset",
  "trace_id": "d369294dba75b176",
  "type": "INVALID_PARAMETER"
}

401 Unauthorized

The request cannot be fulfilled due to incorrect access credentials, missing or invalid authentication token.

Response

HTTP/1.1 401 Unauthorized
{
  "message": "Unauthorized access",
  "trace_id": "d369294dba75b177",
  "type": "UNAUTHORIZED"
}

403 Forbidden

The request cannot be fulfilled due to lack of access to perform an operation. Endpoints that take a project UUID usually return 403 also when the project does not exist.

Response

HTTP/1.1 403 Forbidden
{
  "message": "Access is denied",
  "trace_id": "d369294dba75b178",
  "type": "FORBIDDEN"
}

404 Not Found

The requested object not found.

Response

HTTP/1.1 404 Not Found
{
  "message": "Object with uuid 1b9f6a0e-3c7d-4a52-9e1f-2d8c5b7a6e40 not found",
  "trace_id": "d369294dba75b180",
  "type": "NOT_FOUND"
}

406 Not Acceptable

Some endpoints reject an invalid parameter value (INVALID_PARAMETER) or a request body in a wrong format (INVALID_REQUEST_BODY_FORMAT, for example grid, polygon, stick and image log uploads) with 406. 406 is also returned when the Accept header does not match what the endpoint produces.

Response

HTTP/1.1 406 Not Acceptable
{
    "message": "Only one of the parameters 'epsg_mnemonic' or 'epsg_crs_code' may be specified at a time",
    "trace_id": "d4e9313ff6267dd5",
    "type": "INVALID_PARAMETER"
}

409 Conflict

Request could not be processed because of conflict in the current state of the resource (such as an edit conflict between multiple simultaneous updates). PROJECT_BUSY means the project was busy with other changes and nothing of the request was applied: repeat the same request.

Response

HTTP/1.1 409 Conflict
{
    "message": "Requested change cannot be applied",
    "trace_id": "4844645175526a44",
    "type": "NOT_ACCEPTED"
}

415 Unsupported Media Type

The request Content-Type is not supported by the endpoint, for example a body other than JSON is sent to an endpoint that expects application/json.

Response

HTTP/1.1 415 Unsupported Media Type
{
  "message": "Content-Type 'text/plain;charset=ISO-8859-1' is not supported",
  "trace_id": "d369294dba75b179",
  "type": "INVALID_REQUEST_BODY"
}

500 Internal Server Error

The request cannot be fulfilled due to internal server error.

Response

HTTP/1.1 500 Internal server error
{
  "message": "Internal server error",
  "trace_id": "d369294dba75b181",
  "type": "INTERNAL_ERROR"
}

503 Service Unavailable

The request cannot be fulfilled due to temporary server unavailability. Please retry the request later. You can find the detailed information in the error response body.

Response

HTTP/1.1 503 Service Unavailable
{
  "message": "Service is unavailable, please try again later",
  "trace_id": "d369294dba75b182",
  "type": "SERVICE_UNAVAILABLE"
}

License agreement

Copyright 2022 Rogii Inc. These API Terms form a binding "Agreement" between You and Rogii Inc. (“Rogii”) "You," and "your," refers to the individual, company or legal entity that you represent. The Agreement does not grant You any right to access or use: (a) Solo Cloud platform and associated tools and applications (the "Services"); (b) any of Rogii’s non-public application programming interfaces; or (c) the confidential geoscience and drilling data owned by third parties stored in Solo Cloud. If You wish to access the Services, You will be required to enter into separate license agreements with Rogii for the Services.

DEFINITIONS

“Software Application” means software authored by You that accesses or otherwise interoperates with Solo Cloud via the Solo Cloud Public API.

“Solo Cloud” means Rogii’s proprietary multi-tenant cloud system and database which contains confidential geoscience and drilling data owned by third parties.

“Solo Cloud Public API” means a collection of routines, classes, function parameters, protocols, related libraries, tools and other instructions provided in source code or object code form that allow access to or interoperability with Solo Cloud by a Software Application.

“Python SDK” means the software development kit of tools developed by Rogii that enables access to the capabilities and features of Solo Cloud through the utilization of Solo Cloud Public API.

  1. Rogii grants You a world-wide, non-exclusive, revocable limited license, under applicable copyrights, to Use the Solo Cloud Public API or Python SDK, as applicable, only as necessary to develop, test, enable and support interoperability between the Software Application and Solo Cloud.

  2. You will not: (A) access Solo Cloud Public API or Python SDK or their documentation in violation of any law or regulation; (B) access Solo Cloud Public API or Python SDK in any manner that (i) compromises, breaks or circumvents any of Rogii’s technical processes or security measures associated with Solo Cloud, (ii) poses a security vulnerability to customers or users of Solo Cloud, or (iii) tests the vulnerability of Rogii’s systems or networks; (C) access Solo Cloud Public API or Python SDK or their documentation in order to replicate or compete with Solo Cloud; (D) attempt to reverse engineer or otherwise derive source code, trade secrets, or know-how of Solos Cloud API, Python SDK or Solo Cloud; or (E) attempt to use Solo Cloud Public API or Python SDK in a manner that exceeds rate limits, or constitutes excessive or abusive usage.

  3. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

  4. THE SOLO CLOUD PUBLIC API, PYTHON SDK AND THEIR DOCUMENTATION AND ALL RELATED COMPONENTS AND INFORMATION ARE PROVIDED BY US ON AN "AS IS" AND "AS AVAILABLE" BASIS WITHOUT ANY WARRANTIES OF ANY KIND, AND WE EXPRESSLY DISCLAIM ANY AND ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, TITLE, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. YOU ACKNOWLEDGE THAT ROGII DOES NOT WARRANT THAT THE SOLO CLOUD PUBLIC API OR PYTHON SDK WILL BE UNINTERRUPTED, TIMELY, SECURE, ERROR-FREE, OR BACKWARDS COMPATIBLE.

  5. You shall defend, indemnify and hold harmless Rogii, its affiliates and their respective officers, directors, employees, agents and representatives from any and all claims, damages, liabilities, costs and fees (including reasonable attorneys’ fees) arising from the Software Application. The Parties agree to comply with the following process when Rogii seeks indemnification under this section and specifically that Rogii is to: (i) promptly give You written notice of the claim; (ii) give You sole control of the defense and settlement of the claim (provided that You may not settle any claim unless it unconditionally releases Rogii of all liability); and (iii) provide You, at Your cost, all reasonable assistance.

  6. TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL ROGII BE RESPONSIBLE OR LIABLE WITH RESPECT TO ANY SUBJECT MATTER OF THIS AGREEMENT UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER THEORY FOR: (I) LOSS OR INACCURACY OF DATA OR COST OF PROCUREMENT OF SUBSTITUTE GOODS, SERVICES, OR TECHNOLOGY; OR (II) ANY INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO LOSS OF REVENUES OR PROFITS; (III) ANY MATTER BEYOND ITS REASONABLE CONTROL; OR (IV) ANY AMOUNT IN THE AGGREGATE OVER $100

  7. Rogii may terminate this Agreement immediately upon written notice if You breach this Agreement. Rogii may, at its sole discretion, reinstate Your ability to use the Solo Cloud Public API if You demonstrate that You have remedied any such breach.

  8. Notwithstanding the foregoing, Sections 4-6 of this Agreement will survive any termination of this Agreement.