Feeds

soon

An organization's own data set, built nightly, pulled by org key

This group's contract is frozen but its routes are not mounted on https://api.cardog.app yet. Shapes below are final.

GET/v2/feeds

The organization's feed contracts and where each one stands

Every active feed contract the key's organization holds, each with the pointer to its current run or `null` before the first run. A feed is the organization's own data set, built nightly from the Canadian vehicle record and scoped to what the organization is entitled to. Org key only: a user key or session is 403 `forbidden`. Costs 0 credits.

curl "https://api.cardog.app/v2/feeds" \
  -H "x-api-key: $CARDOG_API_KEY"

Response

200FeedsList
14 fields
feedsobject[]
contractobject
datasetstring
fieldmapstring
format"csv.gz" | "csv" | "jsonl.gz" | "jsonl" | "json.gz" | "json" | "parquet" | "pipe-csv"
status"active" | "draft" | "suspended"
cadenceobject
fullboolean
deltaboolean
weekly_fullboolean
latestobject | null
runIdstring
kind"full" | "delta"
producedAtstring (date-time)

Example response

1 keys
"response": {
"feeds": [
0: {2 items}
]
}

Errors401403429500every non-2xx body is the error envelope

GET/v2/feeds/{dataset}/latest

The current run of one dataset, with signed links to its artifacts

The manifest of the current run, the dataset declaration the rows are typed by, and one signed 24-hour link per artifact (`full`, `delta`, and `deletes` when the dataset declares deletes). Open a link exactly as printed; it needs no key and costs 0 credits. Rows are csv, RFC 4180 quoted, sorted by the first field; a VIN matches a row by its pattern (positions 1–8, `*`, 10–11, plus 12–14 when position 3 is `9`). 404 when the organization holds no active contract for the dataset or no run has been published yet. Org key only.

Path parameters

1 parameter
datasetstringrequired

A dataset id, name@version, e.g. vehicle-identity@1. GET /v2/feeds lists the ones this organization holds

curl "https://api.cardog.app/v2/feeds/{dataset}/latest" \
  -H "x-api-key: $CARDOG_API_KEY"

Response

200FeedLatest
76 fields
contractobject
datasetstring
fieldmapstring
format"csv.gz" | "csv" | "jsonl.gz" | "jsonl" | "json.gz" | "json" | "parquet" | "pipe-csv"
status"active" | "draft" | "suspended"
cadenceobject
fullboolean
deltaboolean
weekly_fullboolean
datasetobject
idstring
titlestring
status"ratified" | "draft"
presetsobject[]optional
idstring
titlestring
descriptionstring
fieldsstring[]
keystring[]optional
ratifiedAtstring (date-time)optional
semanticsobject
upsertboolean
deleteboolean
fieldsobject[]
namestring
type"string" | "integer" | "number" | "boolean" | "date" | "timestamp" | "ref"
requiredboolean
joinKeybooleanoptional
lifecyclestringoptional
descriptionstringoptional
groupstringoptional
presetbooleanoptional
pairedWithstringoptional
manifestobject
schema"feed-manifest@1"
contractstring
datasetstring
fieldmapstring
runIdstring
kind"full" | "delta"
baselineRunIdstringoptional
artifactsobject[]
namestring
recordsinteger
bytesinteger
sha256string
windowobject
fromstring (date-time)
tostring (date-time)
producedAtstring (date-time)
destinationPrefixstring
columnsobject[]optional
namestring
sourcestring
type"string" | "integer" | "number" | "boolean" | "date" | "timestamp" | "ref"
mappedbooleanoptional
layoutobjectoptional
delimiter"," | " | " | "\t" | ";"
headerboolean
lineEnding"lf" | "crlf"
artifactsobject[]
namestring
recordsinteger
bytesinteger
sha256string
urlstring (uri)
expiresAtstring (date-time)
columnsobject[]optional
namestring
sourcestring
type"string" | "integer" | "number" | "boolean" | "date" | "timestamp" | "ref"
mappedbooleanoptional
layoutobjectoptional
delimiter"," | " | " | "\t" | ";"
headerboolean
lineEnding"lf" | "crlf"

Example response

6 keys
"response": {
"contract": {
"dataset": "vehicle-identity@1",
"fieldmap": "recall-tool@1",
"format": "csv.gz",
"status": "active",
"cadence": {3 items}
},
"dataset": {
"id": "vehicle-identity@1",
"title": "Vehicle identity",
"status": "draft",
"presets": [6 items],
"semantics": {2 items},
"fields": [66 items]
},
"manifest": {
"schema": "feed-manifest@1",
"contract": "oem/feedtest/vehicle-identity@1",
"dataset": "vehicle-identity@1",
"fieldmap": "recall-tool@1",
"runId": "de7515b84c3cb6240946b7cf8046de49cf9fb6d9a18cf241c230321b262b68cf",
"kind": "full",
"artifacts": [2 items],
"window": {2 items},
"producedAt": "2026-09-30T19:23:27.799Z",
"destinationPrefix": "feeds/oem/feedtest/vehicle-identity@1/",
"columns": [66 items],
"layout": {3 items}
},
"artifacts": [
0: {6 items},
1: {6 items}
],
"columns": [
0: {3 items},
1: {3 items},
2: {3 items},
3: {3 items},
4: {3 items},
5: {3 items},
6: {3 items},
7: {3 items},
8: {3 items},
9: {3 items},
10: {3 items},
11: {3 items},
12: {3 items},
13: {3 items},
14: {3 items},
15: {3 items},
16: {3 items},
17: {3 items},
18: {3 items},
19: {3 items},
20: {3 items},
21: {3 items},
22: {3 items},
23: {3 items},
24: {3 items},
25: {3 items},
26: {3 items},
27: {3 items},
28: {3 items},
29: {3 items},
30: {3 items},
31: {3 items},
32: {3 items},
33: {3 items},
34: {3 items},
35: {3 items},
36: {3 items},
37: {3 items},
38: {3 items},
39: {3 items},
40: {3 items},
41: {3 items},
42: {3 items},
43: {3 items},
44: {3 items},
45: {3 items},
46: {3 items},
47: {3 items},
48: {3 items},
49: {3 items},
50: {3 items},
51: {3 items},
52: {3 items},
53: {3 items},
54: {3 items},
55: {3 items},
56: {3 items},
57: {3 items},
58: {3 items},
59: {3 items},
60: {3 items},
61: {3 items},
62: {3 items},
63: {3 items},
64: {3 items},
65: {3 items}
],
"layout": {
"delimiter": ",",
"header": true,
"lineEnding": "lf"
}
}

Errors400401403404429500503every non-2xx body is the error envelope

GET/v2/feeds/artifact/{runId}/{name}no auth

A feed artifact, through the signed link a latest read returns

The bytes behind an `artifacts[].url` from `GET /v2/feeds/{dataset}/latest`. Open that link exactly as printed. It is signed and good for 24 hours; it needs no API key or session, and it costs 0 credits. `.gz` artifacts are served as `application/gzip`, plain ones as `text/csv`, `application/x-ndjson` or `application/json` by their extension; all as attachments. An invalid or expired link is 403 `forbidden`: request the latest read again for a fresh one. 404 when no artifact is held under that run and name; 503 when it could not be fetched right now.

Path parameters

2 parameters
runIdstringrequired

The run id (the SHA-256 of the run's full), as printed in the link

namestringrequired

The artifact name, as printed in the link

Query parameters

4 parameters
tstringrequired

Part of the link as printed

dstringrequired

Part of the link as printed

expintegerrequired

Unix time (seconds) the link stops working: 24 hours from the read that printed it

sigstringrequired

The link's signature. Part of the link as printed; not something a caller computes

curl "https://api.cardog.app/v2/feeds/artifact/{runId}/{name}?t=%7Bt%7D&d=%7Bd%7D&exp=%7Bexp%7D&sig=%7Bsig%7D"

Response200application/gzipThe artifact as the builder wrote it

Errors400403404429500503every non-2xx body is the error envelope

Generated from the contract. Machine-readable spec: GET https://api.cardog.app/v2/openapi.json · markdown twin: /docs/reference/feeds.md