API documentation for the user transfer endpoint.
POST /transfer_user
Creates a new user on the MyWage platform and initiates the desired onboarding flow. Almost all parameters except token and email are optional. The more data you pass, the more fields are pre-filled and the higher the conversion rate.
The endpoint accepts user details as JSON in the request body and transfers them to the MyWage database. On success, it returns a user ID and session token. Errors in the provided data or system errors are returned with appropriate status codes and error messages.
token and email are optional. Fields not submitted will be collected from the user during the onboarding flow — fields already submitted will not be requested again.
The endpoint supports four onboarding targets, configured via the partner token. Contact your account manager to request separate tokens for multiple targets.
Simple account creation. The user sets a password and gains access to the MyWage platform.
Key params: first_name, last_name, gender, birthday, address, phone_number
Extends registration with an optional debt counseling application step.
Additional: net_income, number_of_children, total_debt, total_monthly_debt_payment, total_number_of_loans
Registration + loan application. Data is pre-filled in the application form if passed via API.
Additional: net_income, preferred_loan_amount, preferred_loan_duration, loan_purpose, iban, and more.
Registration + small loan application. Amount up to €1.500, term 30 or 60 days.
Additional: small_loan_amount, small_loan_duration
POST https://app.mywage.de/api/1.1/wf/transfer_user
All parameters are sent as JSON in the request body.
| Parameter | Type | Status | Description |
|---|---|---|---|
token | string | Required | Your partner access token, provided by your MyWage account manager. |
email | string | Required | The user's email address. |
| Parameter | Type | Status | Description |
|---|---|---|---|
partner_id | string | Optional | Unique identifier (e.g. a click ID) for granular attribution of successful applications to traffic sources. |
channel | string | Optional | Free-text field to identify the traffic source (e.g. "website", "email", "test"). Useful when operating multiple channels. |
registration_mode | string | Optional | Controls the post-registration flow:default — Sends a link to account setup (password creation) to the user via email. Application is sent after.direct — Sends a direct link to the application via email. Account setup after.realtime — Like direct, plus: the link is also returned in the API response (for direct referral flows).
|
| Parameter | Type | Format / Values | Description |
|---|---|---|---|
academic_title | string | "Dr.", "Dr. Dr.", "Prof.", "Prof. Dr.", "Prof. Dr. Dr." | Academic title. |
first_name | string | 2–40 chars, no numbers | First name. |
last_name | string | 2–40 chars, no numbers | Last name. |
gender | string | "Männlich", "Weiblich", "Divers", "Keine Angabe" | Gender. |
birthday | string | YYYY.MM.DD | Date of birth. Example: "1985.03.15" |
place_of_birth | string | 2–40 chars, no numbers | City of birth. |
nationality | string | ISO 3166-1 alpha-2 | User's nationality. Example: "DE" |
family_status | string | "Ledig", "Verheiratet", "Geschieden", "Getrennt", "Verwitwet", "Eheähnliche Lebensgemeinschaft", "Eingetragene Lebenspartnerschaft" | Marital status. |
number_of_children | integer | 0 – 6 | Number of dependent children. |
iban | string | Valid IBAN format | User's IBAN. Example: "DE89370400440532013000" |
| Parameter | Type | Format / Values | Description |
|---|---|---|---|
street | string | 2–40 chars, first char not a number | Street name. |
house_number | string | Max 11 chars, first char must be a number | House number. |
postcode | string | 5 digits | Postal code. Example: "80331" |
city | string | 2–40 chars, no numbers | City of residence. |
living_situation | string | "Bei den Eltern", "Eigentum", "Miete", "Mietfrei", "Wohngemeinschaft" | Living situation. |
living_at_current_address_since | string | YYYY.MM.DD | Date since living at current address. |
is_property_owner | string | "True", "False" | Whether the user owns their home. |
adults_in_household | string | "1", "2" (= 2 or more) | Number of adults in household. Must be passed as a string. |
children_in_household | string | 0 – 6 | Number of children in household. |
phone_number | string | E.164, German mobile | Mobile phone number. Example: "+4917634501234" |
| Parameter | Type | Format / Values | Description |
|---|---|---|---|
job_type | string | Arbeitslos, Leitender Angestellter, Zeitarbeit, Schueler/Student, Selbstaendiger, Professioneller Soldat, Soldat, Angestellter Öffentlicher Dienst, Rentner, Pensionaer, Beamter, Nicht Erwerbstaetiger, Hausfrau/Hausmann, Auszubildender/Lehrling, Arbeiter Privatwirtschaft, Angestellter Privatwirtschaft, Arbeiter Öffentlicher Dienst | Type of employment. |
employer_name | string | 2–40 chars | Name of the employer. |
employer_street | string | 2–40 chars | Street of the employer's address. |
employer_house_number | string | Max 11 chars | House number of the employer. |
employer_postcode | string | 5 digits | Postal code of the employer. |
employer_city | string | 2–40 chars, no numbers | City of the employer. |
working_at_current_job_since | string | YYYY.MM.DD | Start date at current employer. |
is_in_probation_period | string | "True", "False" | Whether the user is in a probation period. |
current_job_contract_is_limited_till | string | YYYY.MM.DD | End date of a fixed-term contract. Leave empty if permanent. |
tax_class | string | "1" – "6" | German tax class. Must be passed as a string. |
net_income | integer | > 0 | Monthly net income in EUR. |
| Parameter | Type | Range | Description |
|---|---|---|---|
monthly_income_alimony | integer | 0 – 10.000 EUR | Monthly alimony income. |
monthly_income_child_or_care_allowance | integer | 0 – 10.000 EUR | Monthly child or care allowance. |
monthly_income_other | integer | 0 – 10.000 EUR | Other monthly income. |
monthly_income_pension | integer | 0 – 10.000 EUR | Monthly pension income. |
pension_start_date | string | YYYY.MM.DD | Start date of pension. |
monthly_income_verifiable_additional | integer | 0 – 10.000 EUR | Verifiable additional monthly income. |
date_since_income_verifiable_additional | string | YYYY.MM.DD | Start date of verifiable additional income. |
monthly_rent | integer | 0 – 2.500 EUR | Monthly rent incl. utilities. 0 if owner-occupied. |
monthly_expense_alimony | integer | 0 – 10.000 EUR | Monthly alimony expenses. |
monthly_expense_health_insurance | integer | 0 – 10.000 EUR | Monthly health insurance expenses. |
schufa_entry | string | "True", "False" | "True" if the user has a negative SCHUFA entry. Submit "False" if unknown. |
| Parameter | Type | Format / Values | Description |
|---|---|---|---|
preferred_loan_amount | integer | 1.000 – 10.000 EUR | Desired loan amount. |
preferred_loan_duration | integer | 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 84, 96, 108, 120 | Desired repayment duration in months. |
loan_purpose | string | "Autokredit (Gebrauchtwagen bis 3 Jahre)", "Autokredit (Neuwagen)", "Dispo-Umschuldung", "Elektronik", "Immobilienkredit", "Kredit", "ohne SCHUFA", "Kreditumschuldung", "Möbel", "Privatkredit", "Ratenkredit", "Renovierung", "Umzug", "Urlaub", "zur freien Verfügung" | Purpose of the loan. |
| Parameter | Type | Description |
|---|---|---|
total_debt | integer | Total outstanding debt in EUR. |
total_monthly_debt_payment | integer | Total monthly debt repayment in EUR. |
total_number_of_loans | integer | Total number of active loans. |
| Parameter | Type | Values | Description |
|---|---|---|---|
small_loan_amount | integer | 100, 200, 400, 600, 800, 1.000, 1.250, 1.500 | Desired small loan amount in EUR. |
small_loan_duration | integer | 30, 60 | Desired loan duration in days. |
{
"status": "success",
"response": {
"valid_steps": [
"first name", "last name", "gender",
"birthday and place of birth", "family status",
"job type", "address", "phone number", "schufa entry"
],
"errors": [],
"request_id": "1715353616817x...",
"token": "bus|1715353616579x...|1715353616627x...",
"user_id": "1715353616579x...",
"expires": 86400
}
}
registration_mode: realtimeAdditionally contains a link field — a one-time direct link to the application that can be shown or forwarded to the user immediately.
{
"status": "success",
"response": {
"valid_steps": [...],
"errors": [],
"request_id": "XXX",
"link": "ONE_TIME_LINK_FOR_CUSTOMER",
"token": "bus|XXX|XXX",
"user_id": "XXX",
"expires": 86400
}
}
| Field | Type | Description |
|---|---|---|
status | string | "success" if the request was processed. |
valid_steps | array | List of data fields successfully validated and accepted. |
errors | array | Fields with invalid format. Empty if all data was valid. |
request_id | string | Unique identifier for this request. |
token | string | Session token for the created user. Valid for expires seconds. |
user_id | string | ID of the newly created user. |
expires | integer | Token validity in seconds (typically 86400 = 24 hours). |
link | string | Only with realtime mode: one-time direct link for the user. |
curl -X POST https://app.mywage.de/api/1.1/wf/transfer_user \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "token": "your_partner_token"}'
POST https://app.mywage.de/api/1.1/wf/transfer_user
{
"token": "TOKEN",
"partner_id": "abc123",
"channel": "website",
"registration_mode": "direct",
"first_name": "Max",
"last_name": "Mustermann",
"gender": "Männlich",
"birthday": "1995.04.05",
"place_of_birth": "Berlin",
"nationality": "DE",
"family_status": "Ledig",
"number_of_children": 1,
"street": "Koppenplatz",
"house_number": "88",
"postcode": "10115",
"city": "Berlin",
"phone_number": "+4917666390000",
"email": "max@example.com",
"job_type": "Angestellter Privatwirtschaft",
"tax_class": "1",
"net_income": 3500,
"schufa_entry": "False",
"preferred_loan_amount": 5000,
"preferred_loan_duration": 36,
"loan_purpose": "Privatkredit"
}
200: "Not allowed").reason field for details.