mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-19 22:23:50 -04:00
[GH-ISSUE #4187] [BUG]: API request body is sent blank if there are ${variables} within request body JSON. Also some suggestions. #2664
Closed
opened 2026-02-22 18:30:40 -05:00 by yindo
·
6 comments
No Branch/Tag Specified
master
5846-bug-when-scrolling-up-scrolling-jumps
refactor-remove-workspace-pfp
5969-bug-stopgenerationbutton-disappears-on-the-first-prompt-that-initiates-an-agent-session
2235-bug-how-to-upload-a-folder-with-subfolders-with-files-to-anythingllm
5990-workspace-update-fails-with-unknown-argument-router_id-v1130v1150-intel-mac
opencomputer-examples
pg
feat/image-generation-translations
feat/image-generation
5924-bug-meeting-summary-fails-with-sincludes-is-not-a-function-when-default-llm-is-anthropic-claude
render
feat/uniform-modal-component
5883-bug-unescaped-content-in-json-strings-being-passed-to-document-generator-tools
5901-bug-api-update-embeddings-fails-prisma-argument-filename-is-missing-on-workspace_documentscreate-desktop-windows-v1141
hybrid-search
1981-translations
5752-bug-prompts-to-local-jan-endpoint-unresponsive
feat-disable-native-tool-calling-env-var
5676-bug-non-ollama-agent-providers-do-not-parse-and-present-reasoning-content
feat/markdown-web-scraping
5717-bug-apiv1documentupload-silently-drops-metadata-field-in-desktop-1130-arg-count-mismatch-nested-payload-key
fix/aibitat-context-overflow
5711-bug-erratic-deepseek-v4-flash-the-agent-model-failed-to-respond-400-the-reasoning_content
5631-feat-custom-api-request-timeouts-for-ai-providers
feat-reasoning-control
feat-agent-clarifying-questions-translations
5583-bug-lm-studio-provider-does-not-present-reasoning-output
5313-normalize-translations
feat/memory-translations
5305-lemonade-embedding-engine-swallows-errors-falsely-reports-documents-as-embedded
5060-bug-agent-interactions-agent-are-not-persisted-to-thread-history-via-api
pptx-subagent
feat-render-images-from-mcp-tool-results
stt-provider-expansion-openai-api-compatible
feat-file-search-agent-tool
feat-native-embedder-job-queue
5189-normalize-translations
feat-file-search-agent-tool-translations
i18n-eslint
5140-auto-migration
5112-bug-openrouter-failed-message-bug
3506-feat-parameters-for-openrouter-models
4992-feat-preserve-scroll-position
4973-bug-markdown-numbered-list-display-in-reasoning-pane
desktop
4938-bug-pending-chat-rerendering-ui-bug
quickstart-env
node-llama-cpp-in-container-cuda
node-llama-cpp-in-container
ollama-in-container
4817-feat-set-cooldown-per-mcp-server
4845-keyboard-shortcuts-to-navigate-in-chat
4844-feat-reorder-threads-by-latest-interaction
standardize-username-constraints-normalize-translations
4792-feat-refactor-workspacepfp-image
1382-embed-ip-improvements
1382-bug-embed-api-improvements
refactor-eslint-frontend
4687-feat-refactor-vector-db-providers
4615-feat-disable-apidocs-with-environment-variable
4559-feat-agent-web-search-enable-ordering-of-results
4599-bug-ollama-race-condition-bug
4572-bug-lmstudio-provided-llm-stopped-working-with-anything-llm-after-upgrading-to-190
4508-agent-youtube-transcript-analysis
4497-feat-workspace-names
frontend-eslint
ollama-lmstudio-auto-context-window
4431-validate-vector-database-connectioN
2019-slash-command-keyboard-selection
microsoft-foundry-provider
4431-validate-vector-database-connection
4325-sys-prompt-var-improvements
3209-feat-apiv1workspacestream-chat-sources-citations
4210-bug-voice-to-text-overwrite
4136-feat-jan-as-a-backend-server-option
4172-feat-openai-o3-support
1.8.3-rerelease
web-push-notifications-service
tasks
3955-feat-jinaai-embedder-provider-support
3921-feat-agent-skills-uiux-improvements
3901-bug-validfunccall-checks-optional-arguments
keyboard-dev
1787-custom-roles-and-permissions
add-jira-slack-data-connector
office-extension-wip
lightmode-dropdown-color-update
3586-bug-agent-flow-function-description-provided-by-user-is-not-seen-in-the-llm-query
3463-bug-agent-continues-to-run-if-request-failed-even-after-exit
3439-feat-call-variables-within-the-flow-api-block-url-field
3282-manager-view-models-workspace
3280-token-counting-server-side-truncation-improvements
3147-bug-embedded-chat-widget---not-considering-query-mode-option-always-working-in-chat-mode
2995-feat-disable-temperature-setting-for-deepseek-r1-deepseek-reasoner-model
2827-feat-perplexity-citations
2866-feat-finally-a-gemini-models-endpoint
2647-feat-hpp-header-for-a-c++-code-file-mime-addition
lancedb-revert
1656-feat-implement-tooltip-ui-designs
2011-feat-bump-perplexity-models
1873-feat-auto-add-and-watch-folder-for-document-uploads
1297-feat-gemini-agent-support
1759-bug-ui-bug-fixes
1686-feat-implement-winston-for-logging
1536-bug-toggling-on-users-can-delete-workspaces-does-not-take-effect
agent-ui-mobile-styles
1522-feat-chromadb-support
1595-bug-unable-to-get-live-web-search-and-browsing-agent-working-using-google-custom-search-engine-error-getaddrinfo-enotfound-http-errno-3008
1582-bug-lm-studio-does-not-allow-for-different-model-selection
1312-bug-usernames-should-not-be-case-sensitive-when-logging-in
1029-feat-hf-serverless-inference-api
1086-feat-implement-normalized-input-fields
knowledge-graph-support
644-bug-uploaded-file-name-does-not-match-the-displayed-file-name-after-the-upload
v1.15.0
v1.14.2
v1.14.1
v1.14.0
v1.13.0
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.0
v1.9.1
v1.9.0
v1.8.5
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.8
v1.7.6
v1.7.5
v1.7.4
v1.4.0
v1.3.0
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.0
Labels
Clear labels
Desktop
Docker
Integration Request
Integration Request
OS: Linux
OS: Mobile
OS: Windows
UI/UX
blocked
bug
bug
core-team-only
documentation
duplicate
embed-widget
enhancement
feature request
github_actions
good first issue
investigating
needs info / can't replicate
possible bug
pull-request
question
stage: specifications
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Mintplex-Labs/anything-llm#2664
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Jawzper on GitHub (Jul 22, 2025).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/4187
Originally assigned to: @shatfield4 on GitHub.
How are you running AnythingLLM?
AnythingLLM desktop app
What happened?
Issue
I just started playing around with agents recently, and I have been banging my head against the wall all day trying to figure out the cause of "status 400"/"unknown error" results I've been getting trying to use an agent to perform API calls. I have assumed user error up until now because I had never made an API call in my life until today, but it seems like something more might be going on here.
The AnythingLLM agent output:
On the LM studio backend I get:
Before and after that the agent appears to work through all the variables and then finally spits out a "sorry your tool call failed" type of message.
This is all with
"content": "${planner-instructions}\n${inputinstructions}"as part of my request body, which is all validated JSON in the correct format. What I discovered is that if I remove all the ${variables} that are in the JSON of my API call, the agent does its thing with no problems, the POST succeeds, the correct model loads, it's all good.So apparently the variables are the cause of my problem. Based on the documentation I was under the impression this should be fine so I am marking it as a bug, but maybe this is just a documentation issue: https://docs.anythingllm.com/agent-flows/blocks/api-call
So I must ask, is this expected behavior? What is the correct format for variables in the API POST json? Am I supposed to escape these brackets?
Enhancement ideas
Tangentially, this has all brought forth some suggestions that would have made my life much easier today:
Are there known steps to reproduce?
Create an agent flow with one or more variables defined.
Add and configure an API POST request block to request completion by LM studio.
Include the defined variable in the content of the request body.
Ask the agent to call the tool flow.
Expected outcome: Error 400, flow failed, AI apologies
@shatfield4 commented on GitHub (Jul 22, 2025):
I have tried replicating your bug here where we use 2 variables inside the body of a POST request in the agent flow builder but I'm unable to replicate this. Are you sure your variables have the correct spelling and casing? Are you setting the request body type to JSON? Closing for now but if you have any more info on how to replicate this, please let me know and we'd be more than happy to reopen the issue.
@Jawzper commented on GitHub (Jul 23, 2025):
Okay, it seems like I'll have to more careful with the syntax of my input instruction files, it seems like they aren't playing nice with the API call. Dumb mistake. Is there a way to escape an entire string in JSON?
I have run into more issues since then in further testing. Firstly it seems like the LM sometimes just straight up replaces or adds in its own values, so I've had to prompt against such behavior in the variable names themselves (add a variable called DONTCHANGEMYVARIABLES seems to have helped to prevent unpredictable variable modifications). So I am once again requesting a feature that allows to edit the Agent system prompt.
My current problem is that I seem to be consistently running into an issue of defined initial flow variables simply not being carried into the API call. It seems like it is being replaced with totally irrelevant information directly from my agent invocation.
For example, I have set up an "API-test" flow.
These flow variables are defined:
DONTCHANGEMYVARIABLES:
JUSTDONTinstructions1:
Disregard previous instructions. Reply only with a single word output, specifically the COLOUR from the following list of items:instructions2:
FROMFILEInstructions2 is defined by reding a text file, which says only
Banana, Cat, Purple, TwelveThe POST request body looks like this:
And the API call goes to direct output... here is the result:
As you can see it appears that the "instructions1" variable was replaced with a chunk of the user input, causing the instruction fail catastrophically. Why???
Update: I have read that qwen reasoning models are not suitable for tool calling, so I have tried with ToolACE-2-Llama-3.1-8B as well. Same result. (Also tried with llama-xLAM-2-8B-fc-r but it failed to call the API test flow at all).
@dnuno89 commented on GitHub (Oct 10, 2025):
Hi, I'm having the same issue but mine happens when I have a Notion MCP in my anythingllm_mcp_servers.json file (doesn't matter if it is enabled or not).
The contents of my anythingllm_mcp_servers.json file are:
@ChupaUps commented on GitHub (Feb 2, 2026):
I'm experiencing multiple issues with variable interpolation in the API Call block. When using ${variable} syntax within a JSON request body, the variables are either:
Not interpolated at all (empty body sent)
Converted to URL-encoded form data incorrectly
Replaced with irrelevant content from user input
Steps to Reproduce:
Create a flow with a variable containing JSON data
Set up an API Call block with POST method and Content-Type: application/json
In the request body, use ${variable} to reference the JSON
Execute the flow
Expected Behavior:
The variable should be interpolated and sent as valid JSON in the request body.
Actual Behavior:
Multiple incorrect behaviors observed:
"No body" - Empty request sent
Form URL-encoded - Body sent as ++%22content%22=... instead of JSON
Variable replacement - Variables replaced with user input fragments instead of their actual values
Log Examples:
Test Cases Tried:
Using ${variable} in JSON body
Using ${variable} in Raw text body
Different Content-Type headers
Various escaping methods for JSON strings
Different variable names and structures
Environment:
Anything LLM version: 1.9
Running in: Docker
API endpoints tested: webhook.site, custom services
Suggested Fixes:
Ensure proper JSON parsing when variables contain JSON strings
Maintain consistent Content-Type handling
Fix variable interpolation to avoid mixing with user input
Add debugging option to see actual interpolated body before sending
Workaround Attempted:
Tried separating variables, using different body types, and explicit JSON stringification - none worked reliably.
@ChupaUps commented on GitHub (Feb 4, 2026):
Solved by switching to version 1.10
@Jawzper commented on GitHub (Feb 6, 2026):
Thanks for the hard work. I gave it another try now, and it looks like the API call is indeed no longer blank, but as far as I can tell the Agent is still able to redefine variables arbitrarily, overwriting the user definitions.
Using a similar testing setup as before, I stored two halves of my instructions as variables - ie. instructions to choose the correct word from a list, and a list of random words that the AI has to choose the correct one from. The former was defined in the flow, the latter was defined by reading from a file. The former is still able to be overwritten by the Agent, causing the test to fail - you can see that instead of sending the actual instructions provided as instructions2, the AI redefined that variable and sent an arbitrary value of "do not modify variables". The other variable is also redefined, but it is corrected again after being loaded from file.
So half the instructions are not received, it does not know what to do with the list of items, and instead of getting "Purple" as an answer I get a line about how there are not enough instructions to complete the request.
It looks like loading variable data from file is happening after the LLM redefines your variables, but variables defined in the flow builder will not remain intact because the AI is able to freely modify them at some point. I am realizing this is likely just a limitation of using LLMs to make tool calls in the first place, but I think it should be clear to users that their AI might alter the variables unless defined by loading from file.
That said, I think it should not be necessary to make text files to hold every variable in. Perhaps adding a "Write Variable" flow block that allows the user to define or redefine variables AFTER the initial flow call is the only change needed here?
[BUG]: API request body is sent blank if there are ${variables} within request body JSON. Also some suggestions.to [GH-ISSUE #4187] [BUG]: API request body is sent blank if there are ${variables} within request body JSON. Also some suggestions.