Entity Hierarchy

Every Aurora API path includes a tenant_id, and nearly everything else hangs off a project_id. Understanding the entity tree — what belongs to what, and which IDs you need before you can call a given endpoint — prevents a large class of errors when building an integration.

The entity tree

Tenant  (tenant_id)
├── Orders  (order_id)  ← Aurora Consumer orders; a released order can be converted to a Project
└── Projects  (project_id)
    ├── Consumption Profile  (1 per project)
    ├── Utility Bills
    ├── Design Requests  (design_request_id)
    │   └── [Accept] → Design
    ├── EagleView Design Requests  (eagleview_design_request_id)
    │   └── [Accept] → Design
    ├── Designs  (design_id)  ← also created directly via API or built manually in-app
    │   ├── Async jobs
    │   │   ├── AI Roof
    │   │   ├── Irradiance Analysis
    │   │   ├── Fire Pathway Placement
    │   │   ├── AutoDesigner  ← requires 3D roof model
    │   │   ├── Performance Simulation  ← required before Pricing/Proposals
    │   │   └── Proposal PDF Generation
    │   ├── Design Assets
    │   ├── Pricing  ← required before Proposals
    │   ├── Financings  (financing_id)
    │   ├── Proposals
    │   └── Web Proposal URL
    ├── Agreements  (agreement_id)
    ├── Site Surveys  ← submitted post-agreement; required before Plan Set Requests
    ├── Project Assets  (required for Plan Set Requests)
    └── Plan Set Requests

How to obtain each ID

Many IDs are first delivered via webhooks — particularly for resources created in-app or through async operations. Subscribe to the relevant webhook to receive the ID as soon as it is available, rather than polling.

IDHow to get it
tenant_idFound in API Settings in the Aurora app. Required on every API call.
order_idRetrieved via GET /tenants/{tenant_id}/orders, or delivered via the order_created webhook when a Consumer Order is created.
project_idReturned by POST /tenants/{tenant_id}/projects, retrieved via GET /tenants/{tenant_id}/projects, or delivered via the project_created webhook (also fires when a project is created from a Consumer Order).
design_request_idReturned by POST /tenants/{tenant_id}/design_requests (Site Modeling Service) or POST /tenants/{tenant_id}/design_requests/eagleview.
design_idReturned when a design request is accepted, delivered via the design_request_completed or design_created webhooks, or retrieved via GET /tenants/{tenant_id}/projects/{project_id}/designs. A design can also be created directly via the API or built in-app.
financing_idRetrieved via GET /tenants/{tenant_id}/designs/{design_id}/financings, or delivered via the financier_contract_status_changed webhook (fires when an integrated financing partner reports a contract status change). Financings are created and configured in-app.
agreement_idRetrieved via GET /tenants/{tenant_id}/projects/{project_id}/agreements, or delivered via the agreement_status_changed webhook. Agreements are created in-app via Contract Manager.

Key prerequisites

Several operations have preconditions that are easy to miss:

Design work requires a project first.
A design_id always belongs to a project. You must create a project before any design operations can begin.

AutoDesigner requires a 3D roof model.
auto_designer/run will fail unless the design already has a 3D roof model. A 3D model is produced by accepting a design request (Site Modeling Service or EagleView), by running AI Roof on the design, or by building the roof manually in Design Mode.

Performance simulation is required before pricing and proposals.
Pricing configuration and proposal generation both depend on simulation outputs. Run performance_simulation/run and wait for completion before attempting to set pricing or create a proposal.

Pricing must be configured before creating a proposal.
POST /tenants/{tenant_id}/designs/{design_id}/proposals/default will fail if no pricing has been set on the design.

Plan set requests require project assets.
Plan set documents are generated from project assets (uploaded files such as permits, site photos, etc.) that must be attached to the project before a plan set request is submitted.