Try itPricing

Picante API

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.

Reada site, a guidelines PDF, one poster or a set of photos Referencesreal brands for a described look Brief"make it pop" as a designer would write it Checkdoes the page belong to the brand? Tastea score out of 10 from expert judgement Compare2 to 4 versions, best to worst

Start

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.

In your agent

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 Code

claude mcp add --transport http picante https://picante.studio/mcp \
  --header "Authorization: Bearer picante_…"

Any other MCP client

{
  "mcpServers": {
    "picante": {
      "type": "http",
      "url": "https://picante.studio/mcp",
      "headers": { "Authorization": "Bearer picante_…" }
    }
  }
}

01Read

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.

POST/v1/reads
{ "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": "…" }].

GET/v1/reads/{id}
{ "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.

02References

Describe a feeling. Picante picks from its hand-picked library and tells you what makes each pick right.

POST/v1/references
{ "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.

03Brief

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.

POST/v1/briefs
{ "read": "read_…", "ask": "a pricing page, make it pop" }
→ { "brief": "…", "brand": "Your Brand", "from": "https://yourbrand.com" }

04Check

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.

POST/v1/checks
{ "brand": "https://yourbrand.com", "page": "https://yourbrand.com/new-page" }
→ 202 { "id": "chk_…", "state": "queued" }
GET/v1/checks/{id}
{ "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.

05Taste

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.

POST/v1/taste
{ "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.

06Compare

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.

POST/v1/compare
{ "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" }
GET/v1/compare/{id}
{ "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.

Credits

CallCredits
Read3
References1
Brief1
Check4
Taste3
Compare4
Asking for a result, account, historyfree

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.