Skip to main content
Flowker ships connectors for the services in its catalog. When the service you want to call is your own — an internal API, a partner API, anything with a published OpenAPI document — you upload that document and a workflow node calls its operations directly. You do this once per document: upload it, create one provider configuration that points at it, then address one operation from each node that calls the service.

Before you begin


  • Your service’s OpenAPI 3.x document as a file, at most 8 MiB, declaring at least one operation.
  • The credentials your service requires, and the authentication method it expects. See Authentication for the methods Flowker supports.
  • A deployment whose schema registry has blob storage configured. SCHEMA_REGISTRY_S3_BUCKET holds the OpenAPI documents you upload — see Flowker environment variables.
  • A workflow in draft status to edit. An active workflow is locked. Deactivate it first, then move the inactive workflow to draft before editing and activating it again.
The Lerian Console covers the same path. Providers → + New Provider → Add your own API selects an uploaded document and sets the base URL and the authentication — see Adding a provider.

Step 1: Upload the OpenAPI document


1

Send the file

Call Upload an OpenAPI schema as multipart/form-data with three parts: the file, a name, and a version.
2

Keep the id

The 201 response describes what Flowker read out of the file. Its id is the value every later step references.

What a stored document is keyed by

name and version are yours to choose, up to 255 characters each. The pair is unique in your tenant: uploading the same name and version again answers FLK-0812. The id Flowker returns is a fresh UUID for each upload, and it is what everything else references — never the name or the version. Flowker parses the file before it stores it. A file that is not an OpenAPI 3.x document, or one that declares no operation, answers FLK-0900. A file over 8 MiB answers FLK-0901. Your uploaded documents are yours alone. A document is only visible to the tenant that uploaded it, and an id from another tenant never resolves.

Step 2: Read the operations you can call


1

List what you have stored

List OpenAPI schemas returns your documents as metadata only, without their content. It is paginated: limit, cursor, sortBy and sortOrder, and the response carries nextCursor and hasMore.
2

Read one document's operations

Get an OpenAPI schema returns the same metadata plus content — the stored file — and operations, one entry per operation the document declares.Copy the path and the method of the operation you want. Step 4 puts them on the node.
3

Read one operation's field names

Derive an operation schema takes a path and a method and returns inputSchema for the operation’s application/json request body and outputSchema for its first 2xx application/json response. Either field is absent when the document declares no such schema. For a non-JSON request body, use hasBody, bodyRequired, and bodyContentType. It also returns params, one entry per parameter the operation declares, each with its name, its in location and whether it is required.Those are the field names you write as mapping targets and sources in Step 4. Both query parameters are required, and method is case-insensitive and must be one of GET, PUT, POST, DELETE, OPTIONS, HEAD, PATCH or TRACE; a missing path or an unrecognised method answers FLK-0304. A path and method the document does not declare answers FLK-0902.

Step 3: Point a provider configuration at the document


Call Create a provider configuration with kind set to external_openapi. That kind is the bring-your-own-OpenAPI connection: it references your uploaded document instead of a catalog provider.

Where the credential goes

The secret inside config.auth is write-only on creation and update. Flowker sends it to your secrets backend, removes it from the configuration document before it saves the document, and resolves it from the backend at execution time. For an external_openapi configuration, get-by-id does not resolve or return the secret values in config.auth. Keep credentials in config.auth; other configuration values can be returned by a read. To rotate a secret later, send the new value in an update. To keep the current one, omit the field or send it blank while auth.type stays the same — see Authentication.

Where the host allow-lists are set

Both allow-lists belong to this create call, and to Update a provider configuration afterwards. allowedHosts names the hosts every node that calls through this configuration may reach; Flowker checks the request URL and each redirect hop against it at run time. An entry with a leading dot matches subdomains, so .acme-kyc.example.com matches api.acme-kyc.example.com. Entries are host names only, with no IP literal, no wildcard and no port. allowedPrivateHosts is the companion list for a service that lives on a private network. It does not override allowedHosts: when allowedHosts is non-empty, it must also include the private host. A matching allowedPrivateHosts entry only lifts the private or loopback IP block; cloud-metadata and link-local addresses remain blocked.

Bind the document

Add a schemaBindings entry for the document you referenced. Each entry names one stored document: type is "openapi", schemaId is the same id you put in config.openapi_schema_id, and the optional operations array scopes the stored binding and is validated against the document when you save the configuration. It does not verify what workflow nodes call or limit an external_openapi node at execution time; the node uses config.openapi_schema_id, operation_path, and operation_method. The binding is what makes the document’s dependants visible. With it, List resources referencing an OpenAPI schema reports this configuration, and a delete of the document is refused while the configuration is active — see Removing a document. Flowker resolves every binding when you save. A schemaId that names no document in your tenant answers FLK-0942, and an operations entry the document does not declare answers FLK-0943, each naming the failing entry. A malformed entry — an unknown type, a schemaId that is not a UUID, operations on a binding that is not openapi, or an operation with no path or method — answers FLK-0293.
The response returns the new configuration’s id. Keep it — Step 4 puts it in the providerConfigId of every node that calls this service.
Flowker checks the configuration before it stores it. A config with no openapi_schema_id, or one whose value is not a UUID, answers FLK-0946. An id that names no document in your tenant answers FLK-0947. A config.auth block Flowker cannot read — an unknown type, or a type missing one of its required fields — answers FLK-0948. Flowker does not call your target API here. It does read the referenced document and, when config.auth contains a secret, writes that secret to the configured secrets backend before it persists the configuration.

Step 4: Address an operation from a workflow node


An executor node names one operation of the document with two fields in its data, alongside the providerConfigId of the configuration from Step 3. Do not send executorId on such a node. Flowker resolves the provider configuration, recognises the kind, and fills the field in for you before it validates the workflow. The save path can persist a node missing either operation field, but execution then fails with FLK-0950 before Flowker sends a request. Every other node field behaves as Reference the provider configuration from a workflow node describes.

How the request is assembled

Flowker reads the operation out of the stored document at run time and builds the request from it:
  • The destination is config.base_url when the configuration sets it, otherwise the first usable servers entry of the document, joined with operation_path.
  • A path parameter takes its value from the node’s resolved data first, and from the request body second. Every path parameter needs a value.
  • A query or header parameter resolves the same way, and is left out when no value is found.
  • The request body with the default request_format (json) is what your inputMapping builds. xml_converted serializes that mapped object as XML; xml_passthrough ignores the mapping and forwards the webhook trigger’s original XML bytes. Write each target exactly as the operation’s request schema names it — there is no wrapper object and no prefix to add. Working with request and response data covers mappings and transformations in full.
The open-check node sends POST https://api.acme-kyc.example.com/v1/checks with the body its inputMapping built. Its outputMapping lifts two response fields, so the next node reads ${open-check.checkId}.A node that calls GET /v1/checks/{checkId} instead reads the parameter from the same node scope. Map a value onto checkId, and Flowker substitutes it into the path.
A webhook trigger can validate the inbound payload against one operation of the same document. Set input_contract to "openapi" and give the trigger openapi_schema_id, operation_path and operation_method — see Configuring a webhook trigger.

Step 5: Run it and confirm it worked


1

Activate the workflow

Call Activate a workflow. Activation registers the webhook route and resolves what the trigger’s contract references.
2

Run it

Call Execute a workflow with a fresh Idempotency-Key header, or send a request to the webhook route.
3

Read the step results

A node that reached your service records the response under its own id. With an outputMapping, the mapped names sit directly under that id — open-check.checkId. With no outputMapping, the node’s output keeps the response envelope, so the response body sits one level down, under body.

Publishing a new version of your document


A stored document does not change. To ship a revision, upload the file again under a new version; that gives you a second stored document with its own id. Uploading a new document does not change existing configurations. However, each executor node reads its provider configuration when it runs. Updating config.openapi_schema_id can change the document used by later nodes of an in-progress execution, so coordinate the cutover. Send the provider configuration’s config with the new id through Update a provider configuration. config replaces the stored map rather than merging into it, so include any configured base_url and auth values that you need to retain in the same call. Flowker revalidates the new id against your tenant, and answers FLK-0947 when it does not resolve. Check List resources referencing an OpenAPI schema on the previous document before you retire it. The response is a display list, not a complete inventory: it returns up to 100 entries in each of its two groups. An active provider configuration beyond that display limit still blocks deletion.

Spec versions for the services in the catalog


Flowker’s own catalog services resolve against a separate, shared registry of published specs. Three operations manage it. They never touch a document you uploaded in Step 1. The pin is per tenant. Publishing a version changes nothing for a tenant until that tenant pins it, so a new upload never moves a running workflow onto a different spec. Flowker reads your pinned version when it reports that service’s executor schemas in the catalog, so Get a catalog executor describes the version you chose.

Removing a document


1

Check what would break

List resources referencing an OpenAPI schema returns two groups, providerConfigurations and workflows. Both are always present, each carries up to 100 entries, and each entry carries an id, a name and a status. It is a display list, not a complete inventory: an active provider configuration beyond the display limit still blocks the delete, while an inactive entry only warns.
2

Delete it

Delete an OpenAPI schema answers by what still references the document:
To clear a block, disable the provider configuration or deactivate the active workflow. Move an inactive workflow to draft only if you need to edit it.

What goes wrong


See the Flowker error list for every code.

What’s next


Working with request and response data

Map values into the operation’s request body and read its response back out.

Configuring a webhook trigger

Validate an inbound payload against one operation of the same document.

Integration guide

Set the authentication, the retries and the circuit breaker every provider configuration shares.

OpenAPI schemas API

Explore the schema registry endpoints.