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.
state | Meaning |
|---|---|
unknown | The 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. |
missing | No 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:
| Key | Meaning |
|---|---|
contribution | The contribution's id. |
source_ref | The source object's reference: the NetBox API URL of the object, or the Infrahub node id. |
native_id | The source's own id: the NetBox numeric id or the Infrahub node id. |
object_type | The NetBox API path or the Infrahub node kind. |
view | default, or the branch name in a branch view. |
hfid_original | The HFID as the source reported it, before cleaning. |
excluded | Present only for a record that takes no part in resolution, with the value duplicate_hfid. |
observations | One entry per field the contribution supplied. |
location | The contribution's location observation, if it supplied one. |
references | Links and identifiers of the source object, described below. |
Each observation has:
| Key | Meaning |
|---|---|
state | value, unknown or cleared. |
value | The normalized value, for value only. |
outcome | as_reported, mapped or defaulted for a value; unmapped, wrong_type or, for the location, ambiguous for an unknown. |
original | The value the source reported. For the location, the name of each level. |
path | The source field path that supplied the value. For the location, level_paths gives the path of each level. |
confirmed_at | When the source last confirmed the value. |
freshness | fresh or stale, from confirmed_at and the field's budget. |
A field the contribution did not supply has no entry in observations.
Links to the source object: references
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.
type | value | metadata |
|---|---|---|
url | An address. | content_type: text/html for a web page, application/json for an API address. |
text | An identifier to copy, such as the object id. | Empty. |
graphql_query | A GraphQL query that reads the object. | endpoint: the GraphQL address. variables: the query's variables as JSON. |
error | A 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:
| Source | References |
|---|---|
| NetBox | url "Open in NetBox": {base}/{object type}/{id}/. url "NetBox API": {base}/api/{object type}/{id}/. text "Object id". |
| Infrahub | url "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.