Skip to main content

Read Dataset Records

Use this endpoint for time-, depth-, engineering-, and reference-dataset records.

GEThttps://data.corva.ai/api/v1/data/{provider}/{dataset}/

Path parameters

NameTypeRequirementDescription
providerStringRequiredProvider that owns the dataset definition, such as corva.
datasetStringRequiredDataset name, such as wits or completion.wits.

Query parameters

NameTypeRequirementDescription
limitIntegerRequiredNumber of records to return, from 1 through 10,000.
queryJSON objectOptionalConditions such as asset_id, company_id, or a timestamp range.
sortJSON objectOptionalField directions, using 1 for ascending and -1 for descending.
skipIntegerOptionalMatching records to skip; defaults to 0.
fieldsStringOptionalComma-separated fields to return.
include_countBooleanOptionalAdds the match count to the Total response header.

Example: latest drilling records

curl --get 'https://data.corva.ai/api/v1/data/corva/wits/' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'query={"asset_id":12345}' \
--data-urlencode 'sort={"timestamp":-1}' \
--data-urlencode 'limit=100' \
--data-urlencode 'fields=timestamp,asset_id,data.hole_depth,data.bit_depth'

Response

[
{
"asset_id": 12345,
"timestamp": 1710000000,
"data": {
"hole_depth": 10342.5,
"bit_depth": 10340.8
}
}
]

An empty array is a successful response with no matching records. Verify the asset, provider, dataset, and query range before treating it as an error.

Example pagination loop
cursor = 0
records = []

while True:
page = requests.get(
"https://data.corva.ai/api/v1/data/corva/wits/",
headers=headers,
params={
"query": json.dumps({
"asset_id": 12345,
"timestamp": {"$gt": cursor},
}),
"sort": json.dumps({"timestamp": 1}),
"limit": 10000,
},
timeout=30,
)
page.raise_for_status()
batch = page.json()
if not batch:
break

records.extend(batch)
cursor = batch[-1]["timestamp"]