API on sama, jota Gradientlyn sovellus käyttää, joten avain näkee samat tiedot ja käy läpi samat tarkistukset kuin sen luoja sovelluksessa, rajattuna yhteen työtilaan ja avaimen oikeuksiin. Avain, joka kutsuu päätepistettä, jota mikään sen oikeuksista ei kata, saa vastaukseksi 403.
Perus-URL ja tunnistautuminen
Kaikki alla olevat polut ovat osoitteen https://gradiently.design alla. Lähetä avaimesi bearer-tunnisteena jokaisen pyynnön mukana. Rungot ovat JSONia otsakkeella Content-Type: application/json, latauksia lukuun ottamatta.
curl https://gradiently.design/api/marks/mine \
-H "Authorization: Bearer gr_live_…"- Avain on aina sidottu työtilaan, jossa se luotiin. Työtilaa ei tarvitse nimetä; jos lähetät
X-Workspace- tai?workspace=-arvon, sen on oltava avaimen oma työtila, tai pyyntö epäonnistuu koodilla 403. - Pyyntöjen rungot tarkistetaan tiukasti: kenttä, jota päätepiste ei tunne, epäonnistuu koodilla 422.
- Vastaukset ovat JSONia, ellei toisin mainita (kuvat, uudelleenohjaukset ja Designerin virta). API-avaimille palautettavat virheilmoitukset ovat englanniksi.
- Avain toimii luojansa nimissä. Sen tekemät designit ja brändit kuuluvat työtilalle; sen lunastamat Markit ovat sen luojan hallussa.
Työtila
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| GET | /api/me | workspaces:read ja designs:read | Sinä, avaimen työtila ja sen brändit. |
| GET | /api/workspaces | workspaces:read | Avaimen työtila ja roolisi. |
| GET | /api/workspaces/:id | workspaces:read | Yksi työtila. |
| GET | /api/workspaces/:id/members | workspaces:read | Jäsenet nimineen, sähköposteineen ja rooleineen. |
| GET | /api/workspaces/:id/audit | workspaces:read | Työtilan tapahtumaloki. |
| POST | /api/workspaces/:id/invites | members:write | Lähettää sähköpostitse seitsemän päivää voimassa olevan kutsun. |
GET /api/me
{
"viewer": { "id": "…", "name": "Ada Moss", "handle": "ada", "workspaceId": "…" },
"workspaces": [{ "id": "…", "name": "Hearth", "role": "owner" }],
"activeWorkspaceId": "…",
"personalities": [{ "id": "…", "slug": "hearth", "name": "Hearth", "markId": "…" }]
}POST /api/workspaces/:id/invites
{ "email": "sam@example.com", "role": "editor" }
{ "id": "…", "expiresInDays": 7 }role on admin, editor tai viewer. Kutsutun on vahvistettava sama sähköpostiosoite ennen hyväksymistä.Brändit
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| GET | /api/personalities | designs:read | Työtilan brändit muodossa { items }. |
| POST | /api/personalities | personalities:write | Luo brändin. |
| PATCH | /api/personalities/:id | personalities:write | Nimeää brändin uudelleen, asettaa sen Markin, profiilin tai tyylin. |
| DELETE | /api/personalities/:id | personalities:write | Poistaa brändin ja sen designit. Työtilaan jää aina vähintään yksi. |
| GET | /api/personalities/:id/designs | designs:read | Brändin designit uusimmasta alkaen. |
| GET | /api/personalities/:id/brand | designs:read | Brändin fontit, logot ja tallennetut värit. Avain voi lukea ne mutta ei koskaan muuttaa niitä. |
POST /api/personalities
{ "name": "Hearth Bakery", "markId": "…" }
PATCH /api/personalities/:id
{ "profile": { "about": "A neighbourhood bakery", "voice": "warm, plain" } }
{ "id": "…", "slug": "hearth-bakery", "name": "Hearth Bakery", "markId": "…", "profile": { … } }markId on luotaessa valinnainen. Profiilissa voi olla myös audience, uses, keywords, dos, donts, website, handle ja fonts.Designilistaus hyväksyy parametrin ?q= otsikoiden hakemiseen ja ?mark= Markin mukaan suodattamiseen. Jokaisella kohteella on id, personalityId, markId, title, form, thumb, shared ja updatedAt, ilman dokumenttia.
Designit
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| POST | /api/agent/compose | designs:write | Asettelee tekstin, muokkaa mallipohjaa tai tekee muutoksia ja tallentaa. |
| POST | /api/designs | designs:write | Luo designin dokumentista. |
| GET | /api/designs/:id | designs:read | Design dokumentteineen. |
| PATCH | /api/designs/:id | designs:write | Muuttaa sen otsikkoa, dokumenttia, Markia tai jakamista. |
| DELETE | /api/designs/:id | designs:write | Poistaa designin. |
| POST | /api/designs/:id/duplicate | designs:write | Tallentaa kopion sen rinnalle. |
| GET | /api/designs/:id/thumb | designs:read | Sen pikkukuva. |
| POST | /api/designs/:id/render | designs:read | Renderöi sen PNG- tai PDF-tiedostoksi. |
Helpoin tapa tehdä design koodista on POST /api/agent/compose: kuvailet sisällön, ja asettelumoottori sijoittaa sen brändin Markin päälle. Sama päätepiste muokkaa mallipohjaa (template yhdessä arvojen text, photos, icons ja hide kanssa) tai muokkaa tallennettua designia, kun annat designId- ja ops-arvot.
POST /api/agent/compose
{
"personalityId": "…",
"composition": {
"size": "ig-post",
"layout": "statement",
"blocks": [
{ "role": "headline", "text": "Fresh bread from 7am" },
{ "role": "cta", "text": "Visit us" }
]
}
}
{ "id": "…", "url": "/studio/…", "issues": [ … ], "elements": [ … ] }issues luettelee arvioinnin löydökset (marginaalit, päällekkäisyydet, hierarkia, kontrasti).POST /api/designs
{
"personalityId": "…",
"form": "blank",
"title": "Launch post",
"doc": { "ratio": "custom", "width": 1080, "height": 1350, "shift": [0.5, 0.5, 0.5, 0.5], "elements": [] }
}
{ "id": "…", "personalityId": "…", "markId": null, "title": "Launch post", "form": "blank", "doc": { … }, "updatedAt": "…", "thumb": null, "shared": false }markId on valinnainen; ilman sitä designissa on brändin Mark. Lue design osoitteesta GET /api/designs/:id, niin näet kokonaisen dokumentin.PATCH /api/designs/:id hyväksyy minkä tahansa kentistä title, doc, markId ja shared. Kun shared on true, osoitteeseen /d/:id julkaistaan katselulinkki. Lähetä baseUpdatedAt eli viimeksi lukemasi updatedAt, niin tallennus hylätään koodilla 409, jos joku on muuttanut designia sen jälkeen.
POST /api/designs/:id/render
{ "width": 1080, "height": 1350, "format": "png", "page": 0 }
{ "id": "…", "data": "iVBORw0KGgo…", "encoding": "base64", "mimeType": "image/png", "width": 1080, "height": 1350, "pages": 1 }page lasketaan nollasta; PDF ilman page-arvoa sisältää kaikki sivut, kunkin Studion koossa, jota pyynnön on vastattava. Varaa aikaa jopa kolme minuuttia.Renderöinti vaatii designin Markille saman vientilisenssin kuin Studio; ilman sitä vastaus on 402. Renderöinti ei koskaan julkaise designia eikä tallenna tiedostoa.
Lataukset
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| POST | /api/uploads | designs:write | Lataa kuvan designeja varten. |
| GET | /api/uploads | designs:read | Työtilan lataukset uusimmasta alkaen. |
| GET | /api/uploads/:id | designs:read | Ohjaa kuvaan. ?w= pyytää tiettyä leveyttä. |
| DELETE | /api/uploads/:id | designs:write | Poistaa yhden latauksistasi. |
curl https://gradiently.design/api/uploads \
-H "Authorization: Bearer $GRADIENTLY_API_KEY" \
-F "file=@shopfront.jpg;type=image/jpeg"
# { "id": "…", "url": "/api/uploads/…" }file: PNG, JPEG, WebP, GIF tai AVIF, enintään 8 Mt, ja sen tyypin on vastattava sisältöä. Käytä palautettua url-arvoa kuvan src-arvona tai mallipohjan valokuvana.Markit
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| GET | /api/marks | marks:read | Hakee Markkinoilta. |
| GET | /api/marks/:code | marks:read | Yksi Mark reseptineen, koodilla tai id:llä. |
| GET | /api/marks/mine | marks:read | Työtilan hallussa olevat Markit ja luonnoksesi siinä. |
| POST | /api/agent/mark | marks:read | Rakentaa tai muokkaa reseptiä ja arvioi sen. Ei tallenna mitään. |
| POST | /api/marks | brand:generate | Tallentaa reseptin Mark-luonnokseksi. |
| PATCH | /api/marks/:id | brand:generate | Muuttaa tekemääsi luonnosta. |
| POST | /api/marks/:code/claim | marks:claim | Lunastaa vapaan Markin. |
| POST | /api/marks/:code/buy | marks:claim | Lunastaa Markin, jonka toinen haltija on listannut myyntiin. |
GET /api/marks hyväksyy parametrit q (nimi tai koodi), tone (dark tai light), material, status (listed, house tai sale) ja cursor. Se vastaa muodossa { "items": [ … ], "nextCursor": "…" }, 24 Markia sivulla. Markilla on id, code, name, recipe, status, creator, holder ja createdAt.
POST /api/marks
{ "name": "Night Harbour", "recipe": { … }, "personalityId": "…" }
{ "id": "…", "code": "GR·K7Q2·MX", "name": "Night Harbour", "status": "draft", "recipe": { … } }recipe-arvon kutsulla POST /api/agent/mark, jossa on spec. personalityId tallentaa luonnoksen kyseiseen brändiin. Ilman sitä avain tallentaa luonnoksen työtilansa ensimmäiseen brändiin, ja pyyntö epäonnistuu koodilla 404, jos brändiä ei ole. Yhdellä henkilöllä voi olla enintään 50 luonnosta.Lunastus tehdään aina avaimen luojalle, ei koskaan työtilalle. Ilmaiset lunastukset ja lunastuskrediitillä katetut lunastukset valmistuvat heti. Maksua vaativa lunastus vastaa koodilla 402 ja arvolla checkout: true, ja buy vastaa koodilla 409 ja arvolla checkout: true; viimeistele ne Gradientlyssä, koska avain ei voi maksaa. buy ottaa { "priceCents": … } eli näkemäsi listahinnan ja epäonnistuu koodilla 409, jos hinta on muuttunut.
Markien versiot
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| GET | /api/marks/:code/versions | marks:read | Versiot uusimmasta alkaen muodossa { items, next, canEdit }. |
| GET | /api/marks/:code/versions/:vid | marks:read | Yksi versio. |
| POST | /api/marks/:code/versions | brand:generate | Tallentaa version: { label, recipe }, molemmat valinnaisia. |
| PATCH | /api/marks/:code/versions/:vid | brand:generate | Nimeää uudelleen tai merkitsee tähdellä: { label, starred }. |
| DELETE | /api/marks/:code/versions/:vid | brand:generate | Poistaa version. |
| POST | /api/marks/:code/versions/:vid/restore | brand:generate | Palauttaa version luonnokseksi. |
Brändien luominen
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| POST | /api/brand/generate | brand:generate | Palauttaa brändiehdotuksia. Ei kirjoita mitään. |
| POST | /api/brand/adopt | brand:generate | Luo yhdestä ehdotuksesta Mark-luonnoksen, brändin ja kolme aloitusdesignia. |
POST /api/brand/generate
{ "name": "Hearth", "description": "A neighbourhood bakery", "tone": ["calm", "warm"], "count": 4 }
[{ "key": "…", "name": "Hearth One", "recipe": { … }, "personality": { "name": "Hearth", "handle": "…" }, "starters": [ … ], "why": "…" }]
POST /api/brand/adopt
{ "input": { "name": "Hearth", "description": "A neighbourhood bakery", "tone": ["calm", "warm"], "count": 4 }, "key": "…" }
{ "mark": { … }, "personality": { … }, "designs": [ … ] }Designer
| Metodi | Polku | Oikeus | Mitä se tekee |
|---|---|---|---|
| POST | /api/agent | designs:write | Yksi Designerin vuoro rivinvaihdoin erotettuna JSON-virtana. |
| POST | /api/batches | designs:write | Käynnistää designisarjan yhdestä briefistä. |
| GET | /api/batches | designs:read | Sarjasi, käynnissä olevat ja viimeaikaiset. |
| GET | /api/batches/:id | designs:read | Sarjan edistyminen. |
| DELETE | /api/batches/:id | designs:write | Pysäyttää sarjan. Piirretyt designit säilyvät. |
| GET | /api/agent/runs?designId= | designs:read | Designin vielä käynnissä olevat Designerin vuorot. |
| DELETE | /api/agent/runs/:id | designs:write | Pysäyttää käynnissä olevan vuoron. |
POST /api/batches
{
"personalityId": "…",
"see": false,
"plan": {
"brief": "Autumn menu launch, Saturday 4 October",
"items": [
{ "size": "ig-post", "brief": "The announcement" },
{ "size": "ig-story", "brief": "Three new loaves, one line each" }
]
}
}
{ "id": "…", "state": "running", "items": [{ "index": 0, "title": "…", "state": "…" }] }GET /api/batches/:id; jokainen kohde saa designId- ja url-arvot, kun se on tallennettu. state päättyy arvoon done, stopped tai failed.Designer kuluttaa työtilan AI-krediittejä. Kun saldo on pienempi kuin vuoro vaatii, /api/agent ja /api/batches vastaavat koodilla 402 ja arvolla code: "credits". Kullakin henkilöllä voi olla käynnissä enintään kaksi sarjaa kerrallaan. Sivun MCP ja tekoälyavustajat design-työkalu lukee Designerin virran ja tallentaa tuloksen puolestasi, mikä on yksinkertaisempaa kuin virran käsitteleminen itse.
Virheet
Virhe palauttaa tilakoodin ja JSON-rungon, jossa on luettava error-viesti. Joissakin on lisäkenttiä, jotka nimetään alla. Ainoa poikkeus on /api/mcp: jos runko ei ole kelvollista JSONia, vastaus on 400 ja sen sijaan JSON-RPC-virheolio, { "jsonrpc": "2.0", "id": null, "error": { "code": -32700, "message": "Parse error" } }.
{ "error": "API key lacks required scope for this endpoint." }| Tila | Milloin |
|---|---|
| 401 | Avain puuttuu, on virheellisessä muodossa tai kumottu, tai sen luoja ei ole enää omistaja tai ylläpitäjä. |
| 402 | Tarvitaan maksu tai krediittejä: hinnoiteltu lunastus (checkout: true), vientilisenssi puuttuu tai AI-krediittejä on liian vähän (code: "credits"). |
| 403 | Avaimelta puuttuu oikeus, se kuuluu toiseen työtilaan tai sen luojan rooli ei salli toimintoa. |
| 404 | Kohdetta ei ole olemassa, tai avain ei näe sitä. |
| 409 | Ristiriita: kohde on muuttunut lukemisesi jälkeen, nimi on varattu tai toiminto vaatii kassan. |
| 422 | Pyyntö ei läpäissyt tarkistusta. Viesti kertoo, mikä kenttä ja miksi. |
| 429 | Liian monta pyyntöä. Odota Retry-After-otsakkeen ilmoittamat sekunnit ja yritä uudelleen. |
| 503 | Varattu tai tilapäisesti poissa käytöstä, esimerkiksi Designer tai viennit. Noudata Retry-After-otsaketta. |
| 504 | Renderöinti kesti liian kauan. Kokeile pienempää kokoa tai yhtä sivua. |
Pyyntörajat
Rajat lasketaan liukuvassa yhden minuutin ikkunassa, ellei toisin mainita. Rajan ylittäminen palauttaa koodin 429, sekunteina ilmoitetun Retry-After-otsakkeen ja rungossa retryAfter-kentän. Hidasta ja yritä uudelleen vasta sen ajan jälkeen; älä yritä heti uudelleen.
| Raja | Määrä |
|---|---|
| Jokainen avaimella tehty pyyntö | 120 minuutissa avainta kohden |
| Kirjoitukset (POST, PATCH, DELETE) | 90 minuutissa tiliä kohden, yhteinen sovelluksen kanssa |
| Renderöinnit | 10 minuutissa tiliä kohden |
| Uudet designit ja kopiot | 60 minuutissa tiliä kohden |
| Lataukset | 60 minuutissa tiliä kohden |
| Lunastukset | 20 kymmenessä minuutissa ja 100 päivässä tiliä kohden |
| Kutsut | 30 tunnissa tiliä kohden |
Vienneillä ja Designerilla on lisäksi yhteinen kapasiteetti. Kun se on täynnä, vastaus on 503 tai 429 ja Retry-After, vaikka omat rajasi eivät olisi täynnä. MCP:n kautta työkalukutsu lasketaan kerran MCP-pyynnöstä ja kerran jokaisesta työkalun tekemästä API-pyynnöstä.
Sivutus
Luettelot palautetaan sivu kerrallaan. Pyydä seuraava sivu parametrilla ?cursor=.
- Markkinoiden haku (
/api/marks): 24 sivulla. Välitä vastauksennextCursor; viimeisellä sivulla se on null. - Markien versiot: välitä vastauksen
next-arvo; viimeisellä sivulla se on null. - Brändin designit: 100 sivulla, uusin ensin. Välitä viimeisen saamasi designin
id. - Lataukset: 60 sivulla, uusin ensin. Välitä viimeisen latauksen
id. - Brändit, työtilat, jäsenet ja tapahtumaloki: 100 sivulla. Välitä viimeisen kohteen
id(jäsenilläuserId). Brändit luetellaan osoitteesta/api/personalitiesmuodossa{ items }.
Avaimet, oikeudet ja avainten vaihtaminen ovat sivulla API-avaimet ja oikeudet. Jos tarvitsemasi päätepiste puuttuu täältä, kerro meille.

