openapi: 3.0.3 info: title: Aurora Solar Agreements Proposals API description: 'The Aurora API lets you build apps and integrations on the Aurora Solar platform for solar sales and design. It is a tenant-scoped REST API: every resource lives under /tenants/{tenant_id}. Requests are authenticated with an API-key bearer token (Standard keys prefixed `sk_`, Restricted keys prefixed `rk_`; `sand_`/`prod_` denote the environment) passed as `Authorization: Bearer `. The current API version is v2024.05, selected via the `Aurora-Version` request header. Scope note: A handful of paths in this document are confirmed directly against Aurora''s public reference (List Projects, Create Design Request, Create Webhook). The remaining paths are HONESTLY MODELED from Aurora''s published operation catalog (docs.aurorasolar.com/llms.txt) following the same `/tenants/{tenant_id}/` convention; exact path segments for modeled operations should be reconciled against the live reference, which is partially gated. Modeled operations carry `x-modeled: true`.' version: v2024.05 contact: name: Aurora Solar Developer Platform url: https://docs.aurorasolar.com license: name: Proprietary url: https://aurorasolar.com/terms-of-service/ servers: - url: https://api.aurorasolar.com description: Production - url: https://api-sandbox.aurorasolar.com description: Sandbox security: - bearerAuth: [] tags: - name: Proposals description: Customer-facing proposals, templates, and PDFs. paths: /tenants/{tenant_id}/proposals: parameters: - $ref: '#/components/parameters/TenantId' post: operationId: createProposal tags: - Proposals summary: Create a proposal description: Creates a customer-facing proposal from a design. x-modeled: true requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProposalInput' responses: '201': description: The created proposal. content: application/json: schema: $ref: '#/components/schemas/Proposal' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /tenants/{tenant_id}/proposals/{proposal_id}: parameters: - $ref: '#/components/parameters/TenantId' - name: proposal_id in: path required: true schema: type: string get: operationId: retrieveProposal tags: - Proposals summary: Retrieve a proposal description: Retrieves a proposal by ID. x-modeled: true responses: '200': description: The requested proposal. content: application/json: schema: $ref: '#/components/schemas/Proposal' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteProposal tags: - Proposals summary: Delete a proposal description: Deletes a proposal. x-modeled: true responses: '204': description: The proposal was deleted. '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /tenants/{tenant_id}/proposal_templates: parameters: - $ref: '#/components/parameters/TenantId' get: operationId: listProposalTemplates tags: - Proposals summary: List proposal templates description: Lists the proposal templates configured for the tenant. x-modeled: true responses: '200': description: A list of proposal templates. content: application/json: schema: type: object properties: proposal_templates: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /tenants/{tenant_id}/designs/{design_id}/web_proposal: parameters: - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/DesignId' get: operationId: generateWebProposalUrl tags: - Proposals summary: Generate web proposal URL description: Generates a hosted web proposal URL for a design. x-modeled: true responses: '200': description: The web proposal URL. content: application/json: schema: type: object properties: url: type: string format: uri '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Error: type: object properties: errors: type: array items: type: object properties: code: type: string title: type: string detail: type: string Proposal: allOf: - $ref: '#/components/schemas/ProposalInput' - type: object properties: id: type: string format: uuid status: type: string web_url: type: string format: uri created_at: type: string format: date-time ProposalInput: type: object required: - design_id properties: design_id: type: string proposal_template_id: type: string parameters: DesignId: name: design_id in: path required: true description: The design ID. schema: type: string TenantId: name: tenant_id in: path required: true description: The tenant (organization) ID that owns the resource. schema: type: string responses: ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or invalid bearer token. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: bearerAuth: type: http scheme: bearer description: 'API-key bearer token. Standard keys are prefixed `sk_`, Restricted keys `rk_`; `sand_`/`prod_` denote sandbox vs production. Passed as `Authorization: Bearer `.'