Docs › Operate

Adapters & products

Every product PowerExecutor operates has its own adapter spec — a YAML file that IS the integration. You list, create and edit adapters entirely from the console's Adapters view.

Prerequisites to onboard a product

An adapter works like a plugin: once its spec is complete and its connection is configured, the product is automatically part of execution — the Dashboard, Approvals, Permissions, reports and the daily scheduler all pick it up. Nothing else to integrate. Before onboarding, make sure:

#PrerequisiteWhy
1The product exposes an HTTP(S) API reachable from PowerExecutor's networkThe adapter drives the product through its API.
2Credentials for that API (login, token, or none)Declared in the spec's auth + config, filled in on the Configuration page.
3At least one signal to observeWithout observations there is nothing to reason about.
4At least one capability, each with a verify call (and sample_params when its path has placeholders)Required by adapter certification before any cycle runs.
5Connection settings filled in on the Configuration pageThe adapter can't log in without them.
You don't have to track this yourself: the Adapters view shows a Status per product — ✅ Ready, or ⚠ n to do with the exact missing items. A product with open items still appears everywhere but its cycles will report the problems instead of operating.

Add a new product

  1. Create it

    Adapters view → + New product → give it an id (lowercase letters, digits, - or _). A starter adapter spec is created and the editor opens.

  2. Fill in the adapter — guided form

    The editor opens as a form (no YAML knowledge needed): connection & login method, the settings the operator will fill in, the signals to watch, and the capabilities it may use — each with risk, rollback and inline help. Advanced users can switch to the YAML tab to edit the raw spec.

  3. Save

    Save validates the YAML server-side (schema + product-name match) and rejects bad specs with the exact reason. Changes take effect next cycle — no redeploy.

  4. Configure & enable

    On Configuration, fill in the product's connection settings (the fields your spec declared under config:). Add the product to Enabled products to include it in the daily schedule. It appears on the Dashboard, starts at 👁 Watch only, and earns freedom like any other product.

Adapter specs are stored on the server's data volume (/data/specs), so products you create or edit in the console survive redeploys.

Activate, deactivate, update or delete

Activate / Deactivate: each Dashboard card has a toggle. A deactivated product is skipped by the daily scheduler but keeps all its data, permissions and settings — you can still run cycles manually, and re-activate anytime.

Update: Adapters view → Edit → change it in the form (or the YAML tab) → Save adapter. Validation runs server-side; changes take effect next cycle. Connection values are edited on the Configuration page (not in the spec — the spec only declares the fields).

Delete: Adapters view → Delete → type the product name to confirm. This removes the adapter spec, its permissions, pending approvals, reports, twin state and connection settings, and takes it out of the daily schedule. Receipts are kept — they are the immutable audit trail of everything that was ever executed.

Spec reference

SectionWhat it declares
product / sdk_versionProduct id (must match the file name) and adapter SDK version.
api.base_urlThe product's API. Overridable per environment with the <PRODUCT>_BASE_URL env var.
api.authlogin (username/password → bearer token, e.g. PowerMarketing), bearer/header (static token from token_env), or omit for none.
api.default_queryQuery params added to every call, mapped from config values (e.g. brand_id).
cadenceschedule: daily.
configConnection fields the operator fills on the Configuration page (key, label, help, secret, optional env fallback).
signalsWhat to observe: id, poll (method + path), means.
capabilitiesWhat it may do: id, call, risk, reversibility (reversible needs capture_state+compensate; irreversible always requires approval), verify, sample_params, optional response_params.

Example capability

capabilities:
  - id: update_post
    call: { method: PATCH, path: "/api/posts/{post_id}" }
    risk: low
    reversibility: reversible
    capture_state: { method: GET,   path: "/api/posts/{post_id}" }
    compensate:    { method: PATCH, path: "/api/posts/{post_id}" }
    verify:        { method: GET,   path: "/api/posts/{post_id}" }
    sample_params: { post_id: 1 }
The core never changes when you add a product — the adapter spec is the whole integration. See Concepts for the model behind this.