{"version":"4.1.0","docs":"/docs/content-api","integration":"/api/v1/integration.md","openapi":"/api/v1/openapi.json","entities":"/api/content-schema/entities","note":"Each resource is served at GET /api/v1/<name>. Responses are fully defaulted: absent strings are empty strings and absent collections are empty arrays.","resources":{"settings":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"default":"","description":"Business name as displayed across the site.","type":"string"},"tagline":{"default":"","description":"One-line slogan shown near the logo/footer. Portuguese.","type":"string"},"description":{"default":"","description":"Short description of the business, 1-2 sentences. Portuguese.","type":"string"},"phone":{"default":"","description":"Display phone number, formatted for reading (e.g. \"+351 912 345 678\"). Empty string if none. Derive a tel: URI from it by stripping everything but + and digits.","type":"string"},"email":{"default":"","description":"Public contact email. Empty string if none.","type":"string"},"whatsapp":{"default":"","description":"WhatsApp chat URL (e.g. \"https://wa.me/351912345678\"). Empty string if none.","type":"string"},"appUrl":{"default":"","description":"Mobile app store URL if the business has an app. Empty string if none.","type":"string"},"schedule":{"default":[],"description":"Opening schedule rows, in display order.","type":"array","items":{"type":"object","properties":{"days":{"default":"","description":"Day range label (e.g. \"Seg – Sáb\"). Portuguese.","type":"string"},"hours":{"default":"","description":"Opening hours label (e.g. \"09h – 19h\" or \"Fechado\").","type":"string"}},"description":"One row of the opening schedule."}},"social":{"default":{},"type":"object","properties":{"facebook":{"default":"","description":"Facebook page URL. Empty string if none.","type":"string"},"instagram":{"default":"","description":"Instagram profile URL. Empty string if none.","type":"string"},"linkedin":{"default":"","description":"LinkedIn page URL. Empty string if none.","type":"string"},"x":{"default":"","description":"X/Twitter profile URL. Empty string if none.","type":"string"},"youtube":{"default":"","description":"YouTube channel URL. Empty string if none.","type":"string"}},"description":"Social media profile links."}},"description":"The business: identity, contacts, opening hours and social links. One per site."},"services":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe unique identifier, lowercase, hyphen-separated."},"title":{"default":"","description":"Service name. Portuguese.","type":"string"},"icon":{"type":"string","enum":["truck","wrench","packageCheck","hammer","boxes","warehouse","arrowDownToLine","zap","clock","shieldCheck"],"description":"Icon key from the fixed icon set (Lucide-style names)."},"image":{"type":"object","properties":{"assetId":{"description":"Asset document id, set by the backoffice after upload.","type":"string"},"pathname":{"default":"","description":"Blob storage pathname; client sites serve it through their own /api/blob/ proxy.","type":"string"},"alt":{"default":"","description":"Image alt text. Portuguese.","type":"string"},"width":{"description":"Image width in pixels.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"description":"Image height in pixels.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"description":"Illustrative image stored in Vercel Blob."},"tier":{"type":"string","enum":["primary","featured","secondary"],"description":"Display tier: \"primary\" for the main highlighted services, \"featured\" for the secondary highlights, \"secondary\" for the rest."},"short":{"default":"","description":"One-sentence summary shown on service cards. Portuguese.","type":"string"},"description":{"default":"","description":"Full description. Portuguese.","type":"string"},"bullets":{"default":[],"description":"Bullet-point highlights. Portuguese.","type":"array","items":{"type":"string"}}},"required":["slug","icon","tier"],"description":"One service offered by the business."},"description":"Services offered by the business, in display order."},"products":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe unique identifier, lowercase, hyphen-separated."},"title":{"default":"","description":"Product name. Portuguese.","type":"string"},"icon":{"type":"string","enum":["truck","wrench","packageCheck","hammer","boxes","warehouse","arrowDownToLine","zap","clock","shieldCheck"],"description":"Icon key from the fixed icon set (Lucide-style names)."},"image":{"type":"object","properties":{"assetId":{"description":"Asset document id, set by the backoffice after upload.","type":"string"},"pathname":{"default":"","description":"Blob storage pathname; client sites serve it through their own /api/blob/ proxy.","type":"string"},"alt":{"default":"","description":"Image alt text. Portuguese.","type":"string"},"width":{"description":"Image width in pixels.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"description":"Image height in pixels.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"description":"Illustrative image stored in Vercel Blob."},"sku":{"default":"","description":"Internal reference or article number. Empty string if none.","type":"string"},"price":{"default":0,"description":"Price amount in the currency below. 0 means the price is not published.","type":"number","minimum":0},"currency":{"default":"EUR","description":"Currency of the price amount.","type":"string","enum":["EUR","USD","GBP"]},"pricePeriod":{"default":"once","description":"Billing period the price refers to: \"once\" for a one-off price, \"month\" or \"year\" for a subscription.","type":"string","enum":["once","month","year"]},"priceNote":{"default":"","description":"Short qualifier shown next to the price (e.g. \"IVA incluído\"). Portuguese.","type":"string"},"short":{"default":"","description":"One-sentence summary shown on product cards. Portuguese.","type":"string"},"description":{"default":"","description":"Full description. Portuguese.","type":"string"},"bullets":{"default":[],"description":"Bullet-point highlights. Portuguese.","type":"array","items":{"type":"string"}},"featured":{"default":false,"description":"True for a product the website should highlight.","type":"boolean"},"available":{"default":true,"description":"False for a product kept on record but not currently sold.","type":"boolean"}},"required":["slug","icon"],"description":"One product sold by the business, at a stated price."},"description":"Products sold by the business, in display order."},"caseStudies":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe unique identifier, lowercase, hyphen-separated."},"client":{"default":"","description":"Name of the client the work was delivered for. Doubles as the case study's title.","type":"string"},"problem":{"default":"","description":"The situation the client was in. Portuguese.","type":"string"},"solution":{"default":"","description":"What the business did about it. Portuguese.","type":"string"},"results":{"default":"","description":"What the client got out of it. Portuguese.","type":"string"},"links":{"default":[],"description":"Related links, in display order.","type":"array","items":{"type":"object","properties":{"title":{"default":"","description":"Link label. Portuguese. May be empty — fall back to showing the URL.","type":"string"},"url":{"default":"","description":"Absolute URL, including the scheme.","type":"string"}},"description":"One outbound link related to the case study, such as the live website."}},"assets":{"default":[],"description":"Every attached file in one list, in display order. Group them by `kind` if your design shows media separately from documents.","type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["image","video","document"],"description":"What the file is, derived from its MIME type: \"image\" and \"video\" are media, everything else is a \"document\". Split a list on this rather than on the file extension."},"pathname":{"type":"string","description":"Blob storage pathname; fetch the file from GET /api/v1/assets/{pathname}, or proxy it through your own route."},"contentType":{"default":"","description":"MIME type the file was stored with (e.g. \"image/webp\", \"application/pdf\").","type":"string"},"name":{"default":"","description":"Original filename at upload time. Use it as the download label for a document.","type":"string"},"alt":{"default":"","description":"Alt text, when one was written. Often empty — fall back to the surrounding context.","type":"string"},"size":{"description":"File size in bytes, when known.","type":"integer","minimum":0,"maximum":9007199254740991},"width":{"description":"Intrinsic width in pixels. Present for media, absent for documents.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"description":"Intrinsic height in pixels. Present for media, absent for documents.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["kind","pathname"],"description":"One file uploaded through the backoffice and stored in Vercel Blob."}}},"required":["slug"],"description":"One piece of work the business has delivered, told as problem, solution and results."},"description":"Case studies published by the business, in display order."},"locations":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe unique identifier, lowercase, hyphen-separated."},"city":{"default":"","description":"City or locality name.","type":"string"},"lines":{"default":[],"description":"Address lines, in display order.","type":"array","items":{"type":"string"}},"mapsSearchUrl":{"default":"","description":"Google Maps search/share URL for this address. Empty string if none.","type":"string"},"mapEmbedUrl":{"default":"","description":"Google Maps embed URL (iframe src). Empty string if none.","type":"string"},"primary":{"default":false,"description":"True for the main location (at most one per site).","type":"boolean"}},"required":["slug"],"description":"One physical location of the business."},"description":"Physical locations of the business, in display order."},"values":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe unique identifier, lowercase, hyphen-separated."},"title":{"default":"","description":"Value name (e.g. Qualidade). Portuguese.","type":"string"},"description":{"default":"","description":"Short explanation of the value. Portuguese.","type":"string"}},"required":["slug"],"description":"One company value."},"description":"Company values, in display order."},"legal":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string","enum":["terms","privacy"]},"additionalProperties":{"type":"object","properties":{"sections":{"default":[],"description":"Ordered sections, as the document should read.","type":"array","items":{"type":"object","properties":{"title":{"default":"","description":"Section heading. Portuguese.","type":"string"},"body":{"default":"","description":"Section body prose; plain text, may contain multiple sentences. Portuguese.","type":"string"}}}}},"description":"One legal document."},"description":"Legal documents the client maintains, keyed by document. Only documents that have been written are present."}}}