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.

Description

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.

Maximum flexibility: All parameters except 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.

Onboarding Targets

The endpoint supports four onboarding targets, configured via the partner token. Contact your account manager to request separate tokens for multiple targets.

👤 User Registration

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

💸 Debt Counseling

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

🏦 Loan Application

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.

💶 Small Loan (Florin+ Kleinkredit)

Registration + small loan application. Amount up to €1,500, term 30 or 60 days.

Additional: small_loan_amount, small_loan_duration

Base URL

https://app.mywage.de/api/1.1/wf

Endpoint

POST https://app.mywage.de/api/1.1/wf/transfer_user

All parameters are sent as JSON in the request body.

Required Parameters

ParameterTypeStatusDescription
tokenstringRequiredYour partner access token, provided by your MyWage account manager.
emailstringRequiredThe user's email address.

Tracking & Flow Control

ParameterTypeStatusDescription
partner_idstringOptionalUnique identifier (e.g. a click ID) for granular attribution of successful applications to traffic sources.
channelstringOptionalFree-text field to identify the traffic source (e.g. "website", "email", "test"). Useful when operating multiple channels.
registration_modestringOptionalControls 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).

Personal Information

ParameterTypeFormat / ValuesDescription
academic_titlestring"Dr.", "Dr. Dr.", "Prof.", "Prof. Dr.", "Prof. Dr. Dr."Academic title.
first_namestring2–40 chars, no numbersFirst name.
last_namestring2–40 chars, no numbersLast name.
genderstring"Männlich", "Weiblich", "Divers", "Keine Angabe"Gender.
birthdaystringYYYY.MM.DDDate of birth. Example: "1985.03.15"
place_of_birthstring2–40 chars, no numbersCity of birth.
nationalitystringISO 3166-1 alpha-2User's nationality. Example: "DE"
family_statusstring"Ledig", "Verheiratet", "Geschieden", "Getrennt", "Verwitwet", "Eheähnliche Lebensgemeinschaft", "Eingetragene Lebenspartnerschaft"Marital status.
number_of_childreninteger0 – 6Number of dependent children.
ibanstringValid IBAN formatUser's IBAN. Example: "DE89370400440532013000"

Address

ParameterTypeFormat / ValuesDescription
streetstring2–40 chars, first char not a numberStreet name.
house_numberstringMax 11 chars, first char must be a numberHouse number.
postcodestring5 digitsPostal code. Example: "80331"
citystring2–40 chars, no numbersCity of residence.
living_situationstring"Bei den Eltern", "Eigentum", "Miete", "Mietfrei", "Wohngemeinschaft"Living situation.
living_at_current_address_sincestringYYYY.MM.DDDate since living at current address.
is_property_ownerstring"True", "False"Whether the user owns their home.
adults_in_householdstring"1", "2" (= 2 or more)Number of adults in household. Must be passed as a string.
children_in_householdstring0 – 6Number of children in household.
phone_numberstringE.164, German mobileMobile phone number. Example: "+4917634501234"

Employment

ParameterTypeFormat / ValuesDescription
job_typestringArbeitslos, 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 DienstType of employment.
employer_namestring2–40 charsName of the employer.
employer_streetstring2–40 charsStreet of the employer's address.
employer_house_numberstringMax 11 charsHouse number of the employer.
employer_postcodestring5 digitsPostal code of the employer.
employer_citystring2–40 chars, no numbersCity of the employer.
working_at_current_job_sincestringYYYY.MM.DDStart date at current employer.
is_in_probation_periodstring"True", "False"Whether the user is in a probation period.
current_job_contract_is_limited_tillstringYYYY.MM.DDEnd date of a fixed-term contract. Leave empty if permanent.
tax_classstring"1" – "6"German tax class. Must be passed as a string.
net_incomeinteger> 0Monthly net income in EUR.

Finances

ParameterTypeRangeDescription
monthly_income_alimonyinteger0 – 10,000 EURMonthly alimony income.
monthly_income_child_or_care_allowanceinteger0 – 10,000 EURMonthly child or care allowance.
monthly_income_otherinteger0 – 10,000 EUROther monthly income.
monthly_income_pensioninteger0 – 10,000 EURMonthly pension income.
pension_start_datestringYYYY.MM.DDStart date of pension.
monthly_income_verifiable_additionalinteger0 – 10,000 EURVerifiable additional monthly income.
date_since_income_verifiable_additionalstringYYYY.MM.DDStart date of verifiable additional income.
monthly_rentinteger0 – 2,500 EURMonthly rent incl. utilities. 0 if owner-occupied.
monthly_expense_alimonyinteger0 – 10,000 EURMonthly alimony expenses.
monthly_expense_health_insuranceinteger0 – 10,000 EURMonthly health insurance expenses.
schufa_entrystring"True", "False""True" if the user has a negative SCHUFA entry. Submit "False" if unknown.

Loan Information

ParameterTypeFormat / ValuesDescription
preferred_loan_amountinteger1,000 – 10,000 EURDesired loan amount.
preferred_loan_durationinteger12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 84, 96, 108, 120Desired repayment duration in months.
loan_purposestring"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.

Debt Information

ParameterTypeDescription
total_debtintegerTotal outstanding debt in EUR.
total_monthly_debt_paymentintegerTotal monthly debt repayment in EUR.
total_number_of_loansintegerTotal number of active loans.

Small Loan (Florin+ Kleinkredit)

ParameterTypeValuesDescription
small_loan_amountinteger100, 200, 400, 600, 800, 1,000, 1,250, 1,500Desired small loan amount in EUR.
small_loan_durationinteger30, 60Desired loan duration in days.

Response

Success Response

{
  "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
  }
}

Response for registration_mode: realtime

Additionally 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
  }
}

Response Fields

FieldTypeDescription
statusstring"success" if the request was processed.
valid_stepsarrayList of data fields successfully validated and accepted.
errorsarrayFields with invalid format. Empty if all data was valid.
request_idstringUnique identifier for this request.
tokenstringSession token for the created user. Valid for expires seconds.
user_idstringID of the newly created user.
expiresintegerToken validity in seconds (typically 86400 = 24 hours).
linkstringOnly with realtime mode: one-time direct link for the user.

Examples

Minimal Request

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"}'

Full Request

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"
}

Error Codes

Note: HTTP 200 can be returned even when the request is invalid — e.g. with an invalid token (200: "Not allowed").
200 "Not allowed"Invalid token — check with your account manager.
400 Bad RequestInvalid data. See reason field for details.
404 Not FoundThe requested resource was not found.
500 Internal Server ErrorAn unexpected error occurred on the server.