Skip to content

Användarhantering

Den här guiden beskriver hur du skapar och hanterar användare på ett Amili-konto. Den gäller både partnerplattformar (efter att kontot har etablerats via guiden för Partneronboarding) och direktkunder vars konton har etablerats direkt av Amili.

Den här guiden använder AuthTokenProvider för autentisering i exempel — se autentiseringsguiden för konfigurationsdetaljer.


Åtkomstgrupper

Åtkomstgrupper styr vad en användare kan se och göra i Amili. De skapas automatiskt — grupper på kontonivå skapas när kontot skapas, och grupper på borgenärsnivå skapas varje gång en borgenär skapas.

Det finns tre typer av åtkomstgrupper som är relevanta för användarhantering:

TypNivåBeskrivning
account_adminKontoFull åtkomst till alla borgenärer på kontot. Kan hantera användare, inställningar och borgenärskonfiguration för hela kontot.
adminBorgenärKan hantera användare och inställningar för en specifik borgenär.
userBorgenärKan hantera ärenden och dagliga operationer för en specifik borgenär.

En användare kan tilldelas flera åtkomstgrupper — till exempel kan en användare som hanterar ärenden för fler än en borgenär ha rollen user för var och en av dem.


Hitta åtkomstgrupper

Innan du skapar användare behöver du ID:n för de relevanta åtkomstgrupperna. Anropa GET /access--groups filtrerat på konto för att hämta alla grupper kopplade till ett konto:

typescript
const accountId = '674dbeaf08847b9501cc9132'

const token = await auth.getValidToken()
const where = encodeURIComponent(JSON.stringify({ account: accountId }))

const response = await axios.get(
  `https://api-sandbox.amili.se/access--groups?where=${where}`,
  { headers: { 'X-API-Key': token } }
)
const accessGroups = response.data._items
python
import json

account_id = '674dbeaf08847b9501cc9132'

token = auth.get_valid_token()
where = json.dumps({'account': account_id})

response = requests.get(
    'https://api-sandbox.amili.se/access--groups',
    params={'where': where},
    headers={'X-API-Key': token},
)
response.raise_for_status()
access_groups = response.json()['_items']

Exempelsvar (förkortat):

json
{
  "_items": [
    {
      "_id": "674dbec008847b9501cc9140",
      "account": "674dbeaf08847b9501cc9132",
      "type": "account_admin",
      "name": "account_admin"
    },
    {
      "_id": "674dbec008847b9501cc9141",
      "account": "674dbeaf08847b9501cc9132",
      "creditor": "674dbeb208847b9501cc9138",
      "type": "admin",
      "name": "admin",
      "creditor_name": "Exempel Företag AB"
    },
    {
      "_id": "674dbec008847b9501cc9142",
      "account": "674dbeaf08847b9501cc9132",
      "creditor": "674dbeb208847b9501cc9138",
      "type": "user",
      "name": "user",
      "creditor_name": "Exempel Företag AB"
    }
  ]
}

För att hitta en specifik grupp lägger du till type och eventuellt creditor i filtret:

typescript
// Kontonivå
{ account: accountId, type: 'account_admin' }

// Borgenärsnivå för en specifik borgenär
{ account: accountId, creditor: creditorId, type: 'user' }

Skapa användare

Användare autentiserar via OAuth. Ange oauth_type ("google" eller "microsoft") och email_oauth för att identifiera användarens identitetsleverantörskonto. Åtkomst beviljas genom att lägga till ett eller flera åtkomstgrupps-ID:n i data_access-arrayen.

Kontoadministratör

En kontoadministratör har full åtkomst till alla borgenärer på kontot. Det är rätt roll för en klientanvändare som behöver administrera kontot eller slutföra onboarding i Amili-appen.

typescript
const token = await auth.getValidToken()

const userResponse = await axios.post(
  'https://api-sandbox.amili.se/users',
  {
    account: '674dbeaf08847b9501cc9132',
    name: 'Anna Andersson',
    email_data: { email: 'anna.andersson@example.com' },
    is_enabled: true,
    oauth_type: 'google',
    email_oauth: 'anna.andersson@example.com',
    data_access: [
      { access_group: '674dbec008847b9501cc9140' }, // type: account_admin
    ],
  },
  { headers: { 'X-API-Key': token, 'Content-Type': 'application/json' } }
)
python
token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

user_response = requests.post(
    'https://api-sandbox.amili.se/users',
    json={
        'account': '674dbeaf08847b9501cc9132',
        'name': 'Anna Andersson',
        'email_data': {'email': 'anna.andersson@example.com'},
        'is_enabled': True,
        'oauth_type': 'google',
        'email_oauth': 'anna.andersson@example.com',
        'data_access': [
            {'access_group': '674dbec008847b9501cc9140'},  # type: account_admin
        ],
    },
    headers=headers,
)
user_response.raise_for_status()

Borgenärsadministratör

En borgenärsadministratör kan hantera användare och inställningar för en specifik borgenär. Använd admin-åtkomstgruppens ID för aktuell borgenär.

typescript
const token = await auth.getValidToken()

const userResponse = await axios.post(
  'https://api-sandbox.amili.se/users',
  {
    account: '674dbeaf08847b9501cc9132',
    name: 'Erik Eriksson',
    email_data: { email: 'erik.eriksson@example.com' },
    is_enabled: true,
    oauth_type: 'microsoft',
    email_oauth: 'erik.eriksson@example.com',
    data_access: [
      { access_group: '674dbec008847b9501cc9141' }, // type: admin, creditor: Exempel Företag AB
    ],
  },
  { headers: { 'X-API-Key': token, 'Content-Type': 'application/json' } }
)
python
token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

user_response = requests.post(
    'https://api-sandbox.amili.se/users',
    json={
        'account': '674dbeaf08847b9501cc9132',
        'name': 'Erik Eriksson',
        'email_data': {'email': 'erik.eriksson@example.com'},
        'is_enabled': True,
        'oauth_type': 'microsoft',
        'email_oauth': 'erik.eriksson@example.com',
        'data_access': [
            {'access_group': '674dbec008847b9501cc9141'},  # type: admin, creditor: Exempel Företag AB
        ],
    },
    headers=headers,
)
user_response.raise_for_status()

Borgenärsanvändare

En borgenärsanvändare kan hantera ärenden och dagliga operationer för en borgenär. En användare kan tilldelas flera borgenärer genom att inkludera en user-åtkomstgrupp för var och en i data_access-arrayen.

typescript
const token = await auth.getValidToken()

const userResponse = await axios.post(
  'https://api-sandbox.amili.se/users',
  {
    account: '674dbeaf08847b9501cc9132',
    name: 'Maria Svensson',
    email_data: { email: 'maria.svensson@example.com' },
    is_enabled: true,
    oauth_type: 'google',
    email_oauth: 'maria.svensson@example.com',
    data_access: [
      { access_group: '674dbec008847b9501cc9142' }, // type: user, creditor: Exempel Företag AB
      { access_group: '674dbec008847b9501cc9143' }, // type: user, creditor: Annat Företag AB
    ],
  },
  { headers: { 'X-API-Key': token, 'Content-Type': 'application/json' } }
)
python
token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

user_response = requests.post(
    'https://api-sandbox.amili.se/users',
    json={
        'account': '674dbeaf08847b9501cc9132',
        'name': 'Maria Svensson',
        'email_data': {'email': 'maria.svensson@example.com'},
        'is_enabled': True,
        'oauth_type': 'google',
        'email_oauth': 'maria.svensson@example.com',
        'data_access': [
            {'access_group': '674dbec008847b9501cc9142'},  # type: user, creditor: Exempel Företag AB
            {'access_group': '674dbec008847b9501cc9143'},  # type: user, creditor: Annat Företag AB
        ],
    },
    headers=headers,
)
user_response.raise_for_status()

Exempelsvar (samma struktur för alla användartyper):

json
{
  "_id": "674dbef008847b9501cc9150",
  "_created": "Tue, 07 Oct 2025 08:00:00 GMT",
  "_updated": "Tue, 07 Oct 2025 08:00:00 GMT",
  "_etag": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0",
  "_status": "OK"
}

Hantera användare

Alla uppdateringsoperationer använder PATCH /users/{userId} och kräver en If-Match-header med användarens aktuella _etag-värde. Hämta användaren först för att få både aktuellt tillstånd och _etag.

Inaktivera en användare

Sätt is_enabled: false för att förhindra att en användare loggar in utan att radera kontot. Det går att ångra — sätt is_enabled: true för att återställa åtkomsten.

typescript
const userId = '674dbef008847b9501cc9150'
const token = await auth.getValidToken()

// Hämta användaren för att få aktuell _etag
const userResponse = await axios.get(
  `https://api-sandbox.amili.se/users/${userId}`,
  { headers: { 'X-API-Key': token } }
)
const etag = userResponse.data._etag

// Inaktivera användaren
await axios.patch(
  `https://api-sandbox.amili.se/users/${userId}`,
  { is_enabled: false },
  {
    headers: {
      'X-API-Key': token,
      'Content-Type': 'application/json',
      'If-Match': etag,
    },
  }
)
python
user_id = '674dbef008847b9501cc9150'
token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

# Hämta användaren för att få aktuell _etag
user_response = requests.get(
    f'https://api-sandbox.amili.se/users/{user_id}',
    headers={'X-API-Key': token},
)
user_response.raise_for_status()
etag = user_response.json()['_etag']

# Inaktivera användaren
patch_response = requests.patch(
    f'https://api-sandbox.amili.se/users/{user_id}',
    json={'is_enabled': False},
    headers={**headers, 'If-Match': etag},
)
patch_response.raise_for_status()

Ta bort åtkomst

För att återkalla en användares åtkomst till en eller flera borgenärer hämtar du den aktuella data_access-arrayen, tar bort de relevanta posterna och skickar en PATCH med den uppdaterade arrayen. Skrivskyddade kaskaderade fält (access_group_name, access_group_type m.fl.) ska utelämnas — de hanteras av systemet.

typescript
const userId = '674dbef008847b9501cc9150'
const accessGroupToRemove = '674dbec008847b9501cc9143' // borgenär att återkalla
const token = await auth.getValidToken()

// Hämta användaren för att få aktuell data_access och _etag
const userResponse = await axios.get(
  `https://api-sandbox.amili.se/users/${userId}`,
  { headers: { 'X-API-Key': token } }
)
const { _etag, data_access } = userResponse.data

// Ta bort posten för åtkomstgruppen som ska återkallas
const updatedDataAccess = data_access
  .filter(
    (entry: { access_group: string }) =>
      entry.access_group !== accessGroupToRemove
  )
  .map((entry: { access_group: string }) => ({
    access_group: entry.access_group,
  }))

await axios.patch(
  `https://api-sandbox.amili.se/users/${userId}`,
  { data_access: updatedDataAccess },
  {
    headers: {
      'X-API-Key': token,
      'Content-Type': 'application/json',
      'If-Match': _etag,
    },
  }
)
python
user_id = '674dbef008847b9501cc9150'
access_group_to_remove = '674dbec008847b9501cc9143'  # borgenär att återkalla
token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

# Hämta användaren för att få aktuell data_access och _etag
user_response = requests.get(
    f'https://api-sandbox.amili.se/users/{user_id}',
    headers={'X-API-Key': token},
)
user_response.raise_for_status()
user = user_response.json()

# Ta bort posten för åtkomstgruppen som ska återkallas
updated_data_access = [
    {'access_group': entry['access_group']}
    for entry in user['data_access']
    if entry['access_group'] != access_group_to_remove
]

patch_response = requests.patch(
    f'https://api-sandbox.amili.se/users/{user_id}',
    json={'data_access': updated_data_access},
    headers={**headers, 'If-Match': user['_etag']},
)
patch_response.raise_for_status()

Nästa steg