Dify Human Input API
Endpoints for resuming paused workflows that require human input. 2 operation(s) from the Dify Service API.
Endpoints for resuming paused workflows that require human input. 2 operation(s) from the Dify Service API.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/dify-human-input-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Dify Service Human Input API
description: REST API for Dify applications and knowledge bases. Application endpoints authenticate with an app API key; knowledge endpoints authenticate with a dataset API key.
version: 1.0.0
servers:
- url: https://{api_base_url}
description: Base URL of the Dify Service API. For self-hosted deployments, replace it with your own API base URL.
variables:
api_base_url:
default: api.dify.ai/v1
description: Host and path of the API base URL, without the `https://` prefix.
security:
- ApiKeyAuth: []
tags:
- name: Human Input
description: Endpoints for resuming paused workflows that require human input.
paths:
/form/human_input/{form_token}:
get:
tags:
- Human Input
summary: Get Human Input Form
description: '**Available for**: Chatflow, Workflow apps.
Returns the contents of a paused Human Input form. Requires web app delivery.
For the full sequence of Human Input calls, see Human Input Flow.'
operationId: getChatflowHumanInputForm
parameters:
- name: form_token
in: path
required: true
schema:
type: string
description: Access token for the paused form, returned in the `human_input_required` event from the Run Workflow or Send Chat Message endpoint in streaming mode.
responses:
'200':
description: Form contents retrieved successfully.
content:
application/json:
schema:
type: object
properties:
form_content:
type: string
description: Pre-rendered form body with workflow variables substituted.
inputs:
type: array
items:
type: object
properties:
type:
type: string
description: 'Form input control type. Available values: `paragraph` (multi-line text input), `select` (single-choice from a list), `file` (single file upload), and `file-list` (multiple file uploads).'
output_variable_name:
type: string
description: Variable name used to reference this input's submitted value inside the workflow. Corresponds to the key in the submission `inputs` object.
default:
type:
- object
- 'null'
description: Raw default-value configuration for `paragraph` inputs. The client should not resolve this directly; use `resolved_default_values` to display defaults. absent for other input types or when no default is configured.
properties:
type:
type: string
description: Source of the default. `constant` means `value` is used as a literal string; `variable` means `selector` points to a workflow variable.
selector:
type: array
items:
type: string
description: Variable reference path (for example, `["node_id", "var_name"]`) when `type` is `variable`. Must contain at least two elements.
value:
type: string
description: Literal default value when `type` is `constant`. Always a string.
option_source:
type: object
description: Source of options for `select` inputs. Present only when `type` is `select`.
properties:
type:
type: string
enum:
- variable
- constant
description: Origin of the options. `constant` means `value` lists the options literally; `variable` means `selector` points to an `array[string]` workflow variable that provides them.
selector:
type: array
items:
type: string
description: Variable reference path when `type` is `variable`.
value:
type: array
items:
type: string
description: Literal option list when `type` is `constant`.
allowed_file_types:
type: array
items:
type: string
enum:
- image
- document
- audio
- video
- custom
description: 'File categories the recipient may upload. Present for `file` and `file-list` inputs. Values: `image`, `document`, `audio`, `video`, `custom`.'
allowed_file_extensions:
type: array
items:
type: string
description: Allowed file extensions when `allowed_file_types` includes `custom`. Include the leading `.` in each extension, for example `.md`. Present for `file` and `file-list` inputs.
allowed_file_upload_methods:
type: array
items:
type: string
enum:
- local_file
- remote_url
description: 'Upload methods the recipient may use. Values: `local_file`, `remote_url`. Present for `file` and `file-list` inputs.'
number_limits:
type: integer
description: Maximum number of files the recipient may upload. Present only for `file-list` inputs.
description: Form input field definitions.
resolved_default_values:
type: object
additionalProperties:
type: string
description: Pre-rendered values to display in the form. Keyed by input `output_variable_name`. Populated for `paragraph` inputs whose default resolves from a workflow variable; empty for inputs with no resolvable default. Display these values; do not re-resolve `default` on the client. All values are stringified.
user_actions:
type: array
items:
type: object
properties:
id:
type: string
maxLength: 20
pattern: ^[A-Za-z_][A-Za-z0-9_]*$
description: Identifier of the action button. Pass as `action` on [Submit Human Input Form](/en/api-reference/human-input/submit-human-input-form) when the recipient selects this button.
title:
type: string
maxLength: 100
description: Button label shown to the recipient.
button_style:
type: string
description: 'Visual style of the button. Available values: `primary`, `default`, `accent`, `ghost`.'
description: Available submission actions.
expiration_time:
type:
- integer
- 'null'
format: int64
description: Unix timestamp (seconds) after which this form can no longer be submitted.
examples:
success:
summary: Response Example
value:
form_content: Please review the draft, set a priority, and confirm or request changes.
inputs:
- type: paragraph
output_variable_name: feedback
default:
type: constant
selector: []
value: ''
- type: select
output_variable_name: priority
option_source:
type: constant
selector: []
value:
- low
- medium
- high
- type: file
output_variable_name: attachment
allowed_file_types:
- image
- document
allowed_file_extensions: []
allowed_file_upload_methods:
- local_file
- remote_url
- type: file-list
output_variable_name: attachments
allowed_file_types:
- image
- document
allowed_file_extensions: []
allowed_file_upload_methods:
- local_file
- remote_url
number_limits: 5
resolved_default_values:
feedback: ''
user_actions:
- id: approve
title: Approve
button_style: primary
- id: reject
title: Request changes
button_style: default
expiration_time: 1745510400
'404':
description: '`not_found` : Form not found.'
content:
application/json:
examples:
not_found:
summary: not_found
value:
status: 404
code: not_found
message: Form not found
'412':
description: '- `human_input_form_submitted` : Form already submitted. Forms are one-shot; the first response wins regardless of which user submits it.
- `human_input_form_expired` : The form''s expiration time passed before submission arrived.'
content:
application/json:
examples:
human_input_form_submitted:
summary: human_input_form_submitted
value:
status: 412
code: human_input_form_submitted
message: This form has already been submitted by another user, form_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890
human_input_form_expired:
summary: human_input_form_expired
value:
status: 412
code: human_input_form_expired
message: This form has expired, form_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890
x-mint:
href: /en/api-reference/human-input/get-human-input-form
metadata:
title: Get Human Input Form
sidebarTitle: Get Human Input Form
post:
tags:
- Human Input
summary: Submit Human Input Form
description: '**Available for**: Chatflow, Workflow apps.
Submits the recipient''s response to a paused Human Input form. On acceptance the workflow resumes; follow the resumed run via Stream Workflow Events. Requires web app delivery.'
operationId: submitChatflowHumanInputForm
parameters:
- name: form_token
in: path
required: true
schema:
type: string
description: Access token for the paused form, returned in the `human_input_required` event from the Run Workflow or Send Chat Message endpoint in streaming mode.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- inputs
- action
- user
properties:
inputs:
type: object
additionalProperties: true
description: 'Submitted values keyed by each input''s `output_variable_name`. Paragraph and select inputs take a string; a `file` input takes one file mapping; a `file-list` input takes an array of file mappings.
A file mapping is `{transfer_method: local_file, upload_file_id, type}` or `{transfer_method: remote_url, url, type}`, where `type` is one of the field''s `allowed_file_types`. For `local_file`, `upload_file_id` is the `id` from [Upload File](/en/api-reference/files/upload-file).
Use a consistent `user` across the run, upload, and submit.'
action:
type: string
description: ID of the action button the recipient selected. Must match one of the `id` values from the form's `user_actions` list (returned by [Get Human Input Form](/en/api-reference/human-input/get-human-input-form)).
user:
type: string
description: End-user identifier, defined by your app and unique within it. Service API and web app user IDs are separate, even when identical. See [End User Identity](/en/api-reference/guides/end-user-identity).
examples:
approve:
summary: Request Example
value:
inputs:
feedback: Looks good to ship
priority: high
attachment:
transfer_method: local_file
upload_file_id: 3c8fa1b2-7d4e-4f9a-b0c1-d2e3f4a5b6c7
type: image
attachments:
- transfer_method: local_file
upload_file_id: 1a77f0df-c0e6-461c-987c-e72526f341ee
type: document
- transfer_method: remote_url
url: https://example.com/report.pdf
type: document
action: approve
user: abc-123
responses:
'200':
description: Form submitted successfully. The response body is an empty object.
content:
application/json:
schema:
type: object
examples:
success:
summary: Response Example
value: {}
'400':
description: '- `bad_request` : Form recipient type is invalid.
- `invalid_form_data` : Submission failed validation against the form definition.'
content:
application/json:
examples:
bad_request:
summary: bad_request
value:
status: 400
code: bad_request
message: Form recipient type is invalid
invalid_form_data:
summary: invalid_form_data
value:
status: 400
code: invalid_form_data
message: 'Missing required inputs: feedback'
'404':
description: '`not_found` : Form not found.'
content:
application/json:
examples:
not_found:
summary: not_found
value:
status: 404
code: not_found
message: Form not found
'412':
description: '- `human_input_form_submitted` : Form already submitted. Forms are one-shot; the first response wins regardless of which user submits it.
- `human_input_form_expired` : The form''s expiration time passed before submission arrived.'
content:
application/json:
examples:
human_input_form_submitted:
summary: human_input_form_submitted
value:
status: 412
code: human_input_form_submitted
message: This form has already been submitted by another user, form_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890
human_input_form_expired:
summary: human_input_form_expired
value:
status: 412
code: human_input_form_expired
message: This form has expired, form_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890
x-mint:
href: /en/api-reference/human-input/submit-human-input-form
metadata:
title: Submit Human Input Form
sidebarTitle: Submit Human Input Form
components:
securitySchemes:
ApiKeyAuth:
type: http
scheme: bearer
bearerFormat: API_KEY
description: 'Every request authenticates with an API key: `Authorization: Bearer {API_KEY}`. App endpoints take an app API key; knowledge endpoints take a knowledge base API key ([Get Started](/en/api-reference/guides/get-started)).
Keep keys server-side; never embed them in client code. Requests with a missing or invalid key fail with HTTP `401` (`unauthorized`).'