Guides
A PostgreSQL project in Silos
Silos runs serverless PostgreSQL. A project is the unit you create; databases live inside it. In this guide you create a project in a way a script can repeat, then read the project and its databases.
You need an API key with silos:read and silos:write.
export GENESIS_API_KEY="sk_..."
export GENESIS_BASE_URL="https://os.one.ml/api"1. Create the project, or find it
Each project has a unique slug: 3 to 63 lowercase letters, digits and hyphens, starting and ending with a letter or digit. Creating a slug that already exists answers 409, so a script can treat 409 as "already there" and look the project up by slug instead.
SLUG="guides-orders"
OUT=$(mktemp)
PROJECT_ID=
STATUS=$(curl -s -o "$OUT" -w "%{http_code}" -X POST "$GENESIS_BASE_URL/v1/silos/projects" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"name\": \"Orders\", \"slug\": \"$SLUG\"}")
case "$STATUS" in
201) PROJECT_ID=$(jq -er .project.id "$OUT") ;;
409) PROJECT_ID=$(curl -sf "$GENESIS_BASE_URL/v1/silos/projects" \
-H "Authorization: Bearer $GENESIS_API_KEY" | jq -r --arg s "$SLUG" '.projects[] | select(.slug == $s) | .id') ;;
*) cat "$OUT" ;;
esac
echo "${PROJECT_ID:?no project}"{
"project": {
"id": "a8621c14-c228-4e4e-acdb-0f253f668af4",
"name": "Orders",
"slug": "guides-orders",
"region": "us-central1",
"databaseCount": 0,
"createdAt": "2026-10-20T07:50:37.987758Z",
"updatedAt": "2026-10-20T07:50:37.987758Z"
}
}{
"error": {
"type": "conflict",
"code": "UPSTREAM_409",
"message": "A project already uses this slug",
"request_id": "ed37804e-31a3-411c-b780-2d81eac4ac5a",
"docs_url": "https://os.one.ml/api/v1/errors#UPSTREAM_409",
"layer": "silos"
}
}Operations: silos_createProject, silos_listProjects.
2. Read the project
curl -sf "$GENESIS_BASE_URL/v1/silos/projects/$PROJECT_ID" \
-H "Authorization: Bearer $GENESIS_API_KEY" | jq '{project: .project | {id, slug, region, databaseCount}, databases}'{
"project": { "id": "a8621c14-c228-4e4e-acdb-0f253f668af4", "slug": "guides-orders", "region": "us-central1", "databaseCount": 0 },
"databases": []
}The project answer includes its databases, so one read gives you both. Operation: silos_getProject.
3. List its databases
curl -sf "$GENESIS_BASE_URL/v1/silos/projects/$PROJECT_ID/databases" \
-H "Authorization: Bearer $GENESIS_API_KEY" | jq '.databases'A new project has none: []. To read one database, pass its ID to silos_getDatabase; an ID the project does not hold answers 404 with code UPSTREAM_404 and the message "Database not found". Operation: silos_listDatabases.
Next
One Superintelligence, Inc. · Built from Genesis 0.1.13 and the live gateway on 2026-10-20. Support