Imoblist API

Descubra o poder e as funcionalidades do nosso ecossitema imobiliário!

Documentação

Descubra o poder da API da Imoblist

Seja bem-vindo à API da Imoblist, o portal definitivo para acessar recursos e funcionalidades incríveis do nosso ecossistema imobiliário. Com nossa API, você terá acesso a um conjunto abrangente de recursos projetados para tornar a integração com a nossa plataforma e o gerenciamento de dados mais fácil e eficiente.

Nossa API é baseada no padrão RESTful, uma abordagem amplamente adotada para o desenvolvimento de APIs. No entanto, aqui na Imoblist, implementamos uma variante exclusiva chamada BREAD (Browse, Read, Edit, Add, Delete), que simplifica ainda mais o gerenciamento dos dados. O BREAD oferece uma abordagem intuitiva e poderosa para navegar, visualizar, editar, adicionar e deletar dados, proporcionando uma experiência única de interação com a nossa plataforma.

Para começar a aproveitar todo o potencial da nossa API, você precisará obter um token de validação. Aqui, valorizamos a segurança e, por isso, o token é fornecido exclusivamente pela nossa equipe, sob demanda do cliente. Além disso, para garantir uma camada adicional de segurança, algumas rotas da API requerem autenticação do usuário, que é realizada por meio desta API para permitir o acesso a rotas mais sensíveis.

Estamos empenhados em fornecer a você uma experiência API de alto nível, combinando a segurança e a eficiência que você espera da Imoblist. Com nossa API, você poderá criar integrações poderosas entre a sua aplicação e a nossa plataforma, automatizar processos e enriquecer sua experiência imobiliária online.

Abra as portas para um mundo de possibilidades com a API da Imoblist. Explore, inove e transforme sua aplicação em uma poderosa ferramenta imobiliária com a nossa API. Conecte-se ao nosso portal imobiliário e descubra todas as vantagens de integração disponíveis para impulsionar seu negócio. Nossa API permite que você se conecte com facilidade a outros sistemas, CRMs e portais, seja para obter imóveis de nossos clientes ou gerenciar leads, anúncios e outras parcerias estratégicas. Como atendemos exclusivamente imobiliárias, corretores e parceiros selecionados, nossa estrutura foi projetada para simplificar a comunicação entre nossos clientes e seus clientes finais. Desfrute da facilidade de integração com nossa plataforma e ofereça uma experiência imobiliária excepcional aos seus usuários.

Rotas

A API da Imoblist oferece um conjunto abrangente de rotas para acesso e gerenciamento de recursos imobiliários. Segue abaixo a estrutura do roteamento da API:

https://app.imoblist.com/{action}/{method}/{token}

Aqui está o significado de cada parâmetro:

  • ACTION: indica a entidade ou funcionalidade desejada, como por exemplo: Realestate, Lead, Account, entre outras disponíveis.
  • METHOD: representa o tipo de operação a ser realizada: Browse, Read, Edit, Add e Delete.
  • TOKEN: o token de validação necessário para acessar a API e garantir a segurança dos dados.

Na Imoblist, personalizamos o token de acesso para cada cliente, permitindo um controle granular sobre as ações e métodos disponíveis, garantindo assim uma API segura e confiável.

Com as rotas da API, você poderá obter imóveis, gerenciar leads, realizar ações específicas de acordo com a entidade desejada e muito mais. Explore as possibilidades e integre seu sistema com facilidade através da nossa API.

A API pode responder com diferentes códigos de status HTTP para indicar o resultado da solicitação. Abaixo está uma tabela com os códigos de status mais comuns e suas descrições:

Código Descrição
200 OK - A solicitação foi bem-sucedida.
201 Criado - O registro foi criado com sucesso.
204 Sem Conteúdo - A solicitação foi processada com sucesso, mas não há conteúdo para retornar.
400 Solicitação Inválida - A solicitação possui parâmetros inválidos ou está faltando informações obrigatórias.
401 Não Autorizado - A solicitação requer autenticação ou as credenciais fornecidas são inválidas.
403 Acesso Negado - A solicitação foi proibida por motivos de permissão ou autorização.
404 Não Encontrado - O recurso solicitado não foi encontrado.
500 Erro Interno do Servidor - Ocorreu um erro inesperado no servidor.

A API utilizará o código de status apropriado para cada resposta, fornecendo informações sobre o resultado da solicitação.

Token

A segurança é uma prioridade para nós, e para garantir um acesso controlado aos recursos da API, utilizamos tokens de validação. Um token é um código exclusivo gerado pela nossa equipe, que permite validar e autorizar as requisições feitas à API.

Para garantir a segurança das suas solicitações, é necessário incluir o token de validação em todas as requisições feitas à API. Isso permite que nosso sistema verifique a autenticidade da requisição e conceda ou negue o acesso aos recursos solicitados.

Além disso, todas as requisições feitas com o token são registradas em nosso sistema de logs. Esse registro detalhado das solicitações nos permite monitorar e analisar o uso da API, garantindo uma maior segurança e transparência. Esses logs também fornecem informações valiosas que nos auxilia em análises e tomadas de decisões estratégicas baseadas nos dados das consultas realizadas em nossa API.

Autenticação

Para acessar as rotas restritas, é necessário realizar um POST em /auth/login, enviando um payload JSON contendo o telefone ou email e a senha de acesso para autenticação. Além disso, é imprescindível incluir o token de validação url e na header o token de autenticação como "Bearer token".

  • POST /auth/login
    Payload JSON:
    
        {
            "email": "example@example.com",
            "phone": "1234567890",
            "password": "mypassword"
        }

Em caso de sucesso, a API retornará uma resposta JSON com a chave "success" definida como true e a mensagem de sucesso. Em caso de erro, a API retornará uma resposta JSON com a chave "success" definida como false e a mensagem de erro correspondente.

Exemplo de resposta de sucesso:

    {
        "success": true,
        "message": "Authentication successful.",
        "data": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    }

Exemplo de resposta de erro:

    {
        "success": false,
        "error": [
            "O campo email é obrigatório quando telefone não está presente.",
            "O campo telefone é obrigatório quando email não está presente.",
            "O campo telefone deve ser um número de telefone válido.",
            "O campo email deve ser um endereço de e-mail válido.",
        ]
    }
    {
        "success": false,
        "error": "These credentials do not match our records."
    }

Filtros

É possível filtrar os registros da API usando filtros personalizados. Você pode enviar os filtros através de uma requisição GET ou POST com um payload JSON.

Aqui está um exemplo de como você pode formatar o JSON para enviar os filtros:

  • GET/POST
    Payload JSON:
    
        {
            "campo1": "valor1",
            "campo2": {
                "clause": "orWhere",
                "operator": "=",
                "value": "valor2"
            },
            "campo3": {
                "clause": "whereBetween",
                "value": ["2023-01-01", "2023-12-31"]
            },
            "campo4": {
                "clause": "whereIn",
                "value": [1, 2, 3]
            },
            "relacionamento.campo1": "valor1",
            "relacionamento.campo2": {
                "clause": "where",
                "operator": "like",
                "value": "valor2"
            }
        }

Quando nenhum clause for informado, o valor padrão é where. Isso significa que o filtro será aplicado como uma cláusula "where" na consulta.

Quando nenhum operator for informado, o valor padrão é =. Isso significa que o filtro será aplicado como uma comparação de igualdade na consulta.

As seguintes cláusulas podem ser usadas para filtrar os registros:

  • where Filtra registros com base em uma condição.
  • orWhere Filtra registros com base em uma condição alternativa.
  • whereIn Filtra registros onde um campo está contido em um conjunto de valores.
  • whereNotIn Filtra registros onde um campo não está contido em um conjunto de valores.
  • whereNull Filtra registros onde um campo é nulo.
  • whereNotNull Filtra registros onde um campo não é nulo.
  • whereBetween Filtra registros onde um campo está dentro de um intervalo específico.
  • whereNotBetween Filtra registros onde um campo está fora de um intervalo específico.

Os seguintes operadores podem ser usados para compor as condições dos filtros:

  • = Igual a um valor.
  • != Diferente de um valor.
  • < Menor que um valor.
  • > Maior que um valor.
  • <= Menor ou igual a um valor.
  • >= Maior ou igual a um valor.
  • like Correspondência de padrão.
  • not like Não corresponde a um padrão.
  • in Está contido em um conjunto de valores.
  • not in Não está contido em um conjunto de valores.
  • between Está dentro de um intervalo específico.
  • not between Não está dentro de um intervalo específico.

Ordenação

Além dos filtros, você também pode especificar a ordenação dos resultados. Para isso, você pode incluir o parâmetro order na sua solicitação GET. O parâmetro order pode ter dois formatos:

  • Formato 1: Como uma string que representa o nome da coluna a ser ordenada. Por exemplo, order=name.
  • Formato 2: Como um array de objetos que contêm o campo field (nome da coluna) e opcionalmente o campo direction (direção da ordenação). Por exemplo: order[0][field]=name&order[0][direction]=asc&order[1][field]=age&order[1][direction]=desc.

Caso você não especifique a direção da ordenação, o padrão será asc. O resultado será retornado ordenado de acordo com os critérios definidos.

Exemplo de requisição GET com ordenação:

GET /realestate/browse/TOKEN?order=name&direction=desc

Exemplo de requisição GET com ordenação em formato de array:

GET /realestate/browse/TOKEN?order[0][field]=name&order[0][direction]=asc&order[1][field]=age&order[1][direction]=desc

Observe que você pode incluir múltiplos critérios de ordenação, fornecendo vários objetos no array order.

É importante ressaltar que a ordenação só está disponível no método Navegar.

Método: Navegar

Por meio do recurso de navegação (Browse), você pode obter resultados paginados com base nos filtros personalizados aplicados à consulta. Este recurso permite explorar a API de forma flexível e receber apenas os dados relevantes.

Para utilizar a funcionalidade de navegação, você deve fazer uma solicitação GET para a rota desejada, passando os filtros e parâmetros necessários. Os filtros devem ser informados como discutido anteriormente, e você também pode adicionar os seguintes parâmetros:

  • page: Utilizado para informar o número da página desejada. O padrão é a página 1.
  • per_page: Utilizado para definir a quantidade de registros por página. O padrão é 15 registros, e o máximo é 50 registros.

A API retornará os resultados correspondentes aos filtros aplicados, de acordo com a página solicitada e a quantidade de registros por página definida. O resultado será retornado no formato paginado para facilitar a navegação e a obtenção dos dados.

Exemplo de requisição GET para navegar pelos resultados:

GET /realestate/browse/TOKEN?page=2&per_page=20

Exemplo de resposta paginada:

    {
        "success": true,
        "message": "Query performed succesfully.",
        "data": {
            "current_page": 2,
            "data": [
                // Dados da página 2
            ],
            "first_page_url": "http://api.exemplo.com/.../TOKEN?page=1",
            "from": 21,
            "last_page": 5,
            "last_page_url": "http://api.exemplo.com/.../TOKEN?page=5",
            "next_page_url": "http://api.exemplo.com/.../TOKEN?page=3",
            "path": "http://api.exemplo.com/.../TOKEN",
            "per_page": 20,
            "prev_page_url": "http://api.exemplo.com/.../TOKEN?page=1",
            "to": 40,
            "total": 100
        }

    }

A resposta paginada inclui informações sobre a página atual, os dados retornados, links para a primeira página, a última página, a próxima página e a página anterior, além de informações sobre a quantidade total de registros e a quantidade de registros exibidos por página.

Método: Ler

Por meio da operação de leitura (Read), você pode obter um único resultado com base no ID ou UUID do registro. Essa operação permite recuperar informações específicas da API, aplicando filtros se necessário.

Você pode fazer uma solicitação GET ou POST para a rota desejada, passando o ID ou UUID do registro como parâmetro obrigatório. Além disso, você pode adicionar filtros opcionais para refinar a consulta.

A API retornará o resultado correspondente ao ID ou UUID fornecido, juntamente com as informações solicitadas. Certifique-se de fornecer o ID ou UUID correto para obter os dados desejados.

Exemplo de requisição GET para ler um registro:

  • GET /realestate/read/TOKEN?id=12345

Exemplo de requisição POST para ler um registro:

  • POST /realestate/read/TOKEN
  • Payload JSON:
    
        {
            "id": "12345"
        }

Exemplo de resposta:

    {
        "success": true,
        "message": "Query performed succesfully.",
        "data": {
            // Dados do registro com o ID fornecido
        }
    }

Exemplo de resposta de erro:

    {
        "success": false,
        "error": [
            "O campo id é obrigatório."
        ]
    }
    {
        "success": false,
        "error": "This method only accepts GET and POST."
    }

Método: Editar

O recurso de edição (Edit) permite modificar um registro existente na API com base no seu ID ou UUID. Com essa funcionalidade, você pode atualizar as informações dos registros de forma simples e eficiente.

Para realizar uma operação de edição, você deve fazer uma solicitação PUT para a rota desejada, fornecendo o ID ou UUID do registro como parâmetro obrigatório. Além disso, outros parâmetros podem ser obrigatórios, dependendo das regras específicas de cada ação de edição.

Certifique-se de fornecer os dados corretos e válidos para a atualização do registro desejado. Os campos e valores esperados podem variar de acordo com a estrutura de dados e as regras de validação da API.

Exemplo de requisição PUT para editar um registro:

  • PUT /realestate/edit/TOKEN
  • Payload JSON:
    
        {
            "id": "12345",
            // Outros parâmetros obrigatórios para a edição
        }

Exemplo de resposta:

    {
        "success": true,
        "message": "Record updated successfully."
    }

Exemplo de resposta de erro:

    {
        "success": false,
        "error": [
            "O campo id é obrigatório.",
            "O campo email é obrigatório.",
            "O campo telefone é obrigatório."
        ]
    }
    {
        "success": false,
        "error": "This method only accepts PUT."
    }

Método: Adicionar

O recurso de adicionar (Add) permite inserir um novo registro na API. Com essa funcionalidade, você pode criar novos registros com os dados desejados, seguindo as regras e estrutura de dados da API.

Para adicionar um novo registro, você deve fazer uma solicitação POST para a rota desejada, fornecendo os parâmetros necessários para a criação do registro. As regras específicas de cada ação podem variar, exigindo parâmetros obrigatórios específicos.

Certifique-se de fornecer os dados corretos e válidos para a criação do registro desejado. Os campos e valores esperados podem variar de acordo com a estrutura de dados e as regras de validação da API.

Exemplo de requisição POST para adicionar um registro:

  • POST /realestate/add/TOKEN
  • Payload JSON:
    
        {
            "email": "example@example.com",
            // Outros parâmetros obrigatórios para a adição do registro
        }

Exemplo de resposta:

    {
        "success": true,
        "message": "Record added successfully."
    }

Exemplo de resposta de erro:

    {
        "success": false,
        "error": [
            "O campo email é obrigatório.",
            "O campo telefone é obrigatório."
        ]
    }
    {
        "success": false,
        "error": "This method only accepts POST."
    }

Método: Deletar

O método de deleção permite remover um registro específico da API. Para utilizar esse método, você deve fazer uma solicitação DELETE para a rota desejada, informando o parâmetro obrigatório id ou uuid que identifica o registro a ser excluído.

É importante ressaltar que a API utiliza a funcionalidade de "soft deletes", ou seja, quando você solicita a exclusão de um registro, ele é movido para uma lixeira virtual. Se você solicitar novamente a exclusão do mesmo registro, ele será permanentemente removido ("force delete").

Exemplo de requisição DELETE para deletar um registro:

  • DELETE /realestate/delete/TOKEN?id=12345

Ao fazer a solicitação de exclusão, certifique-se de fornecer o TOKEN adequado para autenticação ou autorização. Além disso, substitua o valor 12345 pelo ID ou UUID do registro que você deseja excluir.

A resposta da API será um objeto JSON indicando o resultado da operação de deleção. Verifique a resposta para garantir que o registro tenha sido excluído com sucesso.

Exemplo de resposta:

    {
        "success": true,
        "message": "Record deleted succesfully."
    }

Exemplo de resposta de erro:

    {
        "success": false,
        "error": [
            "O campo id é obrigatório."
        ]
    }
    {
        "success": false,
        "error": "This method only accepts DELETE."
    }

Ação: Imóveis

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Requisição publicas:

  • GET /realestate/browse/TOKEN
  • GET/POST /realestate/read/TOKEN?uuid=abc123

Requisição autenticadas:

  • PUT /realestate/edit/TOKEN?uuid=abc123
  • POST /realestate/add/TOKEN
  • DELETE /realestate/delete/TOKEN?uuid=abc123
Parâmetro Tipo Obrigatório Anotações
uuid string read / edit / delete
listing_code string
for_sale boolean edit / add
for_rent boolean edit / add
for_season boolean edit / add
status enum opções: published, unpublished, restricted, downloaded.
period_season enum opções: daily, weekly, monthly, quarterly, yearly.
description string
description_rent string
description_sale string
description_season string
bedrooms integer edit / add
suites integer edit / add
bathrooms integer edit / add
parking_spaces integer edit / add
is_featured integer edit / add
new_development integer edit / add
video_url string
virtual_tour_script string
virtual_tour_url string
exclusivity enum opções: exclusivity, authorization, not_informed.
exclusivity_start datetime
exclusivity_end datetime
situation enum opções: new, used, renovated, off_plan, under_construction, ready_to_move.
face enum opções: east, north, west, south, northeast, northwest, southeast, southwest, not_informed.
construction_year integer
reform_year integer
need_reform boolean edit / add
mcmv boolean edit / add
credit_card_rent boolean edit / add
credit_card_season boolean edit / add
financing boolean edit / add
funded boolean edit / add
electricity_registration string
water_registration string
gas_registration string
street string edit / add
number string
complement string
neighborhood string edit / add
zip_code string edit / add
city string edit / add
state string edit / add
country string edit / add
zoning string
tower string
floor string
door string
lat decimal 00.0
lng decimal 00.0
show_address enum opções: all, city, neighborhood, street, default.
area_private decimal 0.0000
area_useful decimal 0.0000
area_common decimal 0.0000
area_building decimal 0.0000
area_land decimal 0.0000
area_total decimal 0.0000
price_sale decimal 0.00
price_rent decimal 0.00
price_season decimal 0.00
price_tax decimal 0.00
price_condominium decimal 0.00
show_tax enum opções: tax_and_condominium, tax, condominium.
pay_tax enum opções: not_informed, owner, tenant, real_estate_or_agent.
created_at datetime
updated_at datetime
features.id integer edit / add
features.name string edit / add
usagetypes.id integer edit / add
usagetypes.name string edit / add
type.id integer edit / add
type.name string edit / add
subtype.id integer edit / add
subtype.name string edit / add
guarantees.id integer edit / add
guarantee.name string edit / add
condominium.uuid string
condominium.name string
account.uuid string edit / add
account.social_name string
account.creci string

Condomínios

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Requisição publicas:

  • GET /condominium/browse/TOKEN
  • GET/POST /condominium/read/TOKEN?uuid=abc123

Requisição autenticadas:

  • PUT /condominium/edit/TOKEN?uuid=abc123
  • POST /condominium/add/TOKEN
  • DELETE /condominium/delete/TOKEN?uuid=abc123
Parâmetro Tipo Obrigatório Anotações
uuid string read / edit / delete
name string edit / add
description string
built_year datetime
street string edit / add
number string
complement string
neighborhood string edit / add
zip_code string edit / add
city string edit / add
state string edit / add
country string edit / add
lat decimal edit / add 00.0
lng decimal edit / add 00.0
created_at datetime edit / add
updated_at datetime edit / add
features.id integer edit / add
features.name string edit / add

Endereços

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Requisição publicas para paises:

  • GET /get_address_country/browse/TOKEN
  • GET/POST /get_address_country/read/TOKEN?id=123

Requisição publicas para estados:

  • GET /get_address_state/browse/TOKEN
  • GET/POST /get_address_state/read/TOKEN?id=123

Requisição publicas para cidades:

  • GET /get_address_city/browse/TOKEN
  • GET/POST /get_address_city/read/TOKEN?id=123

Requisição publicas para bairros:

  • GET /get_address_neighborhood/browse/TOKEN
  • GET/POST /get_address_neighborhood/read/TOKEN?id=123
Parâmetro Tipo Obrigatório Anotações
id integer read
name string browse / read

Relacionamentos

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Requisição publicas para tipos:

  • GET /get_realestate_type/browse/TOKEN
  • GET/POST /get_realestate_type/read/TOKEN?id=123
  • GET /get_realestate_subtype/browse/TOKEN
  • GET/POST /get_realestate_subtype/read/TOKEN?id=123

Requisição publicas para finalidades:

  • GET /get_realestate_usagetype/browse/TOKEN
  • GET/POST /get_realestate_usagetype/read/TOKEN?id=123

Requisição publicas para garantias:

  • GET /get_realestate_guarantee/browse/TOKEN
  • GET/POST /get_realestate_guarantee/read/TOKEN?id=123

Requisição publicas para comodidades:

  • GET /get_realestate_feature/browse/TOKEN
  • GET/POST /get_realestate_feature/read/TOKEN?id=123
  • GET /get_realestate_feature_group/browse/TOKEN
  • GET/POST /get_realestate_feature_group/read/TOKEN?id=123
Parâmetro Tipo Obrigatório Anotações
id integer read
name string browse / read

Ação: Contas

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Ação: Lead

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Ação: Clientes

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Ação: Usuários

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.