OneOS Docs
Genesis 0.1.13 Console

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}"
Response (201)
{
  "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"
  }
}
Response (409)
{
  "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}'
Response
{
  "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