The hierarchy
IDs follow a strict naming convention: segments joined by double underscores (
__), each segment lowercase alphanumeric with single underscores. The ID encodes its own ancestry — an action ID is always platform__service__action, so five9__configuration_service__add_to_list tells you the platform (five9), the service (five9__configuration_service), and the operation (add_to_list) at a glance.
A task references all three levels plus a version:
action_version defaults to "1.0" and is reserved. The platform does not resolve action versions today: every task runs the single current implementation of the action it names, whatever this value says. The field is kept because per-account version pinning will need the slot, and it is validated in the meantime — if you supply an action_version that disagrees with the version the action is published at in the catalog, saving the definition is rejected with a 422 naming the field. The simplest thing to do is omit it and take the default.
Browsing the catalog
All catalog endpoints are read-only and require no authentication. List endpoints supportstatus, limit (default 50), and skip query parameters.
status: active (usable now), coming_soon, and inactive (platforms and services) or deprecated (actions).
The listings are the definitive answer to what you can use. Anything a listing returns can be named by a task in one of your flows; an ID that no listing returns is not available to you, and fetching it directly answers 404 exactly as an unrecognized ID does.
What each level tells you
Platform
Platform
Identity and discovery:
name, icon, tags (e.g. contact-center, ccaas), and status. Use tags to find platforms by capability.Platforms that scope their own tenant boundary also carry tenancy_unit, the vocabulary that platform uses for that boundary — Five9 returns {"name": "Domain", "plural": "Domains", "key_field": "domain_id", "key_source": "getVCCConfiguration.domainId"}. Rate limits and quotas apply per unit, so this tells you what the limits are counted against. key_field names the field on the tenancy record holding the canonical identifier, and key_source records the provider call that resolves it. Platforms with no tenant boundary of their own return null.Service
Service
What the service is, and how it is spoken to.
kind is the first fact: api for a service reached over a network, utility for a built-in that runs inside the platform, and mcp, cli or product for the other shapes a service can take.protocol says how an api is spoken to — REST, SOAP or GraphQL. It is null for anything that is not an api, because a built-in utility has no transport to name.auth_method is the one authentication mechanism the service speaks: basic_auth, api_key, jwt, oauth2, or none. It describes the credential material and how it is presented, and nothing else — it does not restate protocol, so a SOAP service using WS-Security over a username and password reports protocol: "SOAP" and auth_method: "basic_auth". A vendor product offering two mechanisms is published as two separate services, one per mechanism, so a credential is never ambiguous about which service it satisfies.requires_connection is derived from auth_method — it is true for every service whose auth_method is anything other than none. This is the field to read when you want to know whether a task calling this service must name a credential (in the task’s connection_id field); you never have to interpret the auth mechanism yourself, and the answer can never go stale against it. five9__configuration_service reports true; the built-in getdialed__utils reports false.Services also publish base_url, a docs_url pointing at the vendor’s own documentation, and rate_buckets — the provider’s documented rate limits, keyed by the provider’s own bucket name. See rate buckets below.Action
Action
The contract your task must satisfy:
parameters, output_schema, an optional sample_output, and batching capability (batch_capable plus batch_settings). batch_settings is null for actions that are not batch-capable.An action also declares how it behaves. implementation is handler for an action that runs a single operation, or composite for one assembled from a flow. input_shape says what it consumes — scalar for a single set of values, record_set for a set of records, or either. retry_safety says how safe it is to repeat after an uncertain outcome: idempotent may be repeated freely, at_most_once must not be repeated blindly, and unsafe must never be repeated. Read retry_safety before you build a flow that reruns a step.batch_settings is returned in full by GET /catalog/actions/{action_id} — you no longer have to infer a per-call limit from batch_capable alone. For five9__configuration_service__add_to_list it reports {"max_records_per_call": 50000, "supports_partial_success": true, "record_identifier_field": "number1", "merge_partition": "list_and_schema", "default_key_fields": ["number1"]}. merge_partition says how queued items are grouped before they are sent — list_and_schema groups them by the destination list and column mapping, action_only groups by the action alone — and default_key_fields names the columns that identify a record when you declare none.Rate buckets
A service’srate_buckets field publishes the provider’s own documented rate limits. Each bucket is keyed by the name the provider uses for it (for Five9, its apiOperationType values such as Query, Modify, and Upload) and reports the caps per time window, in seconds:
windows maps a window length in seconds — 60 (minute), 3600 (hour), 86400 (day) — to the maximum number of calls allowed in it. max_records_per_request is the per-call payload cap, or null where the provider documents none. min_interval_ms is the provider’s default minimum interval between two calls on this bucket — a spacing floor for providers whose real constraint is per-second rather than per-minute — or null where there is none. member_action_ids lists the actions that consume the bucket; an action can belong to more than one bucket when the provider documents it under several.
default_lane_by_action and default_lane seed which named dispatch lane each action starts in — compliance, interactive, bulk, or backfill. An admin can override the placement per Domain; the catalog only supplies the default.
The bucket keys are the provider’s own operation-type names — for Five9, its apiOperationType values — so a live counter reading from the platform maps onto these keys directly, with no translation table in between. That is what lets a Domain seed its caps from the catalog and then correct them against what Five9 actually reports.
These are the provider’s published limits for the platform as a whole, not your account’s remaining budget. Your account’s effective budget lives on the Domain record, which applies your safety margin on top of these caps. A single action can also consume more than one bucket, so pace high-volume writes against the tightest window that applies.
Action parameters
Each action publishes a complete schema for every parameter it accepts — enough to build the input form for it without knowing anything about the action in advance. Every field declares atype, a description, and a sensitivity classification; the rest are presentation and validation hints. Three of the parameters five9__configuration_service__add_to_list publishes:
sensitivity is the field to read before you log, store, or forward a value. Every parameter carries one — there is no unclassified field — so a pii or secret input is always identifiable from the catalog alone, without knowing what the action does.
Your task’s parameters object supplies these values, with expressions anywhere you need runtime data. The output_schema documents the fields the action returns using the same field schema, which downstream steps can reference as {{step_id.task_id.output.<field>}}.
What is checked when you save
A flow definition is validated against the catalog at save time, so a task that could never run is rejected before it ever gets scheduled. Each of these returns a422 naming the offending step, task, and field:
Only the first problem per task is reported, so fix them one at a time; problems in different tasks are all reported together in a single response.
What’s in the catalog
Five9 is the flagship platform: contact center operations against the Five9 Configuration Service, including dialing-list actions likefive9__configuration_service__add_to_list and compliance actions like five9__configuration_service__add_numbers_to_dnc, which adds numbers to your domain’s Do Not Call list. DNC is bidirectional: five9__configuration_service__remove_numbers_from_dnc takes numbers back off the list. These actions require a credential holding your Five9 login, and the list operations are batch-capable for batched delivery.
Both DNC actions are batch-capable and declare
supports_partial_success: false — one invalid number rejects the whole request. See batching before sending large DNC groups.getdialed platform) run inside the platform and need no credential. There are three services, and each declares auth_method: "none", so requires_connection is false and tasks calling their actions name no credential.
getdialed__utils — general helpers:
getdialed__records — record transforms, each reading a set of records and producing a new one:
getdialed__data — writes into a data store:
Next steps
Credentials
Store the secrets for the platforms your tasks call.
Flow definitions
Assemble catalog actions into steps and tasks.
Batched delivery
Use batch-capable actions for high-volume writes.
API reference
Full request and response schemas for every catalog endpoint.