Skip to main content

Trace a value to its source

With detail=full, an entity reports how Census resolved each field and every source record behind it: the source object, the source path of each value, the value the source reported, and what normalization did with it. A consumer uses it to check where a value came from, or why a field is null.

curl -s 'localhost:8080/v1/inventories/devices/entities/fw-01?detail=full'

detail=full works on lookups and on lists. A list in full detail returns at most 100 entities per page.

Response​

The full entity is the compact entity plus resolution and contributions:

{
"hfid": "fw-01",
"fields": { "ports": 48, "role": "firewall", "serial": null, "status": "active" },
"location": "eu/par1/r01",
"field_sources": { "location": "netbox", "ports": "netbox", "role": "infrahub",
"serial": null, "status": "netbox" },
"freshness": { "state": "fresh", "oldest_confirmed_at": "2026-10-25T08:59:12.000000Z" },
"resolution": {
"serial": { "state": "unknown", "reason": "wrong_type", "contribution": "netbox" },
"location": {
"state": "value",
"levels": { "region": "infrahub", "site": "infrahub", "rack": "netbox" }
}
},
"contributions": [
{
"contribution": "netbox",
"source_ref": "https://netbox.example.net/api/dcim/devices/17/",
"native_id": "17",
"object_type": "dcim/devices",
"view": "default",
"hfid_original": " FW-01 ",
"observations": {
"status": { "state": "value", "value": "active", "outcome": "mapped",
"original": "in-service", "path": "status.value",
"confirmed_at": "2026-10-25T08:59:12.000000Z", "freshness": "fresh" },
"serial": { "state": "unknown", "outcome": "wrong_type", "original": 1234,
"path": "serial",
"confirmed_at": "2026-10-25T08:59:12.000000Z", "freshness": "fresh" }
},
"location": { "state": "value", "value": "eu/par1/r01", "outcome": "as_reported",
"original": { "site": "par1", "rack": "r01" },
"level_paths": { "site": "site.slug", "rack": "rack.name" },
"confirmed_at": "2026-10-25T08:59:12.000000Z", "freshness": "fresh" },
"references": [
{ "type": "url", "label": "Open in NetBox",
"value": "https://netbox.example.net/dcim/devices/17/",
"metadata": { "content_type": "text/html" } },
{ "type": "url", "label": "NetBox API",
"value": "https://netbox.example.net/api/dcim/devices/17/",
"metadata": { "content_type": "application/json" } },
{ "type": "text", "label": "Object id", "value": "17", "metadata": {} }
]
}
]
}

In a lookup, the body also has inventory, view, completeness and health.

Why a field is null: resolution​

resolution lists every field whose state is not value, and always the location.

stateMeaning
unknownThe highest-priority contribution that supplied the field gave a value Census could not use. reason is unmapped or wrong_type (unmapped or ambiguous for the location), and contribution names the contribution. Census did not use a lower-priority source's value.
missingNo contribution supplied the field.

For the location, levels names the contribution that supplied each level. When a lower-priority contribution made the location more specific, the deeper levels name it.

Where each value came from: contributions​

contributions lists the source records of the entity, one per contribution and source object:

KeyMeaning
contributionThe contribution's id.
source_refThe source object's reference: the NetBox API URL of the object, or the Infrahub node id.
native_idThe source's own id: the NetBox numeric id or the Infrahub node id.
object_typeThe NetBox API path or the Infrahub node kind.
viewdefault, or the branch name in a branch view.
hfid_originalThe HFID as the source reported it, before cleaning.
excludedPresent only for a record that takes no part in resolution, with the value duplicate_hfid.
observationsOne entry per field the contribution supplied.
locationThe contribution's location observation, if it supplied one.
referencesLinks and identifiers of the source object, described below.

Each observation has:

KeyMeaning
statevalue, unknown or cleared.
valueThe normalized value, for value only.
outcomeas_reported, mapped or defaulted for a value; unmapped, wrong_type or, for the location, ambiguous for an unknown.
originalThe value the source reported. For the location, the name of each level.
pathThe source field path that supplied the value. For the location, level_paths gives the path of each level.
confirmed_atWhen the source last confirmed the value.
freshnessfresh or stale, from confirmed_at and the field's budget.

A field the contribution did not supply has no entry in observations.

Each record has a list of references to its object in the source system, in the order a person would use them. A reference has a type, a label, a value and a metadata object with string values, which can be empty.

typevaluemetadata
urlAn address.content_type: text/html for a web page, application/json for an API address.
textAn identifier to copy, such as the object id.Empty.
graphql_queryA GraphQL query that reads the object.endpoint: the GraphQL address. variables: the query's variables as JSON.
errorA message that says why a reference could not be built.code: no_external_base_url or cannot_build.

Other types can be added later. A client must accept a type it does not know, for example by showing the label and the value as text.

The references of each source system:

SourceReferences
NetBoxurl "Open in NetBox": {base}/{object type}/{id}/. url "NetBox API": {base}/api/{object type}/{id}/. text "Object id".
Infrahuburl "Open in Infrahub": {base}/objects/{kind}/{id}?branch={branch}. graphql_query "GraphQL query", sent to {base}/graphql/{branch}. text "Node id".

{base} is the connection's external_base_url, or its endpoint when no external_base_url is set. {branch} is the branch the record was read from. When the connection has external_base_url_fallback = "error" and no external_base_url, the list starts with an error reference with the code no_external_base_url, and has no url or graphql_query reference. Connect source systems describes these settings.

source_ref keeps the value the source reported, even when the links use another address. No reference contains a credential.