{"origin":"https://fl.ecorce.app","updated":"2026-11-02T16:07:36.503Z","surface":[{"name":"catalog.list","version":"1.0.0","permission":"public","job":"List published surface functions and apps.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"input is not a JSON object"}],"changelog":"1.0.0 — first publish. Same shape as GET /catalog.","url":"https://fl.ecorce.app/s/catalog.list@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/catalog.list@1.0.0"}},{"name":"catalog.get","version":"1.0.0","permission":"public","job":"Fetch one surface function or app descriptor.","input":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string"},"version":{"type":"string"}}},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"name is missing"},{"code":"not_found","when":"no published asset"}],"changelog":"1.0.0 — first publish.","url":"https://fl.ecorce.app/s/catalog.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/catalog.get@1.0.0"}},{"name":"brand.ecorce.get","version":"1.0.0","permission":"public","job":"Return live Écorce brand tokens from the GO brief.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"input is not a JSON object"}],"changelog":"1.0.0 — paper, ink, moss, copper, bark, lichen; Fraunces / Source Serif 4 / IBM Plex Mono.","url":"https://fl.ecorce.app/s/brand.ecorce.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/brand.ecorce.get@1.0.0"}},{"name":"pivo.explore.get","version":"1.0.0","permission":"public","job":"Read the cached Pivo Explore snapshot. Does not fetch the network.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"input is not a JSON object"}],"changelog":"1.0.0 — KV read only. Empty cache is honest, not fake grocery rows.","url":"https://fl.ecorce.app/s/pivo.explore.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/pivo.explore.get@1.0.0"}},{"name":"pivo.explore.query","version":"1.0.0","permission":"public","job":"Page the cached Pivo Explore snapshot. Does not fetch the network.","input":{"type":"object","additionalProperties":false,"required":["kind"],"properties":{"q":{"type":"string"},"kind":{"type":"string"},"city":{"type":"string"},"near":{"type":"object"},"limit":{"type":"number"},"offset":{"type":"number"}}},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"kind is missing"}],"changelog":"1.0.0 — first publish. Paged read of the weekly KV snapshot.","url":"https://fl.ecorce.app/s/pivo.explore.query@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/pivo.explore.query@1.0.0"}},{"name":"pivo.explore.query","version":"1.1.0","permission":"public","job":"Page the cached Pivo Explore snapshot.","input":{"type":"object"},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"kind is missing"}],"changelog":"1.1.0 — additions only: id, category, family, style, bbox, producerId; richer facets; pin limit 200.","url":"https://fl.ecorce.app/s/pivo.explore.query@1.1.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/pivo.explore.query@1.1.0"}},{"name":"pivo.explore.query","version":"1.2.0","permission":"public","job":"Page the cached Pivo Explore snapshot.","input":{"type":"object"},"output":{"type":"object"},"errors":[{"code":"bad_request","when":"kind is missing"}],"changelog":"1.2.0 — additions only: styles[] facet for product style chips.","url":"https://fl.ecorce.app/s/pivo.explore.query@1.2.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/pivo.explore.query@1.2.0"}},{"name":"pivo.explore.sync","version":"1.0.0","permission":"kernel","job":"Fetch public Pivo Explore JSON and store a slim snapshot in KV. Weekly cron.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object"},"errors":[{"code":"unauthorized","when":"missing X-GO-Kernel"},{"code":"upstream","when":"public JSON endpoints failed"}],"changelog":"1.0.0 — kernel-only. Cron Monday 12:00 UTC.","url":"https://fl.ecorce.app/s/pivo.explore.sync@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/pivo.explore.sync@1.0.0"}},{"name":"commande.live.get","version":"1.0.0","permission":"public","job":"The open Écorce fruits-and-veg order, if any. Token is the desk link.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object","required":["open"],"properties":{"open":{"type":"boolean"},"token":{"type":"string"},"liste":{"type":"string"},"client":{"type":"string"},"demo":{"type":"boolean"}}},"errors":[{"code":"bad_request","when":"input is not a JSON object"}],"changelog":"1.0.0 — first publish. Public. Does not leak line items.","url":"https://fl.ecorce.app/s/commande.live.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/commande.live.get@1.0.0"}},{"name":"commande.get","version":"1.0.0","permission":"public","job":"Read a commande by token. Possession of the token is the secret.","input":{"type":"object","additionalProperties":false,"required":["token"],"properties":{"token":{"type":"string"}}},"output":{"type":"object","description":"commande + lignes with SPN names and quantities."},"errors":[{"code":"bad_request","when":"token missing"},{"code":"not_found","when":"no such commande"}],"changelog":"1.0.0 — first publish. Public. Token in the body.","url":"https://fl.ecorce.app/s/commande.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/commande.get@1.0.0"}},{"name":"commande.set","version":"1.0.0","permission":"public","job":"Write quantities and notes on an open commande.","input":{"type":"object","additionalProperties":false,"required":["token"],"properties":{"token":{"type":"string"},"lignes":{"type":"array"},"notes":{"type":"string"}}},"output":{"type":"object","required":["total_estime"],"properties":{"total_estime":{"type":"number"}}},"errors":[{"code":"not_found","when":"no such commande"},{"code":"conflict","when":"commande is closed"}],"changelog":"1.0.0 — first publish. Token. Replaces the line set.","url":"https://fl.ecorce.app/s/commande.set@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/commande.set@1.0.0"}},{"name":"commande.close","version":"1.0.0","permission":"public","job":"Freeze an open commande. YAML snapshot stays readable.","input":{"type":"object","additionalProperties":false,"required":["token"],"properties":{"token":{"type":"string"}}},"output":{"type":"object"},"errors":[{"code":"not_found","when":"no such commande"}],"changelog":"1.0.0 — first publish. Token.","url":"https://fl.ecorce.app/s/commande.close@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/commande.close@1.0.0"}},{"name":"commande.export","version":"1.0.0","permission":"public","job":"YAML of the commande, ready to paste in a mail.","input":{"type":"object","additionalProperties":false,"required":["token"],"properties":{"token":{"type":"string"}}},"output":{"type":"object","required":["yaml"],"properties":{"yaml":{"type":"string"},"total_estime":{"type":"number"},"statut":{"type":"string"}}},"errors":[{"code":"not_found","when":"no such commande"}],"changelog":"1.0.0 — first publish. Token.","url":"https://fl.ecorce.app/s/commande.export@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/commande.export@1.0.0"}},{"name":"liste.ingest","version":"1.0.0","permission":"kernel","job":"Admin drops the Canadawide list of the day. Closes the open commande. Opens a new one.","input":{"type":"object","additionalProperties":false,"required":["contenu"],"properties":{"contenu":{"type":"string"},"date":{"type":"string"},"nomFichier":{"type":"string"}}},"output":{"type":"object"},"errors":[{"code":"unauthorized","when":"not kernel"},{"code":"bad_request","when":"no rows"}],"changelog":"1.0.0 — first publish. Kernel. Joins SPN. Does not invent names or prices.","url":"https://fl.ecorce.app/s/liste.ingest@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/liste.ingest@1.0.0"}},{"name":"spn.map.get","version":"1.0.0","permission":"public","job":"SPN naming sheet for Canadawide SKUs. Count only unless items is requested by kernel.","input":{"type":"object","additionalProperties":false,"properties":{}},"output":{"type":"object","required":["n"],"properties":{"snapshot":{"type":"string"},"n":{"type":"number"}}},"errors":[{"code":"upstream","when":"SPN unreachable"}],"changelog":"1.0.0 — first publish. Does not invent SPN fields.","url":"https://fl.ecorce.app/s/spn.map.get@1.0.0","call":{"method":"POST","url":"https://fl.ecorce.app/s/spn.map.get@1.0.0"}}],"apps":[{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":1,"frozen":true,"job":"French-first Écorce landing for local products, producers, and shops.","url":"https://fl.ecorce.app/a/pivo-explore@1","lockfile":{"app":"pivo-explore","version":1,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.get","version":"1.0.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"1 — first leaf."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":2,"frozen":true,"job":"Paged query, city-first.","url":"https://fl.ecorce.app/a/pivo-explore@2","lockfile":{"app":"pivo-explore","version":2,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.0.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"2 — Website Alpha."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":3,"frozen":true,"job":"Folded city chips.","url":"https://fl.ecorce.app/a/pivo-explore@3","lockfile":{"app":"pivo-explore","version":3,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.0.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"3 — second look."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":4,"frozen":true,"job":"Map, fiches, category chips.","url":"https://fl.ecorce.app/a/pivo-explore@4","lockfile":{"app":"pivo-explore","version":4,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"4 — map of comptoirs."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":5,"frozen":true,"job":"Map window vs city chip.","url":"https://fl.ecorce.app/a/pivo-explore@5","lockfile":{"app":"pivo-explore","version":5,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"5 — map window is the filter."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":6,"frozen":true,"job":"Carte, Produits, Producteurs.","url":"https://fl.ecorce.app/a/pivo-explore@6","lockfile":{"app":"pivo-explore","version":6,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"6 — first-class modes."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":7,"frozen":true,"job":"Map layer owns the list.","url":"https://fl.ecorce.app/a/pivo-explore@7","lockfile":{"app":"pivo-explore","version":7,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"7 — map layer owns the list."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":8,"frozen":true,"job":"Map-first shopper leaf.","url":"https://fl.ecorce.app/a/pivo-explore@8","lockfile":{"app":"pivo-explore","version":8,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"8 — map-first rewrite."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":9,"frozen":true,"job":"Visual polish of @8.","url":"https://fl.ecorce.app/a/pivo-explore@9","lockfile":{"app":"pivo-explore","version":9,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.1.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"9 — HUD paper scrim."},{"kind":"app","app":"pivo-explore","name":"pivo-explore","version":10,"job":"French-first Écorce map of local products, producers, and shops.","url":"https://fl.ecorce.app/a/pivo-explore@10","lockfile":{"app":"pivo-explore","version":10,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"pivo.explore.query","version":"1.2.0"},{"name":"catalog.list","version":"1.0.0"}]},"changelog":"10 — style chips from pivo.explore.query@1.2.0."},{"kind":"app","app":"commande-fl","name":"commande-fl","version":1,"job":"Weekly fruits and vegetables order. SPN names, YAML mail. Not an ERP. Not a payment.","url":"https://fl.ecorce.app/a/commande-fl@1","lockfile":{"app":"commande-fl","version":1,"surface":[{"name":"brand.ecorce.get","version":"1.0.0"},{"name":"commande.live.get","version":"1.0.0"},{"name":"commande.get","version":"1.0.0"},{"name":"commande.set","version":"1.0.0"},{"name":"commande.close","version":"1.0.0"},{"name":"commande.export","version":"1.0.0"}]},"changelog":"1 — first desk. Lifts ecorce-commande onto GO. Token is the caller."}]}