Skip to content

Mobile Exchange

POST
/auth/mobile/exchange
curl --request POST \
--url https://example.com/auth/mobile/exchange \
--header 'Content-Type: application/json' \
--data '{ "id_token": "example", "device_name": "example" }'

Exchange an OIDC ID token for an API token (mobile PKCE flow).

The mobile app performs the full OAuth2 PKCE flow directly with the OIDC provider, then sends the resulting ID token here. The backend validates the token via JWKS, upserts the user, and creates an API token that expires after 90 days.

Media typeapplication/json
MobileExchangeRequest
object
id_token
required
Id Token
string
<= 65536 characters
device_name
Any of:
string
<= 100 characters

Example generated

{
"id_token": "example",
"device_name": "example"
}

Successful Response

Media typeapplication/json
TokenLoginResponse
object
token
required
Token
string
user
required
UserOut

Schema for user profile response — ORM serialization via from_attributes.

object
id
required
Id
integer
sub
required
Sub
string
email
required
Any of:
string
name
required
Any of:
string
locale
Locale
string
default: fr
base_currency
Base Currency
string
default: EUR
theme
Theme
string
default: ledger
theme_mode
Theme Mode
string
default: light
date_format
Any of:
string
number_format
Any of:
string
font_size
Any of:
string
density
Any of:
string
report_frequency
Any of:
string
offer_rule_on_categorize
Offer Rule On Categorize
boolean
tour_seen
Tour Seen
boolean
setup_checklist_hidden
Setup Checklist Hidden
boolean
suggest_category_from_payee
Suggest Category From Payee
boolean
default: true
custom_css
Any of:
string
missing_rates_dismissed
Any of:
string
totp_enabled
Totp Enabled
boolean
is_admin
Is Admin
boolean
is_active
Is Active
boolean
default: true

Example

{
"user": {
"locale": "fr",
"base_currency": "EUR",
"theme": "ledger",
"theme_mode": "light",
"offer_rule_on_categorize": false,
"tour_seen": false,
"setup_checklist_hidden": false,
"suggest_category_from_payee": true,
"totp_enabled": false,
"is_admin": false,
"is_active": true
}
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object

Example generated

{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}