Reonic Planning Templates API

Small groups of [**Components**](#tag/components) that can be added to targeted planning sections when a project type or requirement calls for extra components.

Operations 4

GET /planningTemplates List planning templates #
GET /planningTemplates/{templateId} Get planning template #
POST /planningTemplates/create Create planning template #
POST /planningTemplates/{templateId}/update Update planning template #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/reonic-planning-templates-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

reonic-planning-templates-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Reonic REST Api v3 Planning Templates API
  description: The Reonic REST API v3 provides programmatic access to create and manage resources.
  version: 3.2.0
  contact:
    email: kontakt@reonic.de
    url: https://reonic.com
    name: Reonic GmbH
servers:
- url: '{apiBaseUrl}/rest/v3/'
security:
- X-Authorization: []
tags:
- name: Planning Templates
  description: Small groups of **Components** that can be added to targeted planning sections when a project type or requirement calls for extra components.
paths:
  /planningTemplates:
    get:
      summary: List planning templates
      description: 'List all planning templates. A planning template is a small group of components that can be added to targeted planning sections when a project type or requirement calls for extra components.


        **Allowed API keys:** Read-only, Read and Write'
      tags:
      - Planning Templates
      parameters:
      - schema:
          type: array
          items:
            type: string
            enum:
            - all
            - residential
            - residentialSolar
            - residentialEvCharger
            - residentialBatteryStorage
            - residentialHotWaterStorage
            - residentialHeatingStorage
            - residentialHeating
            - residentialHeatPump
            - residentialAccessoryToHeatPump
            - residentialOptionalComponents
            - residentialAdditionalComponents
            - commercial
            - commercialSolar
            - commercialBatteryStorage
            - commercialLandlordToTenant
            - commercialPowerPurchaseAgreement
            - commercialAdditionalComponents
          description: Filter by planning templates matching at least one target.
        required: false
        description: Filter by planning templates matching at least one target.
        style: form
        explode: false
        name: target
        in: query
      - schema:
          type: string
          enum:
          - exclude
          - include
          - only
          default: exclude
          description: 'Controls whether inactive planning templates appear in results. Default: exclude.'
        required: false
        description: 'Controls whether inactive planning templates appear in results. Default: exclude.'
        name: inactive
        in: query
      - schema:
          type: string
          example: no-cache
        required: false
        name: Reonic-Cache-Control
        in: header
        description: Set to 'no-cache' to bypass the 1-hour response cache and force a fresh read. The fresh response is then written back to the cache for subsequent callers. Forced refreshes count against the uncached rate-limit bucket (30/min); only cache hits count against the cached bucket (500/min).
      responses:
        '200':
          description: List of all planning templates
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PlanningTemplate'
                    description: List of items
                required:
                - data
      operationId: getPlanningTemplates
      x-operation-id-source: derived
  /planningTemplates/{templateId}:
    get:
      summary: Get planning template
      description: 'Get a single planning template by its ID.


        **Allowed API keys:** Read-only, Read and Write'
      tags:
      - Planning Templates
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: templateId
        in: path
      - schema:
          type: string
          example: no-cache
        required: false
        name: Reonic-Cache-Control
        in: header
        description: Set to 'no-cache' to bypass the 1-hour response cache and force a fresh read. The fresh response is then written back to the cache for subsequent callers. Forced refreshes count against the uncached rate-limit bucket (30/min); only cache hits count against the cached bucket (500/min).
      responses:
        '200':
          description: The planning template
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanningTemplate'
      operationId: getPlanningTemplatesByTemplateId
      x-operation-id-source: derived
  /planningTemplates/create:
    post:
      summary: Create planning template
      description: 'Create a new planning template.


        **Allowed API keys:** Read and Write'
      tags:
      - Planning Templates
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanningTemplateCreate'
      responses:
        '201':
          description: The created planning template
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanningTemplate'
      operationId: postPlanningTemplatesCreate
      x-operation-id-source: derived
  /planningTemplates/{templateId}/update:
    post:
      summary: Update planning template
      description: 'Update an existing planning template. Omit a field to leave it unchanged; send `null` on nullable fields to clear them.


        **Allowed API keys:** Read and Write'
      tags:
      - Planning Templates
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: templateId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanningTemplateUpdate'
      responses:
        '200':
          description: The updated planning template
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PlanningTemplate'
                required:
                - data
      operationId: postPlanningTemplatesByTemplateIdUpdate
      x-operation-id-source: derived
components:
  schemas:
    PlanningTemplateCustomItemInput:
      type: object
      properties:
        componentSource:
          type: string
          enum:
          - custom
          description: 'Inline-create a template-specific custom component as part of this item. A custom component stores only commercial fields (name, description, price, VAT, quantity) — it has no technical specifications. It therefore contributes nothing to the system-size and simulation figures the Portal derives from components (e.g. kWp peak power, storage capacity, yield) and those values will appear empty there. If you need a component to feed into system size or simulation, reference a catalog component with `componentSource: "catalog"` instead.'
        componentType:
          type: string
          enum:
          - module
          - inverter
          - microinverter
          - optimizer
          - virtualBattery
          - batteryStorage
          - evCharger
          - heatPump
          - airHeatPump
          - hotWaterHeatPump
          - heatingStorage
          - hotWaterStorage
          - heatingRod
          - radiator
          - indoorUnitAirHeatPump
          - accessoryToEvCharger
          - accessoryToHeatPump
          - accessoryToModule
          - accessoryToInverter
          - accessoryToBatteryStorage
          - other
          - moduleFrameConstruction
          - serviceFee
          - installationFee
          default: other
          description: Category of the inline component; sets how it is grouped in offers (e.g. `module` → solar, `batteryStorage` → storage). Defaults to `other`. This only affects grouping — it does not give the custom component the technical specs of that category (see `componentSource`).
        name:
          type: string
          minLength: 1
          maxLength: 500
        description:
          type:
          - string
          - 'null'
          maxLength: 5000
        quantity:
          type: number
          exclusiveMinimum: 0
        visibleToCustomer:
          type: boolean
          default: true
        salesPrice:
          type: number
          minimum: 0
          description: Effective unit price charged to the end customer, net (excluding VAT).
        vatRate:
          type: number
          minimum: 0
          maximum: 1
          description: VAT rate as a fraction (e.g. 0.19 for 19%).
      required:
      - componentSource
      - name
      - quantity
      - salesPrice
      - vatRate
      additionalProperties: false
    PlanningTemplateUpdate:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 500
        description:
          type:
          - string
          - 'null'
          maxLength: 5000
          description: Send `null` to clear; omit to leave unchanged.
        active:
          type: boolean
        targets:
          type: array
          items:
            type: string
            enum:
            - all
            - residential
            - residentialSolar
            - residentialEvCharger
            - residentialBatteryStorage
            - residentialHotWaterStorage
            - residentialHeatingStorage
            - residentialHeating
            - residentialHeatPump
            - residentialAccessoryToHeatPump
            - residentialOptionalComponents
            - residentialAdditionalComponents
            - commercial
            - commercialSolar
            - commercialBatteryStorage
            - commercialLandlordToTenant
            - commercialPowerPurchaseAgreement
            - commercialAdditionalComponents
          minItems: 1
          description: Planning sections or project contexts where this template can be applied. Provided array fully replaces the existing targets; omit to leave them unchanged.
        items:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/PlanningTemplateCatalogItemInput'
            - $ref: '#/components/schemas/PlanningTemplateCustomItemInput'
            discriminator:
              propertyName: componentSource
              mapping:
                catalog: '#/components/schemas/PlanningTemplateCatalogItemInput'
                custom: '#/components/schemas/PlanningTemplateCustomItemInput'
          description: 'Provided array fully replaces the existing items; `[]` removes all items; omit to leave items unchanged. Array order becomes the planning template item order. Each item references either a catalog component (`componentSource: "catalog"`) or inline-creates a template-specific custom component (`componentSource: "custom"`). Custom components hold commercial data only and do not feed into the system-size or simulation figures shown in the Portal — see `componentSource`.'
      additionalProperties: false
    PlanningTemplateCreate:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 500
        description:
          type:
          - string
          - 'null'
          maxLength: 5000
        active:
          type: boolean
          default: false
        targets:
          type: array
          items:
            type: string
            enum:
            - all
            - residential
            - residentialSolar
            - residentialEvCharger
            - residentialBatteryStorage
            - residentialHotWaterStorage
            - residentialHeatingStorage
            - residentialHeating
            - residentialHeatPump
            - residentialAccessoryToHeatPump
            - residentialOptionalComponents
            - residentialAdditionalComponents
            - commercial
            - commercialSolar
            - commercialBatteryStorage
            - commercialLandlordToTenant
            - commercialPowerPurchaseAgreement
            - commercialAdditionalComponents
          minItems: 1
          description: Planning sections or project contexts where this template can be applied.
        items:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/PlanningTemplateCatalogItemInput'
            - $ref: '#/components/schemas/PlanningTemplateCustomItemInput'
            discriminator:
              propertyName: componentSource
              mapping:
                catalog: '#/components/schemas/PlanningTemplateCatalogItemInput'
                custom: '#/components/schemas/PlanningTemplateCustomItemInput'
          description: 'Full initial item list. Array order becomes the planning template item order. Omit to create the template without items. Each item references either an existing catalog component (`componentSource: "catalog"`) or inline-creates a template-specific custom component (`componentSource: "custom"`). Custom components hold commercial data only and do not feed into the system-size or simulation figures shown in the Portal — see `componentSource`.'
      required:
      - name
      - targets
      additionalProperties: false
    PlanningTemplate:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        name:
          type: string
        description:
          type:
          - string
          - 'null'
        active:
          type: boolean
          description: Determines if the planning template can be imported into an offer or not.
        targets:
          type: array
          items:
            type: string
            enum:
            - all
            - residential
            - residentialSolar
            - residentialEvCharger
            - residentialBatteryStorage
            - residentialHotWaterStorage
            - residentialHeatingStorage
            - residentialHeating
            - residentialHeatPump
            - residentialAccessoryToHeatPump
            - residentialOptionalComponents
            - residentialAdditionalComponents
            - commercial
            - commercialSolar
            - commercialBatteryStorage
            - commercialLandlordToTenant
            - commercialPowerPurchaseAgreement
            - commercialAdditionalComponents
          description: Planning sections or project contexts where this template can be applied.
        items:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Identifier for this Planning Template Item. For the linked Component's ID, see `component.id`.
                example: 123e4567-e89b-12d3-a456-426614174000
              component:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: Reference to [**Components**](#tag/components)
                    example: 123e4567-e89b-12d3-a456-426614174000
                  versionId:
                    type: string
                    format: uuid
                    description: Exact component version referenced by the planning template.
                    example: 123e4567-e89b-12d3-a456-426614174000
                  source:
                    type: string
                    enum:
                    - catalog
                    - custom
                    description: '`catalog` for reusable components from the component catalog; `custom` for template-specific custom components.'
                required:
                - id
                - versionId
                - source
              quantity:
                type: number
              purchasePrice:
                type:
                - number
                - 'null'
                description: Cost paid to acquire the component, net (excluding VAT). Null when not tracked.
              salesPrice:
                type: number
                description: Unit price charged to the end customer, net (excluding VAT). Pinned on this item; later edits to the catalog component do not propagate.
              vatRate:
                type: number
                minimum: 0
                maximum: 1
                description: VAT rate as a fraction (e.g. 0.19 for 19%). Pinned on this item; later edits to the catalog component do not propagate.
              salesPriceSource:
                type: string
                enum:
                - component
                - planningTemplate
                description: 'How `salesPrice` was set when this item was created or last updated: `component` if it was snapshotted from the catalog component''s price at that time, `planningTemplate` if it was set explicitly on this item. Both values are equally pinned afterwards.'
              position:
                type: number
                description: Order of the item within the planning template.
              visibleToCustomer:
                type: boolean
            required:
            - id
            - component
            - quantity
            - purchasePrice
            - salesPrice
            - vatRate
            - salesPriceSource
            - position
            - visibleToCustomer
        createdAt:
          type:
          - string
          - 'null'
          format: date-time
          example: '2026-01-01T15:30:00.000Z'
        createdById:
          type:
          - string
          - 'null'
          format: uuid
        updatedAt:
          type:
          - string
          - 'null'
          format: date-time
          example: '2026-01-01T15:30:00.000Z'
        updatedById:
          type:
          - string
          - 'null'
          format: uuid
      required:
      - id
      - name
      - description
      - active
      - targets
      - items
      - createdAt
      - createdById
      - updatedAt
      - updatedById
    PlanningTemplateCatalogItemInput:
      type: object
      properties:
        componentSource:
          type: string
          enum:
          - catalog
          description: Reference an existing entry from [**Components**](#tag/components) by ID.
        componentId:
          type: string
          format: uuid
          description: ID of the [**Components**](#tag/components) entry to add. The latest component version is used.
          example: 123e4567-e89b-12d3-a456-426614174000
        quantity:
          type: number
          exclusiveMinimum: 0
        visibleToCustomer:
          type: boolean
          default: true
        salesPrice:
          type: number
          minimum: 0
          description: Unit price charged to the end customer, net (excluding VAT). Omit (together with `vatRate`) to snapshot the catalog component's current price. The value is pinned on this item — later edits to the catalog component do not propagate.
        vatRate:
          type: number
          minimum: 0
          maximum: 1
          description: VAT rate as a fraction (e.g. 0.19 for 19%). Omit (together with `salesPrice`) to snapshot the catalog component's current VAT rate. The value is pinned on this item — later edits to the catalog component do not propagate.
      required:
      - componentSource
      - componentId
      - quantity
      additionalProperties: false
  securitySchemes:
    X-Authorization:
      type: apiKey
      in: header
      name: X-Authorization
x-tagGroups:
- name: People
  tags:
  - Contacts
  - Users
  - Teams
- name: Projects
  tags:
  - Residential Projects
  - Commercial Projects
- name: Working on a project
  tags:
  - Notes
  - Tasks
  - Files
  - File Folders
  - Activities
  - Time Tracking
  - Checklists
  - Checklist Templates
  - Signature Requests
- name: Calendar
  tags:
  - Calendars
  - Calendar Categories
  - Appointments
- name: Catalog
  tags:
  - Components
  - Planning Templates
  - Planning Packages
  - Offer Templates
- name: Workspace setup
  tags:
  - Kanban Boards
  - Kanban Columns
  - Tags
  - Lead Sources
- name: Wiki
  tags:
  - Wiki
- name: Services
  tags:
  - Photogrammetry
- name: API helpers
  tags:
  - Upload
  - Links
- name: Integrations
  tags:
  - Webhooks
- name: Guides
  tags:
  - Migrating from API v2 to v3
  - Changelog