[ChatGPT Desktop][Upwork plugin] Freelancer account is intermittently routed as Client/Agency; proposal confirmation schema mismatch
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What issue are you seeing?
The official Upwork plugin is connected to a valid Upwork Freelancer account, but the connector intermittently misroutes the account role.
One tool call correctly identifies the account as:
- role:
TALENT - role_label:
Freelancer
Immediately afterward, freelancer-only actions can fail as if the account were not a freelancer account, or as if a Client/Agency account were required.
Observed examples include:
- freelancer proposal reads failing with a message equivalent to:
requires a Freelancer or Agency account and is not available for the current account - freelancer financial/dashboard reads failing with the same account-role mismatch
- marketplace job search (
find_jobs) intermittently returning an incorrect Client/Agency-role requirement
There is also a separate proposal-submission schema/runtime mismatch:
manage_proposalsdocumentation instructed the agent to useconfirm_previewwith a returnedpreview_id- the exposed tool surface provided
confirm_draft, which expects adraft_id - using the returned preview identifier with
confirm_draftfailed - switching the Upwork plugin tool mode from
full_listtosearch_executedid not resolve the mismatch
Because of this, the proposal had to be completed through browser/Work automation on Upwork directly instead of through the plugin.
What steps can reproduce the bug?
- Connect an Upwork Freelancer account to ChatGPT.
- Call the account-listing action.
- Confirm the account is returned as
TALENT/Freelancer. - Immediately call freelancer-only actions such as proposal list, freelancer dashboard/financials, or marketplace job search.
- Observe that one or more calls may fail because the connector treats the current account as if it were not a Freelancer account or requires Client/Agency context.
- Start a freelancer proposal flow.
- Observe that the proposal tooling/documentation may return a
preview_idand instruct the agent to callconfirm_preview, while the exposed confirmation tool isconfirm_draftand requires adraft_id. - Attempting to complete the flow through the exposed confirmation tool fails.
The account-role behavior is intermittent, but the same connected account can be correctly recognized as Freelancer in one call and rejected as non-Freelancer in the next.
What is the expected behavior?
A connected Upwork TALENT / Freelancer account should consistently retain Freelancer context across all relevant plugin calls, including marketplace job search, proposals, freelancer dashboard/financials, and proposal submission.
The proposal submission contract should also be internally consistent: the create step should return the identifier expected by the exposed confirmation step, and the documented confirmation action should actually exist in the tool surface.
Additional information
- Platform: ChatGPT desktop app on Windows
- Subscription: ChatGPT Plus
- Date observed: September 7, 2026
- The affected Upwork account is a real Freelancer account and the final proposal was successfully submitted through Upwork's website using browser/Work automation.
- Public report intentionally omits account IDs, proposal IDs, email addresses, and other personal identifiers.
Codex/ChatGPT feedback was also submitted from the app.
Feedback ID:
no-active-thread-01a07d86-a4cb-7f11-8d73-72558ad87e7c
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no repository files, tests, or entry points. Start by locating the Upwork connector, account-context handling, and proposal tool definitions, then trace how role data and proposal identifiers move between calls. Done means Freelancer context remains consistent and the documented proposal confirmation contract matches the exposed tools.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100