Dify Completion Messages API
Operations related to text generation and completion. 2 operation(s) from the Dify Service API.
Operations related to text generation and completion. 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-completion-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.0.1
info:
title: Dify Completion Messages 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: Completion Messages
description: Operations related to text generation and completion.
paths:
/completion-messages:
post:
summary: Send Completion Message
description: '**Available for**: Text Generator apps.
Sends a request to a text-generation app and returns the generated text.'
operationId: createCompletionMessage
tags:
- Completion Messages
requestBody:
description: Request body to create a completion message.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompletionRequest'
examples:
streaming_example:
summary: Request Example - Streaming mode
value:
inputs:
city: San Francisco
query: Translate 'hello' to Spanish.
response_mode: streaming
user: abc-123
files:
- type: image
transfer_method: remote_url
url: https://cloud.dify.ai/logo/logo-site.png
blocking_example:
summary: Request Example - Blocking mode
value:
inputs:
city: New York
query: 'Summarize the following text: ...'
response_mode: blocking
user: def-456
responses:
'200':
description: 'Successful response. The content type and structure depend on the `response_mode`
parameter in the request.
- If `response_mode` is `blocking`, returns `application/json` with a `CompletionResponse`
object.
- If `response_mode` is `streaming`, returns `text/event-stream` with a stream of `ChunkCompletionEvent`
objects.'
content:
application/json:
schema:
$ref: '#/components/schemas/CompletionResponse'
examples:
blockingResponse:
summary: Response Example - Blocking mode
value:
event: message
task_id: c3800678-a077-43df-a102-53f23ed20b88
id: b01a39de-3480-4f3e-9f1e-4841a80f8e5e
message_id: 9da23599-e713-473b-982c-4328d4f5c78a
mode: completion
answer: Hello World!...
metadata:
usage:
prompt_tokens: 1033
prompt_unit_price: '0.001'
prompt_price_unit: '0.001'
prompt_price: '0.0010330'
completion_tokens: 128
completion_unit_price: '0.002'
completion_price_unit: '0.001'
completion_price: '0.0002560'
total_tokens: 1161
total_price: '0.0012890'
currency: USD
latency: 0.7682376249867957
created_at: 1705407629
text/event-stream:
schema:
type: string
description: 'A stream of Server-Sent Events. Parse it per the [SSE Streaming guide](/en/api-reference/guides/streaming):
read `data:` lines, dispatch on the `event` field, skip `ping` (keep-alive every 10
seconds). See `ChunkCompletionEvent` for the event structures.
**Stream lifecycle**: the reply streams as `message` chunks and ends with `message_end`.
An `error` event ends the stream early; HTTP status stays `200`, so inspect the event
payload for details.'
examples:
streamingResponse:
summary: Response Example - Streaming mode
value: 'data: {"event": "message", "task_id": "900bbd43-dc0b-4383-a372-aa6e6c414227",
"message_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "answer": " I", "created_at":
1679586595}
data: {"event": "message", "task_id": "900bbd43-dc0b-4383-a372-aa6e6c414227", "message_id":
"5ad4cb98-f0c7-4085-b384-88c403be6290", "answer": "''m", "created_at": 1679586595}
data: {"event": "message_end", "task_id": "900bbd43-dc0b-4383-a372-aa6e6c414227",
"id": "5e52ce04-874b-4d27-9045-b3bc80def685", "message_id": "5ad4cb98-f0c7-4085-b384-88c403be6290",
"metadata": {"usage": {"prompt_tokens": 1033, "prompt_unit_price": "0.001", "prompt_price_unit":
"0.001", "prompt_price": "0.0010330", "completion_tokens": 135, "completion_unit_price":
"0.002", "completion_price_unit": "0.001", "completion_price": "0.0002700", "total_tokens":
1168, "total_price": "0.0013030", "currency": "USD", "latency": 1.381760165997548}}}
'
'400':
description: '- `app_unavailable` : App unavailable or misconfigured.
- `provider_not_initialize` : No valid model provider credentials found.
- `provider_quota_exceeded` : Model provider quota exhausted.
- `model_currently_not_support` : Current model unavailable.
- `completion_request_error` : Text generation failed.
- `invalid_param` : The required `user` field is missing.'
content:
application/json:
examples:
app_unavailable:
summary: app_unavailable
value:
status: 400
code: app_unavailable
message: App unavailable, please check your app configurations.
provider_not_initialize:
summary: provider_not_initialize
value:
status: 400
code: provider_not_initialize
message: No valid model provider credentials found. Please go to Settings -> Model
Provider to complete your provider credentials.
provider_quota_exceeded:
summary: provider_quota_exceeded
value:
status: 400
code: provider_quota_exceeded
message: Your quota for Dify Hosted OpenAI has been exhausted. Please go to Settings
-> Model Provider to complete your own provider credentials.
model_currently_not_support:
summary: model_currently_not_support
value:
status: 400
code: model_currently_not_support
message: Dify Hosted OpenAI trial currently not support the GPT-4 model.
completion_request_error:
summary: completion_request_error
value:
status: 400
code: completion_request_error
message: Completion request failed.
invalid_param:
summary: invalid_param
value:
status: 400
code: invalid_param
message: Arg user must be provided.
'429':
description: '`too_many_requests` : Too many concurrent requests for this app.'
content:
application/json:
examples:
too_many_requests:
summary: too_many_requests
value:
status: 429
code: too_many_requests
message: Too many requests. Please try again later. The current maximum concurrent
requests allowed for 5b3d4f2a-1c9e-4a7b-8f6d-2e0c9a1b3d4f is 10.
'500':
description: '`internal_server_error` : Internal server error.'
content:
application/json:
examples:
internal_server_error:
summary: internal_server_error
value:
status: 500
code: internal_server_error
message: The server encountered an internal error and was unable to complete your
request. Either the server is overloaded or there is an error in the application.
x-mint:
href: /en/api-reference/completion-messages/send-completion-message
metadata:
title: Send Completion Message
sidebarTitle: Send Completion Message
/completion-messages/{task_id}/stop:
post:
summary: Stop Completion Message Generation
description: '**Available for**: Text Generator apps.
Stops a completion message generation task. Only supported in `streaming` mode.'
operationId: stopGenerate
tags:
- Completion Messages
parameters:
- name: task_id
in: path
required: true
description: Task ID, from the streaming events of [Send Completion Message](/en/api-reference/completion-messages/send-completion-message).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- user
properties:
user:
type: string
description: End-user identifier, defined by your app and unique within it. Must match
the `user` sent with the original message; if it differs, the stop silently does nothing
and still returns success. See [End User Identity](/en/api-reference/guides/end-user-identity).
examples:
example:
summary: Request Example
value:
user: abc-123
responses:
'200':
$ref: '#/components/responses/SuccessResult'
'400':
description: '- `app_unavailable` : App unavailable or misconfigured.
- `invalid_param` : The required `user` field is missing.'
content:
application/json:
examples:
app_unavailable:
summary: app_unavailable
value:
status: 400
code: app_unavailable
message: App unavailable, please check your app configurations.
invalid_param:
summary: invalid_param
value:
status: 400
code: invalid_param
message: Arg user must be provided.
x-mint:
href: /en/api-reference/completion-messages/stop-completion-message-generation
metadata:
title: Stop Completion Message Generation
sidebarTitle: Stop Completion Message Generation
components:
responses:
SuccessResult:
description: Operation successful.
content:
application/json:
schema:
type: object
properties:
result:
type: string
description: Operation result. Always `success`.
examples:
success:
summary: Response Example
value:
result: success
schemas:
CompletionRequest:
type: object
required:
- inputs
- user
properties:
inputs:
type: object
description: Values for the app's input variables, keyed by variable name. The expected names
and types come from the `user_input_form` field of [Get App Parameters](/en/api-reference/applications/get-app-parameters).
additionalProperties: true
query:
type: string
default: ''
description: The text to process. Legacy field; newer apps pass this inside `inputs` instead.
response_mode:
type: string
enum:
- streaming
- blocking
description: Mode of response return. `streaming` (recommended) uses SSE. `blocking` returns
after completion (may be interrupted for long processes). Cloudflare timeout is `100 s`. When
omitted, defaults to blocking behavior.
user:
type: string
description: End-user identifier, defined by your app and unique within it. Messages and files
are visible only to requests carrying the same `user`. See [End User Identity](/en/api-reference/guides/end-user-identity).
files:
type: array
items:
$ref: '#/components/schemas/InputFileObject'
description: 'Files to attach to the request. For a local file, first upload it via [Upload
File](/en/api-reference/files/upload-file), then reference the returned `id` as `upload_file_id`
with `transfer_method: local_file`.'
CompletionResponse:
type: object
properties:
event:
type: string
description: Event type, fixed as `message`.
task_id:
type: string
format: uuid
description: Task ID for request tracking and the [Stop Completion Message Generation](/en/api-reference/completion-messages/stop-completion-message-generation)
API.
id:
type: string
format: uuid
description: Unique ID of this response event.
message_id:
type: string
format: uuid
description: Unique message ID. Use this as the `message_id` parameter when calling feedback
or suggested questions endpoints.
mode:
type: string
description: App mode, fixed as `completion`.
answer:
type: string
description: Complete response content.
metadata:
type: object
description: Metadata including usage and retriever resources.
properties:
usage:
$ref: '#/components/schemas/Usage'
retriever_resources:
type: array
description: List of retriever resources used.
items:
$ref: '#/components/schemas/RetrieverResource'
created_at:
type: integer
format: int64
description: Message creation timestamp (Unix epoch seconds).
InputFileObject:
type: object
required:
- type
- transfer_method
properties:
type:
type: string
enum:
- image
- document
- audio
- video
- custom
description: File type.
transfer_method:
type: string
enum:
- remote_url
- local_file
description: 'Transfer method: `remote_url` for file URL, `local_file` for uploaded file.'
url:
type: string
format: url
description: File URL (when `transfer_method` is `remote_url`).
upload_file_id:
type: string
description: Uploaded file ID, obtained by uploading through the [Upload File](/en/api-reference/files/upload-file)
API in advance (when `transfer_method` is `local_file`).
anyOf:
- properties:
transfer_method:
enum:
- remote_url
url:
type: string
format: url
required:
- url
not:
required:
- upload_file_id
- properties:
transfer_method:
enum:
- local_file
upload_file_id:
type: string
required:
- upload_file_id
not:
required:
- url
RetrieverResource:
type: object
description: Citation and attribution information for a retriever resource.
properties:
id:
type: string
format: uuid
description: Unique ID of the retriever resource.
message_id:
type: string
format: uuid
description: ID of the message this resource belongs to.
position:
type: integer
description: Position of the resource in the list.
dataset_id:
type: string
format: uuid
description: ID of the knowledge base.
dataset_name:
type: string
description: Name of the knowledge base.
document_id:
type: string
format: uuid
description: ID of the document.
document_name:
type: string
description: Name of the document.
data_source_type:
type: string
description: Type of the data source.
segment_id:
type: string
format: uuid
description: ID of the specific chunk within the document.
score:
type: number
format: float
description: Similarity score of the resource.
hit_count:
type: integer
description: Number of times this chunk was hit.
word_count:
type: integer
description: Word count of the chunk.
segment_position:
type: integer
description: Position of the chunk within the document.
index_node_hash:
type: string
description: Hash of the index node.
content:
type: string
description: Content snippet from the resource.
summary:
type: string
nullable: true
description: Summary of the chunk content.
created_at:
type: integer
format: int64
description: Creation timestamp (Unix epoch seconds).
Usage:
type: object
description: Model usage information.
properties:
prompt_tokens:
type: integer
description: Number of tokens in the prompt.
prompt_unit_price:
type: string
format: decimal
description: Unit price per prompt token.
prompt_price_unit:
type: string
format: decimal
description: Price unit for prompt tokens.
prompt_price:
type: string
format: decimal
description: Total price for prompt tokens.
completion_tokens:
type: integer
description: Number of tokens in the completion.
completion_unit_price:
type: string
format: decimal
description: Unit price per completion token.
completion_price_unit:
type: string
format: decimal
description: Price unit for completion tokens.
completion_price:
type: string
format: decimal
description: Total price for completion tokens.
total_tokens:
type: integer
description: Total number of tokens used.
total_price:
type: string
format: decimal
description: Total price for all tokens.
currency:
type: string
description: Currency for pricing.
latency:
type: number
format: double
description: Latency in seconds.
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`).'
x-provenance:
generated: '2026-09-06'
method: derived
source: openapi/_original/dify-service-api-openapi.json
note: Per-tag split of the first-party Dify Service API OpenAPI harvested from https://docs.dify.ai/en/api-reference/openapi_service.json
(advertised in https://docs.dify.ai/llms.txt). Paths, schemas and operationIds are verbatim from that
spec.