Skip to content
Back to skills

Api And Automation

ASecurity

"Use Mycodo REST API authentication, versioned endpoints, Pyro

  • 247 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 8, 2026
businesspythonrustshellbashdockergitapidatabasedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill api-and-automation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Api And Automation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Api And Automation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-api-and-automation/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-api-and-automation)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: api-and-automation
description: "Use Mycodo REST API authentication, versioned endpoints, Pyro
  DaemonControl, mycodo-client, and multi-channel automation safely."
disable-model-invocation: true
metadata:
  disco-role: operating
license: GPL 3.0
---

# Mycodo API And Automation

Use this sub-skill when the task involves Mycodo automation through HTTPS REST
endpoints, local Pyro daemon calls, the `mycodo-client` command line, or
multi-channel measurement queries. This skill is self-contained; do not reopen
repository docs, examples, or tests to use it at runtime.

## What This Sub-skill Owns

- API key authentication, HTTPS, self-signed certificate handling, and API media
  type/version selection.
- Selecting among REST API endpoints, local `DaemonControl`, and local
  `mycodo-client` automation.
- Endpoint families for Inputs, Outputs, Functions, Actions, Widgets,
  Dashboards, PID, Conditional, Trigger, measurements, InfluxDB-backed reads,
  daemon status, settings, choices, logs, camera images, and backup exports.
- Safe request patterns for `curl`, Python `requests`, and reusable scripts.
- Multi-channel measurement API planning and request/response handling.
- Error handling for API 4xx/5xx, Mycodo-specific `460` operation failures,
  TLS errors, Pyro timeouts, credential problems, and unsafe system mutations.

## Start Here: Choose The Automation Surface

1. **Use REST API** when the caller has a Mycodo web UI host, an API key, and
   needs remote or language-neutral automation over HTTPS.
2. **Use `DaemonControl` / Pyro** when code runs on the Mycodo host and needs
   daemon operations with Python return values, especially Output, Input, PID,
   Function Action, Widget, and daemon control calls.
3. **Use `mycodo-client`** when operating locally from shell scripts, service
   hooks, or manual maintenance and the installed command is available.
4. **Use multi-channel REST** when a client needs the latest values for several
   sensor channels in one InfluxDB-backed request.
5. **Do not automate hardware-changing operations** until the user confirms the
   target Output/Input/PID/controller ID, channel, duration/duty cycle/volume,
   and the physical safety consequence.

## Bundled Files

Read or run these files instead of looking up upstream material:

- [references/rest-api.md](references/rest-api.md) — read when building REST
  calls, selecting endpoint families, formatting `Accept`/auth headers, or
  interpreting status codes.
- [references/daemon-client.md](references/daemon-client.md) — read when using
  local Python `DaemonControl`, Pyro URI/timeout options, or `mycodo-client`
  command-line flags.
- [references/multi-channel-api.md](references/multi-channel-api.md) — read
  when batching measurement reads across multiple channels, sensors, or
  dashboard/mobile clients.
- [references/troubleshooting.md](references/troubleshooting.md) — read when a
  request returns 401/403/404/406/422/460/5xx, TLS errors, empty InfluxDB data,
  Pyro timeouts, or CLI/daemon failures.
- [scripts/mycodo_api_request.py](scripts/mycodo_api_request.py) — run for a
  reusable safe REST request helper that requires `--host`, `--endpoint`,
  `--method`, and an API key from `--api-key` or `MYCODO_API_KEY`. It defaults
  to `Accept: application/vnd.mycodo.v1+json`, prints status plus a small header
  subset, and pretty-prints JSON or text bodies.

## REST API Quick Contract

- Base URL: `https://<mycodo-host>/api/...`.
- Endpoint documentation for the installed instance is served at
  `https://<mycodo-host>/api`.
- All authenticated API calls are intended for HTTPS. Self-signed certificates
  are common on local Mycodo installs; use `curl -k`, `requests verify=False`,
  or the bundled helper's `--insecure` only for hosts the user trusts.
- Send `Accept: application/vnd.mycodo.v1+json` for API v1.
- Prefer `X-API-KEY: <base64-api-key-shown-in-user-settings>` for automation.
  The request loader also accepts `Authorization: Basic <same-base64-api-key>`
  and a query-string `api_key=<same-base64-api-key>`, but query strings are more
  likely to leak through logs.
- Treat examples that use `Authorization: Bearer <key>` as deployment-specific
  unless the live instance proves Bearer support; the inspected request loader
  authenticates API-key query, Basic, and `X-API-KEY` forms.

## Safe REST Workflow

1. Obtain the API key from web UI user settings; never embed real keys in skill
   files, logs, git commits, prompts, or examples.
2. Confirm endpoint documentation at `/api` on the target host and record the
   method, path, required permission, request body, and response shape.
3. Prefer read-only `GET` endpoints first: `/api/daemon/`, `/api/settings/...`,
   `/api/inputs/`, `/api/outputs/`, `/api/measurements/...`, and `/api/choices/...`.
4. For mutating `POST` endpoints, require explicit user confirmation of target
   IDs and physical effect: Output state/duty/volume, Input force measurement,
   controller activation, measurement creation, note creation, or daemon
   termination.
5. Check status codes before assuming success. `2xx` means success; `4xx` means
   request/auth/permission/payload problems; `5xx` means server-side failure.
   Mycodo can return `460` when a daemon operation reports failure.

## Local Daemon Workflow

Use local daemon access only on a trusted Mycodo host where the Mycodo package,
configuration, database, and Pyro daemon are available. The default Pyro URI is
`PYRO:mycodo.pyro_server@127.0.0.1:9080`; it is not an HTTPS remote API. The
public installed layout commonly uses `/opt/Mycodo` and an environment under
`/opt/Mycodo/env`, but always follow the user's installed layout.

Typical decision points:

- Need daemon health, RAM use, or virtualenv status: REST `/api/daemon/`,
  `DaemonControl().check_daemon()`, or `mycodo-client --checkdaemon`.
- Need Output state/change with Python return values: use `DaemonControl` or
  REST `/api/outputs/<output_id>`; include `output_channel`/`channel`.
- Need a shell-friendly one-shot: use `mycodo-client`, but avoid irreversible
  flags such as daemon termination unless explicitly approved.

## Automation Safety Checklist

Before sending any request or local daemon command that can mutate state:

- Confirm the target Mycodo host is the intended system, not a production system
  confused with a test system.
- Confirm the controller type and exact unique ID: Input, Output, Function,
  Action, Widget, Dashboard, PID, Conditional, or Trigger.
- Confirm channel numbers are zero-based where relevant.
- Confirm units, measurement names, and InfluxDB time windows for measurement
  reads.
- Confirm the API key belongs to a user role with only the necessary permission.
- Confirm TLS behavior: use certificate verification when possible; use
  `--insecure`/`-k` only for trusted local/self-signed hosts.
- Stop before changing system services, nginx, InfluxDB, Docker, GPIO/I2C/UART,
  1-Wire, Bluetooth, camera, backup/restore, or installer state without
  explicit user authorization.

## Verification Limits

This skill was produced from CPU/source inspection of the repository and bundled
runtime evidence. Raspberry Pi GPIO/I2C/UART/1-Wire/Bluetooth/camera behavior,
systemd/nginx/InfluxDB services, Docker deployment, backup/restore operations,
and full installer execution were not exercised. Treat those as operational
surfaces that require live-system confirmation before mutation.

## Minimal Examples

Read-only request with the bundled helper:

```bash
MYCODO_API_KEY="<base64-key-from-user-settings>" \
python scripts/mycodo_api_request.py \
  --host https://mycodo.local \
  --endpoint /api/daemon/ \
  --method GET \
  --insecure
```

Read-only `curl` pattern:

```bash
curl -k -sS "https://mycodo.local/api/settings/inputs" \
  -H "Accept: application/vnd.mycodo.v1+json" \
  -H "X-API-KEY: <base64-key-from-user-settings>"
```

Local Python daemon probe:

```python
from mycodo.mycodo_client import DaemonControl
control = DaemonControl(pyro_timeout=10)
print(control.check_daemon())
```

If any example fails, use [references/troubleshooting.md](references/troubleshooting.md)
before retrying with broader permissions or mutating commands.

Files in this skill

  • SKILL.md8 KB
  • references/daemon-client.md10.1 KB
  • references/multi-channel-api.md8.6 KB
  • references/rest-api.md10.8 KB
  • references/troubleshooting.md11.1 KB
  • scripts/mycodo_api_request.py7.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.