Under which category would you file this issue?
Airflow Core
Apache Airflow version
main
What happened and how to reproduce it?
Issue Description
In the Task Execution API, when a worker attempts to set an XCom via the set_xcom endpoint and the underlying XComModel.set() raises a ValueError (for example, if the DAG run or task instance cannot be resolved), the API currently rejects the request and raises an HTTPException with a 404 Not Found status.
However, the detail returned is just the raw exception string:
raise HTTPException(status.HTTP_404_NOT_FOUND, str(e))
This violates the Airflow RFC 9457 error response requirements for the Execution API, which mandate that domain-layer exceptions should be caught and returned as structured detail schemas (e.g., {"reason": "...", "message": "..."}).
Steps to reproduce:
- Send a POST request to
/execution/xcoms/{dag_id}/{run_id}/{task_id}/{key} with parameters that cause XComModel.set() to raise a ValueError.
- Observe the 404 response payload format and see that it is just a plain string instead of a valid RFC 9457 dictionary.
What you think should happen instead?
The exception handler should return an RFC 9457 compliant detail dictionary, for example:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail={"reason": "not_found", "message": str(e)},
)
Operating System
Not Applicable
Deployment
None
Apache Airflow Provider(s)
No response
Versions of Apache Airflow Providers
No response
Official Helm Chart version
Not Applicable
Kubernetes Version
Not Applicable
Helm Chart configuration
Not Applicable
Docker Image customizations
Not Applicable
Anything else?
No response
Are you willing to submit PR?
Code of Conduct
Under which category would you file this issue?
Airflow Core
Apache Airflow version
main
What happened and how to reproduce it?
Issue Description
In the Task Execution API, when a worker attempts to set an XCom via the
set_xcomendpoint and the underlyingXComModel.set()raises aValueError(for example, if the DAG run or task instance cannot be resolved), the API currently rejects the request and raises anHTTPExceptionwith a404 Not Foundstatus.However, the
detailreturned is just the raw exception string:raise HTTPException(status.HTTP_404_NOT_FOUND, str(e))This violates the Airflow RFC 9457 error response requirements for the Execution API, which mandate that domain-layer exceptions should be caught and returned as structured detail schemas (e.g.,
{"reason": "...", "message": "..."}).Steps to reproduce:
/execution/xcoms/{dag_id}/{run_id}/{task_id}/{key}with parameters that causeXComModel.set()to raise aValueError.What you think should happen instead?
The exception handler should return an RFC 9457 compliant detail dictionary, for example:
Operating System
Not Applicable
Deployment
None
Apache Airflow Provider(s)
No response
Versions of Apache Airflow Providers
No response
Official Helm Chart version
Not Applicable
Kubernetes Version
Not Applicable
Helm Chart configuration
Not Applicable
Docker Image customizations
Not Applicable
Anything else?
No response
Are you willing to submit PR?
Code of Conduct