Havenly
Havenly is an online interior-design platform that connects clients with professional designers for virtual and in-person home-decorating services. Clients take a style quiz, match with a designer, collaborate on 3D room renderings, and shop curated furniture and decor from partner brands at exclusive prices. Havenly also offers AI-assisted design. The company exposes a REST API (documented publicly via Postman at api-docs.havenly.com) covering users and profiles, addresses, design boards and board products, a vendor product catalog (vendor variants), attribute types, board feedback, and user opinions/likes. Authentication is OAuth2 (password grant) returning a Bearer token; HAL+JSON responses use page/limit pagination and zf-doctrine-querybuilder query filters. Havenly is backed by 500 Global and Foundry Group.
Havenly publishes 1 API on the APIs.io network. Tagged areas include Company, Interior Design, Home Decor, Furniture, and E-Commerce.
Havenly’s developer surface includes documentation, API reference, pricing, signup flow, engineering blog, support, and 9 more developer resources.
API Rating
API Evangelist Rating
How this is scored →scored 2026-07-20 · rubric v0.4
APIs
Havenly API
REST API powering the Havenly interior-design platform: users and profiles, addresses, design boards and board products, vendor product variants (catalog), attribute types, boar...
Collections
Havenly API
POSTMANResources
Get Started 2
Portal, sign-up, and the first successful call
Documentation 2
Reference material describing how the API behaves
Agent Surfaces 2
MCP servers, agent skills, and machine-readable catalogs
Access & Security 2
Authentication, authorization, and security posture
Operate 2
Status, limits, changes, and where to get help
Commercial 3
Pricing, plans, and the legal terms of use
Company 2
The organization behind the API
Source (apis.yml)
info:
_postman_id: 72109199-4348-4d08-32e0-12c7d404319d
name: Havenly API
description: "<html><head></head><body><p>This is documentation to the Havenly API. IDs, names, emails found here are not\
\ real and requests from the examples will need to be modified slightly to work (ie edited to use real IDs, passwords,\
\ etc.)<br><br></p>\n<p>If you have feedback on this API we'd love to hear it! <a href=\"mailto:developers@havenly.com\"\
> Click here to shoot us an email!</a>\n<br><br>\nHappy designing!</p>\n<h1 id=\"authentication\">Authentication</h1>\n\
How to authenticate.<br>\nWhat is our outh method?\n\n<h1 id=\"query-filters\">Query filters</h1>\nWe use zf-doctrine-query\
\ builder for query filters. Their documentation can be found \n<a href=\"https://github.com/zfcampus/zf-doctrine-querybuilder/blob/master/README.md\"\
>here</a>\n\n<h1 id=\"tips-and-tricks\">Tips and Tricks</h1>\nEnvironment specific templates.<br>\nIn the process of working\
\ with our API you will end up needing to switch environments and user types very frequently. An easy way to do this is\
\ to have a template for each environment and each user type in that environment.<br>\nFor example:<br>\nTemplate of Local\
\ (admin) would have<br>\n<li>api_url: http://api.havenly.local</li>\n<li>username: im+an+admin@havenly.com</li>\n<br><br>\n\
This would then allow you to select that environment template and now all of your requests will operate as an admin against\
\ the local dev setup.\n<br><br><br>\nFor testing payment methods in non-prod environments you can use any number of the\
\ credit cards documented by Stripe (our payment processor). Their documentation can be found <a href=\"https://stripe.com/docs/testing#cards\"\
>here</a>.</body></html>"
schema: https://schema.getpostman.com/json/collection/v2.0.0/collection.json
toc:
- content: Authentication
slug: authentication
- content: Query filters
slug: query-filters
- content: Tips and Tricks
slug: tips-and-tricks
owner: '661087'
collectionId: 72109199-4348-4d08-32e0-12c7d404319d
publishedId: 6Yu1c7D
public: true
customColor:
top-bar: FFFFFF
right-sidebar: 1C2233
highlight: a1adb7
publishDate: '2017-03-16T05:10:41.000Z'
item:
- name: ' Authentication'
item:
- name: Authentication
event:
- listen: test
script:
type: text/javascript
exec:
- var jsonData = JSON.parse(responseBody);
- tests["Has Bearer Token"] = jsonData.token_type === 'Bearer';
- ''
- postman.setEnvironmentVariable("token", jsonData.access_token);
id: 9ebe4f02-e8bf-94ed-169f-d33e87a98e8e
request:
method: POST
header:
- key: Accept
value: application/json
- key: Content-Type
value: application/json
body:
mode: raw
raw: "{\n \"grant_type\": \"password\",\n \"username\": \"{{username}}\",\n \"password\": \"testtest\",\n \"client_id\"\
: \"postman\"\n}"
url: '{{api_url}}/oauth'
description: '<p>This route is used to authenticate against the Havenly API as a user.</p>
'
urlObject:
path:
- oauth
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: 9ebe4f02-e8bf-94ed-169f-d33e87a98e8e
- name: Facebook Authentication
event:
- listen: test
script:
type: text/javascript
exec:
- var jsonData = JSON.parse(responseBody);
- tests["Has Bearer Token"] = jsonData.token_type === 'Bearer';
- ''
- postman.setEnvironmentVariable("token", jsonData.access_token);
id: 49c62e70-1239-3ea5-fa6e-9dafdc52db36
request:
method: POST
header:
- key: Accept
value: application/json
- key: Content-Type
value: application/json
- key: Authorization
value: Basic aGF2ZW5seWFwcDo=
body:
mode: raw
raw: "{\n \"grant_type\": \"facebook\",\n \"fb_token\": \"EAADxCCTfT8UBALJSk1RKp0SC3D7frahB8loLjbXHI6nrfy3SpPvtCSZBOflvcqdokmprCZBFPiR2mVZCnW2qGEFg9JPNI8ZCxdXUxUjuMdjDSQDYqY9Q0HvAcGVLklfRRPtmZAoZBVrXD0qLOSU1aooJW7hsansrcZD\"\
\n}"
url: '{{api_url}}/oauth'
description: '<p>This route is used to authenticate against the Havenly API as a facebook user.</p>
'
urlObject:
path:
- oauth
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: 49c62e70-1239-3ea5-fa6e-9dafdc52db36
- name: External OAuth Authentication
event:
- listen: test
script:
id: baaf347b-19b7-40d0-b448-3ae5fb9d625d
type: text/javascript
exec:
- ''
id: 7e683be5-cc7b-b191-4180-fe6950ec6e42
request:
method: POST
header:
- key: Accept
value: application/json
- key: Content-Type
value: application/json
body:
mode: raw
raw: "{\n \"grant_type\": \"external_oauth\",\n \"client_id\": \"postman\",\n \"provider\": \"airbnb\",\n \"access_token\"\
: \"40xdf4fvdotrpnwv6tkuroaze\"\n}"
url: '{{api_url}}/oauth'
description: '<p>This route is used to authenticate against the Havenly API as an Airbnb user.</p>
'
urlObject:
path:
- oauth
host:
- '{{api_url}}'
query: []
variable: []
response:
- id: 72474663-c714-0507-dc2d-1ac72b4ba9dd
name: 400 Bad Request (Missing or invalid client_id)
originalRequest:
method: POST
header:
- key: Accept
value: application/json
disabled: false
- key: Content-Type
value: application/json
disabled: false
- key: Authorization
value: Bearer 12bee851211493876e18a0510402ed17a7db075f
disabled: false
body:
mode: raw
raw: "{\n \"grant_type\": \"external_oauth\",\n \"provider\": \"airbnb\",\n \"access_token\": \"40xdf4fvdotrpnwv6tkuroaze\"\
\n}"
url: '{{api_url}}/oauth'
status: invalid_client
code: 400
_postman_previewlanguage: json
header:
- key: Connection
value: keep-alive
name: Connection
description: ''
- key: Content-Type
value: application/problem+json
name: Content-Type
description: ''
- key: Date
value: Mon, 08 Jan 2018 20:37:15 GMT
name: Date
description: ''
- key: Server
value: nginx/1.10.3 (Ubuntu)
name: Server
description: ''
- key: Transfer-Encoding
value: chunked
name: Transfer-Encoding
description: ''
cookie:
- expires: Tue Jan 19 2038 03:14:07 GMT+0000 (Coordinated Universal Time)
httpOnly: false
domain: havenly.local
path: /
secure: false
value: Q2FrZQ%3D%3D.NzJiYWJiMDA4MDA2NjVhNDRhNjc5NDEwMzVlMDc3YjcyNjkzOGY3MGU2MTJjZGQwMGIzMjU1Njc5ZmVjYzZkYuSUcslSx4Nyt0NuGNZi8lHh%2FLEO6z%2F7JSVHizHX0ddsS313UEmgdZarMCjYzf6yzw%3D%3D
key: session_external_cookie[auth-redirect]
- expires: Tue Jan 19 2038 03:14:07 GMT+0000 (Coordinated Universal Time)
httpOnly: false
domain: havenly.local
path: /
secure: false
value: Q2FrZQ%3D%3D.MTUyOTBjNjUyMzkzY2ZhOTU2OThmNzBlZjI0N2I0YTJkOTM1YjIzNjEzNDE1NzZlNjU4MzVmZjczYTE0NWE3Ob1%2FXNqmsAQ1A3Zyx3T4KocM9VpTDzwsFA81hKWEN%2BVfbr8cl2s0N3aKzdoTOhiqIKGIWR%2F1qVSEQ0bB462JbWnb%2BUs6i4hBRECL9asUVxoFGIjhm7ITn5nAWz3f0MDP4q%2BUfUnW1bKYlDNoaPvE%2B1hXfAlQd718qfqICna7%2BOLm
key: session_external_cookie[transaction_traffic_source]
responseTime: '796'
body: '{"type":"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html","title":"invalid_client","status":400,"detail":"Client
credentials were not found in the headers or body"}'
- id: e0eb30ac-2218-bb02-7408-807d7f85dbb5
name: External OAuth Authentication
originalRequest:
method: POST
header:
- key: Accept
value: application/json
disabled: false
- key: Content-Type
value: application/json
disabled: false
- key: Authorization
value: Bearer 12bee851211493876e18a0510402ed17a7db075f
disabled: false
body:
mode: raw
raw: "{\n \"grant_type\": \"external_oauth\",\n \"client_id\": \"postman\",\n \"provider\": \"airbnb\",\n \"\
access_token\": \"40xdf4fvdotrpnwv6tkuroaze\"\n}"
url: '{{api_url}}/oauth'
status: OK
code: 200
_postman_previewlanguage: json
header:
- key: Cache-Control
value: no-store
name: Cache-Control
description: ''
- key: Connection
value: keep-alive
name: Connection
description: ''
- key: Content-Type
value: application/json
name: Content-Type
description: ''
- key: Date
value: Mon, 08 Jan 2018 20:34:49 GMT
name: Date
description: ''
- key: Pragma
value: no-cache
name: Pragma
description: ''
- key: Server
value: nginx/1.10.3 (Ubuntu)
name: Server
description: ''
- key: Transfer-Encoding
value: chunked
name: Transfer-Encoding
description: ''
cookie:
- expires: Tue Jan 19 2038 03:14:07 GMT+0000 (Coordinated Universal Time)
httpOnly: false
domain: havenly.local
path: /
secure: false
value: Q2FrZQ%3D%3D.NzJiYWJiMDA4MDA2NjVhNDRhNjc5NDEwMzVlMDc3YjcyNjkzOGY3MGU2MTJjZGQwMGIzMjU1Njc5ZmVjYzZkYuSUcslSx4Nyt0NuGNZi8lHh%2FLEO6z%2F7JSVHizHX0ddsS313UEmgdZarMCjYzf6yzw%3D%3D
key: session_external_cookie[auth-redirect]
- expires: Tue Jan 19 2038 03:14:07 GMT+0000 (Coordinated Universal Time)
httpOnly: false
domain: havenly.local
path: /
secure: false
value: Q2FrZQ%3D%3D.MTUyOTBjNjUyMzkzY2ZhOTU2OThmNzBlZjI0N2I0YTJkOTM1YjIzNjEzNDE1NzZlNjU4MzVmZjczYTE0NWE3Ob1%2FXNqmsAQ1A3Zyx3T4KocM9VpTDzwsFA81hKWEN%2BVfbr8cl2s0N3aKzdoTOhiqIKGIWR%2F1qVSEQ0bB462JbWnb%2BUs6i4hBRECL9asUVxoFGIjhm7ITn5nAWz3f0MDP4q%2BUfUnW1bKYlDNoaPvE%2B1hXfAlQd718qfqICna7%2BOLm
key: session_external_cookie[transaction_traffic_source]
responseTime: '1151'
body: '{"access_token":"5ca13702fca48ed153984d963a683a96cfcaf405","expires_in":3600,"token_type":"Bearer","scope":null,"refresh_token":"3d31c190d2c875a40049d614c5aee7e98f3e24bc"}'
_postman_id: 7e683be5-cc7b-b191-4180-fe6950ec6e42
id: e70b1205-d558-7977-ce65-9a7c11524e71
description: '<p>Authentication is the first piece to many of the Havenly API routes found here. Although not all of them
require auth, it is required for most, so understanding the oauth flow is important.</p>
'
_postman_id: e70b1205-d558-7977-ce65-9a7c11524e71
- name: Addresses
item:
- name: Addresses (collection)
id: 3328f4fb-f846-f98a-203c-ac8d5812324e
request:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
- key: Accept
value: application/json
body:
mode: formdata
formdata: []
url: '{{api_url}}/addresses'
description: '<p>Get all addresses associated to the user.</p>
'
urlObject:
path:
- addresses
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: 3328f4fb-f846-f98a-203c-ac8d5812324e
id: a3c86327-0ff0-6bfd-ce8b-aa7a7d3c8780
description: '<p>Routes/endpoints to manage a user''s addresses</p>
'
_postman_id: a3c86327-0ff0-6bfd-ce8b-aa7a7d3c8780
- name: Attribute Types
item:
- name: Fetch Attribute Types (Collection)
id: 16f46f85-2e7d-51b9-7f71-b088ce049940
request:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
- key: Accept
value: application/json
body:
mode: formdata
formdata: []
url: '{{api_url}}/attribute-types'
description: '<p>Get a list of all the attribute types.</p>
'
urlObject:
path:
- attribute-types
host:
- '{{api_url}}'
query: []
variable: []
response:
- id: cad59249-1a61-9e5c-dd36-e6569930158b
name: attribute type collection
originalRequest:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
type: text
enabled: true
disabled: false
- key: Accept
value: application/json
type: text
enabled: true
disabled: false
body:
mode: formdata
formdata: []
url: '{{api_url}}/attribute-types'
status: OK
code: 200
_postman_previewlanguage: json
header:
- key: Connection
value: keep-alive
name: Connection
description: ''
- key: Content-Type
value: application/hal+json
name: Content-Type
description: ''
- key: Date
value: Wed, 29 Mar 2017 04:35:50 GMT
name: Date
description: ''
- key: Server
value: nginx/1.10.0 (Ubuntu)
name: Server
description: ''
- key: Transfer-Encoding
value: chunked
name: Transfer-Encoding
description: ''
cookie: []
responseTime: '705'
body: '{"count":6,"total":6,"collectionTotal":6,"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types?page=1"},"first":{"href":"http:\/\/api.havenly.local\/attribute-types"},"last":{"href":"http:\/\/api.havenly.local\/attribute-types?page=1"}},"_embedded":{"attribute_type":[{"id":1,"title":"color","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/1"}}},{"id":2,"title":"material","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/2"}}},{"id":3,"title":"dimensions","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/3"}}},{"id":4,"title":"pattern","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/4"}}},{"id":5,"title":"size","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/5"}}},{"id":6,"title":"weight","created":null,"modified":null,"attributes":{},"_links":{"self":{"href":"http:\/\/api.havenly.local\/attribute-types\/6"}}}]},"page_count":1,"page_size":25,"total_items":6,"page":1}'
_postman_id: 16f46f85-2e7d-51b9-7f71-b088ce049940
id: a920b486-1d89-464c-2f79-2852ebe04597
_postman_id: a920b486-1d89-464c-2f79-2852ebe04597
description: ''
- name: Board Feedback
item:
- name: Board Feedback (collection)
event:
- listen: test
script:
type: text/javascript
exec:
- tests["Status code is 200"] = responseCode.code === 200;
id: 4e3f0795-9e0e-8bcc-df8c-0d00ae25a3e1
request:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
- key: Accept
value: application/json
body:
mode: formdata
formdata:
- key: grant_type
value: password
type: text
- key: username
value: '{{username}}'
type: text
- key: password
value: testtest
type: text
- key: client_id
value: postman
type: text
url: '{{api_url}}/board-feedback'
description: '<p>Get all board feedback for the authed user.</p>
'
urlObject:
path:
- board-feedback
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: 4e3f0795-9e0e-8bcc-df8c-0d00ae25a3e1
- name: Create Board Feedback
event:
- listen: test
script:
type: text/javascript
exec:
- tests["Status code is 200"] = responseCode.code === 200;
id: a2b3e348-1e22-ed0e-2b2e-b7e1883bdea3
request:
method: POST
header:
- key: Authorization
value: Bearer {{token}}
- key: Content-Type
value: application/json
- key: Accept
value: application/json
body:
mode: raw
raw: "{\n \"board\": 123456789,\n \"question\": 123,\n \"answer\": \"New answer and questionboard combo (not really)\"\
\n}"
url: '{{api_url}}/board-feedback'
description: '<p>Create a piece of board feedback</p>
'
urlObject:
path:
- board-feedback
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: a2b3e348-1e22-ed0e-2b2e-b7e1883bdea3
- name: Board Feedback By ID
event:
- listen: test
script:
type: text/javascript
exec:
- tests["Status code is 200"] = responseCode.code === 200;
id: d94edcdf-dc2d-f20f-b482-b49e381593cb
request:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
- key: Content-Type
value: application/json
- key: Accept
value: application/json
body:
mode: formdata
formdata:
- key: grant_type
value: password
type: text
- key: username
value: '{{username}}'
type: text
- key: password
value: testtest
type: text
- key: client_id
value: postman
type: text
url: '{{api_url}}/board-feedback/123456789'
description: '<p>Get a single entity of board feedback by ID.</p>
'
urlObject:
path:
- board-feedback
- '123456789'
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: d94edcdf-dc2d-f20f-b482-b49e381593cb
- name: Remove a piece of board feedback
id: 5e6187a4-a022-53c3-2580-46c405a35318
request:
method: DELETE
header:
- key: Authorization
value: Bearer {{token}}
- key: Content-Type
value: application/json
- key: Accept
value: application/json
body:
mode: formdata
formdata: []
url: '{{api_url}}/board-feedback/1'
description: '<p>This deletes board feedback by ID.</p>
'
urlObject:
path:
- board-feedback
- '1'
host:
- '{{api_url}}'
query: []
variable: []
response: []
_postman_id: 5e6187a4-a022-53c3-2580-46c405a35318
id: 6fc28b00-b95d-0aea-8e54-2ad35bbb79b7
description: '<p>Board feedback is what we use to gauge how well a designer did on an idea for a user. The routes contained
here are for managing board feedback</p>
'
_postman_id: 6fc28b00-b95d-0aea-8e54-2ad35bbb79b7
- name: Board Feedback Questions
item:
- name: Board Feedback Questions (collection)
event:
- listen: test
script:
type: text/javascript
exec:
- var jsonData = JSON.parse(responseBody);
- tests["Has Bearer Token"] = jsonData.token_type === 'Bearer';
- ''
- postman.setEnvironmentVariable("token", jsonData.access_token);
id: 8a71ce61-211c-1768-8447-b7434fb37570
request:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
- key: Content-Type
value: application/json
- key: Accept
value: application/json
body:
mode: formdata
formdata:
- key: grant_type
value: password
type: text
- key: username
value: '{{username}}'
type: text
- key: password
value: testtest
type: text
- key: client_id
value: postman
type: text
url: '{{api_url}}/board-feedback-questions'
description: '<p>Get all board feedback questions</p>
'
urlObject:
path:
- board-feedback-questions
host:
- '{{api_url}}'
query: []
variable: []
response:
- id: 6e5e6d5c-377d-a2ad-d362-19206cdf289b
name: board feedback questions collection
originalRequest:
method: GET
header:
- key: Authorization
value: Bearer {{token}}
enabled: true
disabled: false
- key: Content-Type
value: application/json
enabled: true
description: The mime type of this content
disabled: false
- key: Accept
value: application/json
enabled: true
disabled: false
body:
mode: formdata
formdata:
- key: grant_type
value: password
type: text
- key: username
value: '{{username}}'
type: text
- key: password
value: testtest
type: text
- key: client_id
value: postman
type: text
url: '{{api_url}}/board-feedback-questions'
status: OK
code: 200
_postman_previewlanguage: json
header:
- key: Connection
value: keep-alive
name: Connection
description: ''
- key: Content-Type
value: application/hal+json
name: Content-Type
description: ''
- key: Date
value: Wed, 29 Mar 2017 04:30:21 GMT
name: Date
description: ''
- key: Server
value: nginx/1.10.0 (Ubuntu)
name: Server
description: ''
- key: Transfer-Encoding
value: chunked
name: Transfer-Encoding
description: ''
cookie: []
responseTime: '486'
body: '{"count":20,"total":20,"collectionTotal":20,"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions?page=1"},"first":{"href":"http:\/\/api.havenly.local\/board-feedback-questions"},"last":{"href":"http:\/\/api.havenly.local\/board-feedback-questions?page=1"}},"_embedded":{"board_feedback_questions":[{"id":1,"title":"Low
quality items","question":"Which items appear to be low quality?","placeholder":"For example: \u0022Some of these
pieces look cheap to me. The rug looks like it won\u0027t last - too thin.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/1"}}},{"id":2,"title":"Don\u0027t
love the colors","question":"How can we improve the color scheme?","placeholder":"For example: \u0022This is way too
dark and gray. I want neutrals but I want brighter and lighter neutrals like whites.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/2"}}},{"id":3,"title":"Not
my style","question":"How can we get closer to your style?","placeholder":"For example: \u0022This is way too bohemian
and eclectic for me. I want it to be modern with a few fun, eclectic accents.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/3"}}},{"id":4,"title":"Underwhelming","question":"What
feels underwhelming to you?","placeholder":"For example: \u0022The sofa and pillows do not excite me. They feels way
too safe and plain. I want them to make a statement.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/4"}}},{"id":5,"title":"Core
pieces are missing","question":"Which pieces are missing from this design?","placeholder":"For example: \u0022I mentioned
I need curtains. I don\u0027t see those in the design.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/5"}}},{"id":6,"title":"Out
of my price range","question":"What\u0027s out of your price range?","placeholder":"For example: \u0022I would never
pay that much for a lamp. Please show me less expensive options.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/6"}}},{"id":7,"title":"The
vibe is off","question":"How can we improve the vibe?","placeholder":"For example: \u0022This feels too casual. I
want a room that is more tailored and sophisticated.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/7"}}},{"id":8,"title":"Not
practical for my lifestyle","question":"How can we better design for your lifestyle?","placeholder":"For example:
\u0022I have a dog and 2 kids. That gets messy! A white sofa is not functional for my lifestyle.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/8"}}},{"id":9,"title":"Scale
is off","question":"Which items look out of scale?","placeholder":"For example: \u0022My room is tiny, so this will
not work in my space. There is no way that table will fit in the corner.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/9"}}},{"id":10,"title":"Don\u0027t
love the layout","question":"What layout is ideal for you?","placeholder":"For example: \u0022I prefer my bed by the
window. I\u0027ve tried this layout and it doesn\u0027t work.\u0022","isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/10"}}},{"id":11,"title":"Love
the colors","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/11"}}},{"id":12,"title":"Good
quality","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/12"}}},{"id":13,"title":"The
vibe is right","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/13"}}},{"id":14,"title":"Matches
my style","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/14"}}},{"id":15,"title":"Price
is on point","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":15,"name":"Final
Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/15"}}},{"id":1,"name":"Concept","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/1"}}},{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/15"}}},{"id":16,"title":"Layout
looks right","question":null,"placeholder":null,"isPositive":true,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"id":3,"name":"Final
Design","_links":{"self":{"href":"http:\/\/api.havenly.local\/board-types\/3"}}}]},"_links":{"self":{"href":"http:\/\/api.havenly.local\/board-feedback-questions\/16"}}},{"id":17,"title":null,"question":"How
else can we improve this concept?","placeholder":null,"isPositive":false,"created":null,"modified":null,"type":null,"_embedded":{"boardTypes":[{"
# --- truncated at 32 KB (124 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/havenly/refs/heads/main/apis.yml