API

Every ce.rodeo page gets its data from a public JSON API at https://api.ce.rodeo. No key required for reads. All endpoints are stable within a major version.

Read endpoints

GET /healthz

Service health. Returns db latency and the deployed commit SHA.

GET /v1/projects

List CE projects from v_project_index.

limit
int, default 100, max 500
q
string — substring match on slug or display_name
tag
namespace:value — e.g. role:oltp, alt:salesforce
category
string — one of databases, web-proxy, messaging, …
curl 'https://api.ce.rodeo/v1/projects?tag=role:crm&limit=5'
GET /v1/projects/:slug

One project by slug. Includes is_ce + ce_successor_slug + ce_note for license-flipped and proprietary projects.

curl 'https://api.ce.rodeo/v1/projects/valkey'
GET /v1/publishers

Publisher leaderboard — the data behind the Purveyors page. Ranked by 3·A + B grade count.

limit
int, default 25, max 100
curl 'https://api.ce.rodeo/v1/publishers?limit=10'
GET /v1/images/:id/snapshots

Grade history for an image — up to 180 of the most recent scout_snapshots rows. Each row includes rubric_breakdown (the arithmetic that produced the grade).

GET /v1/images/:id/cves

Full Grype matches array for the latest scan of this image: CVE id, severity, CVSS, fix availability, affected package.

GET /v1/comments/:kind/:id

Comments on a project / release / image. Kind is one of project | release | image.

Write endpoints (require the ce_rodeo_id cookie)

GET /v1/me

Your identity. Lazy-creates on first request and sets the cookie.

POST /v1/me/profile

Set your bio + tech_stack_philosophy.

POST /v1/me/pin/email

Send a magic link to pin your identity to an email.

email
string
POST /v1/pow/challenge

Issue a hashcash PoW challenge (required at tier 1 for comment submits).

POST /v1/upvote

Toggle upvote on a target.

target_kind
project | release | image | comment
target_id
uuid
POST /v1/fave

Toggle favorite on a target.

target_kind
project | release | image
target_id
uuid
note
string, optional, max 240 chars
POST /v1/comment

Post a comment. Tier 1 identities must include a solved PoW.

target_kind
project | release | image
target_id
uuid
body
string, 1..2500 chars
parent_id
uuid, optional
is_review
bool, optional
pow
{challenge_id, nonce} if tier 1

Rate limits

OPERATION TIER 1 TIER 2 TIER 3
Comment5/hr20/hr100/hr
Upvote60/hr120/hr300/hr
Fave60/hr120/hr300/hr

Tier 1 is the fresh-visitor default; tier 2 unlocks on email pin via /v1/me/pin/email; tier 3 is OPERATOR status, promoted after 50+ upvoted comments with zero mod strikes.