Skip to main content

Get All Properties of a Type

"What fields can I publish on a Project?" Equivalent to schema introspection, but asked at the data-layer rather than via GraphQL __type. The answer comes from the Type entity's Properties relation.

Query

query TypeProperties($typeId: UUID!) {
entity(id: $typeId) {
name
relations(
first: 100
filter: { typeEntity: { name: { is: "Properties" } } }
) {
totalCount
nodes {
toEntity {
id
name
description
}
}
}
}
}
{ "typeId": "484a18c5030a499cb0f2ef588ff16d50" }

Response (excerpt)

{
"data": {
"entity": {
"name": "Project",
"relations": {
"totalCount": 59,
"nodes": [
{ "toEntity": { "id": "c459500ac2fc4fcaa04bd8ef87e55093", "name": "Funding rounds", "description": null } },
{ "toEntity": { "id": "66386c9b72d6403fa31ffa53b94ab4c7", "name": "Provided services", "description": null } },
{ "toEntity": { "id": "bc073be27d8a5cf28486b4be2deb3e2a", "name": "Telegram", "description": null } }
]
}
}
}
}

The Project Type entity declares 59 properties that conventionally appear on Project-typed entities. This isn't enforcement — Geo doesn't reject values whose property isn't in the Type's declared list — but it tells you the canonical schema.

Loading interactive query runner…

Use cases

  • Schema discovery for a publisher: "I'm building a Project ingestion pipeline; what fields should I map?"
  • UI rendering: "Show me a form with the right inputs for editing a Project"
  • Validation: "Warn the curator if they're publishing a value on a property the Type doesn't declare"

Going further — get each property's data type

Property entities also have their own values describing them. To find the dataType (TEXT, INTEGER, DATE, etc.) for each property:

query TypePropertiesDetail($typeId: UUID!) {
entity(id: $typeId) {
name
relations(
first: 100
filter: { typeEntity: { name: { is: "Properties" } } }
) {
nodes {
toEntity {
id
name
values(first: 5) {
nodes {
propertyEntity { name }
text
propertyId
}
}
}
}
}
}
}

The values of a Property entity tell you what kind of property it is — its declared dataType, whether it's a Relation, etc.

Notes

  • Properties is a relation type, not a property — its name is "Properties". Don't confuse it with Value's property field.
  • Type-Properties are conventional, not enforced — you can publish any property on any entity. The Type's declared Properties tell you the expected shape, not a hard schema.
  • Both Type and Property are themselves entities — they have id, name, description, values, and relations like everything else in the graph. The "schema" lives inside the data.
  • For the GraphQL API's own type system, use the standard introspection query (__type(name: "...")) — that's a different layer.