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, so call Move a workflow to draft first and activate it again afterwards.
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 — the operation’s request body — and outputSchema — its success response. 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. 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. No provider configuration route returns it. Anything else you place in the configuration document is stored with the configuration, and a read can return it — so put each credential in config.auth. 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. An entry lets this configuration reach a host that resolves to a private or loopback address, which Flowker blocks by default. Cloud metadata and link-local addresses stay blocked, and no entry reaches them.

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 restricts the binding to the operations your workflows actually call. 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. No network call is made at this point.

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. 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 is what your inputMapping builds. 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. Nothing switches over on its own. Every reference is by id, so a workflow that is already running keeps calling the document it references. To move it, send the provider configuration’s config with the new openapi_schema_id through Update a provider configuration. config replaces the stored map rather than merging into it, so include base_url and auth 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 — it names everything that still points at it.

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, and each entry carries an id, a name and a status. An entry whose status is active blocks the delete; an inactive one only warns.
2

Delete it

Delete an OpenAPI schema answers by what still references the document:
To clear a block, disable the provider configuration with Disable provider configuration, or move the workflow to draft with Move a workflow to draft, then delete the document again.

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.