API GetFacade pro agenty
Návrh fasády přes MCP a HTTP. Každý návrh se zpracovává pro zemi, ve které stavba stojí: materiály, které jsou tam použitelné, produkty, jež tam výrobci skutečně prodávají, a technická skladba za povrchem. Render to ukáže na fotografii domu, rozpočet to ocení položku po položce a PDF album to zdokumentuje pro partu, která bude stavět. Každá cesta níže je existující endpoint GetFacade, tentýž, který volají aplikace pro iOS, Android a web. Agentní klíč jen zužuje okruh volajících, měří útratu a zastaví se na svém stropu.
- Základní URL
- https://api.getfacade.ai/api/v1
- Autentizace
- Bearer <agent key>
- Balíček
- @getfacade/mcp
- Běhové prostředí
- Node.js 20+
- Přenos
- stdio (MCP), HTTPS (REST)
- Specifikace
- OpenAPI 3.1, v1.0.0
Rychlý start
Vydejte klíč
app.getfacade.aiÚčetNastaveníAPIVytvořit klíč
Hodnota se zobrazí jednou a nelze ji obnovit, jen nahradit. Strop útraty se nastavuje při vydání a platí u každého placeného volání.
Vydat agentní klíčZaregistrujte server MCP
Jeden záznam v konfiguraci klienta, pak restart klienta. Claude Desktop jej drží v claude_desktop_config.json; každý jiný klient MCP přijímá stejná tři pole.
{ "mcpServers": { "getfacade": { "command": "npx", "args": ["-y", "@getfacade/mcp"], "env": { "GETFACADE_API_KEY": "your-key" } } } }Proměnné prostředí Proměnná Povinná Výchozí hodnota GETFACADE_API_KEYAno —GETFACADE_API_BASE_URLNe https://api.getfacade.ai/api/v1Nebo volejte HTTP API přímo
Týž klíč slouží jako token Bearer. Požadavky i odpovědi jsou dokumenty JSON:API, kde id je pole nejvyšší úrovně a nikdy neleží uvnitř attributes.
curl -X POST https://api.getfacade.ai/api/v1/projects \ -H "Authorization: Bearer $GETFACADE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"data":{"type":"project","attributes":{"name":"Maple Street 14"}}}'
Nástroje
Dvacet jedna nástrojů. Server MCP nedrží stav ani vlastní pravidla: každý nástroj je jedno či několik volání endpointů uvedených vedle a každou zprávu, kterou agent zopakuje, píše API.
create_buildingcreate_building(name, goals?, construction_region?) -> { building_id, name }Založí budovu. Název je v rámci účtu jedinečný a nejvýše padesátiznakový; duplicitu odmítne kód 422.
Volá
POST /projectsupload_photoupload_photo(building_id, file_path, wait_for_validation? = true) -> { view_id, validation: { status, reason? } }Zaregistruje pohled, nahraje bajty na předpodepsanou URL, potvrdí je a dotazuje se, dokud fotografii systém nepřijme nebo neodmítne. Šířku, výšku a md5 spočítá klient; poměr stran odvodí server.
Volá
POST /projects/{project}/angles → PUT (presigned) → POST /angles/{angle}/confirm → GET /angles/{angle}/validationstart_designasynchronnístart_design(building_id, view_id, prompt?, style_ids?, colors?, brand_selections?, render_effort?, seed?) -> { design_id, job_id, status, seed }Navrhne fasádu na zvoleném pohledu a ukáže ji na fotografii: materiály použitelné v zemi stavby, produkty, které se tam skutečně prodávají, a skladbu za povrchem. Vytvoří návrh, zařadí práci do fronty a vrátí id úlohy. Seed je volitelný: když ho vynecháte, server ho vygeneruje sám a vrátí.
Volá
POST /projects/{project}/concepts → POST /concepts/{concept}/angles/{conceptAngle}/rendersrefine_designasynchronnírefine_design(render_id | design_id + building_id, instruction, style_ids?, colors?, brand_selections?, render_effort?, seed?) -> { design_id, job_id, status, parent_render_id, seed }Upraví slovy hotový návrh. Pokyn se aplikuje na hotový návrh, takže vše, co nezmiňuje, zůstává. Úprava hlavního pohledu vytvoří nový návrh, takže se ten předchozí nikdy nepřepíše.
Volá
GET /renders/{render} → POST /concepts/{concept}/angles/{conceptAngle}/renders (mode: refine)get_jobget_job(job_id, kind: "render" | "album" | "estimate" = "render") -> { status, expected_seconds?, result_url?, error?, error_code? }Přečte stav jednoho renderu, rozpočtu nebo alba.
Volá
GET /renders/{render} · GET /estimates/{estimate}list_jobslist_jobs(kind?, limit? = 20) -> [{ job_id, kind, status, building_id, created_at }]Nedávné úlohy napříč účtem, nedokončené nahoře.
Volá
GET /historylist_designslist_designs(building_id) -> [{ design_id, note, has_main_render, main_render_id, main_render_url, renders }]Návrhy budovy i s jejich rendery. Odsud pocházejí identifikátory renderů pro rozpočet a album.
Volá
GET /projects/{project}/conceptsorder_estimateasynchronníorder_estimate(design_id, render_ids, currency?, measurement_system?, special_requirements?) -> { job_id, status }Ocení návrh položku po položce, v materiálu a práci, za ceny uvedených materiálů v zemi stavby. Měna a soustava měr se ve výchozím stavu řídí touto zemí.
Volá
POST /projects/{project}/concepts/{concept}/estimatesorder_albumasynchronníorder_album(design_id, render_ids, language?, include_blueprints?, include_estimate?, requirements?) -> { job_id, status }Zdokumentuje návrh pro partu, která bude stavět: materiály, skladbu fasády, bezpečnostní poznámky a normy, o které se opírají. Vyžaduje dokončený hlavní render.
Volá
POST /concepts/{concept}/album/generateupscale_renderasynchronníupscale_render(render_id) -> { job_id, status }Zvětší dokončený render. Stojí tokeny a běží asynchronně.
Volá
POST /renders/{render}/upscaleget_estimateget_estimate(estimate_id) -> { status, currency, facade_area, materials_total, labor_total, grand_total, notes, lines: [{ line_id, section, name, quantity, unit, unit_price, line_total }] }Samotný rozpočet: součty, předpoklady za nimi a každá položka s množstvím, jednotkou a cenou. get_job hlásí stav rozpočtu, nikdy jeho obsah.
Volá
GET /estimates/{estimate}add_estimate_lineadd_estimate_line(estimate_id, section, name, quantity, unit_price, unit?, category?) -> { line_id }Přidá do rozpočtu položku. Jednotky pocházejí z jeho vlastní měrné soustavy.
Volá
POST /estimates/{estimate}/itemsupdate_estimate_lineupdate_estimate_line(estimate_id, line_id, name?, quantity?, unit_price?, unit?, category?, section?) -> { line_id }Změní položku rozpočtu. Mění se jen předaná pole; součty přepočítá server.
Volá
PATCH /estimates/{estimate}/items/{item}delete_estimate_linedelete_estimate_line(estimate_id, line_id) -> { deleted }Odebere položku z rozpočtu.
Volá
DELETE /estimates/{estimate}/items/{item}delete_renderdelete_render(render_id) -> { deleted }Smaže render. Smazáním hlavního renderu se jeho návrh vrátí do konceptu.
Volá
DELETE /renders/{render}delete_designdelete_design(building_id, design_id) -> { deleted }Smaže návrh i s rendery pod ním.
Volá
DELETE /projects/{project}/concepts/{concept}delete_buildingdelete_building(building_id) -> { deleted }Smaže objekt se vším obsahem. Už utracené tokeny se nevracejí.
Volá
DELETE /projects/{project}list_token_packageslist_token_packages() -> [{ package, tokens, price, currency }]Balíčky, které si účet může koupit, s cenou a počtem tokenů.
Volá
GET /tokens/packagesbuy_tokensasynchronníbuy_tokens(package) -> { status, transaction_id, tokens, checkout_url?, detail }Koupí balíček do peněženky tohoto klíče. Vyžaduje klíč vydaný s povolením nakupovat a nikdy nepřekročí to, co klíč ještě smí utratit.
Volá
POST /tokens/purchaseget_balanceget_balance() -> { balance, scope: "api", spend_cap, spent, remaining, is_admissible }Peněženka agenta, strop tohoto klíče a údaj, zda bude příští placené volání připuštěno.
Volá
GET /tokens/balancereport_problemreport_problem(message, category?, context?: { tool, endpoint, status_code, job_id, expected, actual }) -> { reference, message }Nahlásí vadu tohoto API: pole popsané zde, které nikdy nedorazí, odmítnutí, z jehož znění neplyne další krok, výsledek, který neodpovídá zadání. Zdarma a přijme se i s prázdnou peněženkou; vrací se číslo jednací, ne odpověď.
Volá
POST /feedback
Autentizace a klíče
- Klíč cestuje jako token Bearer v hlavičce
Authorization. Server MCP jej čte zGETFACADE_API_KEYa nic dalšího neposílá. - Hodnota se zobrazí jednou, při vydání, a ukládá se jen její otisk. Rotace znamená vydat nový klíč a starý zneplatnit.
- Každý klíč nese strop útraty, vynucený na serveru dřív, než volání dorazí ke kontroleru. Dosažený strop zastaví ten klíč, nikoli účet.
- Klíče nespravují klíče: to je lidský úkon a tyto endpointy odpovídají agentnímu klíči kódem 403.
- Zneplatnění působí okamžitě. Volání zneplatněným klíčem dostane 401.
Asynchronní práce a dotazování
start_design,order_estimateaorder_albumvrátí identifikátor úlohy a tím končí. Render trvá minuty: dotazujte se naGET /renders/{render}neboGET /estimates/{estimate}, dokud není stav konečný.- Konec kontroly fotografie oznamuje websocket, který agent nemá. Dotazujte se na
GET /angles/{angle}/validationa čtětevalidation.is_in_progress; konečnost si sami z textu stavu neodvozujte. - Hotový render a hotové album leží na trvalých veřejných adresách: bez podpisu a bez expirace. Takový odkaz lze dát člověku přímo, a je to odpověď na „ukaž mi výsledek“. Protože není podepsaný, nikoho se neptá: funguje komukoli, kdo ho dostane, a nelze ho odvolat.
GET /renders/{render}/downloadje něco jiného: podepsaná URL, která vyprší během minut a nese název souboru. Slouží k uložení souboru, ne ke sdílení.
Limity četnosti na klíč
Agentní klíč má vlastní přihrádky, oddělené od lidských relací téhož účtu, aby zacyklený agent nesnědl příděl člověka u obrazovky. Odmítnutí je levné: padne v middleware, před jakoukoli prací s databází.
| Oblast | Za minutu | Za hodinu |
|---|---|---|
| Čtení a běžné zápisy | 120 | 2000 |
| Dotazy na stav a kontrolu | 120 | 2000 |
| Objednávky renderu, rozpočtu a alba | 10 | 200 |
Idempotence
Placené volání vytvoří úlohu a platba jde za úlohou. Právě pojmenování volání umožňuje, aby opakování vrátilo tutéž úlohu místo vytvoření druhé.
Idempotency-Keyje povinná u každého placeného volání s klíčem API: založení nebo úprava návrhu, zvětšení renderu, objednání rozpočtu nebo alba, přegenerování rozpočtu. Bez ní volání odpoví 422IDEMPOTENCY_KEY_REQUIREDa do fronty se nic nedostane.- Libovolná hodnota o 8 až 191 znacích, jedna na objednávku; obvykle UUID. Nová objednávka dostane novou hodnotu: dvě stejná volání pod dvěma hodnotami jsou dva návrhy.
- Opakování volání se stejnou hodnotou a stejným tělem vrátí původní stav a tělo, s hlavičkou
Idempotent-Replay: true. Do fronty se nic nedostane a nic se neúčtuje dvakrát. - Stejná hodnota s jiným tělem odpoví 422
IDEMPOTENCY_KEY_REUSED. Opakování, které přijde, zatímco první volání ještě běží, odpoví 409IDEMPOTENCY_IN_PROGRESS: počkejte a pošlete stejné volání znovu. - Jakákoli odpověď 4xx hodnotu uvolní, takže ji lze poslat znovu, jakmile je příčina odstraněna. Hodnoty se pamatují 24 hodin, v rámci účtu.
@getfacade/mcphodnotu vytvoří i volání pod ní zopakuje sám, ve volání nástroje tedy není co předávat.
Chyby
Selhání přicházejí jako chybové dokumenty JSON:API. Validační odpovědi Laravelu tvar JSON:API nemají a text nesou v poli message.
| Stav | Kód | Význam | Opakovatelné |
|---|---|---|---|
401 | — | Klíč chybí, byl zneplatněn nebo vypršel. | Ne |
402 | AGENT_CREDITS_EXHAUSTED | Účet už nemá kredity rozsahu api. | Ne |
402 | AGENT_KEY_CAP_REACHED | Tento klíč vyčerpal svůj strop. Vydejte jiný klíč nebo strop zvyšte. | Ne |
403 | — | Tento endpoint není pro klíče API dostupný. API pro agenty zahrnuje budovy, fotografie, návrhy, rendery, rozpočty, alba a peněženku API. Nastavení účtu, přihlášení a plateb mění člověk přihlášený v aplikaci. | Ne |
403 | AGENT_PURCHASE_NOT_ALLOWED | Tento klíč byl vydán bez práva nakupovat tokeny. | Ne |
403 | AGENT_PURCHASE_EXCEEDS_CAP | Nákup by klíč dostal za jeho strop útraty. | Ne |
409 | IDEMPOTENCY_IN_PROGRESS | První volání s tímto klíčem Idempotency-Key ještě neodpovědělo. Počkejte a pošlete stejné volání znovu. | Ano |
422 | — | Požadavek byl pochopen a odmítnut: duplicitní název budovy, zamítnutá fotografie, album objednané před dokončením hlavního renderu. | Ne |
422 | IDEMPOTENCY_KEY_REQUIRED | Placené volání s klíčem API bez hlavičky Idempotency-Key. Do fronty se nic nedostalo; pošlete je znovu s hlavičkou. | Ne |
422 | IDEMPOTENCY_KEY_REUSED | Tento Idempotency-Key byl použit pro jiný požadavek. Pro novou objednávku použijte novou hodnotu. | Ne |
429 | — | Vlastní přihrádka tohoto klíče je vyčerpaná. Počkejte, neopakujte v těsné smyčce. | Ano |
Čitelný text píše API, v jazyce volajícího. Zobrazte errors[].detail beze změny, místo skládání vlastní hlášky.
Platby a připuštění
- Placená volání čerpají z kreditů rozsahu
apia přijetí se dívá jen na tento zůstatek: každý klíč platí kredity. - Aktivní Pro Plan jednou za zúčtovací období doplní peněženku
apina 1000 kreditů. Nad rámec toho se kredity kupují. - Klíč si doplní peněženku, jen pokud byl vydán s povolením nakupovat, a nejvýš o to, co ještě smí utratit, takže nákup nikdy nezvedne strop útraty.
- Oblast
apije samostatná peněženka. Kredity aplikace, včetně bezplatné úrovně, klíč nikdy neutratí. - Útrata se počítá po klíčích, takže spotřeba každého asistenta je vidět zvlášť.
- Předletová kontrola je
GET /tokens/balance, poledata.attributes.agent.is_admissible. Blok se objevuje jen u agentních klíčů a příznak přesně zrcadlí middleware připuštění. Čtěte jej místo vlastního porovnávání zůstatku se stropem. - O připuštění se rozhoduje dřív, než práce vstoupí do fronty, odmítnuté volání tedy nic nestojí.
Barevné a značkové tokeny
start_design bere dva nezávislé seznamy, každý nejvýše o deseti položkách. Pořadí nese roli 60/30/10: první položka je dominantní barva stěn.
colors
| Token | Význam |
|---|---|
palette:1 | Připravené schéma GetFacade, podle identifikátoru. |
#8A8F7D | Volná barva, šest šestnáctkových číslic. |
paint:412 | Vzorník výrobce ve dvousegmentovém tvaru zachovaném kvůli kompatibilitě. |
brand_selections
| Token | Význam |
|---|---|
siding:brand:12 | Jakýkoli produkt tohoto výrobce v této kategorii. |
siding:line:40@double-4-dutchlap | Jedna řada, na jedné geometrii. |
siding:product:88@double-4-dutchlap | Jeden produkt, plně určený. |
paint:brand:3 | Jakýkoli odstín této značky barev. |
paint:product:412 | Jeden odstín barvy. |
Gramatika zní category:level:id[@value][.value]. Část za @ nese slugy hodnot geometrie, jedinečné v rámci kategorie, takže osa, k níž patří, se dohledá a nepíše se do tokenu. Neznámý token je odmítnut kódem 422 a nikdy tiše ignorován.
Průchozí relace
Jedna budova, jedna fotografie, jeden návrh a pak dva dokumenty. Pokyn, který to vytvoří:
Založ budovu s názvem Maple Street 14, nahraj ./front.jpg jako její pohled a spusť návrh s teple šedými stěnami a bílými lištami. Objednej rozpočet a album pro výsledek.
create_building(name: "Maple Street 14")
-> { building_id: "0f8c…" }
upload_photo(building_id: "0f8c…", file_path: "./front.jpg")
-> { view_id: "41ab…", validation: { status: "approved" } }
start_design(building_id: "0f8c…", view_id: "41ab…",
colors: ["#8A8F7D", "#F2F0EB"],
brand_selections: ["siding:line:40@double-4-dutchlap"])
-> { design_id: "7d21…", job_id: "b933…", status: "queued" }
get_job(job_id: "b933…")
-> { status: "completed", result_url: "https://…" }
refine_design(render_id: "b933…",
instruction: "put a canopy over the front door")
-> { design_id: "9e44…", job_id: "c07f…", status: "queued" }
order_estimate(design_id: "9e44…", render_ids: ["c07f…"])
order_album(design_id: "9e44…", render_ids: ["c07f…"], include_estimate: true)