---
title: "Get Complete Budget Form"
method: GET
path: "/api/budget/form"
tags: ["copilot_frontend", "copilot_budget"]
---

# Get Complete Budget Form

`GET /api/budget/form`

Gets ALL data needed for the budget form in ONE request.

This endpoint combines:
1. Client contact data from HubSpot (by email)
2. Commercial agent data (from user or comercial_id param for admin)
3. All catalogs:
   - Panels (active)
   - Micro investors (active)
   - Promotions (active)
   - Extras (active)
   - Provinces (all with production data)
   - Structures (active)
   - Payment methods (all)
   - Discount backups (all)
4. Financing entities (unique, from active coefficients only)
5. Available financing months (unique, from active coefficients only)

**Protected Endpoint:** Requires JWT authentication and 'ui_comercial' or 'admin' role

Args:
    email: Client email to search in HubSpot
    comercial_id: Commercial ID to impersonate (only for admin)
    current_user: Current authenticated user
    db: Database session

Returns:
    CompleteBudgetFormResponse: Complete form data with client, commercial, and all catalogs

Raises:
    ErrValidation: If comercial_id cannot be determined
    ErrNotFound: If commercial or client not found
    ErrHubSpot: If error fetching client from HubSpot

## Query parameters

- `email` string, required
- `comercial_id` integer, nullable — Commercial ID (admin uses this to impersonate)

## Response `200`

Successful Response

- CompleteBudgetFormResponse — Complete response with client data, commercial data, and all catalogs in ONE request.
  - `client` ContactDetailsResponse, required — Respuesta con los detalles completos de un contacto incluida la dirección
    - `id` string, required
    - `firstname` string, nullable
    - `lastname` string, nullable
    - `email` string, nullable
    - `phone` string, nullable
    - `address` string, nullable
    - `city` string, nullable
    - `zip` string, nullable
    - `province` string, nullable
    - `numero_documento_identidad` string, nullable
    - `tipo_documento` string, nullable
  - `commercial_name` string, nullable — Commercial agent name
  - `commercial_phone` string, nullable — Commercial agent phone
  - `catalogs` AllCatalogsResponse, required — Response with all catalogs for budget form in a single request.
    - `panels` PanelResponse[], required — All active panels
      - `id` integer, required
      - `nombre` string, required
      - `potencia_wp` integer, required
      - `tipo_instalacion` string, required
      - `marca_hubspot` string, nullable
      - `modelo_hubspot` string, nullable
      - `ficha_tecnica_url` string, nullable
      - `video_url` string, nullable
      - `activo` boolean, required
      - `created_at` string, date-time, required
    - `micro_investors` MicroInvestorResponse[], required — All active micro investors
      - `id` integer, required
      - `nombre` string, required
      - `modelo_hubspot` string, nullable
      - `ficha_tecnica_url` string, nullable
      - `video_url` string, nullable
      - `tipo_instalacion` string, nullable
      - `activo` boolean, required
      - `created_at` string, date-time, required
    - `promotions` PromotionResponse[], required — All active promotions
      - `id` integer, required
      - `nombre` string, required
      - `tipo_instalacion` string, required
      - `descuento` string, required
      - `aplicacion` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
    - `extras` ExtraResponse[], required — All active extras
      - `id` integer, required
      - `nombre` string, required
      - `tipo` string, required
      - `precio` string, required
      - `tipo_instalacion` string, nullable
      - `ficha_tecnica_url` string, nullable
      - `video_url` string, nullable
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `provinces` ProvinceProdResponse[], required — All provinces with production data
      - `id` integer, required
      - `provincia` string, required
      - `produccion_microinv` integer, required
      - `produccion_inv_central` integer, required
      - `descuento` number, nullable, required
      - `precio_maximo_descuento` number, nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `structures` StructureResponse[], required — All active structures
      - `id` integer, required
      - `nombre` string, required
      - `precio_por_panel` string, required
      - `marca_hubspot` string, nullable
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `options` OptionResponse[], required — All active options
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `payment_methods` PaymentMethodResponse[], required — All payment methods
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
    - `payment_methods_cash` PaymentMethodCashResponse[], required — All active cash payment options with discounts
      - `id` integer, required
      - `nombre` string, required
      - `descuento` string, nullable, required
      - `forma_pago_id` integer, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `financing_entities` string[], required — Unique financing entities from active coefficients
    - `available_months` integer[], required — Unique financing months from active coefficients
    - `financing_entity_months` object, required — Available months per financing entity
    - `battery` BatteryResponse[], required — All battery options
      - `id` integer, required
      - `nombre` string, required
      - `precio` string, required
      - `promocion_id` integer, nullable
      - `marca_hubspot` string, nullable
      - `modelo_hubspot` string, nullable
      - `ficha_tecnica_url` string, nullable
      - `video_url` string, nullable
      - `tipo_instalacion` string, nullable
      - `capacidad_kwh` string, nullable
      - `capacidad_kwh_ampliable` string, nullable
      - `potencia_salida` string, nullable
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `electrical_protections` ElectricalProtectionResponse[], required — All active electrical protections
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `financing_quota_promotions` FinancingQuotaPromotionResponse[], required — All active financing quota promotions
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `ground_types` GroundTypeResponse[], required — All active ground types
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `subsidies` SubsidyResponse[], required — All active subsidies
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `financing_signed` FinancingSignedResponse[], required — All active financing signed states
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required
    - `construction_licenses` ConstructionLicenseResponse[], required — All active construction licenses
      - `id` integer, required
      - `nombre` string, required
      - `activo` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, nullable, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/hogarsolar/apis/hogarsolar-backend-api.md) · [All operations](https://skmtc.dev/hogarsolar/apis/hogarsolar-backend-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hogarsolar/hogarsolar-backend-api/revisions/d9861e46bef8/schema)
