Skip to content

Execution API set_xcom endpoint returns non-RFC 9457 error for invalid value #70044

Description

@KushagraB424

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:

  1. Send a POST request to /execution/xcoms/{dag_id}/{run_id}/{task_id}/{key} with parameters that cause XComModel.set() to raise a ValueError.
  2. 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?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:APIAirflow's REST/HTTP APIarea:corekind:bugThis is a clearly a bugneeds-triagelabel for new issues that we didn't triage yet

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions