Per User Oauth
Finalize consent flow
Finalizes the consent flow atomically:
- Creates a
TablePerUserOAuthSession(24h Bifrost session token) - Transfers upstream tokens from the flow proxy to the session
- Issues a single-use
TablePerUserOAuthCode(5-minute TTL, PKCE-bound) - Deletes the
PendingFlow - Redirects to the MCP client's
redirect_uriwithcodeandstate
The MCP client then exchanges the code at /api/oauth/per-user/token.
Request body is application/x-www-form-urlencoded (browser form submission).
AuthorizationBearer <token>
Bearer token authentication. Use your MPilot virtual-key JWT or admin JWT.
Virtual keys (prefixed with sk-bf-) can also be passed here.
In: header
flow_idstring
Pending flow ID
Response Body
curl -X POST "https://loading/{AI_GATEWAY_URL}/api/oauth/per-user/consent/submit" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'flow_id=string'Empty
{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}