Slackbot
08/27/2025, 11:39 AMMarvin
08/27/2025, 11:39 AMMarvin
08/27/2025, 11:48 AMinfra_overrides
, manifest_path
, schedule
, schedules[].catchup
, schedules[].max_active_runs
).
- Your API at http://127.0.0.1:4200 is almost certainly a Prefect 3.x server, which rejects those 2.x-only fields with “extra_forbidden”.
- This exact behavior is documented here: 2.x client talking to 3.x server returns extra_forbidden (e.g., infra_overrides)
How to confirm
- Check the server version in the UI: open http://127.0.0.1:4200 and go to the “About” page (bottom-left). If it says 3.x, that’s the cause.
- You can also run:
prefect version
(That shows the client version; the UI is best for server.)
How to fix (choose one path)
1) Stay on Prefect 2.x
- Ensure your server is Prefect 2.19.x. If you’re running the server locally, reinstall/start a 2.x server the same way your client is installed.
- If you use Docker, pin the image to 2.19.7, e.g.:
docker run -p 4200:4200 <http://ghcr.io/prefecthq/prefect:2.19.7|ghcr.io/prefecthq/prefect:2.19.7> prefect server start
- After the server is 2.19.x, your existing prefect.yaml
and prefect deploy
command should work.
2) Upgrade to Prefect 3.x
- Upgrade your client and migrate your deployment config to 3.x fields. In 3.x:
- Remove 2.x-only fields: infra_overrides
, manifest_path
, schedule
, schedules[].catchup
, schedules[].max_active_runs
- Use a work pool with job_variables
instead of infra_overrides
for env/infra settings
- Keep schedules
but only use supported keys (e.g., cron
, timezone
)
- Concurrency/catchup behavior is handled differently (e.g., work pool/queue concurrency limits; server “late runs” setting)
- Docs:
- 2.x Deployments: https://docs-2.prefect.io/latest/concepts/deployments/
- 3.x prefect.yaml guide: https://docs-3.prefect.io/v3/how-to-guides/deployments/prefect-yaml
- 3.x REST API (create deployment): https://docs-3.prefect.io/v3/api-ref/rest-api/server/deployments/create-deployment
Note about the profile warning
- “Active profile 'local' set in the profiles file not found” is separate. You can resolve it by selecting an existing profile:
prefect profiles ls
prefect profile use default
…but it’s not the cause of the 422.
Would you like to stick with 2.x or move to 3.x? If you share your prefect.yaml
, I can suggest the minimal edits for either path.