Kehittäjille

API-referenssi

Jokainen tämän sivun päätepiste ottaa JSONia HTTPS:n yli ja API-avaimen Authorization-otsakkeessa. Avain toimii yhdessä työtilassa ja pääsee vain niihin päätepisteisiin, jotka sen oikeudet sallivat.

Päivitetty 1. lokakuuta 2026

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.

bash
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

MetodiPolkuOikeusMitä se tekee
GET/api/meworkspaces:read ja designs:readSinä, avaimen työtila ja sen brändit.
GET/api/workspacesworkspaces:readAvaimen työtila ja roolisi.
GET/api/workspaces/:idworkspaces:readYksi työtila.
GET/api/workspaces/:id/membersworkspaces:readJäsenet nimineen, sähköposteineen ja rooleineen.
GET/api/workspaces/:id/auditworkspaces:readTyötilan tapahtumaloki.
POST/api/workspaces/:id/invitesmembers:writeLähettää sähköpostitse seitsemän päivää voimassa olevan kutsun.
json
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": "…" }]
}
Lyhennetty. API:ssa brändeistä käytetään nimeä personalities.
json
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

MetodiPolkuOikeusMitä se tekee
GET/api/personalitiesdesigns:readTyötilan brändit muodossa { items }.
POST/api/personalitiespersonalities:writeLuo brändin.
PATCH/api/personalities/:idpersonalities:writeNimeää brändin uudelleen, asettaa sen Markin, profiilin tai tyylin.
DELETE/api/personalities/:idpersonalities:writePoistaa brändin ja sen designit. Työtilaan jää aina vähintään yksi.
GET/api/personalities/:id/designsdesigns:readBrändin designit uusimmasta alkaen.
GET/api/personalities/:id/branddesigns:readBrändin fontit, logot ja tallennetut värit. Avain voi lukea ne mutta ei koskaan muuttaa niitä.
json
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

MetodiPolkuOikeusMitä se tekee
POST/api/agent/composedesigns:writeAsettelee tekstin, muokkaa mallipohjaa tai tekee muutoksia ja tallentaa.
POST/api/designsdesigns:writeLuo designin dokumentista.
GET/api/designs/:iddesigns:readDesign dokumentteineen.
PATCH/api/designs/:iddesigns:writeMuuttaa sen otsikkoa, dokumenttia, Markia tai jakamista.
DELETE/api/designs/:iddesigns:writePoistaa designin.
POST/api/designs/:id/duplicatedesigns:writeTallentaa kopion sen rinnalle.
GET/api/designs/:id/thumbdesigns:readSen pikkukuva.
POST/api/designs/:id/renderdesigns:readRenderö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.

json
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).
json
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.

json
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 }
Leveys ja korkeus ovat 1:n ja 4096:n välillä. 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

MetodiPolkuOikeusMitä se tekee
POST/api/uploadsdesigns:writeLataa kuvan designeja varten.
GET/api/uploadsdesigns:readTyötilan lataukset uusimmasta alkaen.
GET/api/uploads/:iddesigns:readOhjaa kuvaan. ?w= pyytää tiettyä leveyttä.
DELETE/api/uploads/:iddesigns:writePoistaa yhden latauksistasi.
bash
curl https://gradiently.design/api/uploads \
  -H "Authorization: Bearer $GRADIENTLY_API_KEY" \
  -F "file=@shopfront.jpg;type=image/jpeg"

# { "id": "…", "url": "/api/uploads/…" }
Yksi tiedosto kentässä 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

MetodiPolkuOikeusMitä se tekee
GET/api/marksmarks:readHakee Markkinoilta.
GET/api/marks/:codemarks:readYksi Mark reseptineen, koodilla tai id:llä.
GET/api/marks/minemarks:readTyötilan hallussa olevat Markit ja luonnoksesi siinä.
POST/api/agent/markmarks:readRakentaa tai muokkaa reseptiä ja arvioi sen. Ei tallenna mitään.
POST/api/marksbrand:generateTallentaa reseptin Mark-luonnokseksi.
PATCH/api/marks/:idbrand:generateMuuttaa tekemääsi luonnosta.
POST/api/marks/:code/claimmarks:claimLunastaa vapaan Markin.
POST/api/marks/:code/buymarks:claimLunastaa 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.

json
POST /api/marks
{ "name": "Night Harbour", "recipe": { … }, "personalityId": "…" }

{ "id": "…", "code": "GR·K7Q2·MX", "name": "Night Harbour", "status": "draft", "recipe": { … } }
Saat kelvollisen 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

MetodiPolkuOikeusMitä se tekee
GET/api/marks/:code/versionsmarks:readVersiot uusimmasta alkaen muodossa { items, next, canEdit }.
GET/api/marks/:code/versions/:vidmarks:readYksi versio.
POST/api/marks/:code/versionsbrand:generateTallentaa version: { label, recipe }, molemmat valinnaisia.
PATCH/api/marks/:code/versions/:vidbrand:generateNimeää uudelleen tai merkitsee tähdellä: { label, starred }.
DELETE/api/marks/:code/versions/:vidbrand:generatePoistaa version.
POST/api/marks/:code/versions/:vid/restorebrand:generatePalauttaa version luonnokseksi.

Brändien luominen

MetodiPolkuOikeusMitä se tekee
POST/api/brand/generatebrand:generatePalauttaa brändiehdotuksia. Ei kirjoita mitään.
POST/api/brand/adoptbrand:generateLuo yhdestä ehdotuksesta Mark-luonnoksen, brändin ja kolme aloitusdesignia.
json
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": [ … ] }
Ota ehdotus käyttöön täsmälleen samalla syötteellä, josta se tehtiin. Palvelin tekee ehdotukset uudelleen eikä koskaan luota asiakasohjelman lähettämään reseptiin.

Designer

MetodiPolkuOikeusMitä se tekee
POST/api/agentdesigns:writeYksi Designerin vuoro rivinvaihdoin erotettuna JSON-virtana.
POST/api/batchesdesigns:writeKäynnistää designisarjan yhdestä briefistä.
GET/api/batchesdesigns:readSarjasi, käynnissä olevat ja viimeaikaiset.
GET/api/batches/:iddesigns:readSarjan edistyminen.
DELETE/api/batches/:iddesigns:writePysäyttää sarjan. Piirretyt designit säilyvät.
GET/api/agent/runs?designId=designs:readDesignin vielä käynnissä olevat Designerin vuorot.
DELETE/api/agent/runs/:iddesigns:writePysäyttää käynnissä olevan vuoron.
json
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": "…" }] }
Enintään kaksitoista kohdetta. Kysy tilaa kutsulla 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" } }.

json
{ "error": "API key lacks required scope for this endpoint." }
TilaMilloin
401Avain puuttuu, on virheellisessä muodossa tai kumottu, tai sen luoja ei ole enää omistaja tai ylläpitäjä.
402Tarvitaan maksu tai krediittejä: hinnoiteltu lunastus (checkout: true), vientilisenssi puuttuu tai AI-krediittejä on liian vähän (code: "credits").
403Avaimelta puuttuu oikeus, se kuuluu toiseen työtilaan tai sen luojan rooli ei salli toimintoa.
404Kohdetta ei ole olemassa, tai avain ei näe sitä.
409Ristiriita: kohde on muuttunut lukemisesi jälkeen, nimi on varattu tai toiminto vaatii kassan.
422Pyyntö ei läpäissyt tarkistusta. Viesti kertoo, mikä kenttä ja miksi.
429Liian monta pyyntöä. Odota Retry-After-otsakkeen ilmoittamat sekunnit ja yritä uudelleen.
503Varattu tai tilapäisesti poissa käytöstä, esimerkiksi Designer tai viennit. Noudata Retry-After-otsaketta.
504Renderö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.

RajaMäärä
Jokainen avaimella tehty pyyntö120 minuutissa avainta kohden
Kirjoitukset (POST, PATCH, DELETE)90 minuutissa tiliä kohden, yhteinen sovelluksen kanssa
Renderöinnit10 minuutissa tiliä kohden
Uudet designit ja kopiot60 minuutissa tiliä kohden
Lataukset60 minuutissa tiliä kohden
Lunastukset20 kymmenessä minuutissa ja 100 päivässä tiliä kohden
Kutsut30 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ä vastauksen nextCursor; 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/personalities muodossa { items }.

Avaimet, oikeudet ja avainten vaihtaminen ovat sivulla API-avaimet ja oikeudet. Jos tarvitsemasi päätepiste puuttuu täältä, kerro meille.

Tarvitsetko apua?

Lähetä meille pyyntö aiheella API ja MCP, niin ihminen vastaa.

Lähetä pyyntö