Documentação da API externa

Integre seus sistemas com a API do EasySolar

A integração baseada em chave de API dá a você acesso ao Calendário, Projetos, Clientes e Componentes.
Isso lhe dá flexibilidade para integrar seus sistemas e automatizar processos.

\n\n
\n

Documentação da API Externa

\n
\n

A integração baseada em chave de API dá a você acesso ao Calendário, Projetos, Clientes e Componentes.\nIsso lhe dá flexibilidade para integrar seus sistemas e automatizar processos.

\n
\n
\n

Sumário

\n
    \n
  1. Autenticação
  2. \n
  3. Paginação
  4. \n
  5. API do Calendário
  6. \n
  7. API de Projetos
  8. \n
  9. API de Clientes
  10. \n
  11. API de Componentes
  12. \n
  13. Convenções de Dados
  14. \n
  15. Comportamento de Filtragem
  16. \n
  17. Modelo de Permissões
  18. \n
  19. Tratamento de Erros
  20. \n
  21. Padrões de Integração
  22. \n
  23. Estabilidade e Versionamento
  24. \n
\n
\n

1. Autenticação

\n

Todas as requisições devem incluir uma chave de API no cabeçalho da requisição.

\n
Authorization: Api-Key <raw_api_key>\n
\n

Observações:\n- As chaves de API são criadas e gerenciadas pelos proprietários e administradores da empresa.\n- Cada chave é limitada a permissões específicas de recursos.\n- Todas as requisições são automaticamente limitadas à empresa associada à chave de API.

\n

Erros de Autenticação

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StatusMotivo
401Chave de API ausente ou inválida
401Cabeçalho de autorização malformado
401Chave de API inativa
403Permissão de recurso ausente
402Empresa inativa
\n
\n

2. Paginação

\n

Os endpoints de listagem (Calendário, Projetos, Clientes) usam paginação por limit/offset.

\n

Parâmetros

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParâmetroDescriçãoPadrãoMáx.
limitNúmero de resultados a retornar100500
offsetOffset de paginação0
\n

Envelope da Resposta

\n
{\n  "count": 123,\n  "next": null,\n  "previous": null,\n  "results": []\n}\n
\n

Quando next for null, você chegou à última página.

\n
\n

3. API do Calendário

\n

Representa eventos agendados, como reuniões, ligações e instalações. Somente leitura.

\n

Endpoints

\n
GET https://api-production.easysolar-app.com/integrations/calendar/\nGET https://api-production.easysolar-app.com/integrations/calendar/{id}/\n
\n

Permissão necessária: calendar_read

\n

Exemplo de Resposta

\n
{\n  "id": "7d0f4d55-3b66-4c71-a86d-2b0ef2fca6d5",\n  "category": "meeting",\n  "subject": "Visita inicial ao local",\n  "description": "Discutir os requisitos da instalação e a inspeção do telhado.",\n  "client": {\n    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",\n    "name": "Solar Corp",\n    "address": "Rua Principal 10, Varsóvia",\n    "phone": "+48123456789",\n    "is_open": true\n  },\n  "participants": [\n    {\n      "first_name": "John",\n      "last_name": "Smith",\n      "email": "john.smith@example.com"\n    }\n  ],\n  "start_at": "2026-06-15T09:00:00Z",\n  "end_at": "2026-06-15T10:00:00Z",\n  "full_day": false,\n  "created_at": "2026-06-01T12:30:45Z"\n}\n
\n

Referência dos Campos

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
idUUIDIdentificador do evento
categorystringCategoria do evento (veja os valores abaixo)
subjectstringTítulo do evento
descriptionstringObservações adicionais do evento
clientobject | nullCliente vinculado
participantsarrayColaboradores atribuídos ao evento
start_atdatetimeHorário de início do evento (UTC)
end_atdatetimeHorário de término do evento (UTC)
full_daybooleanSe o evento dura o dia inteiro
created_atdatetimeCarimbo de data/hora de criação do evento
\n

Valores da Categoria

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ValorDescrição
meetingReunião
callLigação telefônica
installationAgendamento de instalação
contractAssinatura do contrato
quotationApresentação da proposta
\n

Objetos Aninhados

\n

Objeto Cliente:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
idUUIDIdentificador do cliente
namestringNome do cliente
addressstringEndereço do cliente
phonestringNúmero de telefone do cliente
is_openbooleanSe o cliente está ativo no momento
\n

Objeto Participante:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
first_namestringNome do colaborador
last_namestringSobrenome do colaborador
emailstringE-mail do colaborador
\n

Filtros

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParâmetroTipoDescrição
start_at_afterdatetimeFiltrar eventos com início após este horário
start_at_beforedatetimeFiltrar eventos com início antes deste horário
end_at_afterdatetimeFiltrar eventos com término após este horário
end_at_beforedatetimeFiltrar eventos com término antes deste horário
categorystring (multi)Filtrar por categoria; repita para vários valores
clientUUIDFiltrar pelo ID do cliente
\n

Exemplo:

\n
GET https://api-production.easysolar-app.com/integrations/calendar/?start_at_after=2026-01-01T00:00:00Z&category=meeting&category=call\nAuthorization: Api-Key <key>\n
\n
\n

4. API de Projetos

\n

Representa registros de projetos relacionados ao cliente (por exemplo, instalações fotovoltaicas). Somente leitura.

\n

Endpoints

\n
GET https://api-production.easysolar-app.com/integrations/projects/\nGET https://api-production.easysolar-app.com/integrations/projects/{id}/\n
\n

Permissão necessária: projects_read

\n

Exemplo de Resposta

\n
{\n  "id": "d8e22cb9-1d88-4a3d-a3fd-f954d1f23d59",\n  "name": "Instalação fotovoltaica - Escritório de Varsóvia",\n  "address": "Aleje Jerozolimskie 120, Varsóvia",\n  "latitude": 52.2297,\n  "longitude": 21.0122,\n  "client": {\n    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",\n    "name": "Solar Corp",\n    "address": "Rua Principal 10, Varsóvia",\n    "phone": "+48123456789",\n    "is_open": true\n  },\n  "status": {\n    "name": "Em andamento",\n    "order": 2\n  },\n  "currency": {\n    "code": "PLN",\n    "name": "zloty polonês"\n  },\n  "total_price": "42500.00",\n  "payback_period": 8,\n  "created": "2026-05-01T09:00:00Z",\n  "updated": "2026-06-01T15:30:00Z"\n}\n
\n

Referência dos Campos

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
idUUIDIdentificador do projeto
namestringNome do projeto
addressstringEndereço do projeto
latitudedecimal | nullLatitude do projeto
longitudedecimal | nullLongitude do projeto
clientobjectCliente vinculado (veja o objeto Cliente)
statusobjectStatus do projeto
currencyobjectMoeda usada nos valores financeiros
total_pricedecimal stringPreço total atual do projeto
payback_periodinteger | nullPeríodo estimado de retorno em anos
createddatetimeCarimbo de data/hora de criação
updateddatetimeCarimbo de data/hora da última atualização
\n
\n

total_price é retornado como string decimal para preservar a precisão. payback_period é null se ainda não tiver sido calculado. latitude/longitude são null se nenhuma localização estiver definida.

\n
\n

Objetos Aninhados

\n

Objeto Status:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
namestringNome exibido do status
orderintegerValor de ordenação do status
\n

Objeto Moeda:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
codestringCódigo ISO da moeda
namestringNome da moeda
\n

Filtros

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParâmetroTipoDescrição
created_afterdatetimeFiltrar pela data de criação (limite inferior)
created_beforedatetimeFiltrar pela data de criação (limite superior)
updated_afterdatetimeFiltrar pela data de atualização (limite inferior)
updated_beforedatetimeFiltrar pela data de atualização (limite superior)
clientUUIDFiltrar pelo ID do cliente
statusUUIDFiltrar pelo ID do status
namestringCorrespondência parcial de nome sem diferenciar maiúsculas/minúsculas
\n

Exemplo:

\n
GET https://api-production.easysolar-app.com/integrations/projects/?client=<id>&name=solar\nAuthorization: Api-Key <key>\n
\n
\n

5. API de Clientes

\n

Representa entidades de clientes. Suporta operações de leitura e gravação.

\n

Endpoints

\n
GET    https://api-production.easysolar-app.com/integrations/clients/\nPOST   https://api-production.easysolar-app.com/integrations/clients/\nGET    https://api-production.easysolar-app.com/integrations/clients/{id}/\nPATCH  https://api-production.easysolar-app.com/integrations/clients/{id}/\n
\n

Permissões necessárias: clients_read (leitura), clients_write (gravação)

\n

Exemplo de Resposta

\n
{\n  "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",\n  "name": "Solar Corp",\n  "description": "Cliente comercial interessado em uma instalação fotovoltaica em telhado.",\n  "address": "Rua Principal 10, Varsóvia",\n  "latitude": 52.2297,\n  "longitude": 21.0122,\n  "phone": "+48123456789",\n  "is_open": true,\n  "created": "2026-05-01T10:15:00Z",\n  "updated": "2026-06-01T08:45:30Z"\n}\n
\n

Referência dos Campos

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoDescrição
idUUIDIdentificador do cliente
namestringNome do cliente
descriptionstringObservações adicionais
addressstringEndereço do cliente
latitudedecimal | nullLatitude do cliente
longitudedecimal | nullLongitude do cliente
phonestring | nullNúmero de telefone do cliente
is_openbooleanSe o cliente está ativo no momento
createddatetimeCarimbo de data/hora de criação
updateddatetimeCarimbo de data/hora da última atualização
\n

Criar Cliente

\n
POST https://api-production.easysolar-app.com/integrations/clients/\n
\n
{\n  "name": "Nome do cliente",\n  "description": "Cliente comercial",\n  "address": "Endereço",\n  "phone": "+48123456789",\n  "latitude": 52.2297,\n  "longitude": 21.0122\n}\n
\n

Atualizar Cliente

\n
PATCH https://api-production.easysolar-app.com/integrations/clients/{id}/\n
\n

Inclua apenas os campos que você deseja atualizar:

\n
{\n  "address": "Novo endereço 15, Varsóvia",\n  "phone": "+48987654321"\n}\n
\n

Regras de Coordenadas

\n
    \n
  • latitude e longitude devem sempre ser informados juntos.
  • \n
  • Informar apenas uma coordenada resulta em um erro de validação.
  • \n
  • Se nenhuma localização estiver definida, ambos os campos são retornados como null.
  • \n
\n

Filtros

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParâmetroTipoDescrição
created_afterdatetimeFiltrar pela data de criação (limite inferior)
created_beforedatetimeFiltrar pela data de criação (limite superior)
updated_afterdatetimeFiltrar pela data de atualização (limite inferior)
updated_beforedatetimeFiltrar pela data de atualização (limite superior)
is_openbooleanFiltrar pelo status ativo (true ou false)
namestringCorrespondência parcial de nome sem diferenciar maiúsculas/minúsculas
phonestringCorrespondência parcial de telefone sem diferenciar maiúsculas/minúsculas
\n
\n

6. API de Componentes

\n

Cria componentes para uso em projetos. Somente gravação.

\n

Endpoint

\n
POST https://api-production.easysolar-app.com/integrations/components/\n
\n

Permissão necessária: components_write

\n

Tipos de Componentes

\n

São suportados três tipos de componentes: panel, inverter e other.

\n
\n

Módulo Fotovoltaico

\n
{\n  "type": "panel",\n  "manufacturer_name": "Longi",\n  "name": "LR5-54HPH",\n  "net_unit_price": "120.00",\n  "nominal_power": "430.000",\n  "length": "1.7220",\n  "width": "1.1340",\n  "weight": "21.500",\n  "efficiency": "0.2100000",\n  "short_circuit_current": "13.52000",\n  "open_circuit_voltage": "37.85000",\n  "current_temperature_coefficient": "0.045000",\n  "voltage_temperature_coefficient": "-0.280000",\n  "power_temperature_coefficient": "-0.350000"\n}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoObrigatórioDescrição
typestringSimDeve ser "panel"
manufacturer_namestringSimNome do fabricante
namestringSimNome do modelo do módulo fotovoltaico
net_unit_pricedecimalNãoPreço unitário líquido
nominal_powerdecimalSimPotência nominal (W)
lengthdecimalSimComprimento do módulo fotovoltaico (m)
widthdecimalSimLargura do módulo fotovoltaico (m)
weightdecimal | nullNãoPeso (kg)
efficiencydecimalSimEficiência de conversão
short_circuit_currentdecimalSimCorrente de curto-circuito (A)
open_circuit_voltagedecimalSimTensão de circuito aberto (V)
current_temperature_coefficientdecimal | nullNãoCoeficiente de temperatura da corrente
voltage_temperature_coefficientdecimal | nullNãoCoeficiente de temperatura da tensão
power_temperature_coefficientdecimal | nullNãoCoeficiente de temperatura da potência
\n
\n

Inversor

\n
{\n  "type": "inverter",\n  "manufacturer_name": "SMA",\n  "name": "Sunny Tripower 5.0",\n  "net_unit_price": "900.00",\n  "nominal_power": "5000.000",\n  "number_of_dc_inputs": 2\n}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoObrigatórioDescrição
typestringSimDeve ser "inverter"
manufacturer_namestringSimNome do fabricante
namestringSimNome do modelo do inversor
net_unit_pricedecimalNãoPreço unitário líquido
nominal_powerdecimalSimPotência nominal (W)
number_of_dc_inputsintegerSimNúmero de entradas CC
\n
\n

Outro

\n
{\n  "type": "other",\n  "name": "Estrutura de fixação",\n  "unit": "pcs",\n  "net_unit_price": "50.00"\n}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CampoTipoObrigatórioDescrição
typestringSimDeve ser "other"
namestringSimNome do componente
unitstringNãoUnidade de medida
net_unit_pricedecimalNãoPreço unitário líquido
\n

Resposta

\n
{\n  "id": "uuid",\n  "type": "panel | inverter | other",\n  "name": "string"\n}\n
\n

Observações

\n
    \n
  • Os fabricantes são criados automaticamente se não existirem.
  • \n
  • O nome do fabricante é único por empresa.
  • \n
  • Todos os campos específicos do módulo fotovoltaico são validados antes da criação.
  • \n
\n
\n

7. Convenções de Dados

\n

IDs

\n

Todos os identificadores de recurso são strings UUID, estáveis e globalmente únicos dentro de uma empresa:

\n
"id": "550e8400-e29b-41d4-a716-446655440000"\n
\n

Carimbos de Data/Hora

\n

Todos os campos datetime são retornados no formato ISO 8601, sempre em UTC:

\n
"created": "2026-06-09T12:34:56Z"\n
\n

Geolocalização

\n

As coordenadas se aplicam a Clientes e Projetos. Elas são armazenadas como um ponto geográfico e retornadas em campos separados:

\n
"latitude": 52.2297,\n"longitude": 21.0122\n
\n

Tratamento de null

\n

Campos que não estão definidos são retornados como null — eles nunca são omitidos da resposta.

\n
\n

8. Comportamento de Filtragem

\n

Regras Gerais

\n
    \n
  • Todos os filtros são opcionais, salvo indicação em contrário.
  • \n
  • Vários filtros são combinados com lógica AND.
  • \n
  • Valores de filtro com múltipla seleção (por exemplo, category) usam lógica OR internamente.
  • \n
  • Valores de filtro inválidos retornam resultados vazios ou um erro de validação, dependendo do tipo do campo.
  • \n
\n

Filtros de Intervalo de Datas

\n

Disponíveis em todos os endpoints:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Campos do filtroComportamento
created_after / created_beforeFiltro de intervalo no carimbo de data/hora de criação
updated_after / updated_beforeFiltro de intervalo no carimbo de data/hora da última atualização
start_at_after / start_at_beforeFiltro de intervalo no horário de início do evento
end_at_after / end_at_beforeFiltro de intervalo no horário de término do evento
\n

Filtros de Busca Textual

\n

Correspondência parcial sem diferenciar maiúsculas/minúsculas em name e phone:

\n
?name=solar\n
\n

Corresponde a: "Solar Corp", "Meu Projeto Solar", etc.

\n
\n

9. Modelo de Permissões

\n

As permissões da chave de API são configuradas de forma independente por recurso:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
RecursoPermissão de leituraPermissão de gravação
Calendáriocalendar_read(não suportado)
Projetosprojects_read(não suportado)
Clientesclients_readclients_write
Componentes(não suportado)components_write
\n
\n

10. Tratamento de Erros

\n

Formato do Erro

\n

Erro geral:

\n
{\n  "detail": "Mensagem de erro"\n}\n
\n

Erro de validação em nível de campo:

\n
{\n  "field_name": ["Mensagem de erro"]\n}\n
\n

Referência de Erros

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StatusCategoriaSignificado
401AutenticaçãoChave de API inválida, ausente ou inativa; cabeçalho malformado
402NegóciosEmpresa inativa
403AutorizaçãoA chave de API não possui a permissão de recurso necessária
4xxValidaçãoErros por campo retornados como um objeto
\n

Checklist de Integração

\n

Se encontrar erros, verifique:

\n
    \n
  1. A chave de API possui as permissões corretas para o recurso.
  2. \n
  3. A conta da empresa está ativa.
  4. \n
  5. Todos os valores de filtro (IDs etc.) pertencem ao mesmo escopo da empresa.
  6. \n
\n
\n

11. Padrões de Integração

\n

Estratégia de Sincronização

\n

A abordagem recomendada para sincronizar dados:

\n
    \n
  1. Busque o endpoint de listagem (paginado).
  2. \n
  3. Armazene o id como referência externa.
  4. \n
  5. Use o campo updated para sincronizações incrementais.
  6. \n
\n

Tratamento da Paginação

\n

Percorra as páginas incrementando o offset até que next seja null:

\n
GET https://api-production.easysolar-app.com/integrations/clients/?limit=100&offset=0\nGET https://api-production.easysolar-app.com/integrations/clients/?limit=100&offset=100\n
\n

Sincronização Incremental

\n

Use filtros de data para buscar apenas registros alterados desde sua última sincronização:

\n
GET https://api-production.easysolar-app.com/integrations/projects/?updated_after=2026-01-01T00:00:00Z\n
\n

Boas Práticas de Filtragem

\n
    \n
  • Prefira filtros baseados em ID (client, status) em vez de buscas textuais para sincronizações de alto volume.
  • \n
  • Combine vários filtros para reduzir o tamanho do conjunto de resultados.
  • \n
  • Evite buscas textuais amplas em grandes conjuntos de dados.
  • \n
\n
\n

12. Estabilidade e Versionamento

\n

Garantias de Estabilidade

\n

Os itens a seguir não mudarão sem uma migração versionada:

\n
    \n
  • URLs dos endpoints
  • \n
  • Nomes dos campos
  • \n
  • Formato de UUID
  • \n
  • Estrutura de paginação
  • \n
  • Esquema de autenticação
  • \n
\n

Sujeito a Alterações (Sem Quebra)

\n
    \n
  • Filtros opcionais (novos filtros podem ser adicionados)
  • \n
  • Enriquecimento da resposta (novos campos podem ser adicionados)
  • \n
\n

Política de Versionamento

\n

Nenhuma versão explícita está atualmente exposta na URL. Mudanças que quebrem compatibilidade introduzirão um novo namespace de endpoint:

\n
https://api-production.easysolar-app.com/integrations/v2/...\n
\n

Alterações aditivas são consideradas sem quebra e podem ser implantadas sem aumento de versão.

\n
\n

Fim da documentação

\n
Fale conosco

Precisa de ajuda?

support@easysolar.app

Fique à vontade para entrar em contato e nossa equipe dedicada responderá às suas dúvidas prontamente.

Venda automaticamente com IA

Crie um vendedor automatizado com IA em 2 minutos

Adicione o gerador de propostas fotovoltaicas com IA ao seu site atual. Defina seus preços, escolha seus produtos e personalize a identidade visual da sua empresa. Seus clientes receberão uma proposta instantânea, e você receberá uma notificação por e-mail imediatamente para cada proposta e cliente interessado.

Roof edge detection for solar panels