This tutorial shows how to integrate your customer relationship management (CRM), project management, or enterprise resource planning app with Aurora and make the integration available to Aurora customers.

šŸ“˜

Private beta

  • Beta product features will not be supported via our normal support channels (e.g., email).
  • You may experience some gaps or changes as the product is refined and documentation updated.
  • There may be some compatibility issues between our beta and generally available product.

How It Works


On a new opportunity creation, your app creates a project in Aurora. Aurora notifies your app via webhook when the system design is complete. With the webhook payload, your app retrieves design summary.

One-Time Setup


Please provide the following to your Aurora account team:

  • Your app name
  • A tagline for your app to display on the ā€œAppsā€ page (256 characters or less)
  • A description for your app to display to users at enablement
  • A logo image for your app (scaled to 44px height)

In return, Aurora will provide you with:

  • an application_id for your app
  • an application key to access the partner app API
  • Aurora will enable your app on your sandbox tenant

Using application_id and an application key, subscribe to the partner application performance_simulation_job_completed webhook event, pointing webhooks to your application.

POST https://api-sandbox.aurorasolar.com/partner_applications/{application_id}/webhooks

  {
  "partner_application_webhook": {
    "description": "Performance Simulation Completed",
    "event": "performance_simulation_job_completed",
    "url_template": "https://www.yourcompany.com/aurora_performance_simulation_webhooks?design_id=<DESIGN_ID>&tenant_id=<TENANT_ID>&status=<STATUS>",
    "enabled": true
  }
}

The event is a good proxy for design completion in Aurora. You will receive this webhook from every Aurora tenant that enables your app.

Step 1. Retrieve temporary key


Using your application_id and your application key provided by Aurora, make a request to generate a new temporary key. To avoid exposing your application key, this request should always happen server-side.

curl -X POST \
  -H "Authorization: Bearer {your application key}" \
"https://api-sandbox.aurorasolar.com/partner_applications/{application_id}/tenants/{aurora_tenant_id}/create_token?session_token={aurora_session_token}"

{
    "token": {
        "bearer_token": "tk_test_fd1cc8562360ff06b6e524aa",
        "expires_at": "2023-07-29 04:30:46 UTC"
    }
}

Step 2. Create a project in the customer tenant.


Create a project using a street address

//POST https://api-sandbox.aurorasolar.com/tenants/{tenant_id}/projects

{
  "project": {
    "location": {
      "property_address": "434 Brannan St, San Francisco, CA, 94107"
    }
  }
}

or geographic coordinates.

//POST https://api-sandbox.aurorasolar.com/tenants/{tenant_id}/projects/tenants/{tenant_id}/projects

{
  "project": {
    "location": {
      "latitude": 37.7796,
      "longitude": -122.3953
    }
  }
}

Step 3. Retrieve design summary on webhook receipt.


On the webhook receipt, retrieve the design summary using the tenantd_id and design_id included in the webhook payload.

//Webhook query string payload

?design_id=5fd85f64-5717-4562-b3fc-2c963f66afa3&job_id=1bc85f64-5717-4562-b3fc-2c963f66aab9&status=succeeded

//GET https://api-sandbox.aurorasolar.com/tenants/{tenant_id}/designs/{design_id}/summary

{
  "design": {
    "design_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "design_request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "external_provider_id": "YourId123",
    "project_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "created_at": "2024-06-21T21:12:44.591Z",
    "bill_of_materials": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "component_type": "modules",
        "sku": null,
        "name": "Aurora Sample Solar Panel",
        "manufacturer_name": "Aurora Sample Manufacturer",
        "quantity": 1
      }
    ],
    "system_size_ac": 5000,
    "system_size_ptc": 6000,
    "system_size_stc": 6500,
    "arrays": [
      {
        "size": 6500,
        "azimuth": 271.61,
        "configuration": "string inverter",
        "dc_optimizer": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "name": "Aurora Sample DC Optimizer",
          "count": 11
        },
        "microinverter": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "name": "Aurora Sample Microinverter",
          "count": 11,
          "rated_power": 400
        },
        "module": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "rating_stc": 300.25,
          "name": "Aurora Sample Solar Panel",
          "count": 11,
          "orientation": "landscape"
        },
        "face": 1,
        "ground_mounted": true,
        "pitch": 20.25,
        "string_inverter": {
          "index": 1
        },
        "shading": {
          "solar_access": {
            "annual": 87.3,
            "monthly": [
              81.1,
              82.2,
              83,
              84,
              85,
              86,
              87,
              88,
              89,
              90,
              91,
              92
            ]
          },
          "total_solar_resource_fraction": {
            "annual": 87.3
          }
        }
      }
    ],
    "string_inverters": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "Aurora Sample String Inverter",
        "rated_power": 42000
      }
    ],
    "storage_inverters": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "Aurora Sample Storage Inverter",
        "rated_power": 5800
      }
    ],
    "batteries": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "Aurora Sample Battery",
        "has_integrated_inverter": true
      }
    ],
    "energy_production": {
      "up_to_date": true,
      "annual": 2550.3,
      "annual_offset": "87%",
      "monthly": [
        150.1,
        150.2,
        150,
        200,
        200,
        200,
        300,
        300,
        300,
        200,
        200,
        200
      ],
      "hourly": null
    },
    "storage_selected_operating_mode": "backup"
  }
}

Considerations