palantir-hello-world
Create a minimal working Palantir Foundry example querying Ontology objects. Use when starting a new Foundry integration, testing your setup, or learning basic Foundry API and Ontology patterns. Trigger with phrases like "palantir hello world", "palantir example", "palantir quick start", "foundry first query".
Allowed Tools
ReadWriteEditBash(pip:*)Bash(npm:*)
Provided by Plugin
palantir-pack
Claude Code skill pack for Palantir (24 skills)
Installation
This skill is included in the palantir-pack plugin:
/plugin install palantir-pack@claude-code-plugins-plus
Click to copy
Instructions
Palantir Hello World
Overview
Build a minimal working example that connects to Palantir Foundry, queries Ontology objects via the REST API, reads a dataset, and applies an action. Uses real foundry-platform-sdk Python API calls.
Prerequisites
- Completed
palantir-install-authsetup - Valid bearer token or OAuth2 credentials
- At least one Ontology with object types configured in your Foundry enrollment
Instructions
Step 1: List Available Ontologies
import os
import foundry
client = foundry.FoundryClient(
auth=foundry.UserTokenAuth(
hostname=os.environ["FOUNDRY_HOSTNAME"],
token=os.environ["FOUNDRY_TOKEN"],
),
hostname=os.environ["FOUNDRY_HOSTNAME"],
)
# List all ontologies you have access to
for ont in client.ontologies.Ontology.list():
print(f"Ontology: {ont.api_name} RID: {ont.rid}")
Step 2: Query Ontology Objects
# List objects of type "Employee" from the default ontology
# The object type api_name comes from your Ontology configuration
ONTOLOGY = "your-ontology-api-name"
OBJECT_TYPE = "Employee"
objects = client.ontologies.OntologyObject.list(
ontology=ONTOLOGY,
object_type=OBJECT_TYPE,
page_size=5,
)
for obj in objects.data:
props = obj.properties
print(f" {props.get('fullName', 'N/A')} — {props.get('department', 'N/A')}")
Step 3: Get a Single Object by Primary Key
employee = client.ontologies.OntologyObject.get(
ontology=ONTOLOGY,
object_type=OBJECT_TYPE,
primary_key="EMP-001",
)
print(f"Found: {employee.properties}")
Step 4: Read a Dataset
# Read rows from a Foundry dataset (tabular)
DATASET_RID = "ri.foundry.main.dataset.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Get dataset metadata
dataset = client.datasets.Dataset.get(dataset_rid=DATASET_RID)
print(f"Dataset: {dataset.name}, Path: {dataset.path}")
# Read rows from the dataset (CSV format)
content = client.datasets.Dataset.read(
dataset_rid=DATASET_RID,
branch_id="master",
format="arrow", # or "csv"
)
print(f"Read {len(content)} bytes of data")
Step 5: Apply an Ontology Action
# Actions modify objects — e.g., updating an employee's department
result = client.ontologies.Action.apply(
ontology=ONTOLOGY,
action_type="updateDepartment",
parameters={
"employeeId": "EMP-001",
"newDepartment": "Engineering",
},
)
print(f"Action result: {result.validation}")
Step 6: Run and Verify
set -euo pipefail
python hello_foundry.py
# Expected output:
# Ontology: my-company RID: ri.ontology.main.ontology.xxx
# Employee: Jane Doe — Engineering
# Action result: VALID
Output
- Authenticated connection to Palantir Foundry
- Listed ontologies and object types
- Retrieved objects with property values
- Read dataset content
- Applied an action to modify an object
Error Handling
| Error | Cause | Solution |
|---|---|---|
ObjectTypeNotFound |
Wrong api_name |
Check Ontology Manager for exact object type names |
ObjectNotFound |
Invalid primary key | Verify the key exists; keys are case-sensitive |
ActionValidationFailed |
Missing required params | Check action definition for required parameters |
DatasetNotFound |
Wrong RID or no access | Verify RID in Foundry UI; check project permissions |
401 Unauthorized |
Token expired | Regenerate in Developer Console |
Examples
Using the REST API Directly (curl)
# List objects via REST
curl -s -H "Authorization: Bearer $FOUNDRY_TOKEN" \
"https://$FOUNDRY_HOSTNAME/api/v2/ontologies/my-ontology/objects/Employee?pageSize=5" \
| python -m json.tool
TypeScript OSDK Equivalent
import { createClient } from "@osdk/client";
import { Employee } from "@my-app/sdk"; // generated from OSDK
const employees = await client(Employee)
.where({ department: "Engineering" })
.fetchPage({ pageSize: 10 });
employees.data.forEach(emp => console.log(emp.fullName));
Resources
Next Steps
- Set up iterative development:
palantir-local-dev-loop - Build data pipelines with transforms:
palantir-core-workflow-a - Query and link objects:
palantir-core-workflow-b