Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
adobe avatar

Ffcpe Catalog Entry Json

  • 58 installs
  • Updated May 28, 2026
  • adobe/aio-cli-plugin-ffcpe

ffcpe-catalog-entry-json is a Claude Code skill for authoring and validating the catalog-entry JSON that registers an App Builder custom action with the Adobe run-workflow (FFCPE) catalog.

About

ffcpe-catalog-entry-json helps a developer author, review, or fix the catalog-entry JSON that registers an App Builder custom action with Adobe's run-workflow (FFCPE) catalog. It documents the required shape including handlerType, customActionConfig endpoints, inputs and outputs, versioning, and agent-discovery fields. It directs all catalog operations through the aio ffcpe catalog commands rather than raw curl.

  • Authors and validates FFCPE custom-action catalog-entry JSON
  • Documents required shape: handlerType, customActionConfig, inputs/outputs, discovery fields
  • Registers App Builder actions with the run-workflow catalog via aio ffcpe catalog

Ffcpe Catalog Entry Json by the numbers

  • 58 all-time installs (skills.sh)
  • Ranked #3,178 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

ffcpe-catalog-entry-json capabilities & compatibility

Capabilities
catalog authoring · json validation · action registration
Use cases
api development · documentation
Pricing
Free
Requires keys
XGWIMSORGID
From the docs

What ffcpe-catalog-entry-json says it does

Use this skill to **author, review, or fix** a JSON document that registers an App Builder action with the **run-workflow** catalog so it can be used in workflows.
SKILL.md
**Composite key:** `(orgId, actionType, version)`.
SKILL.md
npx skills add https://github.com/adobe/aio-cli-plugin-ffcpe --skill ffcpe-catalog-entry-json

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs58
Last updatedMay 28, 2026
Repositoryadobe/aio-cli-plugin-ffcpe

What it does

Author and validate the catalog-entry JSON that registers an App Builder custom action with the FFCPE run-workflow catalog.

Who is it for?

Writing or fixing a custom-action catalog-entry.json (handlerType, customActionConfig, inputs/outputs, discovery fields) for the run-workflow service.

When should I use this skill?

A user authors or validates an FFCPE custom-action catalog-entry.json for the run-workflow service.

What you get

A valid catalog-entry.json ready to validate and register with aio ffcpe catalog.

  • valid custom-action catalog-entry.json
  • registered catalog action

By the numbers

  • composite key (orgId, actionType, version)
  • at least one input and one output port required
  • 3 required discovery fields (relatedActions, usage.commonPatterns, usage.bestPractices)

Files

SKILL.mdMarkdownGitHub ↗

Catalog entry JSON (catalog-entry.json)

Use this skill to author, review, or fix a JSON document that registers an App Builder action with the run-workflow catalog so it can be used in workflows. For every catalog operation (list, register, inspect, …), use the `aio ffcpe catalog` commands from @adobe/aio-cli-plugin-ffcpe—do not suggest `curl` or ad-hoc HTTP clients.

File naming and placement (App Builder projects)

Best practice: one catalog entry file per custom action, named `<action-name>.entry.json`, in the same directory as that action’s web and worker sources:

actions/<action-name>/
  <action-name>.web.ts
  <action-name>.worker.ts
  <action-name>.entry.json
  • `<action-name>` should match the OpenWhisk action basename and your `mountFfcpeNodeRoutes` / manifest naming where practical.
  • The file content is the full catalog payload (`handlerType: "custom-action"`, `inputs` / `outputs`, `customActionConfig`, discovery fields)—not a stub or pointer file.
  • Pass this path to `aio ffcpe catalog validate --file …` and `register --file …`. A repo-root `catalog-entry.json` is fine for one-off samples; prefer `<action-name>.entry.json` co-located when the app has multiple actions.

Scaffolding web/worker layout: skill `ffcpe-app-builder-actions` in ffcpe-custom-node-sdk.

Install Adobe I/O CLI and the FFCPE plugin

1. Node.js — Use a supported LTS version (this plugin expects Node 18+). 2. Adobe I/O CLI (`aio`) — Install globally, then confirm it runs:

   npm install -g @adobe/aio-cli
   aio --version

3. This plugin (`@adobe/aio-cli-plugin-ffcpe`) — Install into aio as a plugin. Use one of:

   aio plugins:install @adobe/aio-cli-plugin-ffcpe

Or install from a Git URL (fork, feature branch, or internal mirror):

   aio plugins:install https://github.com/adobe/aio-cli-plugin-ffcpe

Replace the URL with your org’s repo if you do not use adobe/aio-cli-plugin-ffcpe.

4. Verify the `ffcpe` topic is available (older material may use the name Workflow Builder for the same capability):

   aio ffcpe catalog --help

5. Authenticate for catalog calls (same session the CLI uses for other Adobe I/O commands):

   aio login
   aio console org select

If `aio ffcpe` is not found after install, run `aio plugins` and confirm `@adobe/aio-cli-plugin-ffcpe` is listed; reinstall with `aio plugins:install` if needed.

orgId and auth

  • Do not include `orgId` in the catalog JSON body. The API sets it from `x-gw-ims-org-id` or the Bearer access token (IMS profile / JWT).
  • Registration requires a resolvable org; otherwise the API returns 401 with `orgId is required`.
  • Composite key: (orgId, actionType, version). Different orgs can implement the same actionType; one org can ship multiple versions (e.g. 1.0.0 and 2.0.0). You may reuse a built-in actionType to provide an org-specific override.

Required shape (custom actions)

  • `handlerType`: "custom-action".
  • `customActionConfig`: required; valid HTTPS `submitEndpoint` and `statusEndpoint`; optional polling: pollIntervalMs (default often 3000), maxPollAttempts (e.g. 100), timeoutMs (e.g. 300000).
  • `version`: valid semver (e.g. 1.0.0).
  • `inputs` / `outputs`: at least one port each; port `name` unique within each array.
  • `parameters`: each `name` unique within parameters (array may be empty).

The API may accept legacy names (inputPorts, outputPorts, enabled, appBuilderConfig) but prefer `inputs`, `outputs`, `disabled`, `workflowEnabled`, `customActionConfig`.

Agent and discovery (required for registration)

These fields help agents suggest and chain your action. At least one entry each; refine later with PUT.

FieldWhat to putMin
`relatedActions`actionType values that chain or complement yours1
`usage.commonPatterns`When this action fits in a workflow1
`usage.bestPractices`Tips for better results1

Image-oriented example:

"relatedActions": ["input-images", "remove-background", "image-analysis"],
"usage": {
  "commonPatterns": [
    "Chain after background removal for product descriptions",
    "Use for accessibility captions"
  ],
  "bestPractices": [
    "Use clear prompts; high-res input improves results",
    "Specify output format expectations"
  ]
}

Video-oriented example:

"relatedActions": ["input-videos", "video-transcribe", "preview-videos"],
"usage": {
  "commonPatterns": [
    "Process video clips for analysis",
    "Generate subtitles from video"
  ],
  "bestPractices": [
    "Ensure supported video formats",
    "Clear audio improves transcription quality"
  ]
}

Discover valid actionType values with `aio ffcpe catalog list` (add `--include-core` to include Adobe built-ins). Use `--json` for raw API-shaped output.

Full catalog entry example

Use HTTPS App Builder / Runtime API URLs from `aio app deploy` output. Replace placeholders with your deployed web action base URL + route suffixes.

Deriving endpoints after deploy:

# Deploy prints:
https://3326322-myproject-stage.adobeioruntime.net/api/v1/web/my-package/my-action-web

# Catalog:
submitEndpoint → …/my-action-web/submit
statusEndpoint → …/my-action-web/status

Use `/api/v1/web/` (not /apis/v1/). The Runtime hostname namespace is lowercase.

{
  "actionType": "image-to-text",
  "version": "1.0.0",
  "name": "Image to Text",
  "description": "Analyzes images and returns text descriptions.",
  "category": "custom",
  "disabled": false,
  "workflowEnabled": true,
  "aliases": [],
  "tags": ["ai", "image", "text"],

  "inputs": [
    {
      "name": "image",
      "type": "image",
      "required": true,
      "mimeTypes": ["image/jpeg", "image/png", "image/gif", "image/webp"],
      "description": "One or more images to analyze"
    }
  ],

  "outputs": [
    {
      "name": "text",
      "type": "text",
      "mimeTypes": ["text/plain"],
      "description": "Text description of the image(s)"
    }
  ],

  "parameters": [
    {
      "name": "prompt",
      "type": "string",
      "required": false,
      "defaultValue": "Describe what is happening in these images.",
      "description": "Custom prompt for image analysis"
    }
  ],

  "relatedActions": ["input-images", "remove-background", "image-analysis"],
  "usage": {
    "commonPatterns": [
      "Chain after background removal for product descriptions",
      "Use for accessibility captions"
    ],
    "bestPractices": [
      "Use clear prompts; high-res input improves results",
      "Specify output format expectations"
    ]
  },

  "handlerType": "custom-action",
  "customActionConfig": {
    "submitEndpoint": "https://3326322-myproject-stage.adobeioruntime.net/api/v1/web/my-package/my-action-web/submit",
    "statusEndpoint": "https://3326322-myproject-stage.adobeioruntime.net/api/v1/web/my-package/my-action-web/status",
    "pollIntervalMs": 3000,
    "maxPollAttempts": 100,
    "timeoutMs": 300000,
    "authentication": { "type": "ims_service_token" }
  }
}

customActionConfig.authentication

Default for App Builder + `mountFfcpeNodeRoutes`: use `ims_service_token`. The SDK enables IMS inbound auth on /submit and /status unless you pass `authenticate: null`. If the catalog declares `none` but the web action still requires IMS, run-workflow calls fail (and manual curl returns Missing required header(s): Authorization, x-api-key).

Only use `none` when the web action explicitly disables auth (authenticate: null in `mountFfcpeNodeRoutes`) and your security review allows it.

JSONUse case
{ "type": "ims_service_token" }Recommended default. Run-workflow obtains an IMS service token and calls your endpoints with `x-api-key: run-workflow-service` and `Authorization`. Matches default `mountFfcpeNodeRoutes` auth.
{ "type": "none" }No authentication — only when web action passes `authenticate: null`
{ "type": "api-key", "headerName": "X-API-Key", "secretName": "MY_API_KEY" }API key header; secretName references an env var or secret
{ "type": "bearer", "secretName": "MY_BEARER_TOKEN" }Bearer token from env/secret

Managing the catalog (Adobe I/O CLI)

Always use `aio ffcpe catalog …` (this plugin), not raw HTTP. Prereqs: `aio login`, `aio console org select`, and this plugin installed. Optional: `--base-url` / `AIO_FFCPE_CATALOG_BASE_URL`, `--org-id`, `--api-key`, `--json` on commands that support them.

GoalCommand
Register new actionaio ffcpe catalog register --file ./actions/<action-name>/<action-name>.entry.json (optional `--strict`)
Inspect one actionaio ffcpe catalog inspect <actionType> (optional `--version <semver>`)
List actionsaio ffcpe catalog list (filters: `--workflow-enabled`, `--category`, `--include-tags`, `--exclude-tags`, `--include-core`, `--compact`, `--json`)
Full replaceaio ffcpe catalog update <actionType> --file ./actions/<action-name>/<action-name>.entry.json (optional `--version`, `--strict`)
Disable (hide from UI by default)aio ffcpe catalog disable <actionType>
Re-enableaio ffcpe catalog enable <actionType>
Deleteaio ffcpe catalog delete <actionType> (optional `--version` to delete one semver; omit to delete all custom versions for that type)
Validate file onlyaio ffcpe catalog validate --file ./actions/<action-name>/<action-name>.entry.json

Run `aio ffcpe catalog <command> --help` for the exact flag set.

Workflow JSON: actionSource and ports

When both built-in and custom catalog entries share an `actionType`, `actionSource` picks the implementation:

ValueBehavior
Omitted or `"built-in"`Prefer built-in, then catalog (backward compatible).
`"custom"`Only your org’s custom catalog entry; built-in ignored. Fails if no custom exists. Org comes from auth—do not put orgId in the workflow for this behavior.

Example action node forcing custom `remove-background`:

{
  "actionId": "rb-001",
  "actionType": "remove-background",
  "actionSource": "custom",
  "parameters": {}
}

Connections: sourcePort / targetPort must match `outputs[].name` and `inputs[].name` from the catalog (and from upstream/downstream nodes). Mismatched port names are a common cause of runtime failures.

Minimal pattern: input-imagesoutputs port connects to a custom action’s input port name (e.g. image). For chained flows (e.g. input → remove-background → image-to-text), each `connections[]` entry wires one source `actionId` + `sourcePort` to target `actionId` + `targetPort`.

Validation rules (register-time)

1. `actionType` unique per org for a given version; may match a built-in for an org override. 2. `actionType` kebab-case (lowercase letters, numbers, hyphens). 3. `handlerType` must be `"custom-action"` for these registrations. 4. `customActionConfig` required when handlerType is custom-action. 5. `submitEndpoint` and `statusEndpoint` must be valid HTTPS URLs. 6. `inputs`: at least one port. 7. `outputs`: at least one port. 8. Port `name` unique within inputs and within outputs. 9. Parameter `name` unique within parameters. 10. `orgId` is enforced by the API from auth, not from the JSON body; callers must send auth that resolves an org. 11. `relatedActions`: required, ≥1 entry. 12. `usage.commonPatterns`: required, ≥1 entry. 13. `usage.bestPractices`: required, ≥1 entry.

Agent workflow

1. Confirm `actionType`, `version`, endpoints, ports, parameters, and auth. 2. Fill `relatedActions` and `usage` with concrete, accurate strings (use catalog list to pick real actionType IDs). 3. Emit final JSON in a fenced `json` block; omit `orgId`. 4. Suggest `aio ffcpe catalog validate --file …` then `aio ffcpe catalog register --file …` (same JSON file).

Troubleshooting

orgId is required (401)

  • Org could not be resolved for the CLI request.
  • Run `aio console org select` and retry, or pass `--org-id` on `aio ffcpe catalog` commands if you must override.

relatedActions / usage.commonPatterns / usage.bestPractices required

  • Add at least one item to each (see Agent and discovery above).
  • Use `aio ffcpe catalog list` (and `--include-core` if you need built-in IDs) to pick valid `relatedActions` targets.

Action type already exists

  • Another registration already uses that `actionType` for your org/version context.
  • Use `aio ffcpe catalog update <actionType> --file …`, or choose a different `actionType`.

Invalid endpoint URL

  • `submitEndpoint` / `statusEndpoint` must be valid HTTPS URLs (typically your Runtime web action URLs).
  • Copy the web action base URL from `aio app deploy`, then append `/submit` and `/status`.
  • Use `/api/v1/web/<package>/<web-action>` — not `/apis/v1/`.

Auth mismatch (Missing required header(s): Authorization, x-api-key)

  • Default `mountFfcpeNodeRoutes` enables IMS inbound auth.
  • Catalog must declare `"authentication": { "type": "ims_service_token" }`, not `none`, unless the web action passes `authenticate: null`.
  • After fixing auth in `.entry.json`, run `aio ffcpe catalog update <actionType> --file …`.

Action registered but workflow fails

  • Confirm App Builder app is deployed and implements the expected submit/status contract.
  • Port names in the catalog must match what the app and workflow connections expect.
  • Check `actionSource` if both built-in and custom implementations exist.

Related skills

FAQ

Where should the catalog entry live?

Best practice is one file per action, named <action-name>.entry.json, co-located with that action's web and worker sources under actions/<action-name>/.

Should orgId go in the JSON body?

No. The API sets orgId from the x-gw-ims-org-id header or the Bearer token; including it in the body is not required and registration returns 401 if org can't be resolved.

Backend & APIsintegrationsbackenddocs

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.