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