Installer.com Docs

Quick Start

Create your first order via the API in three steps

Overview

This guide takes you from zero to a live order created via the API in three steps. You'll set up a workflow template in the Routing App, grab a ready-made example payload from the same screen, then post it to the Create Order endpoint with your API token.

Before you start, get an API token from Settings → Integrations in app.installer.com. See Authentication for details.

Steps

Create a workflow template

Workflow templates define the steps an order goes through (dispatching, booking, offer, payment, installation, sign-off). Every order created via the API references a workflow template by ID, so this is the first thing to set up.

  1. In app.installer.com, open Workflows in the sidebar.
  2. Click New workflow template and configure the steps your order should follow.
  3. Add questions for the data your workflow needs to collect, for example:
    • mpan (Meter Point Administration Number) for UK grid applications
    • meter-number or meter-serial for the existing meter
    • vehicle-registration and charger-model for EV installs
    • panel-count and system-size-kw for solar PV
    • heat-pump-output-kw for heat pump installs
  4. Each question references a custom field. Give each custom field a stable custom ID (the kebab-case examples above). Your API integration sends and reads values by these custom IDs.
  5. Save and publish the template.

Custom IDs are the stable contract between your external system and Installer.com. They survive renames and won't break your integration the way UUIDs do when fields are recreated. Questions are the UI presentation layer on top of those fields, so the same custom field can be reused across multiple questions and workflows.

Copy an example payload from the Routing App

Each workflow template in the Routing App has an API button that opens a "Send orders via API" dialog. It shows:

  • The endpoint URL (POST https://api.installer.com/api/v1/order)
  • A ready-made example JSON payload with workflowId pre-filled to your template's ID
  • The custom fields you configured on the template, with their custom IDs

Open the Workflow Templates list, click API on the template you want to use, and copy the payload. The example is a working request shape: edit the values to match your data, add your Authorization: Bearer <token> header, and post it.

curl -X POST https://api.installer.com/api/v1/order \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d @order.json

The response contains the new orderId, a human-readable displayId, and a clientUrl you can share with the end customer.

Configure prefill features

The example payload is intentionally generic. The sections below describe the optional fields most integrations use to make the order flow smoothly from creation through to payment and installation.

Actor assignment

If you already know which installer should perform the job (for example, you've assigned the lead to a specific partner in your CRM), pre-assign them on the order with actorAssignments:

{
  "workflowId": "...",
  "actorAssignments": [
    {
      "actorSlug": "installer",
      "organizationExternalId": "partner-acme-123"
    }
  ]
}
  • actorSlug matches an actor configured on your workflow template (typically installer).
  • Identify the organisation by either organizationId (Installer.com UUID) or organizationExternalId (the ID you use for the partner in your own system).

If you don't pre-assign, the order goes through your workflow's normal Dispatching step, where the operator (or auto-dispatch) selects an installer. Pre-assignment is the right choice when your CRM already owns that decision. Dispatching is the right choice when you want to broadcast the job or let the platform pick.

Offer prefill

Orders typically include an offer, which is the priced quote the end customer accepts and pays. Prefilling the offer at order creation means the customer sees pricing immediately, and acceptance plus payment in the platform becomes your conversion event.

There are two ways to populate offer lines, and one of them is strongly preferred.

Pass a productId or externalId on each offer line. The platform matches against your product catalogue and pulls in pricing, payout, and tax configuration automatically:

{
  "offer": {
    "name": "EV charger install",
    "payer": "client",
    "lines": [
      { "externalId": "evc-7kw", "quantity": 1 },
      { "productId": "5f...uuid", "quantity": 2 }
    ]
  }
}

Why this matters:

  • Pricing groups per installation partner: products in Installer.com support per-partnership pricing. The same product can be priced differently for different contractors, with the right unit amount, tax rate, and installer payout applied automatically when the order is dispatched.
  • Payment and split payout: when the customer pays, the platform splits the payment between your organisation and the assigned installer based on the product's configured payout. This only works correctly when the offer line is tied to a product.
  • Catalogue updates flow through: if you change a product's price, future orders reflect it without integration changes on your side.

Set up your product catalogue in Settings → Products in the Routing App, then reference products by externalId (recommended for stable cross-system identifiers) or productId.

Fallback: raw offer lines

You can also pass raw line details (name, unit amount, VAT rate, payout) directly without referencing a product:

{
  "offer": {
    "lines": [
      {
        "name": "EV charger",
        "quantity": 1,
        "currencyCode": "NOK",
        "payerUnitAmount": "1000000",
        "vatRate": "2500",
        "installerPayoutUnitAmount": "500000"
      }
    ]
  }
}

Raw offer lines are not well-supported when the workflow includes payments with split payout to installers. Per-partner pricing, payout configuration, and catalogue updates all live on the product. Use raw lines only for one-off line items that don't fit your catalogue, and prefer the product reference approach for anything you'll create more than once.

Next steps

On this page