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:
- Project
- Lateral
- Interpretation
- Horizon
- Earth model
- Nested well (PAPI term for Well Plan)
- Topset
- Top
- Topset
- Log
- Image log
- Mudlog
- Topset
- Top
- Image
- Target line
- Comment
- Comment box
- Completion
- Folder
- Hole section
- BHA run
- Torque and drag model
- Casing
- Torque and drag model
- Roadmap
- Interpretation
- Typewell
- Log
- Mudlog
- Topset
- Top
- Completion
- Folder
- Grid
- Polygon
- Stick
- Log family
- Reference list
- Lateral
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:
val- field holds a valueundefined- field which istrueif 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: a2a3a5a43aacd746aa3855eea7199f28
X-Solo-Device-Identifier: lPt5e7e1L4EIJVCfMYn1pc6icchOd5pbvjVCk42tAUXT+FWXYHV45jM65SfAwmHNVT63qTMjm6FIhNwLoDiMkw==
Set-Cookie: device-identifier=lPt5e7e1L4EIJVCfMYn1pc6icchOd5pbvjVCk42tAUXT+FWXYHV45jM65SfAwmHNVT63qTMjm6FIhNwLoDiMkw==; Domain=rogii.net; Path=/auth/api/v2; HttpOnly; SameSite=Strict
Set-Cookie: SESSION=NTJhMTY2ZjItMTA5ZS00ZmU1LWE3OGItMjBiM2Y2ZjUwM2Fj; Max-Age=2147483647; Expires=Tue, 2 Nov 2094 19:34:38 GMT; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=NTJhMTY2ZjItMTA5ZS00ZmU1LWE3OGItMjBiM2Y2ZjUwM2Fj; Max-Age=2147483647; Expires=Tue, 2 Nov 2094 19:34:38 GMT; Domain=rogii.com; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=NTJhMTY2ZjItMTA5ZS00ZmU1LWE3OGItMjBiM2Y2ZjUwM2Fj; Max-Age=2147483647; Expires=Tue, 2 Nov 2094 19:34:38 GMT; Domain=solo.cloud; Path=/; HttpOnly; SameSite=Strict
Set-Cookie: SSO-SESSION=NTJhMTY2ZjItMTA5ZS00ZmU1LWE3OGItMjBiM2Y2ZjUwM2Fj; Max-Age=2147483647; Expires=Tue, 2 Nov 2094 19:34:38 GMT; Domain=testsolo.rogii.net; Path=/; HttpOnly; SameSite=Strict
Authorization: 52a166f2-109e-4fe5-a78b-20b3f6f503ac
Content-Type: application/json;charset=UTF-8
{
"access_token" : "eyJraWQiOiJvRDd2aGVEcUJ6RWh2R0RGUDBZYy1Gc0hQS3lDS0lfYWhZRU83NFBQRVdnIiwiYWxnIjoiUlMyNTYifQ.eyJjb21wYW55X2lkIjoyMDAwMywiY2xpZW50X2FwcF9pZCI6InBhcGkiLCJwZXJzb25fdHlwZSI6IlNUQUZGIiwidXNlcl9uYW1lIjoidGVzdCthcGlAdGVzdC5jb20iLCJjbGllbnRfaW5pdF9pcCI6IjEwLjQyLjAuMjciLCJpc3MiOiJodHRwczovL2xvc29sby1zc28ucm9naWkubmV0IiwidXNlcl9kaWdlc3QiOiI4YjllZWEzNzc3IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9TVEFGRiJdLCJjbGllbnRfaWQiOiJzb2xvLWFwaS1jbGllbnQtaWQiLCJhdWQiOiJzb2xvLXB1YmxpYy1hcGkiLCJ1c2VyX2lkIjoxNDk3LCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTc5MjA5MTIzMSwiaWF0IjoxNzkyMDgxMjMxLCJqdGkiOiJkZDU4NmQ4OC00MTU1LTQ3YWMtODM3OC1hNWQzMWFjZWZkZjQifQ.mqcV0WfSj_XqW-xKzbe8hV08CJCFMILZaESFGTeVOT6hrPghLEaLyUmkQQgehh8aGGVICuHa4umsG9RpjIDG1dERdbGSAgQmF71l8VDvxxVWUD2mBfYi4HienyhFsQAPH4e9fpK4221o5cPjvHHjv8rUULYQW-i2ozjGNMruB03c1wGTADlsPHRV2J0dcH9FYiRGmCsc04nut34x1dqF9wEW3PTVggngXZqxAs9gj6TjykgnMb249LPuoeyL0J_XQ04-jjC5Lyzt3NQwLPZSYqk9olQVWOZSIWR60u9XergmfqYyRbtUu3JHBTDnHyMU8DWTiQ_uQR8zfqY7Rbl6xA",
"refresh_token" : "eyJraWQiOiJvRDd2aGVEcUJ6RWh2R0RGUDBZYy1Gc0hQS3lDS0lfYWhZRU83NFBQRVdnIiwiYWxnIjoiUlMyNTYifQ.eyJjb21wYW55X2lkIjoyMDAwMywiY2xpZW50X2FwcF9pZCI6InBhcGkiLCJwZXJzb25fdHlwZSI6IlNUQUZGIiwidXNlcl9uYW1lIjoidGVzdCthcGlAdGVzdC5jb20iLCJjbGllbnRfaW5pdF9pcCI6IjEwLjQyLjAuMjciLCJpc3MiOiJodHRwczovL2xvc29sby1zc28ucm9naWkubmV0IiwidXNlcl9kaWdlc3QiOiI4YjllZWEzNzc3IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9TVEFGRiJdLCJjbGllbnRfaWQiOiJzb2xvLWFwaS1jbGllbnQtaWQiLCJhdWQiOiJzb2xvLXB1YmxpYy1hcGkiLCJ1c2VyX2lkIjoxNDk3LCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTc5MjExMTIzMSwiaWF0IjoxNzkyMDgxMjMxLCJqdGkiOiI4Mzg1MTMxNy0zOGE5LTQ0Y2QtYmU2Ny1mMzNhZTI4YzI2YzUifQ.RWkMz2TQG8sIP4aFed98tcTmg7hbEX1kI3fV7TFJrRxW6k1nYb5wj7WIm3h5AkdI3KjWc4aotvp8VcmFAtLlCPSQjQMDTt6Eaff41bAkeQe6IL1CWMKgobCbbgx1CwAYnh8OZbW4oRwGXgKxx1GAbjh1SlT_eP_v4aT094DlIjCraNpZVzAiNaw85yyGZQVHtoVIwyvIS82C-S7T750XIGwU-OEhLZtHdjjn_ZuGB2D4vkrLgRNMVL-hQrR9fzmAKkwwLwpo38CGzNNos18Vj_ai10ylWyzWgNNAWhS_trlBNSZfJIHdNy6jyS1g0QVbNmc8QvsCrfVHmxrIm3zykg",
"scope" : "read",
"token_type" : "Bearer",
"expires_in" : 9999,
"iat" : 1792081231,
"jti" : "dd586d88-4155-47ac-8378-a5d31acefdf4"
}
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 credentialscredentials 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/f599ce4e-6559-4036-98a8-39204f18ae19/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/f599ce4e-6559-4036-98a8-39204f18ae19/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: cba54a3bac100768c953a29c966f8589
Content-Type: application/json
{
"uuid" : "c478a4a7-89b8-411f-939e-683056f627d1"
}
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/c478a4a7-89b8-411f-939e-683056f627d1/entities' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"wells" : [ "d8d7efb1-42ea-42e1-899e-434a37514554", "10e7b61b-5f81-4814-907e-25a4e4174bc7" ],
"typewells" : [ "e722d924-93e6-4dde-addc-a78d1c6ecf8a", "9d50017d-14b5-47da-ae4b-5988fa44e8dd" ],
"grids" : [ "8bb3a5d9-6576-41f2-8b9a-32e97d0daa50" ],
"polygons" : [ "aab8d8a4-9abd-486b-97d3-35fb809f3cdf" ],
"sticks" : [ "56d8bd8e-0a7a-4d35-b8b6-85c640e45f70" ]
}'
POST /public/api/v1/projects/virtual/c478a4a7-89b8-411f-939e-683056f627d1/entities HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 370
{
"wells" : [ "d8d7efb1-42ea-42e1-899e-434a37514554", "10e7b61b-5f81-4814-907e-25a4e4174bc7" ],
"typewells" : [ "e722d924-93e6-4dde-addc-a78d1c6ecf8a", "9d50017d-14b5-47da-ae4b-5988fa44e8dd" ],
"grids" : [ "8bb3a5d9-6576-41f2-8b9a-32e97d0daa50" ],
"polygons" : [ "aab8d8a4-9abd-486b-97d3-35fb809f3cdf" ],
"sticks" : [ "56d8bd8e-0a7a-4d35-b8b6-85c640e45f70" ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 43aa18ee4af1a2e002e53cca920ec6f5
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: 185185ba272a522185de73698b178a8e
Content-Type: application/json
{
"content" : [ {
"uuid" : "658d5741-80e2-4515-bcd4-dc191c3207ab",
"name" : "Papi test project 1",
"measure_unit" : "FOOT",
"role" : "MANAGER",
"accessed_on" : "2026-10-15T16:20:27Z",
"modified_on" : "2026-10-15T16:20:27Z"
}, {
"uuid" : "679d0857-80fc-40ff-9684-6b3ac549a30b",
"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-10-15T16:20:27Z",
"modified_on" : "2026-10-15T16:20:27Z"
}, {
"uuid" : "f599ce4e-6559-4036-98a8-39204f18ae19",
"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-10-15T16:20:27Z",
"modified_on" : "2026-10-15T16:20:27Z"
} ],
"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: 309273dcd8afaa3aee1343c820117a90
Content-Type: application/json
{
"content" : [ {
"uuid" : "5180335e-e9b0-4c6f-a42e-b21b0a9e8ffe",
"name" : "Virtual Papi test project 1",
"measure_unit" : "FOOT",
"role" : "MANAGER",
"parent_uuid" : "658d5741-80e2-4515-bcd4-dc191c3207ab",
"parent_name" : "Papi test project 1",
"virtual" : true,
"modified_on" : "2026-10-15T16:20:27Z"
}, {
"uuid" : "9546718b-3632-42a8-acf6-51685050a432",
"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" : "679d0857-80fc-40ff-9684-6b3ac549a30b",
"parent_name" : "Papi test project 2",
"virtual" : true,
"modified_on" : "2026-10-15T16:20:27Z"
}, {
"uuid" : "02c38fe6-745a-4ab4-9ac0-f0d0ef96ec90",
"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" : "f599ce4e-6559-4036-98a8-39204f18ae19",
"parent_name" : "Papi test project 3",
"virtual" : true,
"modified_on" : "2026-10-15T16:20:27Z"
} ],
"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/f599ce4e-6559-4036-98a8-39204f18ae19' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/projects/f599ce4e-6559-4036-98a8-39204f18ae19 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: 82d2475e4d043bb8b15b3d44d7f6cae7
Content-Type: application/json
{
"uuid" : "f599ce4e-6559-4036-98a8-39204f18ae19",
"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-10-15T16:20:27Z",
"modified_on" : "2026-10-15T16:20:27Z"
}
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/f599ce4e-6559-4036-98a8-39204f18ae19/changes' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"modified_since" : "2026-10-15T16:19:27.554Z"
}'
POST /public/api/v1/projects/f599ce4e-6559-4036-98a8-39204f18ae19/changes HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 51
{
"modified_since" : "2026-10-15T16:19:27.554Z"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 306e18f7d17a692b9ae7e780ac61e913
Content-Type: application/json
{
"content" : [ {
"uuid" : "d8d7efb1-42ea-42e1-899e-434a37514554",
"type" : "WELL",
"operation" : "CREATE"
}, {
"uuid" : "e722d924-93e6-4dde-addc-a78d1c6ecf8a",
"type" : "TYPEWELL",
"operation" : "CREATE"
} ],
"modified_on" : "2026-10-15T16:20:27.975Z",
"modified_at" : "2026-10-15T16:20:27.975+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/c478a4a7-89b8-411f-939e-683056f627d1' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/projects/virtual/c478a4a7-89b8-411f-939e-683056f627d1 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: af74afdc4e39376c47705ec595f11e4f
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/c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa/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/c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa/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: 37444c96450db9a60075861dfb7bb246
Content-Type: application/json
{
"uuid" : "bc7f5285-c5f2-4ee5-9acf-56d9384663b2"
}
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/c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa/wells?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa/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: 07714ca8379a8b35d8123aba9c1821fc
Content-Type: application/json
{
"content" : [ {
"uuid" : "16112f8e-5053-4985-924f-672885419f8d",
"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: e0802a2ba1128590dc15b5d9ebb7223e
Content-Type: application/json
{
"content" : [ {
"uuid" : "ac46e73f-b154-49c6-8685-f05adfb455a3",
"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" : "c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa",
"project_role" : "MANAGER"
}, {
"uuid" : "502de74d-d3ef-4adc-82bf-5113a83b3af9",
"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" : "c35c6ec9-81f4-4e3d-a81d-dde10d94c7aa",
"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/502de74d-d3ef-4adc-82bf-5113a83b3af9' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/502de74d-d3ef-4adc-82bf-5113a83b3af9 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: dfe13ca2f0b86d4a6bbce8f053487064
Content-Type: application/json
{
"uuid" : "502de74d-d3ef-4adc-82bf-5113a83b3af9",
"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/945b51fb-d9f4-4646-b5d6-7d3288e81479/ellipses' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/laterals/945b51fb-d9f4-4646-b5d6-7d3288e81479/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 912f56e616f5d8a5cc9e45ab9598d6a0
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/753f79b2-0328-437b-8909-956126dac526/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/wells/753f79b2-0328-437b-8909-956126dac526/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: abfb18a43db3e0072709dc68d2874a79
Content-Type: application/json
{
"target_line" : "f2c19437-82e6-40a6-89a8-17a7c2360b29",
"nested_well" : "1167f35d-fc94-4cd7-ab7a-84738d1516e1",
"interpretation" : "f7181296-086e-423b-872d-1a99475ed0e1",
"topset" : "1d2b0079-b709-49ca-8b25-f6351034391d"
}
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/bfa97005-8427-4c7e-9a37-a2d0143e1a14/linked?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/wells/bfa97005-8427-4c7e-9a37-a2d0143e1a14/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: 6a5b6485850535ef08532e40ab05d94a
Content-Type: application/json
{
"content" : [ {
"shift" : {
"val" : 1640.4199475065616
},
"typewell_id" : "b59f74ea-dd74-4c8b-91ee-e14bf5b8be7f"
} ],
"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/dfdd7f7d-a08b-4d5a-952c-e6868bd77fd3/bitprojection' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/wells/dfdd7f7d-a08b-4d5a-952c-e6868bd77fd3/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: fd9f9b6a9726529a54f02d95c1a905f1
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/16112f8e-5053-4985-924f-672885419f8d' -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/16112f8e-5053-4985-924f-672885419f8d 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: 26f5872e44a4321e3b362ddb584f241a
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/753f79b2-0328-437b-8909-956126dac526/starred' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"targetline" : "f2c19437-82e6-40a6-89a8-17a7c2360b29",
"nestedwell" : "1167f35d-fc94-4cd7-ab7a-84738d1516e1",
"interpretation" : "f7181296-086e-423b-872d-1a99475ed0e1",
"topset" : "1d2b0079-b709-49ca-8b25-f6351034391d"
}'
PUT /public/api/v1/wells/753f79b2-0328-437b-8909-956126dac526/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 230
{
"targetline" : "f2c19437-82e6-40a6-89a8-17a7c2360b29",
"nestedwell" : "1167f35d-fc94-4cd7-ab7a-84738d1516e1",
"interpretation" : "f7181296-086e-423b-872d-1a99475ed0e1",
"topset" : "1d2b0079-b709-49ca-8b25-f6351034391d"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: b28d7fe9c59fd2e3e93eb758faee8418
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/94d2c06d-d29c-423f-86f8-70a0cfe4d7d6/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/94d2c06d-d29c-423f-86f8-70a0cfe4d7d6/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: 8f0e905680f1ba627b584a456632b3fd
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 typewell
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/16112f8e-5053-4985-924f-672885419f8d/linked' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"typewell_id" : "35e6be54-b75b-4d87-9b45-2f266fd480fb",
"shift" : {
"val" : 500.0
}
}'
POST /public/api/v1/wells/16112f8e-5053-4985-924f-672885419f8d/linked HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 97
{
"typewell_id" : "35e6be54-b75b-4d87-9b45-2f266fd480fb",
"shift" : {
"val" : 500.0
}
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: c32bc50e4ad2c7fe401b48e6e4fb137f
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/43076c47-0185-4adc-8d59-d923ec3491dc/lock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/wells/43076c47-0185-4adc-8d59-d923ec3491dc/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: d73195d1bef08ce9c241b3c177c8c57d
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/51e98ecb-d7f3-4453-8b75-218720e83274/unlock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/wells/51e98ecb-d7f3-4453-8b75-218720e83274/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: ce64f5235e5aa820c5d23bd794327e67
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/4c8110de-faa6-4644-b9e3-b641da794ed8' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/wells/4c8110de-faa6-4644-b9e3-b641da794ed8 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: bd8449d83b634402856415b696350b77
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/77e8165d-aa8c-4efd-9c51-9b04cffe153c/interpretations' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Interpretation name"
}'
POST /public/api/v1/wells/77e8165d-aa8c-4efd-9c51-9b04cffe153c/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: 59d8244d6f8eab0bb8b14bd5c759eb35
Content-Type: application/json
{
"uuid" : "1ba493b6-2531-4478-9842-c34a96574701"
}
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:
- segments must be in strictly increasing
start_mdorder, everystart_mdmust lie within the trajectory MD range, gaps between consecutive segments and from the last segment to the trajectory end must be at least 0.1 ft; - a boundary between two segments is continuous when
|previous end_shift - start_shift| <= 0.01project units, the segment then starts from the previousend_shiftand the submittedstart_shiftis not used; - a larger step makes a fault, such segments are named
Fault1,Fault2, ... in the order they are written; - the first segment always keeps its
start_shift.
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/6afe3cda-d0e3-477d-93c6-fac6f2b55cfd/interpretations/bulk' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "AI_interpretation 1",
"source_interpretation_uuid" : "7757d46f-7424-446c-8d8c-13f38d54e7ce",
"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/6afe3cda-d0e3-477d-93c6-fac6f2b55cfd/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" : "7757d46f-7424-446c-8d8c-13f38d54e7ce",
"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: 4ff1dfd0f2ee52f9bf5632527a18464b
Content-Type: application/json
{
"uuid" : "163b793e-0cc1-4a15-af61-13474e90cf5c",
"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/100e8fe4-5b40-4403-88a7-70f58f61ca93/segments?horizontal_scale=MD' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"uuid" : "e38acf74-c0f3-4ad1-b490-6f67bd374c74",
"md" : {
"val" : 1500.0
},
"dip" : {
"val" : 30.0
},
"throw" : {
"val" : 15.0
}
}'
POST /public/api/v1/interpretations/100e8fe4-5b40-4403-88a7-70f58f61ca93/segments?horizontal_scale=MD HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158
{
"uuid" : "e38acf74-c0f3-4ad1-b490-6f67bd374c74",
"md" : {
"val" : 1500.0
},
"dip" : {
"val" : 30.0
},
"throw" : {
"val" : 15.0
}
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: bee518f233d35e55803a0a3df9dc987e
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/77e8165d-aa8c-4efd-9c51-9b04cffe153c/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/77e8165d-aa8c-4efd-9c51-9b04cffe153c/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: 696870e6cf96ed6175c95c5aada50e10
Content-Type: application/json
{
"content" : [ {
"uuid" : "a300d5f6-d6fd-4956-ac7c-7fb393a561a7",
"name" : "test interpretation 1",
"format" : {
"extension_grid_uuid" : "00000000-0000-0000-0000-000000000000",
"reverse_extension" : false,
"auto_typewell_shift" : true
},
"mode" : "PUBLIC"
}, {
"uuid" : "863fed96-12b3-44ff-9e87-fbbd5bcd0c05",
"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
Request
$ curl 'https://solo.cloud/public/api/v1/interpretations/f97e9de2-30a8-4264-82ce-7a3883eb4860/segments?horizontal_scale=MD' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/interpretations/f97e9de2-30a8-4264-82ce-7a3883eb4860/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: a4e3bc21326480c2cad73a582a8afa26
Content-Type: application/json
{
"content" : [ {
"uuid" : "5bdc0585-bcb7-4d62-b8ac-2f7e6c953a1b",
"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" : "23f86a74-6ea1-4391-82f0-f582d7090f20",
"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" : "e1d91665-3ae5-4fab-9759-c9d85f86a22a",
"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 starred objects
Get starred objects by interpretation UUID
Request
$ curl 'https://solo.cloud/public/api/v1/interpretations/f5c7ab03-8c4b-494e-bb5b-49f0bd6a1db6/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/interpretations/f5c7ab03-8c4b-494e-bb5b-49f0bd6a1db6/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: d808c848ce7749585a2f47bd8285597d
Content-Type: application/json
{
"top" : "7390fad0-3434-40b8-b283-8ac70c6ddeb6",
"center" : "1c6968d6-8d80-41b7-b12d-c7eae2497c67",
"bottom" : "3fa11cc9-60cd-4ed2-b90b-199ef4c83ee2"
}
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/f5c7ab03-8c4b-494e-bb5b-49f0bd6a1db6/starred' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"top" : "7390fad0-3434-40b8-b283-8ac70c6ddeb6",
"center" : "1c6968d6-8d80-41b7-b12d-c7eae2497c67",
"bottom" : "3fa11cc9-60cd-4ed2-b90b-199ef4c83ee2"
}'
PUT /public/api/v1/interpretations/f5c7ab03-8c4b-494e-bb5b-49f0bd6a1db6/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158
{
"top" : "7390fad0-3434-40b8-b283-8ac70c6ddeb6",
"center" : "1c6968d6-8d80-41b7-b12d-c7eae2497c67",
"bottom" : "3fa11cc9-60cd-4ed2-b90b-199ef4c83ee2"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: bc4a4544570b4e3c92163ed91fb699a5
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. Only typewells linked to the lateral are considered. The list is empty when the interpretation has fewer than two horizons
Request
$ curl 'https://solo.cloud/public/api/v1/interpretations/6df73ba2-7186-4ef8-8d82-d4bb307e5453/autotypewells' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/interpretations/6df73ba2-7186-4ef8-8d82-d4bb307e5453/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: d2542668b34c0223e30eba0790c23ed5
Content-Type: application/json
{
"content" : [ {
"auto_typewell_uuid" : "ac1dd201-b0d6-4232-b62d-f553886ba65e"
} ]
}
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/8aefe944-6d99-4a03-811e-28fbde7e30a8/autotypewellshift' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"enabled" : false
}'
PUT /public/api/v1/interpretations/8aefe944-6d99-4a03-811e-28fbde7e30a8/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: 234c42f72cee869284eb643a7271fd07
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/2eac3f2e-47cb-48af-bd6a-95929b6ccc53/segments?horizontal_scale=MD' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"uuid" : "818be045-2884-4640-bd34-c247bb88fb82",
"md" : {
"val" : 1500.0
},
"dip" : {
"val" : 60.0
},
"throw" : {
"val" : 25.0
}
}'
PATCH /public/api/v1/interpretations/2eac3f2e-47cb-48af-bd6a-95929b6ccc53/segments?horizontal_scale=MD HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158
{
"uuid" : "818be045-2884-4640-bd34-c247bb88fb82",
"md" : {
"val" : 1500.0
},
"dip" : {
"val" : 60.0
},
"throw" : {
"val" : 25.0
}
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 169ea89af615340deb675e1e63b84d27
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/14d0108c-cd36-4876-9435-390a1675f00c/segments/59cbeb47-aaac-4982-b879-7df6f7629c48' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/interpretations/14d0108c-cd36-4876-9435-390a1675f00c/segments/59cbeb47-aaac-4982-b879-7df6f7629c48 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: 69a65be01366a881e42ec89696ebaaee
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/890fcff9-859d-45bf-a575-ac257a6b0235/lock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/interpretations/890fcff9-859d-45bf-a575-ac257a6b0235/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 0dc4d99a05253d70448832bfcc7a4a5a
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/6bde46cd-7e3a-405f-ba5b-ff06b3e0bb63/unlock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/interpretations/6bde46cd-7e3a-405f-ba5b-ff06b3e0bb63/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: d92133f27e02884c1af15b2fda288a0a
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/24867158-1158-4841-ae1a-a2f1940fc71d/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/24867158-1158-4841-ae1a-a2f1940fc71d/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: c5d7391caa9d0e5ee4d8d1a3bb2de0ec
Content-Type: application/json
{
"content" : [ {
"name" : "Test horizon 1",
"uuid" : "4ec2ec7f-4dce-48ae-9faf-35ebd915050d"
}, {
"name" : "Test horizon 2",
"uuid" : "b43e3ac3-b5d7-472b-819c-579eaa4ea14e"
}, {
"name" : "Test horizon 3",
"uuid" : "056e2868-6466-45cf-9feb-57c138d6cf41"
} ],
"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/0d52510d-d91e-4602-af80-c87a502655e4/horizons/data/spacing/5000' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/interpretations/0d52510d-d91e-4602-af80-c87a502655e4/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: 78f96cb849ee1a9d52c401b16d4e6313
Content-Type: application/json
{
"content" : [ {
"azimuth" : {
"val" : 71.543
},
"horizons" : [ {
"name" : "!new Hor",
"tvdss" : {
"val" : 22.965879265091868
},
"uuid" : "d1609437-a5d8-4b0f-9fd3-d1e1777df5e5"
}, {
"name" : "Horizon1",
"tvdss" : {
"val" : -3257.8740157480324
},
"uuid" : "e68d6b30-0517-4695-8ee0-44ab7968c84f"
} ],
"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" : "d1609437-a5d8-4b0f-9fd3-d1e1777df5e5"
}, {
"name" : "Horizon1",
"tvdss" : {
"val" : -3257.8740157480324
},
"uuid" : "e68d6b30-0517-4695-8ee0-44ab7968c84f"
} ],
"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/67665e22-65f6-4eca-a18a-5f02c4c8a789/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/67665e22-65f6-4eca-a18a-5f02c4c8a789/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: 07db4d987e2c15190007805f4c9494e7
Content-Type: application/json
{
"content" : [ {
"azimuth" : {
"val" : 71.543
},
"horizons" : [ {
"name" : "!new Hor",
"tvdss" : {
"val" : 22.965879265091868
},
"uuid" : "d1609437-a5d8-4b0f-9fd3-d1e1777df5e5"
}, {
"name" : "Horizon1",
"tvdss" : {
"val" : -3257.8740157480324
},
"uuid" : "e68d6b30-0517-4695-8ee0-44ab7968c84f"
} ],
"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" : "d1609437-a5d8-4b0f-9fd3-d1e1777df5e5"
}, {
"name" : "Horizon1",
"tvdss" : {
"val" : -3257.8740157480324
},
"uuid" : "e68d6b30-0517-4695-8ee0-44ab7968c84f"
} ],
"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" : "0d52510d-d91e-4602-af80-c87a502655e4"
},
"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/8c2412d7-47df-4744-be16-48136f7dcfe1/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/8c2412d7-47df-4744-be16-48136f7dcfe1/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: 5057dd09f90dd3bcb868ed9a738e1609
Content-Type: application/json
{
"uuid" : "22645513-21c9-4db4-82f3-f7ddf5bec5d9"
}
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/b07503c5-a5ab-42ae-8816-8c24cf08723c/nestedwells?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/b07503c5-a5ab-42ae-8816-8c24cf08723c/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: 6251a7b8b32850327a589d3e195c21a5
Content-Type: application/json
{
"content" : [ {
"uuid" : "cbe6b75d-9587-4b81-b241-fbbab858d143",
"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/88d4b5ad-6f97-4156-b15c-82e0d061c94d' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/nestedwells/88d4b5ad-6f97-4156-b15c-82e0d061c94d 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: 0e78a68235441a4a5d46b16ebb4f8ba8
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/3d994cbe-d81a-4b53-96e9-7f54450a63c3/ellipses' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/3d994cbe-d81a-4b53-96e9-7f54450a63c3/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: e22b8988a83c7fbdd0aa5826549bf938
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/ef50efd6-491a-4755-a2c2-952f955a2c6d/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/nestedwells/ef50efd6-491a-4755-a2c2-952f955a2c6d/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: bb329cd87ffbca14c0fc83b5383f03e6
Content-Type: application/json
{
"topset" : "942e5aff-75be-4051-9578-c03a853ba660"
}
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/f4b30e6a-3d6d-4810-8a80-fe4826e1cba2' -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/f4b30e6a-3d6d-4810-8a80-fe4826e1cba2 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: c4b69e42c7769a0bd0c96e23d536cde7
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/8607946f-6029-47a4-a15d-b1e8fe023a9e/starred' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"topset" : "6f8ee0c7-1570-4d4f-bfa1-3ec61f1f68ba"
}'
PUT /public/api/v1/nestedwells/8607946f-6029-47a4-a15d-b1e8fe023a9e/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55
{
"topset" : "6f8ee0c7-1570-4d4f-bfa1-3ec61f1f68ba"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 6ddae10244858a3ab9d8fa8a35015cc3
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/f0c6cd96-69ad-467f-a9ee-75c09741334c/lock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/nestedwells/f0c6cd96-69ad-467f-a9ee-75c09741334c/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 55e55ee26d2c280d5bb0f57722a2a518
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/5b9a42e9-1dd6-49e7-8820-595c1a488f5d/unlock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/nestedwells/5b9a42e9-1dd6-49e7-8820-595c1a488f5d/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 81fff2d2c9a7c6916cb992f2098886ad
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/ed561667-79c5-4893-afb8-20036ef17480' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/nestedwells/ed561667-79c5-4893-afb8-20036ef17480 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: fe9f3cb36a38af7d54358556363db90a
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/89ebd52b-b56d-4275-9ed8-f7779ebc7eb1/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/89ebd52b-b56d-4275-9ed8-f7779ebc7eb1/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: 1b05a5ced4040abfd3427e131246f93b
Content-Type: application/json
{
"uuid" : "8cf1aec7-8fd9-42d7-b603-52b2b8f9a177"
}
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/89ebd52b-b56d-4275-9ed8-f7779ebc7eb1/typewells?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/89ebd52b-b56d-4275-9ed8-f7779ebc7eb1/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: b7616fdca5ce050d0fa03b4e92b1a139
Content-Type: application/json
{
"content" : [ {
"uuid" : "6b6dc608-935a-4be3-bb51-1d4fad42d048",
"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/a24b9ea9-8d9b-4557-a568-a17fb1ace618' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/typewells/a24b9ea9-8d9b-4557-a568-a17fb1ace618 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: 86298ff7d20f6a0c4d7d2029dcb17387
Content-Type: application/json
{
"uuid" : "a24b9ea9-8d9b-4557-a568-a17fb1ace618",
"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/fe812813-192f-40bc-85d9-09a633b29215/ellipses' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/fe812813-192f-40bc-85d9-09a633b29215/ellipses HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 21c0bd82b5d6240874093bdbfa86dafd
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/a24b9ea9-8d9b-4557-a568-a17fb1ace618/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/typewells/a24b9ea9-8d9b-4557-a568-a17fb1ace618/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: 3f2b6d96f8c7819154dac7f7f81aebf7
Content-Type: application/json
{
"topset" : "dd714432-d488-4cca-ad30-9c4b2612ae8c"
}
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/1a03e3b2-1ec4-48e4-b513-f06c5f8e40d8/linked?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/typewells/1a03e3b2-1ec4-48e4-b513-f06c5f8e40d8/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: 14f06a55faa9a2f7a81d46da75192619
Content-Type: application/json
{
"content" : [ {
"shift" : {
"val" : 1640.4199475065616
},
"lateral_id" : "c38b384a-34eb-4477-a0c0-653bc20b8861"
} ],
"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/6b6dc608-935a-4be3-bb51-1d4fad42d048' -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/6b6dc608-935a-4be3-bb51-1d4fad42d048 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: 060857a5c23304500d5e3fe9de5377e4
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/a24b9ea9-8d9b-4557-a568-a17fb1ace618/starred' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"topset" : "dd714432-d488-4cca-ad30-9c4b2612ae8c"
}'
PUT /public/api/v1/typewells/a24b9ea9-8d9b-4557-a568-a17fb1ace618/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55
{
"topset" : "dd714432-d488-4cca-ad30-9c4b2612ae8c"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 8d491949c036d451699678f610dcd96a
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/40fe3c3d-1beb-4b92-b694-803c469b8417/lock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/typewells/40fe3c3d-1beb-4b92-b694-803c469b8417/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: b4447d4f3451297cb2c1139a71f940b8
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/439c8050-660c-4c2b-9fb2-e48d98463302/unlock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/typewells/439c8050-660c-4c2b-9fb2-e48d98463302/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: a52092835779b35516e16ab9e996614b
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/6b3c5468-ba57-4adc-8e51-8f9cb376f1b4' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/typewells/6b3c5468-ba57-4adc-8e51-8f9cb376f1b4 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: adeba20c05f9eefb6ae1f161205cd544
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/c37d676e-c213-4404-b531-c685a859edc0/topsets' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Topset name"
}'
POST /public/api/v1/wells/c37d676e-c213-4404-b531-c685a859edc0/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: e28ea46bfeaf8a5d0223276eaa89775e
Content-Type: application/json
{
"uuid" : "4c1f0182-1724-4072-92dc-a6411933cc2b"
}
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/fa93811d-51a0-471a-8267-b77dca640ac6/topsets' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Topset name"
}'
POST /public/api/v1/typewells/fa93811d-51a0-471a-8267-b77dca640ac6/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: 6df54037471a3fbe166b96e0f01570d5
Content-Type: application/json
{
"uuid" : "c35d6517-dbfa-403e-bbde-44aa874b4e43"
}
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/207940f0-a647-460c-aab2-891aae32d01e/topsets' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Topset name"
}'
POST /public/api/v1/nestedwells/207940f0-a647-460c-aab2-891aae32d01e/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: cd0a2bdf1870db82ffec2e1c5ec01beb
Content-Type: application/json
{
"uuid" : "8f7e7cd7-8efa-4cf3-bdb3-8da600a1dc51"
}
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/c37d676e-c213-4404-b531-c685a859edc0/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/c37d676e-c213-4404-b531-c685a859edc0/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: c1aed01c75a4e6ec67b91e645903c6e9
Content-Type: application/json
{
"topset_uuid" : "18aa13ab-096f-487c-b6cc-e381b3a32095",
"top_uuids" : [ "60b83bf5-b6cd-4524-8553-a0059ccfd85f", "f760790e-9991-40ba-b949-eee74a1b4394" ]
}
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/fa93811d-51a0-471a-8267-b77dca640ac6/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/fa93811d-51a0-471a-8267-b77dca640ac6/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: c579cf112770e96f65a236db3eddebf1
Content-Type: application/json
{
"topset_uuid" : "79bde3d5-653e-45c9-8939-097902ee6115",
"top_uuids" : [ "0c3c320d-bfa7-4cc5-89db-2923fe3495a9", "0e119117-381d-4b92-9d09-ca1360fc6441" ]
}
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/207940f0-a647-460c-aab2-891aae32d01e/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/207940f0-a647-460c-aab2-891aae32d01e/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: 2b4eb6a6f742d2eedb6e3e257ad1dddc
Content-Type: application/json
{
"topset_uuid" : "4280583b-4fb4-4b1d-84db-19ba653c5c27",
"top_uuids" : [ "2e95a05e-429c-4e74-95d1-bd4a5d085128", "55ffdc48-8538-4bbe-9325-3a68e4dc98d9" ]
}
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/c37d676e-c213-4404-b531-c685a859edc0/topsets?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/c37d676e-c213-4404-b531-c685a859edc0/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: effe47315c3772af8ff2d85ccfc995cb
Content-Type: application/json
{
"content" : [ {
"name" : "C Log TopSet ghvMoJODgo",
"uuid" : "7fbe8eaa-947b-4610-9e84-97f99e962c7e"
}, {
"name" : "D Well wVRfdrofsb",
"uuid" : "fb3ebe2e-f3d8-4cd9-84d2-8f56fed14202"
}, {
"name" : "Top Set",
"uuid" : "c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9"
}, {
"name" : "TopSet Log YhAznDbHPY",
"uuid" : "310300bb-e977-4716-889a-15bb5e408e58"
}, {
"name" : "TopSetntLnAQVdWC",
"uuid" : "966b5cab-f8fe-405a-90c1-948f6afb469e"
} ],
"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/fa93811d-51a0-471a-8267-b77dca640ac6/topsets?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/fa93811d-51a0-471a-8267-b77dca640ac6/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: 64e8c5c181cc8f6d3e43f412ca338e0e
Content-Type: application/json
{
"content" : [ {
"name" : "C Log TopSet GcLIdAzHNb",
"uuid" : "4b42a443-a6ca-488a-9c94-95b102efa133"
}, {
"name" : "D Well LgRLGujIpt",
"uuid" : "286955a0-f701-4f24-84f7-60c6c5576e53"
}, {
"name" : "TopSet Log srTcdAmGnW",
"uuid" : "85ec227c-0944-4b1c-a361-4e94e992aa4d"
}, {
"name" : "TopSetZnZoNoHGNS",
"uuid" : "1873e10d-e697-4f6d-bd2b-4239c1d94828"
} ],
"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/207940f0-a647-460c-aab2-891aae32d01e/topsets?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/207940f0-a647-460c-aab2-891aae32d01e/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: 13e5324efcbf56dbdd5ee7ca74c0042e
Content-Type: application/json
{
"content" : [ {
"name" : "C Log TopSet qptQmhpqgk",
"uuid" : "3c239da4-ea66-4319-976c-cd644b8dafa1"
}, {
"name" : "D Well nmdcqkxNuE",
"uuid" : "e73a8d06-e9a8-4618-aa2e-fea0942b5a02"
}, {
"name" : "TopSet Log BxhQlMGCFq",
"uuid" : "e3a97dea-30dd-4734-974f-aa01434de8f7"
}, {
"name" : "Topset name",
"uuid" : "8f7e7cd7-8efa-4cf3-bdb3-8da600a1dc51"
}, {
"name" : "Topset with tops",
"uuid" : "4280583b-4fb4-4b1d-84db-19ba653c5c27"
}, {
"name" : "TopSetYpaAUvKRUW",
"uuid" : "626c8122-81f4-423b-abce-564d930177f3"
} ],
"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/a286cce6-078c-4464-8a17-7bc831439b74/zones?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/topsets/a286cce6-078c-4464-8a17-7bc831439b74/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: f14b287f8148091a9d567e6b6c7d1667
Content-Type: application/json
{
"content" : [ {
"name" : "zone1",
"top_start" : "start",
"top_end" : "end",
"zone_id" : "5361d7a6-bc65-4d51-b681-8752db7c3061"
} ],
"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/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/topsets/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9/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: dfa4c17004fb36b8aefb0c482138df08
Content-Type: application/json
{
"top" : "7f8bfb66-dde3-468a-8387-e381296d2ec9",
"center" : "062344a4-466c-405c-84cb-72991367980e",
"bottom" : "9a100ce4-1743-4e78-8f3d-2c58b4c3fb95"
}
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/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9/starred' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"top" : "7f8bfb66-dde3-468a-8387-e381296d2ec9",
"center" : "062344a4-466c-405c-84cb-72991367980e",
"bottom" : "9a100ce4-1743-4e78-8f3d-2c58b4c3fb95"
}'
PUT /public/api/v1/topsets/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 158
{
"top" : "7f8bfb66-dde3-468a-8387-e381296d2ec9",
"center" : "062344a4-466c-405c-84cb-72991367980e",
"bottom" : "9a100ce4-1743-4e78-8f3d-2c58b4c3fb95"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 3a2385cb82b6ffe9107f212f4fd33626
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/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "New topset name"
}'
PATCH /public/api/v1/topsets/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9 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: ce40e9d2cfdb5f9612f4c24caf37c1f8
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/6675387f-9df5-4bfc-8e20-7ebf272e89f9/lock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/topsets/6675387f-9df5-4bfc-8e20-7ebf272e89f9/lock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: ffe8583ca12e73545a292de360f51c2c
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/a286cce6-078c-4464-8a17-7bc831439b74/unlock' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>'
PATCH /public/api/v1/topsets/a286cce6-078c-4464-8a17-7bc831439b74/unlock HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: fdad5b39efb4df6bf0c3b77d9e5b5620
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/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/topsets/c33b3a6d-cb9f-48b3-a8e9-edd459b7e9f9 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: 122e6d4799142abc78749d4df071b0f2
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/b2c0f296-87df-464b-900d-2d9580f016c4/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/b2c0f296-87df-464b-900d-2d9580f016c4/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: 26845c7357d9cc2f71c6fa98db28ed52
Content-Type: application/json
{
"uuid" : "4cbbcb87-f329-4f2b-a9ae-770a352e695f"
}
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/ad883b00-e11a-4262-a056-ba9e69ae4c21/tops?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/topsets/ad883b00-e11a-4262-a056-ba9e69ae4c21/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: 918d2545ba05d0ee8beb0ea640e00fb7
Content-Type: application/json
{
"content" : [ {
"uuid" : "5df002d1-99fd-4641-9c32-7b06bf99037f",
"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" : "44b93013-b640-4b29-9d01-7dbfa108e201",
"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/54f3f354-cb3e-463a-ae39-addfc8d37435/tops?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/54f3f354-cb3e-463a-ae39-addfc8d37435/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: 0f06c4a15de51cdcf4f423e3a1557209
Content-Type: application/json
{
"content" : [ {
"uuid" : "417d1b5a-4906-4a3c-a541-2a46ae6a3a3b",
"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" : "62fcc1dd-02f5-4b15-915f-ad5a7fbcb5e0",
"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/f3eee61b-c830-49a4-8168-d38a4e3c6f8a/tops?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/f3eee61b-c830-49a4-8168-d38a4e3c6f8a/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: 349f573fea685a9cdf33199321662c3b
Content-Type: application/json
{
"content" : [ {
"uuid" : "a5ad8bae-cb1c-4e43-8033-2a7aa41e7ba2",
"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" : "1181e5b6-c8b6-428c-8a70-a1def12e44ac",
"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/a6163242-b646-401f-9c6e-4490382b2f9b/tops?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/a6163242-b646-401f-9c6e-4490382b2f9b/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: b4ed016fb3733629c2c458ec637e9108
Content-Type: application/json
{
"content" : [ {
"uuid" : "514a2424-cab0-46a8-b8ad-c257cf78c37d",
"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" : "addf7db1-58bf-489d-a85f-43854af1d6e2",
"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/62fcc1dd-02f5-4b15-915f-ad5a7fbcb5e0' -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/62fcc1dd-02f5-4b15-915f-ad5a7fbcb5e0 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: 722427415b58a6750cf4812c021e9153
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/62fcc1dd-02f5-4b15-915f-ad5a7fbcb5e0' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/tops/62fcc1dd-02f5-4b15-915f-ad5a7fbcb5e0 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: 5874aed7693c598901e81ece5a8ef734
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/a1f23964-bb5c-48f0-96de-563de067b325/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/a1f23964-bb5c-48f0-96de-563de067b325/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: 990e5439e492dcb6c287e042c033d2b9
Content-Type: application/json
{
"uuid" : "f4df8454-b30c-4d79-abd8-5440cdcbbaa6"
}
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/bb3d29b9-dc34-45bd-9e8b-b7f416f13aaf/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/bb3d29b9-dc34-45bd-9e8b-b7f416f13aaf/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: 7d4c12e6a9da90a32749a5b87bdbbb1d
Content-Type: application/json
{
"uuid" : "c9799c71-4d26-4dbe-97cb-7050a9cfc90f"
}
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/0c9f6acc-32c3-4877-9e15-b6c6ddd59a2f/targetlines?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/0c9f6acc-32c3-4877-9e15-b6c6ddd59a2f/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: bf66b461f0949e7d98fc6d8974538771
Content-Type: application/json
{
"content" : [ {
"uuid" : "19e470cc-9d8f-4ebc-8b34-1a03c203ab0a",
"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" : "d0be87b6-12bf-45ed-8a54-1fd34638615c",
"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/a132360b-bfe1-4875-8b5f-ff2d4d4a2c26/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/targetlines/a132360b-bfe1-4875-8b5f-ff2d4d4a2c26/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: a01dc28d3fb9161e4f1e9b3c9e90d9ff
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" : "a132360b-bfe1-4875-8b5f-ff2d4d4a2c26"
} ]
}
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/9083fab4-82e5-49ab-8038-fbb29250399d/targetlines/data?offset=0&limit=20' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/9083fab4-82e5-49ab-8038-fbb29250399d/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: 1529d493f5b8e3ef1283971eaacc8df2
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" : "e6c75eb5-a85c-4353-b1d9-91c665353a74"
} ],
"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/f45c98af-e482-4f77-b610-683817bc20c6/targetlines/starred' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/f45c98af-e482-4f77-b610-683817bc20c6/targetlines/starred HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 90c879a7c92ffa278d909ccbdb585a54
Content-Type: application/json
{
"name" : "Target Line",
"uuid" : "3c09ada0-1ab8-4d07-ac08-8513f9cd7d0f"
}
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/dbf0f02a-a76b-4642-8335-59ad75bb0b9c' -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/dbf0f02a-a76b-4642-8335-59ad75bb0b9c 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: 665f2f58af743e57f373b9c2ddd33098
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/cc5f25bb-8b26-4744-bdd2-4c29fd5740c4/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/cc5f25bb-8b26-4744-bdd2-4c29fd5740c4/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: c31f3034fff13bb6e67dc74ff48547ed
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/f9925383-65ea-41a2-abbf-62bac069c521' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/targetlines/f9925383-65ea-41a2-abbf-62bac069c521 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: 3dd1117aa73b02e7cd0b1d2f109c0631
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/3466e8a2-5cb0-47c7-baed-70b44f90c42d/logs' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Log name"
}'
POST /public/api/v1/wells/3466e8a2-5cb0-47c7-baed-70b44f90c42d/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: e7ac2103769451875451404b28aad2e4
Content-Type: application/json
{
"uuid" : "45946261-f95f-4611-8fb2-c7237e90001f"
}
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/04e445ec-60ec-44d3-ae9b-a71cd701fc76/logs' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Log name"
}'
POST /public/api/v1/typewells/04e445ec-60ec-44d3-ae9b-a71cd701fc76/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: dfe46c4edc3c88962bb3fbbcd1e8ebcc
Content-Type: application/json
{
"uuid" : "c7916d99-dde0-44e7-b7ed-d5e7ca9b8a93"
}
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/c049f87e-dacb-40b1-bc1d-cbdb8d8482e8/logs?offset=0&limit=10&filter=mMa' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/c049f87e-dacb-40b1-bc1d-cbdb8d8482e8/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: 7722c0d5825451aa9c1f216f20140c7f
Content-Type: application/json
{
"content" : [ {
"uuid" : "14ce41f8-9141-425e-ad0a-0b91bcef6540",
"name" : "Gamma Ray",
"is_discrete" : false
}, {
"uuid" : "5e40ec76-4e9a-4c95-9787-6a2f762c7067",
"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/7e461b11-1b21-4f0a-88df-663823bc1dd1/logs?offset=0&limit=10&filter=mMa' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/7e461b11-1b21-4f0a-88df-663823bc1dd1/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: f5c32e25b11c6b199e000caaa62304c4
Content-Type: application/json
{
"content" : [ {
"uuid" : "81c82133-74c7-46a6-8dbd-9ba59c5958e2",
"name" : "Gamma Ray",
"is_discrete" : false
}, {
"uuid" : "5e63914f-e1b7-4a77-a50d-5f0416547ba7",
"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/762a45e2-6f56-4d0d-93c5-ffdd7daeb2e7/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/logs/762a45e2-6f56-4d0d-93c5-ffdd7daeb2e7/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 0ddb1f7e00906992c9816fbc257d7eaa
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/377d2b74-4f1d-4693-ad51-02a7436ff4cc' -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/377d2b74-4f1d-4693-ad51-02a7436ff4cc 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: 1d9883298dab0a44817fb42e5108968b
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/367a4d85-43ba-468c-ab6c-4874a5048eeb/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/367a4d85-43ba-468c-ab6c-4874a5048eeb/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: f2738c6ce14d003912fa700a220bbd32
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/762a45e2-6f56-4d0d-93c5-ffdd7daeb2e7/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/762a45e2-6f56-4d0d-93c5-ffdd7daeb2e7/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: 2c7298f7b6863bbb820e3268bb074929
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/212addd3-75ff-4e97-9365-b4a04d7b888c/folder' -i -X PUT \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"folder" : "5c7af7ed-5c8b-435d-ba56-bd4a886112f6"
}'
PUT /public/api/v1/logs/212addd3-75ff-4e97-9365-b4a04d7b888c/folder HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 55
{
"folder" : "5c7af7ed-5c8b-435d-ba56-bd4a886112f6"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 943922e8768637ccf5151cbb3ff0faf4
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/212addd3-75ff-4e97-9365-b4a04d7b888c' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/logs/212addd3-75ff-4e97-9365-b4a04d7b888c 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: 4d98418cc76730b5d80992e119f9c75b
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/6cc16a11-9458-4904-9823-43433764b65f/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/6cc16a11-9458-4904-9823-43433764b65f/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: 7d36f091c20e07f8d87659725f389165
Content-Type: application/json
{
"uuid" : "e8e53e66-9c4a-4092-9a7f-b1996376a301"
}
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/87130108-69a1-4b9f-b28b-5f2e018892ba' -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/87130108-69a1-4b9f-b28b-5f2e018892ba 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: 791b95ff637fc29bcb721403378004d2
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/ed7fd5dc-165f-43ad-86ad-402573d58d42/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/ed7fd5dc-165f-43ad-86ad-402573d58d42/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: 9c901c2567cff76f6b44b667a310ab66
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/2bb5928c-d67b-4aed-8ef4-e044238ca027/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/2bb5928c-d67b-4aed-8ef4-e044238ca027/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: fd27c68b3ddf128499de5c26f67a891c
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/711f05ac-3548-4c0e-afbb-1e7134c4651c/mudlogs' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Mudlog name"
}'
POST /public/api/v1/wells/711f05ac-3548-4c0e-afbb-1e7134c4651c/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: 95f35d860f2ffcf2fd9f1b52bc4aab25
Content-Type: application/json
{
"uuid" : "6551ec76-3c8c-4a4e-8a09-0f2a29cbde33"
}
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/01dafc5c-c740-42c6-845c-b13a03df5190/mudlogs' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Mudlog name"
}'
POST /public/api/v1/typewells/01dafc5c-c740-42c6-845c-b13a03df5190/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: 0c4bab3908433ab2611821b636edaed6
Content-Type: application/json
{
"uuid" : "be764745-6cb7-4ca1-97eb-33f620ae92ab"
}
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/711f05ac-3548-4c0e-afbb-1e7134c4651c/mudlogs?offset=0&limit=10&filter=mMa' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/711f05ac-3548-4c0e-afbb-1e7134c4651c/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: a0c03dc787c7b9a7a2e2e5ffbdfecb78
Content-Type: application/json
{
"content" : [ {
"name" : "Gamma Ray",
"uuid" : "56917ab1-2f94-411e-8c6a-45921b30043a"
} ],
"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/01dafc5c-c740-42c6-845c-b13a03df5190/mudlogs?offset=0&limit=10&filter=mMa' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/01dafc5c-c740-42c6-845c-b13a03df5190/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: 17779b894c4f1e59f3b122dd206c523c
Content-Type: application/json
{
"content" : [ {
"name" : "Gamma Ray",
"uuid" : "45a2f550-8357-4288-92df-b48832dc99e5"
} ],
"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/88d50f20-111f-4bb6-bb72-ab9fe0249d43/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/mudlogs/88d50f20-111f-4bb6-bb72-ab9fe0249d43/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: ad56bf87062ce8a2d698456050a1b0b5
Content-Type: application/json
{
"logs" : [ {
"uuid" : "3b3a103c-7839-4a31-ab78-77a71fe8e65b",
"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" : "fcce737a-0709-448b-a14f-141d5c5841a5",
"name" : "Mudlog channel2",
"log_points" : [ {
"md" : {
"val" : 100.0
},
"data" : {
"val" : 178.0
}
}, {
"md" : {
"val" : 200.0
},
"data" : {
"undefined" : true
}
} ]
}, {
"uuid" : "d6c015ba-76e1-4545-b931-78ede60fbc73",
"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" : "aeb0bca9-8e71-43d1-813d-16905e6c0c23",
"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/88d50f20-111f-4bb6-bb72-ab9fe0249d43' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Updated mudlog name"
}'
PATCH /public/api/v1/mudlogs/88d50f20-111f-4bb6-bb72-ab9fe0249d43 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: 047878dd0f03dbf0dae438e3659c2cf4
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/88d50f20-111f-4bb6-bb72-ab9fe0249d43/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/88d50f20-111f-4bb6-bb72-ab9fe0249d43/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: a7d9d3d80b519a4ea29924e3323583a5
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/88d50f20-111f-4bb6-bb72-ab9fe0249d43/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/88d50f20-111f-4bb6-bb72-ab9fe0249d43/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: 3b03db7d390e34f1dd0215ece67f4d4b
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/88d50f20-111f-4bb6-bb72-ab9fe0249d43' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/mudlogs/88d50f20-111f-4bb6-bb72-ab9fe0249d43 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: d313a5b7ca3b51b55e205d28ea3f485d
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: 37b61675b0aafec45be54ab9fa77a7d8
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"
} ]
}
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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/traces/mapped?type=TIME' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: 8c62f5057e272f15d00a5c3dd9c9d9f7
Content-Type: application/json
{
"content" : [ {
"uuid" : "30652f8a-15d2-4a10-9e86-2943a7bd5687",
"name" : "Surface RPM",
"hash" : "8464eb3e62f53761ab5909de0378ed49",
"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" : "ced9a01787dfb141a55ab8a268070614",
"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" : "526917de3c401f11674a5ad8c1faf181",
"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" : "96ee3a71a0aac8e6bb933a1d4ab17bdf",
"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" : "7905d9b8a0a5c7657617cf5ed12ee8b5",
"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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/traces/mapped?type=DEPTH' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: 6c5b1a6b40804b0ce3e3c7000a839490
Content-Type: application/json
{
"content" : [ {
"uuid" : "d635c218-3d17-4f5d-98b4-026085c4f584",
"name" : "Hole Depth",
"hash" : "0dc4d1820a90c847e813589095995a0d",
"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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: 9e123d659c960bd83d2cf4d4ab75fc95
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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: 796c9f50c4d36c7c173c2541e4967062
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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/traces/e3c996b6-9cdb-4876-ac99-0aab694b801a/data/calculated/time' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: 5b0c404ca46822651dd87f55213d0261
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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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/1369fad0-2e29-4db6-81af-5ebf43e6ee2a/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: b57c713a88221c1ad94adb96e0e280ba
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/726db18f-5d91-4e13-8428-0d504544ae77/intervals/slide-sheet?from=200.0&to=500.0' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/726db18f-5d91-4e13-8428-0d504544ae77/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: c41dc2f21a43f13549bb7aa64a8a99bc
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/fd9738ac-ea21-40c7-ba81-365409af68e5/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/fd9738ac-ea21-40c7-ba81-365409af68e5/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: 5b592b956c7c7a09d6da15f24f7c79e6
Content-Type: application/json
{
"id" : 10005,
"uuid" : "fcdb2f2a-05c5-4b29-b345-78127830031b",
"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/0920f776-e1a7-4daf-9329-e4e2313b24be/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/0920f776-e1a7-4daf-9329-e4e2313b24be/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: 0fd1d4368b67e3375e882a0429cb5570
Content-Type: application/json
{
"id" : 4,
"uuid" : "0871a0b4-bc2c-47c5-af86-9b5c28c169a8",
"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: 9bacdc8721a37a95beee6f41b1c25e2d
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=fd9738ac-ea21-40c7-ba81-365409af68e5' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/wellattributes?project_uuid=fd9738ac-ea21-40c7-ba81-365409af68e5 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 8b6e179684efd428d0408e76d540b11d
Content-Type: application/json
[ {
"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" : 7,
"uuid" : "00000000-0000-0000-0000-000000000007",
"name" : "KB",
"name_short" : "KB",
"type" : "FLOAT",
"unit" : "DEPTH"
}, {
"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" : 60,
"uuid" : "00000000-0000-0000-0000-000000000060",
"name" : "Source",
"name_short" : "Source",
"type" : "ENUM",
"range" : [ "PN", "TGS" ]
}, {
"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/fd9738ac-ea21-40c7-ba81-365409af68e5/wellattributes' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/attributegroups/caeb5bb2-18ea-4191-9c36-f2e252259371/projects/fd9738ac-ea21-40c7-ba81-365409af68e5/wellattributes HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 526eb8f27e1a9643918f772979b30226
Content-Type: application/json
[ {
"id" : 10000,
"uuid" : "402eb2c0-be0b-4500-8d98-08d16835d332",
"name" : "Well attribute name",
"type" : "ENUM",
"unit" : "POSITION",
"range" : [ "Top", "Middle", "Bottom" ]
}, {
"id" : 10001,
"uuid" : "0920f776-e1a7-4daf-9329-e4e2313b24be",
"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" : "86825eec-e52e-4a71-becd-fdff6381c2f2",
"name" : "UWI",
"type" : "IDENTIFIER"
}, {
"id" : 10005,
"uuid" : "fcdb2f2a-05c5-4b29-b345-78127830031b",
"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/7e940e4a-0755-48d7-83f0-fbb60689b1b4/attributevalues/v2' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/7e940e4a-0755-48d7-83f0-fbb60689b1b4/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 33d94bfb2bb485dff0c8e4c7f44630d5
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/31199267-a3f7-4755-9931-104a23f01188/attributevalues/v2' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/31199267-a3f7-4755-9931-104a23f01188/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: ee7fd719b703dae1ffedfc69255a0353
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/23202000-12c3-4012-a832-d6b6c06f42be/attributevalues/v2' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/23202000-12c3-4012-a832-d6b6c06f42be/attributevalues/v2 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: d3d6a6e802da87ed7f915633f9f995aa
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/4a8d90cf-8913-4635-b6c4-6303b859428d' -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/4a8d90cf-8913-4635-b6c4-6303b859428d 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: 89dfe69dff0d34bbf289fb5ecbbc6daf
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/0920f776-e1a7-4daf-9329-e4e2313b24be/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/0920f776-e1a7-4daf-9329-e4e2313b24be/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: 4763f4caaf1555126bc32ee6c5c2509a
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/7e940e4a-0755-48d7-83f0-fbb60689b1b4/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/7e940e4a-0755-48d7-83f0-fbb60689b1b4/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: 5ee4a2fdeb62d84be82998294f2be547
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/23202000-12c3-4012-a832-d6b6c06f42be/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/23202000-12c3-4012-a832-d6b6c06f42be/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: 93f51a86805e927fca2e622b738c1f71
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/8b61ffc9-dd4a-4fca-bec3-ea3306e05344' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/wellattributes/8b61ffc9-dd4a-4fca-bec3-ea3306e05344 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: d9de804e7ed4ecba115a0a068b3db538
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/0920f776-e1a7-4daf-9329-e4e2313b24be/listoptions/3' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/wellattributes/0920f776-e1a7-4daf-9329-e4e2313b24be/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: b6b38061e0f1042d00e644fa54b28fbe
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/7e8133db-d1b4-4116-b003-82702db56caf/grids' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Grid name"
}'
POST /public/api/v1/projects/7e8133db-d1b4-4116-b003-82702db56caf/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: 66891fbedf9b2cce95692d62500ba397
Content-Type: application/json
{
"uuid" : "568f2f24-c320-438e-ae00-97df280350e3"
}
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/7e8133db-d1b4-4116-b003-82702db56caf/grids?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/7e8133db-d1b4-4116-b003-82702db56caf/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: c059c7767cf88a5692d05238ad64c71d
Content-Type: application/json
{
"content" : [ {
"name" : "Grid one",
"uuid" : "947f8a9a-ade7-46e7-8b27-687e1eb0892d"
}, {
"name" : "One more grid",
"uuid" : "cab07f95-014f-44e1-8051-352c97e0a83d"
} ],
"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/0ea08b15-9528-4ec0-b824-0e5cea02bf11/metadata' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/0ea08b15-9528-4ec0-b824-0e5cea02bf11/metadata HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 12459527b8f5fb98d6152635e63be3c2
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/0ea08b15-9528-4ec0-b824-0e5cea02bf11/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/0ea08b15-9528-4ec0-b824-0e5cea02bf11/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: bf758d63c3a8b2ac633d6cf6fa4fd221
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/0ea08b15-9528-4ec0-b824-0e5cea02bf11/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/0ea08b15-9528-4ec0-b824-0e5cea02bf11/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: 5e84369efc5817de208642b35b89c189
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/193624fd-69ce-4fb2-ae21-54e8e6d81c90/grids/cab07f95-014f-44e1-8051-352c97e0a83d/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/193624fd-69ce-4fb2-ae21-54e8e6d81c90/grids/cab07f95-014f-44e1-8051-352c97e0a83d/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: 013f5c414814ee969f90439e6ef953cb
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/206da7a6-2f66-4400-9ea3-19af10b83847/polygons' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Polygon name"
}'
POST /public/api/v1/projects/206da7a6-2f66-4400-9ea3-19af10b83847/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: f1d1884141caa88f45a841bb1ad829a4
Content-Type: application/json
{
"uuid" : "d8ab01c0-9104-43de-b3e1-55c457687b07"
}
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/206da7a6-2f66-4400-9ea3-19af10b83847/polygons?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/206da7a6-2f66-4400-9ea3-19af10b83847/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: 6ee164d34919c14ea239d43fba73380e
Content-Type: application/json
{
"content" : [ {
"name" : "One more polygon",
"uuid" : "35008c59-8eca-43d3-b0cf-70391ae0fdd8"
}, {
"name" : "Polygon one",
"uuid" : "f5543a42-28b9-4f9a-8b3d-7824c0553d1d"
} ],
"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/b387a23d-d774-4e0f-a074-83488c3ae932/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/polygons/b387a23d-d774-4e0f-a074-83488c3ae932/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: badbe629c369f2e31ec7b14d26efabdd
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/b387a23d-d774-4e0f-a074-83488c3ae932/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/b387a23d-d774-4e0f-a074-83488c3ae932/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: ff71bafdea45e5b9b161c70ff30dc847
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/e2fdc096-7c41-4366-80a2-dd2a5342bfd8/polygons/35008c59-8eca-43d3-b0cf-70391ae0fdd8/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/e2fdc096-7c41-4366-80a2-dd2a5342bfd8/polygons/35008c59-8eca-43d3-b0cf-70391ae0fdd8/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: 8389b9d76ddc4d226880b72652fd40bf
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/b30535bd-9018-4ef9-b2de-1fb87650bfbc/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/b30535bd-9018-4ef9-b2de-1fb87650bfbc/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: 81b618b79dd43edf098a238a0653f28b
Content-Type: application/json
{
"uuid" : "5287f623-5eae-42df-aca2-8325de19d5c6"
}
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 |
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/b30535bd-9018-4ef9-b2de-1fb87650bfbc/sticks?offset=0&limit=10&filter=oNe' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/b30535bd-9018-4ef9-b2de-1fb87650bfbc/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: 5f7929ddb4a136d244ae2c30dc0b7fa6
Content-Type: application/json
{
"content" : [ {
"uuid" : "c170a8dc-05ca-4710-9cac-f742e4b63ed5",
"name" : "Stick one",
"trajectory" : [ {
"type" : "SHL",
"x" : {
"val" : 0.8010674495668274
},
"y" : {
"val" : 0.08444274199742263
},
"tvdss" : {
"val" : 0.1810755484959777
}
}, {
"type" : "LP",
"x" : {
"val" : 0.9837131874361704
},
"y" : {
"val" : 0.21515167423981119
},
"tvdss" : {
"val" : 2.065624983979899
}
}, {
"type" : "TD",
"x" : {
"val" : 0.3624142993683106
},
"y" : {
"val" : 0.5667709133366133
},
"tvdss" : {
"val" : 1.2458467377932236
}
} ]
} ],
"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/c170a8dc-05ca-4710-9cac-f742e4b63ed5' -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/c170a8dc-05ca-4710-9cac-f742e4b63ed5 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: cedc364e95165d7c998abdf9157b55fb
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 |
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/fd6387e7-9d41-4acb-8a37-a19989140654' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/sticks/fd6387e7-9d41-4acb-8a37-a19989140654 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: 1cde004c9854a5f28250125d5bc0dcec
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/937ad4b2-5bc6-4eb6-bc63-d316549d313c/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/937ad4b2-5bc6-4eb6-bc63-d316549d313c/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: 93e5fa2c2c0a4f4bb07277725644c14f
Content-Type: application/json
{
"uuid" : "459c3151-521f-4d8d-b6ac-ce6954837d8f"
}
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/937ad4b2-5bc6-4eb6-bc63-d316549d313c/earthmodels?offset=0&limit=10&filter=EM' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/interpretations/937ad4b2-5bc6-4eb6-bc63-d316549d313c/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: a97217f11a39f7ace7abc6d4d89491d7
Content-Type: application/json
{
"content" : [ {
"name" : "EM 1",
"uuid" : "3b8e4b5d-a1eb-4eb8-918d-4cc7eed9c2f9"
} ],
"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/3b8e4b5d-a1eb-4eb8-918d-4cc7eed9c2f9/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/earthmodels/3b8e4b5d-a1eb-4eb8-918d-4cc7eed9c2f9/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: b91aab03c579e06632a5eb20d0b0544d
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/3b8e4b5d-a1eb-4eb8-918d-4cc7eed9c2f9/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/3b8e4b5d-a1eb-4eb8-918d-4cc7eed9c2f9/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: 589466f8ab84d6353e79c9ac037ae697
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: 807ceefb6111e2c51a1fbe9c3f0de9d4
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/b7c2cecc-11e2-48d0-bde6-9ecc364534ee/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/b7c2cecc-11e2-48d0-bde6-9ecc364534ee/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: 15b456a83de6e3d7df77f948ced331a4
Content-Type: application/json
{
"content" : [ {
"uuid" : "5f2d17c8-f928-4a2f-9660-5e6bea7c95f1",
"name" : "name",
"owner" : {
"description" : "",
"email" : "a.zhuravlev+support@rogii.com",
"first_name" : "AAAAAA",
"last_name" : "BBB"
},
"object_ids" : [ ]
}, {
"uuid" : "23b81832-09eb-4b9a-bb48-db0ce811bca6",
"name" : "Reference List Name",
"owner" : {
"description" : "Bot manager",
"email" : "a.bortnikov+manager@rogii.com",
"first_name" : "Bot",
"last_name" : "Manager"
},
"object_ids" : [ "9a347236-c68e-43b5-9ad3-965b908682c7", "86032066-60ea-4ffd-b4bd-62f3636ad167" ]
} ],
"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/b7c2cecc-11e2-48d0-bde6-9ecc364534ee/welllists?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/b7c2cecc-11e2-48d0-bde6-9ecc364534ee/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: f7cd16204debd246bfe03631da87999e
Content-Type: application/json
{
"content" : [ {
"uuid" : "5f2d17c8-f928-4a2f-9660-5e6bea7c95f1",
"name" : "name",
"owner" : {
"description" : "",
"email" : "a.zhuravlev+support@rogii.com",
"first_name" : "AAAAAA",
"last_name" : "BBB"
},
"object_ids" : [ ]
}, {
"uuid" : "23b81832-09eb-4b9a-bb48-db0ce811bca6",
"name" : "Reference List Name",
"owner" : {
"description" : "Bot manager",
"email" : "a.bortnikov+manager@rogii.com",
"first_name" : "Bot",
"last_name" : "Manager"
},
"object_ids" : [ "9a347236-c68e-43b5-9ad3-965b908682c7", "86032066-60ea-4ffd-b4bd-62f3636ad167" ]
} ],
"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/23b81832-09eb-4b9a-bb48-db0ce811bca6' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/welllists/23b81832-09eb-4b9a-bb48-db0ce811bca6 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 285f2932175c7bc2d8d803435185b26e
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" : "9a347236-c68e-43b5-9ad3-965b908682c7",
"type" : "WELL"
}, {
"name" : "Typewell A",
"uuid" : "86032066-60ea-4ffd-b4bd-62f3636ad167",
"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/54424c34-69b6-4d3e-a64f-8fab5f5df718/comments' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Comment name"
}'
POST /public/api/v1/wells/54424c34-69b6-4d3e-a64f-8fab5f5df718/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: c0ad56ea99c1b3c0308ce896ca272dd3
Content-Type: application/json
{
"uuid" : "d68539de-a61a-4b32-8246-4f6e1fd3993c"
}
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/07ae461d-75f3-44d7-8265-236248dcf85a/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/07ae461d-75f3-44d7-8265-236248dcf85a/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: ba421d01b75705cbb32cdedb26fc2dd6
Content-Type: application/json
{
"uuid" : "2f70a1d1-cb51-4b53-a7e8-d0deeaa9a548"
}
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/54424c34-69b6-4d3e-a64f-8fab5f5df718/comments?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
GET /public/api/v1/wells/54424c34-69b6-4d3e-a64f-8fab5f5df718/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: 2d0f9cb28193d94893ffc58bfbabadf1
Content-Type: application/json
{
"content" : [ {
"comment_id" : "07ae461d-75f3-44d7-8265-236248dcf85a",
"name" : "Updated comment name",
"comment_boxes" : [ {
"commentbox_id" : "ee126043-e5d6-4b24-bd47-e3e8bf34fc55",
"text" : "New Comment Text",
"anchor_md" : {
"val" : 2375.2755905511813
}
}, {
"commentbox_id" : "2f70a1d1-cb51-4b53-a7e8-d0deeaa9a548",
"text" : "Comment box text",
"anchor_md" : {
"val" : 1205.8
}
} ]
}, {
"comment_id" : "e44ef5ab-cc07-43a9-8f32-8ee23f5bed7a",
"name" : "Comment",
"comment_boxes" : [ {
"commentbox_id" : "9d5a24e0-29a6-4280-9132-ba2530e9fec0",
"text" : "New Comment Text",
"anchor_md" : {
"val" : 2375.2755905511813
}
}, {
"commentbox_id" : "ab92ff1d-739b-484e-9363-7bbf688a8fbb",
"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/07ae461d-75f3-44d7-8265-236248dcf85a' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Updated comment name"
}'
PATCH /public/api/v1/comments/07ae461d-75f3-44d7-8265-236248dcf85a 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: aac634cdd292919e52eaabeec4450f73
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/ee126043-e5d6-4b24-bd47-e3e8bf34fc55' -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/ee126043-e5d6-4b24-bd47-e3e8bf34fc55 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: ed7ae950d7dea6f8729c7f803cbd0639
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/07ae461d-75f3-44d7-8265-236248dcf85a' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/comments/07ae461d-75f3-44d7-8265-236248dcf85a 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: 704ed41f5bacc12feb4a8f82329f297c
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/ee126043-e5d6-4b24-bd47-e3e8bf34fc55' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json'
DELETE /public/api/v1/commentboxes/ee126043-e5d6-4b24-bd47-e3e8bf34fc55 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: c37ece7a9681b599ae4ec44cb49509a1
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/e9e7bf9b-deb3-4195-af8f-753f95598d7c/wells/logs/logfamilies?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/e9e7bf9b-deb3-4195-af8f-753f95598d7c/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: ec337605889aee62ae8a87a50a9e4c3d
Content-Type: application/json
{
"content" : [ {
"uuid" : "f11213ef-8fe7-477b-807a-3ee6b23ddcbf",
"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/e9e7bf9b-deb3-4195-af8f-753f95598d7c/typewells/logs/logfamilies?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/e9e7bf9b-deb3-4195-af8f-753f95598d7c/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: a01e3cbbb2e61d09c4eb8429b42a94e5
Content-Type: application/json
{
"content" : [ {
"uuid" : "f11213ef-8fe7-477b-807a-3ee6b23ddcbf",
"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/e9e7bf9b-deb3-4195-af8f-753f95598d7c/logfamilies/f11213ef-8fe7-477b-807a-3ee6b23ddcbf/wells/logs?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/e9e7bf9b-deb3-4195-af8f-753f95598d7c/logfamilies/f11213ef-8fe7-477b-807a-3ee6b23ddcbf/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: 0c629dfe338a596e3f33587fe3c4418d
Content-Type: application/json
{
"content" : [ {
"uuid" : "21491d74-deca-4d26-85ba-0e4f3201b9b8",
"name" : "mnemonic1"
}, {
"uuid" : "706fde9e-01e9-40be-9f2c-2b7db3793e3c",
"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/e9e7bf9b-deb3-4195-af8f-753f95598d7c/logfamilies/f11213ef-8fe7-477b-807a-3ee6b23ddcbf/typewells/logs?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/e9e7bf9b-deb3-4195-af8f-753f95598d7c/logfamilies/f11213ef-8fe7-477b-807a-3ee6b23ddcbf/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: 8de822771e1de6d812ba6d80eef6606c
Content-Type: application/json
{
"content" : [ {
"uuid" : "e7c24c01-9669-4023-91d0-c9d093285a3c",
"name" : "mnemonic1"
}, {
"uuid" : "90be2b5e-b4a2-40f7-9bb1-a6a0b1318d01",
"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/5fe4ef51-58f9-430d-b3da-c381d1bd9c35/updateinfo' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/5fe4ef51-58f9-430d-b3da-c381d1bd9c35/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 6a0131a08b118aea0097974323f37824
Content-Type: application/json
{
"content" : [ {
"type" : "TOPSET",
"uuid" : "fd53cfae-82c7-470f-b213-c8441eb92722",
"updated_at" : "2026-10-15T16:21:12.779904Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:13.200758Z"
}, {
"type" : "TARGETLINE",
"uuid" : "f95b2c56-08e1-4570-abe1-3a737de0aa50",
"updated_at" : "2026-10-15T16:21:12.912074Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.912074Z"
}, {
"type" : "WELL",
"uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"updated_at" : "2026-10-15T16:21:12.212137Z",
"modified_at" : "2026-10-15T16:21:13.200758Z"
}, {
"type" : "TOPSET",
"uuid" : "1743c651-e3af-4319-881a-c268071873fc",
"updated_at" : "2026-10-15T16:21:12.759198Z",
"parent_uuid" : "fb339426-fd2b-4011-a69f-d14f72b7943c",
"modified_at" : "2026-10-15T16:21:12.759198Z"
}, {
"type" : "LOG",
"uuid" : "b59d1330-cee9-447f-bc58-6bc8dcaa6ac4",
"updated_at" : "2026-10-15T16:21:12.285325Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.285325Z"
}, {
"type" : "NESTEDWELL",
"uuid" : "fb339426-fd2b-4011-a69f-d14f72b7943c",
"updated_at" : "2026-10-15T16:21:12.734133Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.759198Z"
}, {
"type" : "IMAGELOG",
"uuid" : "c4db25f4-e0bf-4c94-a6b8-fa6c595086ef",
"updated_at" : "2026-10-15T16:21:12.348861Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.348861Z"
}, {
"type" : "IMAGE",
"uuid" : "3af36dd4-b430-4743-926c-79651d56fd2c",
"updated_at" : "2026-10-15T16:21:12.421149Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.421149Z"
}, {
"type" : "TOP",
"uuid" : "dd2b445b-266e-4517-9b3f-2acc6da8b4ba",
"updated_at" : "2026-10-15T16:21:12.797301Z",
"parent_uuid" : "fd53cfae-82c7-470f-b213-c8441eb92722",
"modified_at" : "2026-10-15T16:21:12.797301Z"
}, {
"type" : "IMAGE",
"uuid" : "2b8f76a3-75c0-4e63-a9b5-bbc1bd41ae3b",
"updated_at" : "2026-10-15T16:21:12.584929Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.584929Z"
}, {
"type" : "EARTHMODEL",
"uuid" : "10c80a31-3f35-4ee2-87e8-d1f6abf3fe98",
"updated_at" : "2026-10-15T16:21:12.977988Z",
"parent_uuid" : "c1985d63-74e2-45c5-ae47-d3de96a1fc3a",
"modified_at" : "2026-10-15T16:21:13.025231Z"
}, {
"type" : "MUDLOG",
"uuid" : "a7adf1f7-844e-4efc-9842-aad74cc2abeb",
"updated_at" : "2026-10-15T16:21:12.646Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.646Z"
}, {
"type" : "INTERPRETATION",
"uuid" : "c1985d63-74e2-45c5-ae47-d3de96a1fc3a",
"updated_at" : "2026-10-15T16:21:12.450827Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:13.025231Z"
}, {
"type" : "COMMENT",
"uuid" : "d288a011-533c-40fe-b532-42a3cdc8b161",
"updated_at" : "2026-10-15T16:21:12.841939Z",
"parent_uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"modified_at" : "2026-10-15T16:21:12.841939Z"
} ]
}
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/fd96d7bd-a6ff-4950-806b-37e2783d36b1/updateinfo' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/fd96d7bd-a6ff-4950-806b-37e2783d36b1/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 5da7a46a31635e2714aa5bf881c3c750
Content-Type: application/json
{
"content" : [ {
"type" : "LOG",
"uuid" : "04cf6050-47d4-47fe-980d-5449effe5888",
"updated_at" : "2026-10-15T16:21:11.980900Z",
"parent_uuid" : "fd96d7bd-a6ff-4950-806b-37e2783d36b1",
"modified_at" : "2026-10-15T16:21:11.980900Z"
}, {
"type" : "MUDLOG",
"uuid" : "7352c922-a9ef-4704-9bd0-5b754f721f76",
"updated_at" : "2026-10-15T16:21:12.077154Z",
"parent_uuid" : "fd96d7bd-a6ff-4950-806b-37e2783d36b1",
"modified_at" : "2026-10-15T16:21:12.077154Z"
}, {
"type" : "TOP",
"uuid" : "9ae3b007-1d14-4889-9326-020d637e08a8",
"updated_at" : "2026-10-15T16:21:12.141160Z",
"parent_uuid" : "24352174-cdc4-4cb3-a6fd-d314261251ae",
"modified_at" : "2026-10-15T16:21:12.141160Z"
}, {
"type" : "TOPSET",
"uuid" : "24352174-cdc4-4cb3-a6fd-d314261251ae",
"updated_at" : "2026-10-15T16:21:12.014531Z",
"parent_uuid" : "fd96d7bd-a6ff-4950-806b-37e2783d36b1",
"modified_at" : "2026-10-15T16:21:12.141160Z"
}, {
"type" : "TYPEWELL",
"uuid" : "fd96d7bd-a6ff-4950-806b-37e2783d36b1",
"updated_at" : "2026-10-15T16:21:11.924083Z",
"modified_at" : "2026-10-15T16:21:12.141160Z"
} ]
}
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/96d23a14-9375-4272-83e9-5585fb2603af/updateinfo' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/grids/96d23a14-9375-4272-83e9-5585fb2603af/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 2e48923dbd26a43fc8066fc827135a14
Content-Type: application/json
{
"content" : [ {
"type" : "GRID",
"uuid" : "96d23a14-9375-4272-83e9-5585fb2603af",
"updated_at" : "2026-10-15T16:21:13.370925Z",
"modified_at" : "2026-10-15T16:21:13.370925Z"
} ]
}
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/d8ce59e1-5b91-4bd7-9b00-6b6a87326f68/updateinfo' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/polygons/d8ce59e1-5b91-4bd7-9b00-6b6a87326f68/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: b6f2ea3aa7b6d56c780f9b3fe69daff5
Content-Type: application/json
{
"content" : [ {
"type" : "POLYGON",
"uuid" : "d8ce59e1-5b91-4bd7-9b00-6b6a87326f68",
"updated_at" : "2026-10-15T16:21:13.310405Z",
"modified_at" : "2026-10-15T16:21:13.310405Z"
} ]
}
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/6709dc7b-2527-4e68-ae5b-d8afdaa13fe7/updateinfo' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/sticks/6709dc7b-2527-4e68-ae5b-d8afdaa13fe7/updateinfo HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 5c3458b36ccf72fba06092c166f22f31
Content-Type: application/json
{
"content" : [ {
"type" : "STICK",
"uuid" : "6709dc7b-2527-4e68-ae5b-d8afdaa13fe7",
"updated_at" : "2026-10-15T16:21:13.417843Z",
"modified_at" : "2026-10-15T16:21:13.417843Z"
} ]
}
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" : [ "5fe4ef51-58f9-430d-b3da-c381d1bd9c35", "fd96d7bd-a6ff-4950-806b-37e2783d36b1", "96d23a14-9375-4272-83e9-5585fb2603af" ]
}'
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" : [ "5fe4ef51-58f9-430d-b3da-c381d1bd9c35", "fd96d7bd-a6ff-4950-806b-37e2783d36b1", "96d23a14-9375-4272-83e9-5585fb2603af" ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 1200a46201657653bebb98c6022b5a5c
Content-Type: application/json
{
"content" : [ {
"uuid" : "5fe4ef51-58f9-430d-b3da-c381d1bd9c35",
"type" : "WELL",
"updated_at" : "2026-10-15T16:21:12.212137Z",
"modified_at" : "2026-10-15T16:21:13.200758Z",
"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" : "fd96d7bd-a6ff-4950-806b-37e2783d36b1",
"type" : "TYPEWELL",
"updated_at" : "2026-10-15T16:21:11.924083Z",
"modified_at" : "2026-10-15T16:21:12.141160Z",
"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" : "96d23a14-9375-4272-83e9-5585fb2603af",
"type" : "GRID",
"updated_at" : "2026-10-15T16:21:13.370925Z",
"modified_at" : "2026-10-15T16:21:13.370925Z",
"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: f3a542ae4dd29fa8be2384f90e909780
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: 7156466268aee036a350f75b165ef6e9
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: b4f2389d0ac65024e1ed5baba3970e99
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: 1ccb8dc8bdd044cf38dafe424f541fc2
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
Request
$ curl 'https://solo.cloud/public/api/v1/wells/1fa8cc87-0cd7-4116-8038-5d081d8ca007/trajectory' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/1fa8cc87-0cd7-4116-8038-5d081d8ca007/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: cc8b861568b1bcd31fc25c7684ce83b8
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/16112f8e-5053-4985-924f-672885419f8d/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/16112f8e-5053-4985-924f-672885419f8d/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: 52af91fb50dd30e2b69d765212565a41
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/16112f8e-5053-4985-924f-672885419f8d/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/16112f8e-5053-4985-924f-672885419f8d/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: e4ce6182bd075b2bfc766659a5315c57
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
Request
$ curl 'https://solo.cloud/public/api/v1/typewells/ec334347-43ca-441b-8d17-9d830f54f62c/trajectory' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/ec334347-43ca-441b-8d17-9d830f54f62c/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 467848f873c0eb058cb5f8790d71d06a
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/6b6dc608-935a-4be3-bb51-1d4fad42d048/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/6b6dc608-935a-4be3-bb51-1d4fad42d048/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: e065a97cc09e07516325b46f8d2f4413
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/6b6dc608-935a-4be3-bb51-1d4fad42d048/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/6b6dc608-935a-4be3-bb51-1d4fad42d048/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: b3c49546917b42b1f6bebd8a9127890b
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
Request
$ curl 'https://solo.cloud/public/api/v1/nestedwells/5e09d0bb-fea1-450b-a6d3-508665d82047/trajectory' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/nestedwells/5e09d0bb-fea1-450b-a6d3-508665d82047/trajectory HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 7049220092a0e6d2463fd03e7c8a6a34
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/7fe70232-2730-4d4d-9727-ca0597fb248a/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/7fe70232-2730-4d4d-9727-ca0597fb248a/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: bb05d367a666503d779bb77300b77b95
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/b19386de-f596-4ebf-a4bb-a51f47787661/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/b19386de-f596-4ebf-a4bb-a51f47787661/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: bd93ddc2d97710841e0268a26adc8273
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), 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" : [ "1fa8cc87-0cd7-4116-8038-5d081d8ca007", "af10c185-f6fa-453c-89c1-a4c7ee957db9" ],
"typewells" : [ "ec334347-43ca-441b-8d17-9d830f54f62c" ],
"nestedwells" : [ "5e09d0bb-fea1-450b-a6d3-508665d82047" ]
}'
POST /public/api/v1/trajectories HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 220
{
"wells" : [ "1fa8cc87-0cd7-4116-8038-5d081d8ca007", "af10c185-f6fa-453c-89c1-a4c7ee957db9" ],
"typewells" : [ "ec334347-43ca-441b-8d17-9d830f54f62c" ],
"nestedwells" : [ "5e09d0bb-fea1-450b-a6d3-508665d82047" ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: c73a3747a02598eb401cb33aaceb38f6
Content-Type: application/json
{
"content" : [ {
"uuid" : "5e09d0bb-fea1-450b-a6d3-508665d82047",
"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" : "1fa8cc87-0cd7-4116-8038-5d081d8ca007",
"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" : "af10c185-f6fa-453c-89c1-a4c7ee957db9",
"trajectory" : [ {
"md" : {
"val" : 0.0
},
"incl" : {
"val" : 0.0
},
"azim" : {
"val" : 71.54300000000002
}
}, {
"md" : {
"val" : 61.19866000000002
},
"incl" : {
"val" : 0.35
},
"azim" : {
"val" : 176.083
}
}, {
"md" : {
"val" : 100.42002000000001
},
"incl" : {
"val" : 0.25
},
"azim" : {
"val" : 259.043
}
}, {
"md" : {
"val" : 124.93996000000003
},
"incl" : {
"val" : 0.28
},
"azim" : {
"val" : 227.59299999999993
}
}, {
"md" : {
"val" : 174.66991
},
"incl" : {
"val" : 1.13
},
"azim" : {
"val" : 154.423
}
}, {
"md" : {
"val" : 201.38989
},
"incl" : {
"val" : 1.26
},
"azim" : {
"val" : 140.38299999999998
}
}, {
"md" : {
"val" : 225.35998000000004
},
"incl" : {
"val" : 1.2999999999999998
},
"azim" : {
"val" : 153.71299999999997
}
}, {
"md" : {
"val" : 3280.839895013124
},
"incl" : {
"val" : 1.33
},
"azim" : {
"val" : 149.25300000000001
}
} ]
}, {
"uuid" : "ec334347-43ca-441b-8d17-9d830f54f62c",
"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
}
} ]
} ]
}
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: b0ae59a272cdd81eb472d507906f4035
Content-Type: application/json
{
"content" : [ {
"uuid" : "113dceaf-d5e1-409b-a457-7091b20793c8",
"name" : "Lateral",
"api" : "string",
"operator" : "string",
"latitude" : 30.980717619255476,
"longitude" : -115.98346038234884,
"latitude_wgs84" : 30.980717618422293,
"longitude_wgs84" : -115.98346038234884,
"project_uuid" : "1f2c6c71-e3dd-4248-b732-07b811916a39",
"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/e310793b-fb24-43c4-8b10-cafe6badd125/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/e310793b-fb24-43c4-8b10-cafe6badd125/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: b0c86123a4d62143be684b3c69e4e3ab
Content-Type: application/json
{
"uuid" : "7f96eae5-8276-4494-b05b-fcd1c7b3069f"
}
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/f1e10a7f-6a3d-4d92-a5ca-0326833112ad/imagelogs?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/f1e10a7f-6a3d-4d92-a5ca-0326833112ad/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: fca0c60397a34bda2f3e2876abaca8c4
Content-Type: application/json
{
"content" : [ {
"uuid" : "3eb24b4f-5d57-4c5f-8374-0d72d3ed5410",
"name" : "Acoustic Image"
}, {
"uuid" : "40e8a8b7-0673-45ca-895b-ab6ed70688b6",
"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/2c3fc37f-6bf7-4084-91e1-5076d4897c36/data' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/imagelogs/2c3fc37f-6bf7-4084-91e1-5076d4897c36/data HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 3290fe383459013ae07ca6aff4894ef0
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/f6ad9a3c-d66c-4e6a-b138-269dbbb09699/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/f6ad9a3c-d66c-4e6a-b138-269dbbb09699/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: 61c0a5d8ab52907e811e8ab54dc0f410
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/ceabcf0b-8e34-4750-8a1a-c0f1df54e07e' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/imagelogs/ceabcf0b-8e34-4750-8a1a-c0f1df54e07e HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: fb9575e850d6480ae915d3037a070438
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/7c38a038-0827-49fc-b7ec-8ca619ec1562/folders' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "New lateral nested folder",
"parent_folder" : "b0fcc19e-168d-4dc9-8b24-10a174d1a32e"
}'
POST /public/api/v1/wells/7c38a038-0827-49fc-b7ec-8ca619ec1562/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" : "b0fcc19e-168d-4dc9-8b24-10a174d1a32e"
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: a689cf7ef345a3a67cc4f8ec7684490f
Content-Type: application/json
{
"uuid" : "247c6128-109c-46fb-a955-2876371e7f7a"
}
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/a9b09233-e3c4-4c40-bfb5-7633a9083751/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/a9b09233-e3c4-4c40-bfb5-7633a9083751/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: 3941fc22c0a6b4f67e8ab620c08817f2
Content-Type: application/json
{
"uuid" : "65582cc8-32e1-4288-9cfb-f4f24cdf6ac5"
}
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/7c38a038-0827-49fc-b7ec-8ca619ec1562/folders?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/7c38a038-0827-49fc-b7ec-8ca619ec1562/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: 4de48c12d369de5764e40025955b8cef
Content-Type: application/json
{
"content" : [ {
"uuid" : "80a46ac6-5420-4f9f-9e64-4cfbef6dabc5",
"name" : "Lateral folder"
}, {
"uuid" : "313448b2-5371-4a86-a4bd-d72bb3cad63a",
"name" : "Nested folder",
"relative_path" : [ "80a46ac6-5420-4f9f-9e64-4cfbef6dabc5" ]
}, {
"uuid" : "b0fcc19e-168d-4dc9-8b24-10a174d1a32e",
"name" : "Deeply nested folder",
"relative_path" : [ "80a46ac6-5420-4f9f-9e64-4cfbef6dabc5", "313448b2-5371-4a86-a4bd-d72bb3cad63a" ]
} ],
"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/a9b09233-e3c4-4c40-bfb5-7633a9083751/folders?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/a9b09233-e3c4-4c40-bfb5-7633a9083751/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: 30921b6ccd45d483300eb5f11f15e48c
Content-Type: application/json
{
"content" : [ {
"uuid" : "ba37509a-f7ca-4827-b7c6-3cb3f5d6e3e5",
"name" : "Typewell folder"
}, {
"uuid" : "481e52a7-f7cb-4b67-9798-d4f09b06e9b6",
"name" : "Typewell nested folder",
"relative_path" : [ "ba37509a-f7ca-4827-b7c6-3cb3f5d6e3e5" ]
}, {
"uuid" : "67b1fe4d-7ff2-44ee-bfa3-457db8b4cf21",
"name" : "Typewell deeply nested folder",
"relative_path" : [ "ba37509a-f7ca-4827-b7c6-3cb3f5d6e3e5", "481e52a7-f7cb-4b67-9798-d4f09b06e9b6" ]
}, {
"uuid" : "65582cc8-32e1-4288-9cfb-f4f24cdf6ac5",
"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/71de5f90-9e1d-4a78-89f7-48f3f2b9b3fa/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/71de5f90-9e1d-4a78-89f7-48f3f2b9b3fa/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: b0176f60a88739af5da152cd65228900
Content-Type: application/json
{
"uuid" : "e73917da-95d6-4299-8e5c-0152b159822d"
}
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/64230c65-c575-4706-86c3-12fc58719918/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/64230c65-c575-4706-86c3-12fc58719918/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: f9660095763606e4bd36b30134595115
Content-Type: application/json
{
"uuid" : "b750455d-c8ce-4c5c-8cd8-bfb71712687d"
}
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/5011c995-914f-4c6b-88b8-cb8ad261aebf/attributes' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Treating pressure"
}'
POST /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf/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: 0e3d4ef970044373e61cc10c2ed3623d
Content-Type: application/json
{
"uuid" : "17cd8324-4340-4727-a860-3000e506b246"
}
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/5011c995-914f-4c6b-88b8-cb8ad261aebf/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" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 12.25
}
} ]
} ]
}'
POST /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf/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" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 12.25
}
} ]
} ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: b461559072a1d2b5ac6c8d46443fb964
Content-Type: application/json
{
"uuids" : [ "c2d0c2f6-b076-4405-bfb9-8c975f120a99" ]
}
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/35fa32cd-3e9e-4523-a0ec-5094b3e0e6ba/completions?name=Lateral%20completion&offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/35fa32cd-3e9e-4523-a0ec-5094b3e0e6ba/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: 5c57c2f9a10f5f775f54fe1aba97220b
Content-Type: application/json
{
"content" : [ {
"uuid" : "5011c995-914f-4c6b-88b8-cb8ad261aebf",
"name" : "Lateral completion",
"parent_well" : {
"uuid" : "4d5db5db-52e6-4fca-8b9a-18d3987d27ca",
"name" : "Completion lateral",
"type" : "WELL"
},
"attributes" : [ {
"uuid" : "17cd8324-4340-4727-a860-3000e506b246",
"name" : "Treating pressure",
"type" : "FLOAT"
}, {
"uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"name" : "Proppant concentration",
"type" : "FLOAT"
} ],
"stages" : [ {
"uuid" : "c2d0c2f6-b076-4405-bfb9-8c975f120a99",
"name" : "Public created stage",
"stage" : 1,
"top_md" : {
"val" : 400.0
},
"base_md" : {
"val" : 425.25
},
"length" : {
"val" : 25.25
},
"attribute_values" : [ {
"attribute_uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 12.25
}
} ]
}, {
"uuid" : "06080581-fe86-4230-8541-599d8f28b94b",
"name" : "Second stage",
"stage" : 2,
"top_md" : {
"val" : 130.0
},
"base_md" : {
"val" : 155.25
},
"length" : {
"val" : 25.25
},
"attribute_values" : [ {
"attribute_uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 9.75
}
} ]
}, {
"uuid" : "87940a2b-6af4-41af-add7-eaf5bfc0cc58",
"name" : "First stage",
"stage" : 3,
"top_md" : {
"val" : 100.0
},
"base_md" : {
"val" : 125.5
},
"length" : {
"val" : 25.5
},
"attribute_values" : [ {
"attribute_uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"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/4d5db5db-52e6-4fca-8b9a-18d3987d27ca/completions?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/4d5db5db-52e6-4fca-8b9a-18d3987d27ca/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: 800605019f4456a4b8b0585c8f8a78c4
Content-Type: application/json
{
"content" : [ {
"uuid" : "5011c995-914f-4c6b-88b8-cb8ad261aebf",
"name" : "Lateral completion",
"attributes" : [ {
"uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"name" : "Proppant concentration",
"type" : "FLOAT"
} ],
"stages" : [ {
"uuid" : "06080581-fe86-4230-8541-599d8f28b94b",
"name" : "Second stage",
"stage" : 1,
"top_md" : {
"val" : 130.0
},
"base_md" : {
"val" : 155.25
},
"length" : {
"val" : 25.25
},
"attribute_values" : [ {
"attribute_uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 9.75
}
} ]
}, {
"uuid" : "87940a2b-6af4-41af-add7-eaf5bfc0cc58",
"name" : "First stage",
"stage" : 2,
"top_md" : {
"val" : 100.0
},
"base_md" : {
"val" : 125.5
},
"length" : {
"val" : 25.5
},
"attribute_values" : [ {
"attribute_uuid" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"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/183d7823-f3dd-4c88-8c81-032991ac19d0/completions?offset=0&limit=10' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/typewells/183d7823-f3dd-4c88-8c81-032991ac19d0/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: 04ea5ba09dd00e241ca30d091096364f
Content-Type: application/json
{
"content" : [ {
"uuid" : "3a579973-3a1a-419e-b006-041a06f83f68",
"name" : "Typewell completion",
"attributes" : [ {
"uuid" : "9cb893d6-a942-46f1-91ef-ee7f110f319a",
"name" : "Proppant concentration",
"type" : "FLOAT"
} ],
"stages" : [ {
"uuid" : "26b363a1-81c8-4688-9a0f-a64db5135a4a",
"name" : "Second stage",
"stage" : 1,
"top_md" : {
"val" : 130.0
},
"base_md" : {
"val" : 155.25
},
"length" : {
"val" : 25.25
},
"attribute_values" : [ {
"attribute_uuid" : "9cb893d6-a942-46f1-91ef-ee7f110f319a",
"value" : {
"val" : 9.75
}
} ]
}, {
"uuid" : "834a25d6-2608-4a8f-9db6-72b5ec935d4c",
"name" : "First stage",
"stage" : 2,
"top_md" : {
"val" : 100.0
},
"base_md" : {
"val" : 125.5
},
"length" : {
"val" : 25.5
},
"attribute_values" : [ {
"attribute_uuid" : "9cb893d6-a942-46f1-91ef-ee7f110f319a",
"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/5011c995-914f-4c6b-88b8-cb8ad261aebf' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Updated lateral completion"
}'
PATCH /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf 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: e587284ef8f755784a7aebee35bfc9bf
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/5011c995-914f-4c6b-88b8-cb8ad261aebf/attributes/99ced652-8f8a-427b-a9bf-a7eec11fe70b' -i -X PATCH \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"name" : "Updated proppant concentration"
}'
PATCH /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf/attributes/99ced652-8f8a-427b-a9bf-a7eec11fe70b 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: eae2d4295e3ca0ec130f9f5832c530d5
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/87940a2b-6af4-41af-add7-eaf5bfc0cc58' -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" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 10.5
}
} ]
}'
PATCH /public/api/v1/stages/87940a2b-6af4-41af-add7-eaf5bfc0cc58 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" : "99ced652-8f8a-427b-a9bf-a7eec11fe70b",
"value" : {
"val" : 10.5
}
} ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: fd9c8f7613f20ea10c3a80618f8cafcd
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/5011c995-914f-4c6b-88b8-cb8ad261aebf' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 42a73dafc66d01353b7cac17c7a8a477
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/5011c995-914f-4c6b-88b8-cb8ad261aebf/attributes/99ced652-8f8a-427b-a9bf-a7eec11fe70b' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/completions/5011c995-914f-4c6b-88b8-cb8ad261aebf/attributes/99ced652-8f8a-427b-a9bf-a7eec11fe70b HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 305da2f4e6c28ddf6cf7efd43fe04b01
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/87940a2b-6af4-41af-add7-eaf5bfc0cc58' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/stages/87940a2b-6af4-41af-add7-eaf5bfc0cc58 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 1849a4327958136020a93512a7596506
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 400 ROOT_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.
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/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/bulk' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"wells" : [ {
"well_uuid" : "291ceb48-6e95-436c-90e3-255012decf5a",
"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/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/bulk HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 411
{
"wells" : [ {
"well_uuid" : "291ceb48-6e95-436c-90e3-255012decf5a",
"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: eebfc404631cf43d9d4db33858df2002
Content-Type: application/json
[ {
"well_uuid" : "291ceb48-6e95-436c-90e3-255012decf5a",
"curve_uuid" : "569e65ea-6840-483b-9874-fda1eecb2de2",
"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 400 ROOT_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 |
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 400 ROOT_NOT_FOUND.
Request
$ curl 'https://solo.cloud/public/api/v1/projects/c67007ca-ac2c-4b85-b25a-e7b9946be643/wells/0e707bcf-a243-4d8f-9f41-2910e53ac662/production-curves' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/projects/c67007ca-ac2c-4b85-b25a-e7b9946be643/wells/0e707bcf-a243-4d8f-9f41-2910e53ac662/production-curves HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 33f01c7391dc3f852133dce67d3674f0
Content-Type: application/json
[ {
"well_uuid" : "0e707bcf-a243-4d8f-9f41-2910e53ac662",
"curve_uuid" : "d03c3d55-08da-451a-a88e-ad203ed2b58a",
"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/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/query' -i -X POST \
-H 'Authorization: Bearer <your_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"well_uuids" : [ "0e707bcf-a243-4d8f-9f41-2910e53ac662" ],
"metrics" : [ "OIL" ]
}'
POST /public/api/v1/projects/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/query HTTP/1.1
Authorization: Bearer <your_access_token>
Content-Type: application/json
Host: solo.cloud
Content-Length: 88
{
"well_uuids" : [ "0e707bcf-a243-4d8f-9f41-2910e53ac662" ],
"metrics" : [ "OIL" ]
}
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 482e6ee7993c2628685e8e375a0a9449
Content-Type: application/json
[ {
"curve_uuid" : "d03c3d55-08da-451a-a88e-ad203ed2b58a",
"well_uuid" : "0e707bcf-a243-4d8f-9f41-2910e53ac662",
"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/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/d76bf784-0011-4d81-b5f9-0a26ea773e73' -i -X DELETE \
-H 'Authorization: Bearer <your_access_token>'
DELETE /public/api/v1/projects/c67007ca-ac2c-4b85-b25a-e7b9946be643/production-curves/d76bf784-0011-4d81-b5f9-0a26ea773e73 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 8081b723c631dc432087169c983461c3
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 read per object type: hole sections, BHA runs and casings. Each endpoint
returns a content array, empty when the well holds no objects of that type. The components of a BHA run
or a casing are not part of these responses.
Only objects that pass validation are returned. An object with missing or inconsistent values is omitted until it is corrected, so a count taken from these endpoints can be lower than the number of objects stored for the well.
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/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/hole-sections' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/hole-sections HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 429e9e5803a78a35a73c08a187813c41
Content-Type: application/json
{
"content" : [ {
"uuid" : "33680c00-cb1c-4535-9457-efbe695acd78",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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" : "c8be3c96-feb5-4b2f-bc35-59cdd89052b4",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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 BHA runs by well
Get the BHA runs of a well, ordered by run_number.
Request
$ curl 'https://solo.cloud/public/api/v1/wells/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/bha-runs' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/bha-runs HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 083dd50ae85d793c08ae6bf35c1820dd
Content-Type: application/json
{
"content" : [ {
"uuid" : "3e2883b3-f898-420f-bed8-4b6cbc3a6d90",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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" : "d2bd3ee6-d3b0-49f0-9c18-00af05adf788",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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 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/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/bha-runs/6c9031c1-65bd-4ea4-9768-5f55f9383139/torque-drag-models' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/bha-runs/6c9031c1-65bd-4ea4-9768-5f55f9383139/torque-drag-models HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 22683970d4e97a8576324b0b08a1a442
Content-Type: application/json
{
"content" : [ {
"model_id" : "e39e8ec2-b3ee-4cfe-b79a-a7a06049f577",
"name" : "auto",
"data_type" : "CALCULATED_BROOMSTICK",
"created_at" : "2026-10-15T16:20:55.402821Z",
"updated_at" : "2026-10-15T16:20:55.402821Z"
}, {
"model_id" : "305f2194-3637-4cd0-8e4e-31f0ad48abe4",
"name" : "report.csv",
"data_type" : "USER_BROOMSTICK",
"created_at" : "2026-10-15T16:20:55.813450Z",
"updated_at" : "2026-10-15T16:20:55.813450Z"
} ]
}
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/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/bha-runs/6c9031c1-65bd-4ea4-9768-5f55f9383139/torque-drag-models/e39e8ec2-b3ee-4cfe-b79a-a7a06049f577' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/bha-runs/6c9031c1-65bd-4ea4-9768-5f55f9383139/torque-drag-models/e39e8ec2-b3ee-4cfe-b79a-a7a06049f577 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: bb7a3c32e623ea08e9579eaafda0061a
Content-Type: application/json
{
"model_id" : "e39e8ec2-b3ee-4cfe-b79a-a7a06049f577",
"data_type" : "CALCULATED_BROOMSTICK",
"updated_at" : "2026-10-15T16:20:55.402821Z",
"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/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/casings' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/13d97dfa-c0e3-4145-9267-a3f53d4b08f1/casings HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: f6fab335150a4fc305a4b8b12965a46d
Content-Type: application/json
{
"content" : [ {
"uuid" : "04ea79a9-8ba4-4b62-a236-482ec790ff02",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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" : "a2660383-b8a4-49ab-a925-78a77bf9b86e",
"well_id" : "13d97dfa-c0e3-4145-9267-a3f53d4b08f1",
"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 or Liner |
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 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/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/casings/6c8ef0d8-b12b-4e48-9e02-b7316d6e59d9/torque-drag-models' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/casings/6c8ef0d8-b12b-4e48-9e02-b7316d6e59d9/torque-drag-models HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 3c17e95996e96e041f7f628e93cf333f
Content-Type: application/json
{
"content" : [ {
"model_id" : "aafade8f-ba22-4323-a6f3-365352ac38b1",
"name" : "auto",
"data_type" : "CALCULATED_BROOMSTICK",
"created_at" : "2026-10-15T16:20:55.877170Z",
"updated_at" : "2026-10-15T16:20:55.877170Z"
} ]
}
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/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/casings/6c8ef0d8-b12b-4e48-9e02-b7316d6e59d9/torque-drag-models/aafade8f-ba22-4323-a6f3-365352ac38b1' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/3ecab4ce-3d82-4667-be4b-59f41c5ff46d/casings/6c8ef0d8-b12b-4e48-9e02-b7316d6e59d9/torque-drag-models/aafade8f-ba22-4323-a6f3-365352ac38b1 HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: bc65e638e335b69af6cd935a56bfc77e
Content-Type: application/json
{
"model_id" : "aafade8f-ba22-4323-a6f3-365352ac38b1",
"data_type" : "CALCULATED_BROOMSTICK",
"updated_at" : "2026-10-15T16:20:55.877170Z",
"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/ee8fa17f-8b92-4faf-bab9-b337083af61e/roadmaps' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/wells/ee8fa17f-8b92-4faf-bab9-b337083af61e/roadmaps HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 0befb6a4f6204ac746b86c80eabe9b19
Content-Type: application/json
{
"content" : [ {
"name" : "Roadmap 1",
"uuid" : "b9f78ec4-c907-42f9-aa64-e45ac4436c7c"
}, {
"name" : "Roadmap 2",
"uuid" : "74de8843-70ad-4a27-8361-22a5e0c82e7a"
} ]
}
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:
md,tvd,incl,azim,openHole- the station geometry, each wrapped in{val};formationTop- the formation top the station falls into,comments- free text;rowType- where the row came from:generated(computed by the roadmap generation),topset(added from a formation topset) oruser(added by the user);isTopsetrepeats the topset flag;parameters- the six standard drilling parametersrop,mse,wob,differentialPressure,surfaceRpmandflowRate, each asmedian/min/maxwrapped in{val}. A parameter that was not computed for the row is absent;customParameters- the user-added trace columns. Each key is the UUID of the trace the column was built from, each value has the samemedian/min/maxshape, and{}means the row has no value for that trace.
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/b9f78ec4-c907-42f9-aa64-e45ac4436c7c' -i -X GET \
-H 'Authorization: Bearer <your_access_token>'
GET /public/api/v1/roadmaps/b9f78ec4-c907-42f9-aa64-e45ac4436c7c HTTP/1.1
Authorization: Bearer <your_access_token>
Host: solo.cloud
Response
HTTP/1.1 200 OK
X-Solo-Trace-Id: 14f6e37ae57783ea7ca5ad32e84f4ef6
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} |
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.
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.
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.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
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.
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.
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
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.
Notwithstanding the foregoing, Sections 4-6 of this Agreement will survive any termination of this Agreement.