@yottagraph-app/aether-instructions 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/commands/build_my_app.md +2 -2
  2. package/commands/update_instructions.md +30 -23
  3. package/package.json +1 -1
  4. package/rules/aether.mdc +1 -1
  5. package/rules/api.mdc +10 -15
  6. package/skills/data-model/SKILL.md +58 -0
  7. package/skills/data-model/edgar/DATA_DICTIONARY.md +306 -0
  8. package/skills/data-model/edgar/schema.yaml +1893 -0
  9. package/skills/data-model/fdic/DATA_DICTIONARY.md +243 -0
  10. package/skills/data-model/fdic/schema.yaml +356 -0
  11. package/skills/data-model/fred/DATA_DICTIONARY.md +313 -0
  12. package/skills/data-model/fred/schema.yaml +155 -0
  13. package/skills/data-model/gleif/DATA_DICTIONARY.md +211 -0
  14. package/skills/data-model/gleif/schema.yaml +254 -0
  15. package/skills/data-model/newsdata/schema.yaml +650 -0
  16. package/skills/data-model/overview.md +77 -0
  17. package/skills/data-model/polymarket/DATA_DICTIONARY.md +384 -0
  18. package/skills/data-model/polymarket/schema.yaml +601 -0
  19. package/skills/data-model/sanctions/DATA_DICTIONARY.md +140 -0
  20. package/skills/data-model/sanctions/schema.yaml +153 -0
  21. package/skills/data-model/stocks/DATA_DICTIONARY.md +122 -0
  22. package/skills/data-model/stocks/schema.yaml +131 -0
  23. package/skills/data-model/system_schema.yaml +71 -0
  24. package/skills/data-model/wikipedia/DATA_DICTIONARY.md +185 -0
  25. package/skills/data-model/wikipedia/schema.yaml +255 -0
  26. package/skills/elemental-api/SKILL.md +37 -0
  27. package/skills/elemental-api/articles.md +386 -0
  28. package/skills/elemental-api/entities.md +393 -0
  29. package/skills/elemental-api/events.md +145 -0
  30. package/skills/elemental-api/find.md +279 -0
  31. package/skills/elemental-api/graph.md +239 -0
  32. package/skills/elemental-api/llm.md +18 -0
  33. package/skills/elemental-api/overview.md +51 -0
  34. package/skills/elemental-api/relationships.md +310 -0
  35. package/skills/elemental-api/schema.md +379 -0
  36. package/skills/elemental-api/sentiment.md +93 -0
  37. package/skills/elemental-api/server.md +186 -0
@@ -0,0 +1,310 @@
1
+ # Relationships
2
+
3
+ Relationships (also called "links") represent connections between entities in the Knowledge Graph. These connections are derived from articles.
4
+
5
+ ## When to Use
6
+
7
+ - You want to find entities connected to a given entity
8
+ - You need to understand how two entities are related
9
+ - You're exploring a network of connections (e.g., "Who is connected to this person?")
10
+ - You need link counts or relationship strength between entities
11
+
12
+ ## Key Concepts
13
+
14
+ - **Linked Entities**: Other entities that have a relationship with a given entity
15
+ - **Link Strength**: Represents the significance of the relationship between two entities
16
+ - **Link Counts**: Number of connections between entity pairs, useful for measuring relationship strength
17
+ - **Relationship Types**: Common types include:
18
+ - `competes_with`
19
+ - `compares_to`
20
+ - `customer_of`
21
+ - `partnered_with`
22
+ - `trades_with`
23
+ - `invests_in`
24
+ - `is_related_to`
25
+ - `sues`
26
+ - `provides_support_to`
27
+
28
+ ## Tips
29
+
30
+ - Relationships are bidirectional—if A links to B, B links to A
31
+ - High link counts indicate stronger or more frequent connections in the news
32
+ - Use with graph endpoints to visualize relationship networks
33
+ - **`entity_type` filter limitation**: see the Guidance note on "Get linked entities" below — only three entity types are supported
34
+
35
+ <!-- BEGIN GENERATED CONTENT -->
36
+
37
+ ## Endpoints
38
+
39
+ ### Get linked entities
40
+
41
+ `GET /entities/{source_neid}/linked`
42
+
43
+ Get list of entities linked to a source entity, optionally filtered by entity type and link type
44
+
45
+ #### Parameters
46
+
47
+ | Name | Type | Required | Description |
48
+ |------|------|----------|-------------|
49
+ | source_neid | string | yes | Source entity NEID |
50
+ | entity_type | string[] | no | Filter by entity type(s) |
51
+ | link_type | string[] | no | Filter by link type(s) |
52
+
53
+ #### Responses
54
+
55
+ | Status | Description |
56
+ |--------|-------------|
57
+ | 200 | List of linked entity NEIDs (`GetLinkedEntitiesResponse`) |
58
+ | 400 | Invalid parameters (`Error`) |
59
+ | 404 | Source entity not found (`Error`) |
60
+ | 500 | Internal server error (`Error`) |
61
+
62
+ #### Example
63
+
64
+ **Request:**
65
+
66
+ ```
67
+ GET /entities/00416400910670863867/linked
68
+ ```
69
+
70
+ **Response:**
71
+
72
+ ```json
73
+ {"entities": ["00416400910670863867"]}
74
+ ```
75
+
76
+ ---
77
+
78
+ ### Get links between entities
79
+
80
+ `GET /entities/{source_neid}/links/{target_neid}`
81
+
82
+ Get list of links between source and target entities, optionally filtered by link type
83
+
84
+ #### Parameters
85
+
86
+ | Name | Type | Required | Description |
87
+ |------|------|----------|-------------|
88
+ | source_neid | string | yes | Source entity NEID |
89
+ | target_neid | string | yes | Target entity NEID |
90
+ | link_type | string[] | no | Filter by link type(s) |
91
+ | include_mentions | boolean | no | Include mention details in response |
92
+ | include_articles | boolean | no | Include article details in response |
93
+
94
+ #### Responses
95
+
96
+ | Status | Description |
97
+ |--------|-------------|
98
+ | 200 | List of entity links (`GetLinksResponse`) |
99
+ | 400 | Invalid parameters (`Error`) |
100
+ | 404 | Source or target entity not found (`Error`) |
101
+ | 500 | Internal server error (`Error`) |
102
+
103
+ #### Example
104
+
105
+ **Request:**
106
+
107
+ ```
108
+ GET /entities/00416400910670863867/links/04358848009837283240
109
+ ```
110
+
111
+ **Response:**
112
+
113
+ ```json
114
+ {"links": []}
115
+ ```
116
+
117
+ ---
118
+
119
+ ### Get graph layout
120
+
121
+ `GET /graph/{center_neid}/layout`
122
+
123
+ Get nodes and edges layout data for visualizing a relationship graph. Response is cached for 5 minutes.
124
+
125
+ #### Guidance
126
+
127
+ Only use this endpoint if you care about graph-specific properties. Otherwise it is faster to use /entities/{source_neid}/links/{target_neid}. This should always be called with a non-empty list of neids. A typical pattern is to call /graph/{center_neid}/neighborhood and then use the returned NEIDs to call this endpoint.
128
+
129
+ #### Parameters
130
+
131
+ | Name | Type | Required | Description |
132
+ |------|------|----------|-------------|
133
+ | center_neid | string | yes | Center entity NEID |
134
+ | neid | string[] | no | Additional entity NEIDs to include in layout |
135
+ | borderMinX | number | no | Minimum X border for layout |
136
+ | borderMinY | number | no | Minimum Y border for layout |
137
+ | borderMaxX | number | no | Maximum X border for layout |
138
+ | borderMaxY | number | no | Maximum Y border for layout |
139
+
140
+ #### Responses
141
+
142
+ | Status | Description |
143
+ |--------|-------------|
144
+ | 200 | Graph layout with nodes and edges (`GraphLayoutResponse`) |
145
+ | 400 | Invalid parameters (`Error`) |
146
+ | 500 | Internal server error (`Error`) |
147
+
148
+ #### Example
149
+
150
+ **Request:**
151
+
152
+ ```
153
+ GET /graph/00416400910670863867/layout?neid=04358848009837283240
154
+ ```
155
+
156
+ **Response:**
157
+
158
+ ```json
159
+ {"nodes": [{"neid": "00416400910670863867", "label": "organization|Apple|nationality: us...", "isCentralNode": true, "x": -333.33, "y": -200, "width": 666.67, "height": 266.67}], "edges": [{"source": "00416400910670863867", "target": "04358848009837283240", "label": "competes_with", "path": [{"X": 0, "Y": 0}, {"X": 0, "Y": 66.67}], "article_ids": ["02861951941133789623"], "snippets": ["Apple and Google are mentioned as companies..."], "weight": 0.0267}]}
160
+ ```
161
+
162
+ ---
163
+
164
+ ### Get graph neighborhood
165
+
166
+ `GET /graph/{center_neid}/neighborhood`
167
+
168
+ Get list of neighboring entities in the relationship graph, optionally filtered by entity type. Response is cached for 5 minutes.
169
+
170
+ #### Guidance
171
+
172
+ Only use this endpoint if you care about graph-specific properties. Otherwise it is faster to use /entities/{source_neid}/linked. Response includes the center entity itself in the results with a weight of 1.0. The 'neighbors' and 'weights' arrays are parallel (same indices correspond).
173
+
174
+ #### Parameters
175
+
176
+ | Name | Type | Required | Description |
177
+ |------|------|----------|-------------|
178
+ | center_neid | string | yes | Center entity NEID |
179
+ | size | integer | no | Maximum number of neighbors to return |
180
+ | type | string[] | no | Filter by entity type(s) |
181
+
182
+ #### Responses
183
+
184
+ | Status | Description |
185
+ |--------|-------------|
186
+ | 200 | Neighbors and their weights (`GraphNeighborhoodResponse`) |
187
+ | 400 | Invalid parameters (`Error`) |
188
+ | 404 | Center entity not found (`Error`) |
189
+ | 500 | Internal server error (`Error`) |
190
+
191
+ #### Example
192
+
193
+ **Request:**
194
+
195
+ ```
196
+ GET /graph/00416400910670863867/neighborhood?size=5
197
+ ```
198
+
199
+ **Response:**
200
+
201
+ ```json
202
+ {"neighbors": ["00416400910670863867", "04358848009837283240", "00315863961550087877"], "weights": [1, 0.0267, 0.0167]}
203
+ ```
204
+
205
+ ---
206
+
207
+ ### Get link counts between entities
208
+
209
+ `GET /graph/{source_neid}/links/{target_neid}/counts`
210
+
211
+ Get counts of links between source and target entities over time
212
+
213
+ #### Guidance
214
+
215
+ Only use this endpoint if you care about graph-specific properties. Otherwise it is faster to use /entities/{source_neid}/links/{target_neid}. Returns link_counts object with relationship types as keys. Values are arrays of timestamps in Excel/OLE serial date format (days since 1899-12-30). Example: 46019.64453125 = 2025-12-28 15:28:07 UTC. The count for each relationship type is the array length (number of observations).
216
+
217
+ #### Parameters
218
+
219
+ | Name | Type | Required | Description |
220
+ |------|------|----------|-------------|
221
+ | source_neid | string | yes | Source entity NEID |
222
+ | target_neid | string | yes | Target entity NEID |
223
+
224
+ #### Responses
225
+
226
+ | Status | Description |
227
+ |--------|-------------|
228
+ | 200 | Link counts by type (`GetLinkCountsResponse`) |
229
+ | 400 | Invalid parameters (`Error`) |
230
+ | 500 | Internal server error (`Error`) |
231
+
232
+ #### Example
233
+
234
+ **Request:**
235
+
236
+ ```
237
+ GET /graph/00416400910670863867/links/04358848009837283240/counts
238
+ ```
239
+
240
+ **Response:**
241
+
242
+ ```json
243
+ {"link_counts": {"compares_to": [46019.64453125, 45999.3515625], "competes_with": [45847.5625, 45850.60546875], "customer_of": [45836.9296875], "partnered_with": [], "trades_with": []}}
244
+ ```
245
+
246
+ ## Types
247
+
248
+ ### EntityLink
249
+
250
+ A link between two entities
251
+
252
+ | Field | Type | Description |
253
+ |-------|------|-------------|
254
+ | article_ids | string[] | Article IDs where this link was found |
255
+ | recorded_at | string | Time when the link was recorded @Format date-time |
256
+ | source | string | Source entity NEID |
257
+ | target | string | Target entity NEID |
258
+ | type | string | Type of link/relationship |
259
+
260
+ ### GetLinkCountsResponse
261
+
262
+ Response containing link counts between entities
263
+
264
+ | Field | Type | Description |
265
+ |-------|------|-------------|
266
+ | link_counts | object | Map of link type to count values |
267
+
268
+ ### GetLinkedEntitiesResponse
269
+
270
+ Response containing linked entities
271
+
272
+ | Field | Type | Description |
273
+ |-------|------|-------------|
274
+ | entities | string[] | List of linked entity NEIDs |
275
+
276
+ ### GetLinksResponse
277
+
278
+ Response containing links between entities
279
+
280
+ | Field | Type | Description |
281
+ |-------|------|-------------|
282
+ | articles | `ArticleDetail`[] | Articles tied to the returned links (only included when requested) |
283
+ | links | `EntityLink`[] | List of entity links |
284
+ | mentions | `MentionDetail`[] | Mentions tied to the returned links (only included when requested) |
285
+
286
+ ### GraphNeighborhoodResponse
287
+
288
+ Response containing neighbors of an entity in the relationship graph
289
+
290
+ | Field | Type | Description |
291
+ |-------|------|-------------|
292
+ | neighbors | string[] | List of neighbor NEIDs |
293
+ | weights | number[] | Weights corresponding to each neighbor (same order as neighbors) |
294
+
295
+ ### LinkedExpression
296
+
297
+ | Field | Type | Description |
298
+ |-------|------|-------------|
299
+ | **linked** | `Linked` | |
300
+
301
+ ### Linked
302
+
303
+ | Field | Type | Description |
304
+ |-------|------|-------------|
305
+ | **distance** | integer | Maximum relationship distance to traverse |
306
+ | pids | integer[] | Property identifiers defining the relationship types to follow |
307
+ | to_entity | string | Target entity ID for relationship traversal |
308
+ | direction | string | Direction of relationship traversal. 'outgoing' (default) follows subject->value edges, 'incoming' follows value->subject (reverse) edges, 'both' unions outgoing and incoming results. |
309
+
310
+ <!-- END GENERATED CONTENT -->
@@ -0,0 +1,379 @@
1
+ # Schema
2
+
3
+ The schema defines the data model: what **entity types** (flavors) exist and what **properties** they can have. Understanding the schema is essential for constructing queries and interpreting results.
4
+
5
+ ## When to Use
6
+
7
+ - You need to discover available entity types (flavors) and their IDs (FIDs)
8
+ - You need to discover available properties and their IDs (PIDs)
9
+ - You need human-readable names, units, or domain information for properties
10
+ - You're exploring the data model before constructing a search expression
11
+
12
+ ## Key Concepts
13
+
14
+ - **Flavors** = Entity types. Each entity belongs to exactly one flavor.
15
+ - Examples: "ship" (FID 1), "organization" (FID 10), "person" (FID 9)
16
+ - Identified by a Flavor ID (FID) — a small integer
17
+ - **Properties** = Attributes that entities can have. Each property has:
18
+ - A Property ID (PID) — a small integer
19
+ - A name (e.g., "name", "length", "mailing_address", "acquires")
20
+ - A data type (e.g., "data_cat" for text, "data_float" for numbers)
21
+ - Domain flavors — which entity types can have this property
22
+
23
+ ## Choosing a Schema Endpoint
24
+
25
+ There are two schema endpoints with different levels of detail:
26
+
27
+ | Endpoint | Flavors include | Properties include |
28
+ |----------|-----------------|-------------------|
29
+ | `GET /schema` | findex, name, singular/plural display names | pid, name, display_name, unit, value_type, domain_findexes, target_findexes |
30
+ | `GET /elemental/metadata/schema` | fid, name only | pid, name, type only |
31
+
32
+ **Use `/schema`** (recommended) when you need:
33
+ - Human-readable display names (e.g., "Ship" vs "ship")
34
+ - Units of measurement (e.g., "m", "kg", "knots")
35
+ - Which flavors a property applies to (`domain_findexes`)
36
+
37
+ **Use `/elemental/metadata/schema`** when you just need basic FID/PID to name mappings.
38
+
39
+ ## Tips
40
+
41
+ - Many API responses return only FIDs and PIDs (not names) — use the schema to translate these to human-readable names
42
+ - Cache schema results; the data model changes infrequently
43
+ - Use `/elemental/metadata/properties/{pid}/summary` to understand value distributions before filtering
44
+
45
+ ## Common Workflow
46
+
47
+ 1. **Get the schema** → `GET /schema` to learn available flavors and properties
48
+ 2. **Find entities of a type** → `POST /elemental/find` with `is_type` expression
49
+ 3. **Get property values** → `POST /elemental/entities/properties` to fetch values for those entities
50
+
51
+ ## Common Properties by Entity Type
52
+
53
+ This is a quick-reference for writing first-pass code. **The schema endpoint
54
+ is the source of truth** — always call `GET /schema` to get actual PIDs and
55
+ confirm which properties exist in a given deployment. Property availability
56
+ varies by dataset.
57
+
58
+ | Entity Type | Common Properties |
59
+ |---|---|
60
+ | **organization** | `name`, `country`, `ticker`, `industry`, `business_sector`, `sic_code`, `state_of_incorporation`, `mailing_address`, `business_phone`, `company_cik` |
61
+ | **person** | `name`, `country`, `nationality`, `birth_date`, `position`, `person_cik`, `job_title` |
62
+ | **financial_instrument** | `name`, `ticker`, `security_type`, `instrument_type`, `cusip_number` |
63
+ | **document** (SEC filings) | `name`, `title`, `form_type`, `filing_date`, `report_date`, `accession_number`, `form_type_detail` |
64
+ | **article** | `name`, `title`, `sentiment` |
65
+ | **event** | `name`, `category`, `date`, `description`, `likelihood` |
66
+ | **location** | `name`, `fixedLatitude`, `fixedLongitude` |
67
+
68
+ **Relationship properties** (type `data_nindex`) link entities to each other.
69
+ Common ones for organizations: `acquires`, `owns`, `competes_with`,
70
+ `partnered_with`, `does_business_with`, `is_part_of`, `issues`, `has_subsidiary`.
71
+ For people: `works_at`, `head_of`, `is_director`, `is_officer`, `is_colleague_of`.
72
+
73
+ <!-- BEGIN GENERATED CONTENT -->
74
+
75
+ ## Endpoints
76
+
77
+ ### Get detailed schema information
78
+
79
+ `GET /schema`
80
+
81
+ Returns detailed schema information including entity types (flavors) with display names and properties with display names, units, and domain/target relationships. This endpoint provides more detail than /elemental/metadata/schema.
82
+
83
+ #### Guidance
84
+
85
+ This endpoint returns richer metadata than /elemental/metadata/schema, including display names, units, and relationship domains. Use this when you need human-readable names or property metadata.
86
+
87
+ #### Responses
88
+
89
+ | Status | Description |
90
+ |--------|-------------|
91
+ | 200 | Schema information (`SchemaResponse`) |
92
+ | 500 | Internal server error (`Error`) |
93
+
94
+ #### Example
95
+
96
+ **Request:**
97
+
98
+ ```
99
+ GET /schema
100
+ ```
101
+
102
+ **Response:**
103
+
104
+ ```json
105
+ {"flavors": [{"findex": 1, "name": "ship", "singular_display_name": "Ship", "plural_display_name": "Ships"}, {"findex": 10, "name": "organization", "singular_display_name": "Organization", "plural_display_name": "Organizations"}], "properties": [{"pid": 8, "name": "name", "display_name": "Name", "value_type": "data_cat"}, {"pid": 22, "name": "length", "display_name": "Length", "unit": "m", "value_type": "data_float"}]}
106
+ ```
107
+
108
+ ---
109
+
110
+ ### Find entities by expression
111
+
112
+ `POST /elemental/find`
113
+
114
+ Search for entities using a powerful expression language. The expression parameter supports complex nested queries with logical operators, geographic constraints, property comparisons, and more.
115
+
116
+ #### Guidance
117
+
118
+ CRITICAL: This endpoint REQUIRES Content-Type: application/x-www-form-urlencoded. Sending a JSON body will fail with 400 error. The expression parameter must be URL-encoded form data, not a JSON request body. For the full expression language reference including all expression types, comparison operators, and examples, see find.md.
119
+
120
+ #### Request Body
121
+
122
+ **Content-Type:** `application/x-www-form-urlencoded`
123
+
124
+ | Name | Type | Required | Description |
125
+ |------|------|----------|-------------|
126
+ | expression | string | yes | JSON-encoded expression object defining the search criteria |
127
+ | deadline | any | no | Response deadline in milliseconds or duration format |
128
+ | limit | integer | no | Maximum number of entity IDs to return in first response |
129
+
130
+ #### Responses
131
+
132
+ | Status | Description |
133
+ |--------|-------------|
134
+ | 200 | Find operation successful (`FindResponse`) |
135
+ | 400 | Bad request - invalid parameters or malformed expression (`Error`) |
136
+ | 500 | Internal server error (`Error`) |
137
+ | 501 | Elemental API capability not enabled (`Error`) |
138
+
139
+ #### Example
140
+
141
+ **Request:**
142
+
143
+ ```
144
+ POST /elemental/find
145
+ Content-Type: application/x-www-form-urlencoded
146
+
147
+ expression={"type":"is_type","is_type":{"fid":10}}&limit=5
148
+ ```
149
+
150
+ **Response:**
151
+
152
+ ```json
153
+ {"op_id": "98cc54e9-0108-4361-9c96-18ea97cda7a2", "follow_up": true, "eids": ["01601807036815568643", "08115040994665529432", "02045070050429461063"]}
154
+ ```
155
+
156
+ ---
157
+
158
+ ### Get property values for entities
159
+
160
+ `POST /elemental/entities/properties`
161
+
162
+ Retrieves property values for specified entities. Returns the current values of requested properties for each entity.
163
+
164
+ #### Guidance
165
+
166
+ Pass entity IDs as a JSON array in the 'eids' form field (eids and neids are interchangeable terms for entity IDs). Optionally filter to specific properties via 'pids'. If pids is omitted, returns all available properties. Set include_attributes=true to get additional metadata about each property value.
167
+
168
+ #### Request Body
169
+
170
+ **Content-Type:** `application/x-www-form-urlencoded`
171
+
172
+ | Name | Type | Required | Description |
173
+ |------|------|----------|-------------|
174
+ | eids | string | yes | JSON array of entity IDs to get properties for |
175
+ | pids | string | no | JSON array of property IDs to retrieve (optional, omit for all properties) |
176
+ | include_attributes | string | no | Include property attributes in response (true/false) |
177
+
178
+ #### Responses
179
+
180
+ | Status | Description |
181
+ |--------|-------------|
182
+ | 200 | Property values retrieved successfully (`GetPropertyValuesResponse`) |
183
+ | 400 | Bad request - invalid parameters or malformed expression (`Error`) |
184
+ | 500 | Internal server error (`Error`) |
185
+
186
+ #### Example
187
+
188
+ **Request:**
189
+
190
+ ```
191
+ POST /elemental/entities/properties
192
+ Content-Type: application/x-www-form-urlencoded
193
+
194
+ eids=["00416400910670863867"]&pids=[8]
195
+ ```
196
+
197
+ **Response:**
198
+
199
+ ```json
200
+ {"op_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "follow_up": false, "values": [{"eid": "00416400910670863867", "pid": 8, "value": "Apple", "recorded_at": "2026-01-15T10:30:00Z"}]}
201
+ ```
202
+
203
+ ---
204
+
205
+ ### Get complete schema information
206
+
207
+ `GET /elemental/metadata/schema`
208
+
209
+ Returns comprehensive schema information including all entity types (flavors), properties, and their attributes. This endpoint provides the complete data model available in the system.
210
+
211
+ #### Guidance
212
+
213
+ Response is wrapped in a 'schema' container object. Access flavors and properties via response.schema.flavors and response.schema.properties. Flavors contain: fid (unique identifier), name (e.g., 'ship', 'aircraft'). Properties contain: pid (unique identifier), name (e.g., 'latitude', 'name'), type (e.g., 'data_float', 'data_int', 'data_cat', 'data_nindex').
214
+
215
+ #### Responses
216
+
217
+ | Status | Description |
218
+ |--------|-------------|
219
+ | 200 | Schema information retrieved successfully (`GetSchemaResponse`) |
220
+ | 500 | Internal server error (`Error`) |
221
+ | 501 | Elemental API capability not enabled (`Error`) |
222
+
223
+ #### Example
224
+
225
+ **Request:**
226
+
227
+ ```
228
+ GET /elemental/metadata/schema
229
+ ```
230
+
231
+ **Response:**
232
+
233
+ ```json
234
+ {"op_id": "40dc4cd9-f1b2-4b5c-85d0-c7c61256e5d9", "follow_up": false, "schema": {"flavors": [{"fid": 1, "name": "ship"}, {"fid": 2, "name": "handset"}, {"fid": 10, "name": "organization"}], "properties": [{"pid": 1, "name": "mmsi", "type": "data_cat"}, {"pid": 8, "name": "name", "type": "data_cat"}]}}
235
+ ```
236
+
237
+ ---
238
+
239
+ ### Get property value summary
240
+
241
+ `GET /elemental/metadata/properties/{pid}/summary`
242
+
243
+ Returns summary statistics for a specific property including value distribution, ranges for numeric properties, and unique values for categorical properties.
244
+
245
+ #### Parameters
246
+
247
+ | Name | Type | Required | Description |
248
+ |------|------|----------|-------------|
249
+ | pid | integer | yes | Property ID to summarize |
250
+
251
+ #### Responses
252
+
253
+ | Status | Description |
254
+ |--------|-------------|
255
+ | 200 | Property summary retrieved successfully (`SummarizePropertyResponse`) |
256
+ | 400 | Bad request - invalid parameters or malformed expression (`Error`) |
257
+ | 401 | Authentication required or authentication failed (`Error`) |
258
+ | 500 | Internal server error (`Error`) |
259
+
260
+ #### Example
261
+
262
+ **Request:**
263
+
264
+ ```
265
+ GET /elemental/metadata/properties/8/summary
266
+ ```
267
+
268
+ **Response:**
269
+
270
+ ```json
271
+ {"op_id": "a337cd9c-6483-4472-a30b-e875ba7f2b21", "follow_up": false, "pid": 8, "value_type": "categorical"}
272
+ ```
273
+
274
+ ## Types
275
+
276
+ ### SchemaFlavor
277
+
278
+ Entity type (flavor) with human-readable display names
279
+
280
+ | Field | Type | Description |
281
+ |-------|------|-------------|
282
+ | findex | integer | Unique flavor identifier (same as fid in other endpoints) |
283
+ | name | string | Flavor name (internal identifier) |
284
+ | plural_display_name | string | Human-readable plural name (e.g., "Ships") |
285
+ | singular_display_name | string | Human-readable singular name (e.g., "Ship") |
286
+
287
+ ### SchemaProperty
288
+
289
+ Property with display name, unit, and domain information
290
+
291
+ | Field | Type | Description |
292
+ |-------|------|-------------|
293
+ | display_name | string | Human-readable property name |
294
+ | domain_findexes | integer[] | Flavor IDs (findexes) that can have this property |
295
+ | name | string | Property name (internal identifier) |
296
+ | pid | integer | Unique property identifier |
297
+ | target_findexes | integer[] | For relationship properties, the flavor IDs of valid targets |
298
+ | unit | string | Unit of measurement (e.g., "m", "kg", "knots") |
299
+ | value_type | string | Property data type. Possible values: "data_float", "data_int", "data_bool", "data_cat", "data_nindex" |
300
+
301
+ ### SchemaResponse
302
+
303
+ Detailed schema response with entity types (flavors) and properties including display names, units, and domains
304
+
305
+ | Field | Type | Description |
306
+ |-------|------|-------------|
307
+ | flavors | `SchemaFlavor`[] | Array of entity types (flavors) with display names |
308
+ | properties | `SchemaProperty`[] | Array of properties with display names, units, and domain information |
309
+
310
+ ### FindResponse
311
+
312
+ | Field | Type | Description |
313
+ |-------|------|-------------|
314
+ | find | `FindData` | |
315
+
316
+ ### FindData
317
+
318
+ | Field | Type | Description |
319
+ |-------|------|-------------|
320
+ | **eids** | string[] | Array of 20-character entity IDs matching the search expression |
321
+
322
+ ### GetPropertyValuesResponse
323
+
324
+ | Field | Type | Description |
325
+ |-------|------|-------------|
326
+ | **values** | `PropertyValue`[] | Array of property values for the requested entities |
327
+
328
+ ### PropertyValue
329
+
330
+ | Field | Type | Description |
331
+ |-------|------|-------------|
332
+ | **eid** | string | Entity ID this property value belongs to |
333
+ | **pid** | integer | Property ID |
334
+ | **value** | any | Property value (type varies by property: string, number, boolean, or entity ID) |
335
+ | recorded_at | string (date-time) | Timestamp when this value was recorded |
336
+ | imputed | boolean | Whether this value was imputed (inferred) rather than directly observed |
337
+ | attributes | object | Additional metadata about this property value (when include_attributes=true) |
338
+
339
+ ### GetSchemaResponse
340
+
341
+ | Field | Type | Description |
342
+ |-------|------|-------------|
343
+ | **schema** | `SchemaData` | |
344
+
345
+ ### SchemaData
346
+
347
+ | Field | Type | Description |
348
+ |-------|------|-------------|
349
+ | **flavors** | `Flavor`[] | Array of entity types (flavors) available in the system |
350
+ | **properties** | `Property`[] | Array of properties available in the system |
351
+
352
+ ### Flavor
353
+
354
+ | Field | Type | Description |
355
+ |-------|------|-------------|
356
+ | **fid** | integer | Unique flavor identifier |
357
+ | **name** | string | Flavor name |
358
+
359
+ ### Property
360
+
361
+ | Field | Type | Description |
362
+ |-------|------|-------------|
363
+ | **pid** | integer | Unique property identifier |
364
+ | **name** | string | Property name |
365
+ | **type** | string | Property data type. Values: `data_float`, `data_int`, `data_bool`, `data_cat`, `data_nindex` |
366
+
367
+ ### SummarizePropertyResponse
368
+
369
+ | Field | Type | Description |
370
+ |-------|------|-------------|
371
+ | **pid** | integer | The property ID that was summarized |
372
+ | **value_type** | string | Type of property values. Values: `numeric`, `categorical` |
373
+ | unique_count | integer | Number of unique values |
374
+ | values | string[] | Array of unique values for categorical properties |
375
+ | numeric_min | number | Minimum value for numeric properties |
376
+ | numeric_max | number | Maximum value for numeric properties |
377
+ | numeric_mean | number | Mean value for numeric properties |
378
+
379
+ <!-- END GENERATED CONTENT -->