fix(webhooks): use HTTP 428 instead of 412 for unprovisioned users

428 (Precondition Required, RFC 6585) is the correct semantic — the
request requires the client to complete a prerequisite step (Login Flow
v2 provisioning) before retrying. 412 (Precondition Failed) is for
header-based preconditions like ETags / If-Match.

No behavior change beyond the status code; same JSON payload.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Chris Coutinho
2026-05-04 00:15:55 +02:00
co-authored by Claude Opus 4.7
parent a0e484d95b
commit b3a7587f1a
3 changed files with 16 additions and 14 deletions
+4 -4
View File
@@ -91,7 +91,7 @@ async def get_installed_apps(request: Request) -> JSONResponse:
logger.info("Provisioning required for user %s: %s", user_id, e)
return JSONResponse(
{"error": "Provisioning required", "message": str(e)},
status_code=412,
status_code=428,
)
except Exception as e:
logger.error("Error getting installed apps for user %s: %s", user_id, e)
@@ -145,7 +145,7 @@ async def list_webhooks(request: Request) -> JSONResponse:
logger.info("Provisioning required for user %s: %s", user_id, e)
return JSONResponse(
{"error": "Provisioning required", "message": str(e)},
status_code=412,
status_code=428,
)
except Exception as e:
logger.error("Error listing webhooks for user %s: %s", user_id, e)
@@ -232,7 +232,7 @@ async def create_webhook(request: Request) -> JSONResponse:
logger.info("Provisioning required for user %s: %s", user_id, e)
return JSONResponse(
{"error": "Provisioning required", "message": str(e)},
status_code=412,
status_code=428,
)
except Exception as e:
logger.error("Error creating webhook for user %s: %s", user_id, e)
@@ -302,7 +302,7 @@ async def delete_webhook(request: Request) -> JSONResponse:
logger.info("Provisioning required for user %s: %s", user_id, e)
return JSONResponse(
{"error": "Provisioning required", "message": str(e)},
status_code=412,
status_code=428,
)
except Exception as e:
logger.error("Error deleting webhook for user %s: %s", user_id, e)