E-Mail Login
Do log in with email and password
POST/api/logins
Query parameters
tokenIdentifiersstring | JWTs to return with sessionAllowed: iw-externaliw-mqttiw-internalfirebaselanista |
Request body application/json
loginFormLoginUserShow fields (3)
usernamestringpasswordstringtokenstring
Responses
200Do log in with email and passwordSession
Show fields (15)
idintegerPrimary key of the session. Internal ID.
sessionidstringID of the session.
selectedcustomerCustomerProfileCustomer profile selected in the session.
Show fields (6)
idintegerPrimary key of the customer profile. Internal ID.
slackchannelstringSlack channel of the customer profile.
displaynamestringName shown for the customer profile.
deletedbooleanWhether the customer profile is deleted.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
startstring (date-time)Point in time the session started.
refreshed_startstring (date-time)Point in time the session was last refreshed.
ipstringIP address of the client.
validbooleanWhether the session is valid.
is_api_keybooleanWhether the session was created with an API key.
is_dgbooleanWhether the session is for the DG (member organization) context.
missing2fabooleanWhether two-factor authentication is still missing.
start_in_vpnbooleanWhether the session started in a VPN.
auth_by_credentialsbooleanWhether the session was authenticated with user name and password.
auth_by_googlebooleanWhether the session was authenticated with Google.
auth_by_microsoftbooleanWhether the session was authenticated with Microsoft.
auth_by_cloudflarebooleanWhether the session was authenticated with Cloudflare Access.
curl --request POST \
--url https://your-instance.iw-erp.de/api/logins \
--header 'content-type: application/json' \
--data '
{
"login": {
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
}
}
'const options = {
method: 'POST',
headers: {'content-type': 'application/json'},
body: JSON.stringify({
login: {username: 'lena.hartmann@example.org', password: '••••••••', token: 'string'}
})
};
fetch('https://your-instance.iw-erp.de/api/logins', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/logins"
payload = { "login": {
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
} }
headers = {"content-type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/logins', [
'body' => '{"login":{"username":"lena.hartmann@example.org","password":"••••••••","token":"string"}}',
'headers' => [
'content-type' => 'application/json',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/logins"),
Content = new StringContent("{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/logins")
.post(body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/logins"
payload := strings.NewReader("{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/login_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/email_login.dart';
IwApiState().host = 'your-instance.iw-erp.de';
final result = await LoginController.doLogin(EmailLogin.fromJson({
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"sessionid": "string",
"selectedcustomer": {
"id": 42,
"slackchannel": "string",
"displayname": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"start": "2026-10-15T09:30:00+02:00",
"refreshed_start": "2026-10-15T09:30:00+02:00",
"ip": "string",
"valid": true,
"is_api_key": true,
"is_dg": true,
"missing2fa": true
}Do reset password for email
POST/api/logins/resets
Request body application/json
loginFormLoginUser2Show fields (1)
usernamestring
Responses
200Do reset password for emailSuccess
Show fields (3)
successbooleanmessagestringerror_codesarray<integer>
curl --request POST \
--url https://your-instance.iw-erp.de/api/logins/resets \
--header 'content-type: application/json' \
--data '
{
"login": {
"username": "lena.hartmann@example.org"
}
}
'const options = {
method: 'POST',
headers: {'content-type': 'application/json'},
body: JSON.stringify({login: {username: 'lena.hartmann@example.org'}})
};
fetch('https://your-instance.iw-erp.de/api/logins/resets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/logins/resets"
payload = { "login": { "username": "lena.hartmann@example.org" } }
headers = {"content-type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/logins/resets', [
'body' => '{"login":{"username":"lena.hartmann@example.org"}}',
'headers' => [
'content-type' => 'application/json',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/logins/resets"),
Content = new StringContent("{\"login\":{\"username\":\"lena.hartmann@example.org\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"login\":{\"username\":\"lena.hartmann@example.org\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/logins/resets")
.post(body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/logins/resets"
payload := strings.NewReader("{\"login\":{\"username\":\"lena.hartmann@example.org\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/login_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/email_login.dart';
IwApiState().host = 'your-instance.iw-erp.de';
final result = await LoginController.resetPassword(EmailLogin.fromJson({
"username": "lena.hartmann@example.org"
}));
if (result.success) {
print(result.data);
}{
"success": true,
"message": "string",
"error_codes": [
1
]
}Remove own login - Requires own password
POST/api/logins/delete
Request body application/json
loginFormLoginUserShow fields (3)
usernamestringpasswordstringtokenstring
Responses
200Remove own login - Requires own passwordSuccess
Show fields (3)
successbooleanmessagestringerror_codesarray<integer>
curl --request POST \
--url https://your-instance.iw-erp.de/api/logins/delete \
--header 'content-type: application/json' \
--data '
{
"login": {
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
}
}
'const options = {
method: 'POST',
headers: {'content-type': 'application/json'},
body: JSON.stringify({
login: {username: 'lena.hartmann@example.org', password: '••••••••', token: 'string'}
})
};
fetch('https://your-instance.iw-erp.de/api/logins/delete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/logins/delete"
payload = { "login": {
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
} }
headers = {"content-type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/logins/delete', [
'body' => '{"login":{"username":"lena.hartmann@example.org","password":"••••••••","token":"string"}}',
'headers' => [
'content-type' => 'application/json',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/logins/delete"),
Content = new StringContent("{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/logins/delete")
.post(body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/logins/delete"
payload := strings.NewReader("{\"login\":{\"username\":\"lena.hartmann@example.org\",\"password\":\"••••••••\",\"token\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/login_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/email_login.dart';
IwApiState().host = 'your-instance.iw-erp.de';
final result = await LoginController.deleteLogin(EmailLogin.fromJson({
"username": "lena.hartmann@example.org",
"password": "••••••••",
"token": "string"
}));
if (result.success) {
print(result.data);
}{
"success": true,
"message": "string",
"error_codes": [
1
]
}