AI-FOS REST API
v0.1Base URL
https://aifos.oddvar.meApp hostAI-FOS household finance features are exposed primarily through GraphQL at POST /graphql (schema in schemas/graphql/). Use GraphQL for dashboard queries, mutations, and subscriptions.
This OpenAPI document covers auxiliary REST only: worker/microbatch internal callbacks (/api/internal/**), inbound provider webhooks (/api/webhooks/**), and selected Actuator endpoints for operations. Authenticate internal routes with the shared worker secret (X-Worker-Token / AIFOS_WORKER_SECRET).
Authentication
workerTokenapiKeyShared worker secret (AIFOS_WORKER_SECRET). Worker and microbatching JVMs only — not for browsers.
API Key: X-Worker-Token in header
Actuator
Monitor and interact
Actuator root web endpoint
GET
Response
200OKobject
OK
Actuator root web endpoint
curl -X GET 'https://aifos.oddvar.me/actuator'const response = await fetch('https://aifos.oddvar.me/actuator', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('https://aifos.oddvar.me/actuator')
data = response.json()200
{}{}{}Actuator web endpoint 'health'
GET
Response
200OKobject
OK
Actuator web endpoint 'health'
curl -X GET 'https://aifos.oddvar.me/actuator/health'const response = await fetch('https://aifos.oddvar.me/actuator/health', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('https://aifos.oddvar.me/actuator/health')
data = response.json()200
{}{}{}Actuator web endpoint 'prometheus'
GET
Parameters
formatstringCONTENT_TYPE_004CONTENT_TYPE_OPENMETRICS_100CONTENT_TYPE_PROTOBUFqueryincludedNamesstringqueryResponse
200OKobject
OK
Actuator web endpoint 'prometheus'
curl -X GET 'https://aifos.oddvar.me/actuator/prometheus'const response = await fetch('https://aifos.oddvar.me/actuator/prometheus', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('https://aifos.oddvar.me/actuator/prometheus')
data = response.json()200
{}{}{}identity-public-auth-controller
POST
Body
application/json
tokenstringResponse
204No Content
No Content
POST /api/auth/email/verify
curl -X POST 'https://aifos.oddvar.me/api/auth/email/verify' \
-H 'Content-Type: application/json' \
-d '{
"token": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/email/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"token": "string"
}),
});
const data = await response.json();import requests
payload = {
"token": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/email/verify', json=payload)
data = response.json()Request Body
{
"token": "string"
}POST
Body
application/json
emailstringpasswordstringResponse
200OKLoginResponse
OK
POST /api/auth/login
curl -X POST 'https://aifos.oddvar.me/api/auth/login' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"password": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": "string",
"password": "string"
}),
});
const data = await response.json();import requests
payload = {
"email": "string",
"password": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/login', json=payload)
data = response.json()Request Body
{
"email": "string",
"password": "string"
}200
{
"accessToken": "string",
"expiresInSeconds": 0,
"mustChangePassword": true,
"refreshToken": "string"
}POST
Body
application/json
refreshTokenstringResponse
204No Content
No Content
POST /api/auth/logout
curl -X POST 'https://aifos.oddvar.me/api/auth/logout' \
-H 'Content-Type: application/json' \
-d '{
"refreshToken": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/logout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"refreshToken": "string"
}),
});
const data = await response.json();import requests
payload = {
"refreshToken": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/logout', json=payload)
data = response.json()Request Body
{
"refreshToken": "string"
}POST
Body
application/json
currentPasswordstringnewPasswordstringResponse
204No Content
No Content
POST /api/auth/password/change
curl -X POST 'https://aifos.oddvar.me/api/auth/password/change' \
-H 'Content-Type: application/json' \
-d '{
"currentPassword": "string",
"newPassword": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/password/change', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"currentPassword": "string",
"newPassword": "string"
}),
});
const data = await response.json();import requests
payload = {
"currentPassword": "string",
"newPassword": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/password/change', json=payload)
data = response.json()Request Body
{
"currentPassword": "string",
"newPassword": "string"
}POST
Body
application/json
emailstringResponse
202Accepted
Accepted
POST /api/auth/password/forgot
curl -X POST 'https://aifos.oddvar.me/api/auth/password/forgot' \
-H 'Content-Type: application/json' \
-d '{
"email": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/password/forgot', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": "string"
}),
});
const data = await response.json();import requests
payload = {
"email": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/password/forgot', json=payload)
data = response.json()Request Body
{
"email": "string"
}POST
Body
application/json
newPasswordstringtokenstringResponse
204No Content
No Content
POST /api/auth/password/reset
curl -X POST 'https://aifos.oddvar.me/api/auth/password/reset' \
-H 'Content-Type: application/json' \
-d '{
"newPassword": "string",
"token": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/password/reset', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"newPassword": "string",
"token": "string"
}),
});
const data = await response.json();import requests
payload = {
"newPassword": "string",
"token": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/password/reset', json=payload)
data = response.json()Request Body
{
"newPassword": "string",
"token": "string"
}POST
Body
application/json
displayNamestringemailstringpasswordstringtermsAcceptedbooleanResponse
201CreatedRegisterResponse
Created
POST /api/auth/register
curl -X POST 'https://aifos.oddvar.me/api/auth/register' \
-H 'Content-Type: application/json' \
-d '{
"displayName": "string",
"email": "string",
"password": "string",
"termsAccepted": true
}'const response = await fetch('https://aifos.oddvar.me/api/auth/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"displayName": "string",
"email": "string",
"password": "string",
"termsAccepted": true
}),
});
const data = await response.json();import requests
payload = {
"displayName": "string",
"email": "string",
"password": "string",
"termsAccepted": True
}
response = requests.post('https://aifos.oddvar.me/api/auth/register', json=payload)
data = response.json()Request Body
{
"displayName": "string",
"email": "string",
"password": "string",
"termsAccepted": true
}201
{
"maskedEmail": "string"
}POST
Body
application/json
refreshTokenstringResponse
200OKLoginResponse
OK
POST /api/auth/token/refresh
curl -X POST 'https://aifos.oddvar.me/api/auth/token/refresh' \
-H 'Content-Type: application/json' \
-d '{
"refreshToken": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/auth/token/refresh', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"refreshToken": "string"
}),
});
const data = await response.json();import requests
payload = {
"refreshToken": "string"
}
response = requests.post('https://aifos.oddvar.me/api/auth/token/refresh', json=payload)
data = response.json()Request Body
{
"refreshToken": "string"
}200
{
"accessToken": "string",
"expiresInSeconds": 0,
"mustChangePassword": true,
"refreshToken": "string"
}worker-internal-controller
POST
Parameters
accountIdstring<uuid>requiredpathuserIdstring<uuid>requiredqueryResponse
200OKBankAccountSyncEvaluation
OK
POST /api/internal/aifos/worker/bank-accounts/{accountId}/evaluate
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/bank-accounts/{accountId}/evaluate'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/bank-accounts/{accountId}/evaluate', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/bank-accounts/{accountId}/evaluate')
data = response.json()200
{
"accountId": "550e8400-e29b-41d4-a716-446655440000",
"accountName": "string",
"balance": 0,
"currency": "string",
"missingBalance": true,
"negativeBalance": true,
"timelineAppended": true,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}POST
Parameters
usageDatestringqueryResponse
200OKobject
OK
POST /api/internal/aifos/worker/billing/rollup-daily
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/billing/rollup-daily'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/billing/rollup-daily', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/billing/rollup-daily')
data = response.json()200
{}POST
Parameters
budgetIdstring<uuid>requiredpathuserIdstring<uuid>requiredqueryeventTypestringrequiredqueryResponse
200OKBudgetEventEvaluation
OK
POST /api/internal/aifos/worker/budgets/{budgetId}/evaluate
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/budgets/{budgetId}/evaluate'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/budgets/{budgetId}/evaluate', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/budgets/{budgetId}/evaluate')
data = response.json()200
{
"budgetId": "550e8400-e29b-41d4-a716-446655440000",
"budgetName": "string",
"category": "string",
"deleted": true,
"eventType": "string",
"exceeded": true,
"monthlyLimit": 0,
"rulesFired": 0,
"spentThisMonth": 0,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}POST
Body
application/json
categorystringconnectorIdstringcurrentMonthlyPricenumberjobIdstring<uuid>priceAreastringrequestedAtstring<date-time>userIdstring<uuid>userQuestionstringResponse
200OKobject
OK
POST /api/internal/aifos/worker/comparison/connectors/fetch
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/comparison/connectors/fetch' \
-H 'Content-Type: application/json' \
-d '{
"category": "string",
"connectorId": "string",
"currentMonthlyPrice": 0,
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"priceArea": "string",
"requestedAt": "2024-01-15T09:30:00Z",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userQuestion": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/comparison/connectors/fetch', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"category": "string",
"connectorId": "string",
"currentMonthlyPrice": 0,
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"priceArea": "string",
"requestedAt": "2024-01-15T09:30:00Z",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userQuestion": "string"
}),
});
const data = await response.json();import requests
payload = {
"category": "string",
"connectorId": "string",
"currentMonthlyPrice": 0,
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"priceArea": "string",
"requestedAt": "2024-01-15T09:30:00Z",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userQuestion": "string"
}
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/comparison/connectors/fetch', json=payload)
data = response.json()Request Body
{
"category": "string",
"connectorId": "string",
"currentMonthlyPrice": 0,
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"priceArea": "string",
"requestedAt": "2024-01-15T09:30:00Z",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userQuestion": "string"
}200
{}POST
Parameters
usageDatestringqueryResponse
200OKobject
OK
POST /api/internal/aifos/worker/datalake/rollup-storage
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/datalake/rollup-storage'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/datalake/rollup-storage', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/datalake/rollup-storage')
data = response.json()200
{}POST
Parameters
priceAreastringrequiredpathResponse
200OKEnergyPriceAlertEvaluationResponse
OK
POST /api/internal/aifos/worker/energy/prices/{priceArea}/evaluate-alerts
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/energy/prices/{priceArea}/evaluate-alerts'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/energy/prices/{priceArea}/evaluate-alerts', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/energy/prices/{priceArea}/evaluate-alerts')
data = response.json()200
{
"expensiveHourAlert": true,
"priceArea": "string",
"rulesFired": 0,
"thresholdNokPerKwh": 0,
"tomorrowExpensiveHours": 0,
"upcomingExpensiveHours": 0
}POST
Parameters
userIdstring<uuid>requiredqueryResponse
200OKEnergyUsageSyncEvaluation
OK
POST /api/internal/aifos/worker/energy/usage/evaluate
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/energy/usage/evaluate'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/energy/usage/evaluate', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/energy/usage/evaluate')
data = response.json()200
{
"anomalyDetected": true,
"averageDailyKwh": 0,
"ratio": 0,
"recentDailyKwh": 0,
"timelineAppended": true,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}POST
Parameters
userIdstring<uuid>requiredqueryResponse
200OKobject
OK
POST /api/internal/aifos/worker/loans/rate-alerts/evaluate
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/loans/rate-alerts/evaluate'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/loans/rate-alerts/evaluate', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/loans/rate-alerts/evaluate')
data = response.json()200
{}POST
Parameters
loanIdstring<uuid>requiredpathuserIdstring<uuid>requiredqueryreportTypestringrequiredqueryResponse
200OKLoanReportResult
OK
POST /api/internal/aifos/worker/loans/{loanId}/reports
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/loans/{loanId}/reports'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/loans/{loanId}/reports', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/loans/{loanId}/reports')
data = response.json()200
{
"generatedAt": "2024-01-15T09:30:00Z",
"loanId": "550e8400-e29b-41d4-a716-446655440000",
"remainingDebt": 0,
"remainingInterest": 0,
"remainingPayments": 0,
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"reportType": "string",
"status": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}POST
Body
application/json
intentstringoutreachEmailIdstring<uuid>replyBodystringuserIdstring<uuid>Response
200OKobject
OK
POST /api/internal/aifos/worker/outreach-replies/process
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/outreach-replies/process' \
-H 'Content-Type: application/json' \
-d '{
"intent": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"replyBody": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/outreach-replies/process', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"intent": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"replyBody": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}),
});
const data = await response.json();import requests
payload = {
"intent": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"replyBody": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/outreach-replies/process', json=payload)
data = response.json()Request Body
{
"intent": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"replyBody": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}200
{}POST
Parameters
userIdstring<uuid>requiredqueryResponse
200OKobject
OK
POST /api/internal/aifos/worker/recommendations/refresh
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/recommendations/refresh'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/recommendations/refresh', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/recommendations/refresh')
data = response.json()200
{}POST
Parameters
transactionIdstring<uuid>requiredpathResponse
200OKobject
OK
POST /api/internal/aifos/worker/transactions/{transactionId}/categorize
curl -X POST 'https://aifos.oddvar.me/api/internal/aifos/worker/transactions/{transactionId}/categorize'const response = await fetch('https://aifos.oddvar.me/api/internal/aifos/worker/transactions/{transactionId}/categorize', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('https://aifos.oddvar.me/api/internal/aifos/worker/transactions/{transactionId}/categorize')
data = response.json()200
{}inbound-email-webhook-controller
POST
Body
application/json
bodystringcaseNumberstringfromstringoutreachEmailIdstring<uuid>subjectstringResponse
200OKobject
OK
POST /api/webhooks/inbound-email
curl -X POST 'https://aifos.oddvar.me/api/webhooks/inbound-email' \
-H 'Content-Type: application/json' \
-d '{
"body": "string",
"caseNumber": "string",
"from": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"subject": "string"
}'const response = await fetch('https://aifos.oddvar.me/api/webhooks/inbound-email', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"body": "string",
"caseNumber": "string",
"from": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"subject": "string"
}),
});
const data = await response.json();import requests
payload = {
"body": "string",
"caseNumber": "string",
"from": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"subject": "string"
}
response = requests.post('https://aifos.oddvar.me/api/webhooks/inbound-email', json=payload)
data = response.json()Request Body
{
"body": "string",
"caseNumber": "string",
"from": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"subject": "string"
}200
{}Models
BankAccountSyncEvaluation
objectaccountIdstring<uuid>accountNamestringbalancenumbercurrencystringmissingBalancebooleannegativeBalancebooleantimelineAppendedbooleanuserIdstring<uuid>Example
{
"accountId": "550e8400-e29b-41d4-a716-446655440000",
"accountName": "string",
"balance": 0,
"currency": "string",
"missingBalance": true,
"negativeBalance": true,
"timelineAppended": true,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}BudgetEventEvaluation
objectbudgetIdstring<uuid>budgetNamestringcategorystringdeletedbooleaneventTypestringexceededbooleanmonthlyLimitnumberrulesFiredinteger<int32>spentThisMonthnumberuserIdstring<uuid>Example
{
"budgetId": "550e8400-e29b-41d4-a716-446655440000",
"budgetName": "string",
"category": "string",
"deleted": true,
"eventType": "string",
"exceeded": true,
"monthlyLimit": 0,
"rulesFired": 0,
"spentThisMonth": 0,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}ChangePasswordRequest
objectcurrentPasswordstringnewPasswordstringExample
{
"currentPassword": "string",
"newPassword": "string"
}ComparisonConnectorFetchMessage
objectcategorystringconnectorIdstringcurrentMonthlyPricenumberjobIdstring<uuid>priceAreastringrequestedAtstring<date-time>userIdstring<uuid>userQuestionstringExample
{
"category": "string",
"connectorId": "string",
"currentMonthlyPrice": 0,
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"priceArea": "string",
"requestedAt": "2024-01-15T09:30:00Z",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userQuestion": "string"
}EnergyPriceAlertEvaluationResponse
objectexpensiveHourAlertbooleanpriceAreastringrulesFiredinteger<int32>thresholdNokPerKwhnumbertomorrowExpensiveHoursinteger<int64>upcomingExpensiveHoursinteger<int32>Example
{
"expensiveHourAlert": true,
"priceArea": "string",
"rulesFired": 0,
"thresholdNokPerKwh": 0,
"tomorrowExpensiveHours": 0,
"upcomingExpensiveHours": 0
}EnergyUsageSyncEvaluation
objectanomalyDetectedbooleanaverageDailyKwhnumberrationumberrecentDailyKwhnumbertimelineAppendedbooleanuserIdstring<uuid>Example
{
"anomalyDetected": true,
"averageDailyKwh": 0,
"ratio": 0,
"recentDailyKwh": 0,
"timelineAppended": true,
"userId": "550e8400-e29b-41d4-a716-446655440000"
}InboundEmailWebhookRequest
objectbodystringcaseNumberstringfromstringoutreachEmailIdstring<uuid>subjectstringExample
{
"body": "string",
"caseNumber": "string",
"from": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"subject": "string"
}LoanReportResult
objectgeneratedAtstring<date-time>loanIdstring<uuid>remainingDebtnumberremainingInterestnumberremainingPaymentsinteger<int32>reportIdstring<uuid>reportTypestringstatusstringuserIdstring<uuid>Example
{
"generatedAt": "2024-01-15T09:30:00Z",
"loanId": "550e8400-e29b-41d4-a716-446655440000",
"remainingDebt": 0,
"remainingInterest": 0,
"remainingPayments": 0,
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"reportType": "string",
"status": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}LoginResponse
objectaccessTokenstringexpiresInSecondsinteger<int64>mustChangePasswordbooleanrefreshTokenstringExample
{
"accessToken": "string",
"expiresInSeconds": 0,
"mustChangePassword": true,
"refreshToken": "string"
}PasswordResetRequest
objectnewPasswordstringtokenstringExample
{
"newPassword": "string",
"token": "string"
}ProcessOutreachReplyRequest
objectintentstringoutreachEmailIdstring<uuid>replyBodystringuserIdstring<uuid>Example
{
"intent": "string",
"outreachEmailId": "550e8400-e29b-41d4-a716-446655440000",
"replyBody": "string",
"userId": "550e8400-e29b-41d4-a716-446655440000"
}