Picante is the taste filter for AI.
Six calls that give your agent taste: read the brand, pick references, write the brief, check the page, score the taste, compare versions.
New to this? In plain words.
API: a way for your own code to use Picante. Your app sends an order (read this site, check this page) and gets a neat answer back.
MCP: a plug for AI assistants like Claude Code, Cursor and Codex. Connect it once and the assistant uses Picante on its own, no code needed.
Key: your private membership card. Every call shows it, so keep it secret.
Credits: what each job costs. You get 20 free when you sign up.
Get a key at picante.studio/try with just your email: it comes with 20 free credits. Or from code:
curl -X POST https://picante.studio/v1/signup -H "content-type: application/json" \
-d '{ "email": "you@studio.com" }'
→ 201 { "key": "picante_…", "credits": 20 }
Use your picante_ key as a bearer token on every call. Base URL https://picante.studio/v1. Keep the key safe: we only store its fingerprint. Signing up again with the same email gives you a new key with your remaining credits, and the old one stops working.
curl https://picante.studio/v1/account -H "Authorization: Bearer picante_…"
Reading, checking and scoring take a little while, so they run in the background: you get an id straight away and ask for it again until state is done. States go queued → reading → judging → done, or failed with a problem.
Picante speaks MCP, so Claude Code, Cursor, Codex and any MCP client can use it directly. The tools: read_brand, find_references, write_brief, check_page, taste_score, compare_versions, plus get_read, references_like, get_check get_taste and get_compare.
claude mcp add --transport http picante https://picante.studio/mcp \ --header "Authorization: Bearer picante_…"
{
"mcpServers": {
"picante": {
"type": "http",
"url": "https://picante.studio/mcp",
"headers": { "Authorization": "Bearer picante_…" }
}
}
}
Picante opens the page in a real browser, measures what is actually on screen (the palette by area, faces, sizes, buttons) and writes the brand down the way a creative director would brief a studio. Styles the page never uses are left out.
{ "url": "https://yourbrand.com" }
→ 202 { "id": "read_…", "state": "queued" }
For files send kind: guidelines (PDF), piece (one poster or ad) or photos, with files: [{ "type": "application/pdf", "base64": "…" }].
{ "id": "read_…", "state": "done",
"brand": {
"name": "Your Brand",
"essence": "…",
"mood": ["warm", "bold", "playful"],
"never": ["stock photos", "beige 'luxury'"],
"palette": [ { "hex": "#FFFFFF", "name": "Paper white", "job": "ground", "area_pct": 74 }, … ],
"type": { "faces": [ … ], "sizes": [ … ], "rules": [ … ] },
"layout": { … }, "parts": { … }, "imagery": { … }, "voice": { … }, "logo": { … }
},
"captures": { "first_screen": "…", "full_page": "…", "small": "…" } }
A site read is kept for 7 days. Ask again within that time and you get it back at once; send "fresh": true to read it again.
Describe a feeling. Picante picks from its hand-picked library and tells you what makes each pick right.
{ "describe": "listening bar aesthetic", "count": 6 }
→ { "picks": [ { "name": "…", "url": "…", "fit": "spot on", "why": "…",
"look": "…", "labels": [ … ], "palette": { … }, "preview": "…" } ] }
Add "thorough": true for a slower, more careful pick. GET /v1/reads/{id}/like finds library brands that look like a brand you've read.
Turn a vague ask into the brief the brand's own senior designer would write: colours with amounts, faces, layout, imagery, tone and what to avoid.
{ "read": "read_…", "ask": "a pricing page, make it pop" }
→ { "brief": "…", "brand": "Your Brand", "from": "https://yourbrand.com" }
Give it the brand and the page that should belong to it. You get a match out of 100, a score for each area, and fixes with exact values, most important first.
{ "brand": "https://yourbrand.com", "page": "https://yourbrand.com/new-page" }
→ 202 { "id": "chk_…", "state": "queued" }
{ "state": "done",
"result": { "match": 64,
"areas": { "palette": 40, "type": 72, "layout": 81, "imagery": 55, "parts": 70, "voice": 48 },
"headline": "…",
"fixes": [ { "weight": "must", "area": "palette", "where": "hero",
"what": "…", "change": "…" } ] } }
Loop it: hand the fixes to the agent that made the page, then check again until it passes your bar.
A score out of 10 from a judge trained on expert picks, for this page and this brief. Add brand to judge it against a brand.
{ "page": "https://yourbrand.com/new-page", "brief": "product page for a design furniture brand" }
→ 202 { "id": "tst_…" }
GET /v1/taste/tst_…
→ { "state": "done", "result": { "score": 7, "line": "…",
"criteria": { "composition": 8, "colour": 5, "type": 8, "hierarchy": 7, "craft": 6, "originality": 7, "fit": 7 },
"glitches": [ { "where": "pricing cards", "what": "price cut off at 390px", "severity": "major" } ],
"why": [ … ], "fixes": [ … ], "labels": [ … ] } }
Each criterion is scored on its own, so you see what to fix first. Glitches are things that are plainly broken: garbled text, cut-off or overlapping parts, placeholder copy.
Two to four versions of the same thing: Picante ranks them best to worst. A judge picking between versions is far more reliable than one scoring a page alone, so Picante judges three times, shuffles the order each time and uses two different models. confidence tells you whether the judgements agree: solid (3 of 3), leaning (2 of 3) or split.
{ "items": [ { "url": "https://a.example" }, { "url": "https://b.example" },
{ "type": "image/png", "base64": "…" } ],
"brief": "launch page for a furniture brand" }
→ 202 { "id": "cmp_…", "state": "queued" }
{ "state": "done",
"result": { "ranking": [ { "rank": 1, "item": 1, "label": "https://b.example", "why": "…" }, … ],
"best": 1, "worst": 2, "agreement": "3 of 3", "confidence": "solid",
"criteria": { "type": 1, "colour": 0, … }, "line": "…" } }
Use it to let an agent make three directions and keep the one with taste. item is the position in the list you sent.
| Call | Credits |
|---|---|
| Read | 3 |
| References | 1 |
| Brief | 1 |
| Check | 4 |
| Taste | 3 |
| Compare | 4 |
| Asking for a result, account, history | free |
When something goes wrong you get { "problem": { "code", "message" } }: 400 for a bad request, 401 for a missing or wrong key, 402 when credits run out, 404 when there's nothing there, 429 when you go too fast.