The tool reads a manifest (`apps.yaml`) describing the desired state, compares it against each Axway API Manager instance, and creates what is missing.
**Organisations are managed by hand** — the tool looks them up live in the API Manager. If an application references an organisation that does not exist there, the application is skipped and the error is reported clearly.
Credentials are never stored in config files — they are injected via environment variables at runtime.
## Requirements
- Python 3.13+
- [uv](https://github.com/astral-sh/uv)
- Environment variables `APIM_USER` and `APIM_PASSWORD` set before running
## Setup
```bash
uv sync
```
Generate example files:
```bash
uv run python apim_apps.py --init-manifest # creates apps.yaml
uv run python apim_apps.py --init-config # creates config.json
```
## Configuration
### `config.json` — environment registry
Lists the Axway API Manager instances. Credentials are **not** stored here.
Describes the applications that must exist on each environment.
The `organizations` section is **optional** — organisations are expected to already exist in the API Manager (managed by hand). If an application's organisation is missing, the application is skipped and the error is reported.
If `environments` is omitted on an entry, it applies to **all** environments.
```yaml
applications:
- name:"MyApp"
organization:"MyOrg"# must already exist in the API Manager
The `credentials` list is optional. Each entry provisions an external credential (`client_id`, optional `secret`) on the application via the API Manager's `/extcredentials` endpoint. Credentials are set **only when the application is first created** — existing applications are never modified.