[{"data":1,"prerenderedAt":394},["ShallowReactive",2],{"page:\u002Frequests":3},{"id":4,"title":5,"body":6,"description":385,"extension":386,"meta":387,"navigation":388,"operation":389,"path":390,"rawbody":391,"seo":392,"stem":55,"__hash__":393},"docs\u002Frequests.md","Requests & responses",{"type":7,"value":8,"toc":376},"minimark",[9,14,18,29,36,53,57,85,89,104,209,215,226,230,332,339,343,350,354,359,363,372],[10,11,13],"h2",{"id":12},"base-url","Base URL",[15,16,17],"p",{},"All endpoints live under one base URL:",[19,20,26],"pre",{"className":21,"code":23,"language":24,"meta":25},[22],"language-text","https:\u002F\u002Fapi.vestta.io\u002Fv1\n","text","",[27,28,23],"code",{"__ignoreMap":25},[15,30,31,32,35],{},"The former host, ",[27,33,34],{},"https:\u002F\u002Fapi.vestta.app\u002Fv1",", keeps answering the same requests, so existing integrations do not need to change at once.",[15,37,38,39,42,43,46,47,52],{},"Paths in this documentation are shown in full — for example ",[27,40,41],{},"GET \u002Fv1\u002Fproperties"," — so they can be pasted after the host. The ",[27,44,45],{},"v1"," segment is the API version; breaking changes would ship under a new version and be announced in the ",[48,49,51],"a",{"href":50},"\u002Fchangelog","changelog",".",[10,54,56],{"id":55},"requests","Requests",[58,59,60,64,75,78],"ul",{},[61,62,63],"li",{},"Use HTTPS. Request and response bodies are JSON encoded as UTF-8.",[61,65,66,67,70,71,74],{},"Send ",[27,68,69],{},"Content-Type: application\u002Fjson"," with every ",[27,72,73],{},"POST"," body.",[61,76,77],{},"Query parameters are case-sensitive. Unknown query parameters are ignored.",[61,79,80,81,52],{},"Authenticate every request with your key — see ",[48,82,84],{"href":83},"\u002Fauthentication","Authentication",[10,86,88],{"id":87},"responses","Responses",[15,90,91,92,95,96,99,100,103],{},"Successful responses have status ",[27,93,94],{},"200"," and carry ",[27,97,98],{},"\"status\": \"ok\"",". Responses that read data put it in ",[27,101,102],{},"data",":",[19,105,109],{"className":106,"code":107,"language":108,"meta":25,"style":25},"language-json shiki shiki-themes github-light","{\n  \"status\": \"ok\",\n  \"data\": [ … ],\n  \"count\": 78,\n  \"limit\": 20,\n  \"offset\": 0,\n  \"authenticated_as\": \"Inmobiliaria Ejemplo\"\n}\n","json",[27,110,111,120,137,153,166,179,192,203],{"__ignoreMap":25},[112,113,116],"span",{"class":114,"line":115},"line",1,[112,117,119],{"class":118},"sgsFI","{\n",[112,121,123,127,130,134],{"class":114,"line":122},2,[112,124,126],{"class":125},"sYu0t","  \"status\"",[112,128,129],{"class":118},": ",[112,131,133],{"class":132},"sYBdl","\"ok\"",[112,135,136],{"class":118},",\n",[112,138,140,143,146,150],{"class":114,"line":139},3,[112,141,142],{"class":125},"  \"data\"",[112,144,145],{"class":118},": [ ",[112,147,149],{"class":148},"sB1qb","…",[112,151,152],{"class":118}," ],\n",[112,154,156,159,161,164],{"class":114,"line":155},4,[112,157,158],{"class":125},"  \"count\"",[112,160,129],{"class":118},[112,162,163],{"class":125},"78",[112,165,136],{"class":118},[112,167,169,172,174,177],{"class":114,"line":168},5,[112,170,171],{"class":125},"  \"limit\"",[112,173,129],{"class":118},[112,175,176],{"class":125},"20",[112,178,136],{"class":118},[112,180,182,185,187,190],{"class":114,"line":181},6,[112,183,184],{"class":125},"  \"offset\"",[112,186,129],{"class":118},[112,188,189],{"class":125},"0",[112,191,136],{"class":118},[112,193,195,198,200],{"class":114,"line":194},7,[112,196,197],{"class":125},"  \"authenticated_as\"",[112,199,129],{"class":118},[112,201,202],{"class":132},"\"Inmobiliaria Ejemplo\"\n",[112,204,206],{"class":114,"line":205},8,[112,207,208],{"class":118},"}\n",[15,210,211,214],{},[27,212,213],{},"authenticated_as"," is the name of the workspace that owns the key — useful in logs when one service talks to several workspaces.",[15,216,217,218,221,222,52],{},"Errors use a different shape, with a ",[27,219,220],{},"detail"," field. See ",[48,223,225],{"href":224},"\u002Ferrors","Errors",[10,227,229],{"id":228},"data-conventions","Data conventions",[231,232,233,246],"table",{},[234,235,236],"thead",{},[237,238,239,243],"tr",{},[240,241,242],"th",{},"Kind",[240,244,245],{},"Convention",[247,248,249,261,272,280,291,310],"tbody",{},[237,250,251,255],{},[252,253,254],"td",{},"IDs",[252,256,257,258,52],{},"Integers, unique per resource: ",[27,259,260],{},"\"id\": 1355",[237,262,263,266],{},[252,264,265],{},"Timestamps",[252,267,268,269,52],{},"ISO 8601 with UTC offset: ",[27,270,271],{},"\"2026-09-26T19:38:41.390976+02:00\"",[237,273,274,277],{},[252,275,276],{},"Money",[252,278,279],{},"Numbers in euros, without currency symbols.",[237,281,282,285],{},[252,283,284],{},"Phone numbers",[252,286,287,288,52],{},"E.164: ",[27,289,290],{},"\"+34600111222\"",[237,292,293,296],{},[252,294,295],{},"Missing values",[252,297,298,299,303,304,307,308,52],{},"Fields without a value are usually ",[300,301,302],"strong",{},"omitted"," rather than returned as ",[27,305,306],{},"null",". Treat a missing field as ",[27,309,306],{},[237,311,312,315],{},[252,313,314],{},"Vocabulary",[252,316,317,318,321,322,321,325,321,328,331],{},"Business values are stored in Spanish, as in the Vestta app: ",[27,319,320],{},"venta",", ",[27,323,324],{},"alquiler",[27,326,327],{},"disponible",[27,329,330],{},"demandante",". Each field's values are listed in the reference.",[15,333,334,335,338],{},"Build integrations that ",[300,336,337],{},"ignore fields they do not know",". New fields can be added to responses without a new API version.",[10,340,342],{"id":341},"caching","Caching",[15,344,345,346,349],{},"Responses are sent with ",[27,347,348],{},"Cache-Control: no-store",": they always reflect the current state of the workspace and must not be cached by proxies. If you cache on your side — for example to render a listings page — keep the cache per workspace and refresh it periodically.",[10,351,353],{"id":352},"rate-limits","Rate limits",[15,355,356,357,52],{},"The API does not currently enforce per-key rate limits. Keep traffic proportionate: cache what you can and avoid polling in tight loops. Any future limit will be announced in the ",[48,358,51],{"href":50},[10,360,362],{"id":361},"openapi","OpenAPI",[15,364,365,366,371],{},"The full contract is published as OpenAPI 3.1 at ",[48,367,369],{"href":368},"\u002Fopenapi.json",[27,370,368],{},". It is the same schema the reference pages of this site are generated from, so you can import it into Postman, Insomnia or a client generator and get exactly what is documented here.",[373,374,375],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sB1qb, html code.shiki .sB1qb{--shiki-default:#B31D28;--shiki-default-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":25,"searchDepth":139,"depth":139,"links":377},[378,379,380,381,382,383,384],{"id":12,"depth":122,"text":13},{"id":55,"depth":122,"text":56},{"id":87,"depth":122,"text":88},{"id":228,"depth":122,"text":229},{"id":341,"depth":122,"text":342},{"id":352,"depth":122,"text":353},{"id":361,"depth":122,"text":362},"Base URL, formats and conventions shared by every endpoint of the Vestta API.","md",{},true,null,"\u002Frequests","---\ntitle: Requests & responses\ndescription: Base URL, formats and conventions shared by every endpoint of the Vestta API.\n---\n\n## Base URL\n\nAll endpoints live under one base URL:\n\n```text\nhttps:\u002F\u002Fapi.vestta.io\u002Fv1\n```\n\nThe former host, `https:\u002F\u002Fapi.vestta.app\u002Fv1`, keeps answering the same requests, so existing integrations do not need to change at once.\n\nPaths in this documentation are shown in full — for example `GET \u002Fv1\u002Fproperties` — so they can be pasted after the host. The `v1` segment is the API version; breaking changes would ship under a new version and be announced in the [changelog](\u002Fchangelog).\n\n## Requests\n\n- Use HTTPS. Request and response bodies are JSON encoded as UTF-8.\n- Send `Content-Type: application\u002Fjson` with every `POST` body.\n- Query parameters are case-sensitive. Unknown query parameters are ignored.\n- Authenticate every request with your key — see [Authentication](\u002Fauthentication).\n\n## Responses\n\nSuccessful responses have status `200` and carry `\"status\": \"ok\"`. Responses that read data put it in `data`:\n\n```json\n{\n  \"status\": \"ok\",\n  \"data\": [ … ],\n  \"count\": 78,\n  \"limit\": 20,\n  \"offset\": 0,\n  \"authenticated_as\": \"Inmobiliaria Ejemplo\"\n}\n```\n\n`authenticated_as` is the name of the workspace that owns the key — useful in logs when one service talks to several workspaces.\n\nErrors use a different shape, with a `detail` field. See [Errors](\u002Ferrors).\n\n## Data conventions\n\n| Kind | Convention |\n| --- | --- |\n| IDs | Integers, unique per resource: `\"id\": 1355`. |\n| Timestamps | ISO 8601 with UTC offset: `\"2026-09-26T19:38:41.390976+02:00\"`. |\n| Money | Numbers in euros, without currency symbols. |\n| Phone numbers | E.164: `\"+34600111222\"`. |\n| Missing values | Fields without a value are usually **omitted** rather than returned as `null`. Treat a missing field as `null`. |\n| Vocabulary | Business values are stored in Spanish, as in the Vestta app: `venta`, `alquiler`, `disponible`, `demandante`. Each field's values are listed in the reference. |\n\nBuild integrations that **ignore fields they do not know**. New fields can be added to responses without a new API version.\n\n## Caching\n\nResponses are sent with `Cache-Control: no-store`: they always reflect the current state of the workspace and must not be cached by proxies. If you cache on your side — for example to render a listings page — keep the cache per workspace and refresh it periodically.\n\n## Rate limits\n\nThe API does not currently enforce per-key rate limits. Keep traffic proportionate: cache what you can and avoid polling in tight loops. Any future limit will be announced in the [changelog](\u002Fchangelog).\n\n## OpenAPI\n\nThe full contract is published as OpenAPI 3.1 at [`\u002Fopenapi.json`](\u002Fopenapi.json). It is the same schema the reference pages of this site are generated from, so you can import it into Postman, Insomnia or a client generator and get exactly what is documented here.\n",{"title":5,"description":385},"zT_ESPEJUTAYTaPNWjOju7ArRhGQ5GsRaZ7VOxBLS6k",1791929309323]