{"openapi":"3.1.0","info":{"title":"Dify Apps (BYOK) API","version":"0.1.0","description":"Dify Apps (BYOK) lets an AI assistant read your own Dify Apps data through the Dify Apps API with a key you supply (Dify app API key (one key per app)). Read-only: 10 tools (get_app_info, get_app_parameters, get_app_site_settings, list_conversations, list_messages, list_conversation_variables, list_app_feedbacks, list_annotations, list_workflow_logs, get_workflow_run). The BYOK key travels with...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-dify-app.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-dify-app/docs"},"termsOfService":"https://connectorbay.com/byok-dify-app/terms"},"servers":[{"url":"https://byok-dify-app.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-dify-app/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_app_info":{"post":{"operationId":"get_app_info","summary":"Show the app the key belongs to: name, description, mode (chat, workflow, agent, completion), tags and author. Use for \"","description":"Show the app the key belongs to: name, description, mode (chat, workflow, agent, completion), tags and author. Use for \"Which Dify app is this API key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_app_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_app_parameters":{"post":{"operationId":"get_app_parameters","summary":"Show the app's front-end configuration: opening statement, suggested questions, input form fields and upload limits. Use","description":"Show the app's front-end configuration: opening statement, suggested questions, input form fields and upload limits. Use for \"What inputs does my Dify app ask for and what does it say when a chat opens\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_app_parametersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_app_site_settings":{"post":{"operationId":"get_app_site_settings","summary":"Show the hosted web app settings of the app: title, description, default language, theme and disclaimer. Use for \"What i","description":"Show the hosted web app settings of the app: title, description, default language, theme and disclaimer. Use for \"What is the title and default language of my Dify web app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_app_site_settingsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conversations":{"post":{"operationId":"list_conversations","summary":"List the conversations of one end user of a chat-type app, most recently active first, with name, status and times (Unix","description":"List the conversations of one end user of a chat-type app, most recently active first, with name, status and times (Unix seconds). Use for \"What conversations has end user 'user-123' had with my Dify chatbot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End-user identifier your application uses (the same value it passes when it chats). Conversations are scoped to this user.","title":"User"},"last_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last conversation of the previous page.","title":"Last Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many conversations to return (1 to 100).","title":"Limit"},"sort_by":{"anyOf":[{"enum":["created_at","-created_at","updated_at","-updated_at"],"type":"string"},{"type":"null"}],"default":"-updated_at","description":"Order: created_at, -created_at, updated_at or -updated_at (a leading minus means newest first).","title":"Sort By"}},"title":"list_conversationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_messages":{"post":{"operationId":"list_messages","summary":"List the messages of one conversation, newest first, with the question, the answer, token counts, latency and feedback r","description":"List the messages of one conversation, newest first, with the question, the answer, token counts, latency and feedback rating. Use for \"Show the last messages of conversation abc in my Dify chatbot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conversation_id":{"description":"Id of the conversation, from list_conversations.","maxLength":200,"title":"Conversation Id","type":"string"},"user":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End-user identifier your application uses (the same value it passes when it chats). Conversations are scoped to this user.","title":"User"},"first_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: the id of the first message of the current page, to load older messages.","title":"First Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many messages to return (1 to 100).","title":"Limit"}},"required":["conversation_id"],"title":"list_messagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conversation_variables":{"post":{"operationId":"list_conversation_variables","summary":"List the variables a chat app stored in one conversation, with name, type, value and description. Use for \"What variable","description":"List the variables a chat app stored in one conversation, with name, type, value and description. Use for \"What variables are saved in conversation abc of my Dify app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conversation_id":{"description":"Id of the conversation, from list_conversations.","maxLength":200,"title":"Conversation Id","type":"string"},"user":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End-user identifier your application uses (the same value it passes when it chats). Conversations are scoped to this user.","title":"User"},"last_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last variable of the previous page.","title":"Last Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many variables to return (1 to 100).","title":"Limit"},"variable_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only variables with exactly this name.","title":"Variable Name"}},"required":["conversation_id"],"title":"list_conversation_variablesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_app_feedbacks":{"post":{"operationId":"list_app_feedbacks","summary":"List the likes and dislikes that end users and admins left on the app's messages, with comment and times. Use for \"What ","description":"List the likes and dislikes that end users and admins left on the app's messages, with comment and times. Use for \"What feedback have people left on my Dify app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":101,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Feedback items per page (1 to 101).","title":"Limit"}},"title":"list_app_feedbacksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_annotations":{"post":{"operationId":"list_annotations","summary":"List the saved question and answer annotations of the app, optionally filtered by keyword, with hit counts. Use for \"Whi","description":"List the saved question and answer annotations of the app, optionally filtered by keyword, with hit counts. Use for \"Which annotations does my Dify app have about refunds\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"keyword":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only annotations whose question or answer contains this text.","title":"Keyword"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Limit"}},"title":"list_annotationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_workflow_logs":{"post":{"operationId":"list_workflow_logs","summary":"List past runs of a workflow or chatflow app with status, steps, tokens, elapsed time and who triggered them. Use for \"W","description":"List past runs of a workflow or chatflow app with status, steps, tokens, elapsed time and who triggered them. Use for \"Which of my Dify workflow runs failed recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["succeeded","failed","stopped"],"type":"string"},{"type":"null"}],"default":null,"description":"Only runs with this status.","title":"Status"},"keyword":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only logs that match this text.","title":"Keyword"},"created_at__after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs created after this ISO 8601 time, for example 2026-10-01T00:00:00Z.","title":"Created At  After"},"created_at__before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs created before this ISO 8601 time.","title":"Created At  Before"},"page":{"anyOf":[{"maximum":99999,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Limit"}},"title":"list_workflow_logsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_workflow_run":{"post":{"operationId":"get_workflow_run","summary":"Get one workflow run: status, error, inputs, outputs, steps, tokens and elapsed time. Use for \"What happened in Dify wor","description":"Get one workflow run: status, error, inputs, outputs, steps, tokens and elapsed time. Use for \"What happened in Dify workflow run abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workflow_run_id":{"description":"Id of the workflow run, from list_workflow_logs.","maxLength":200,"title":"Workflow Run Id","type":"string"}},"required":["workflow_run_id"],"title":"get_workflow_runArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}