Skip to content

Partneronboarding

Den här guiden beskriver hur en partnerplattform skapar ett nytt borgenärskonto åt en kund. Partnern skapar kontot, en inledande borgenär och tillhörande användare via API:et.

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


Översikt

Det finns två sätt att onboarda en ny borgenär, beroende på om partnern samlar in nödvändiga uppgifter i förväg eller delegerar det steget till klientanvändaren via Amili-appen.

Alternativ A — Aktivera via Amili-appen: Partnern skapar kontot med en inaktiv borgenär och hänvisar klientanvändaren till att slutföra konfigurationen i Amili-appen. Fält som krävs för aktivering — såsom utbetalningsinformation och avsändaradress — behöver inte anges i detta steg, eftersom klientanvändaren tillhandahåller dem under onboardingflödet i Amili-appen.

Alternativ B — Direktaktivering: Partnern samlar in all nödvändig information i förväg och skapar kontot med en redan aktiv borgenär. Kontot följer standardavtalet enligt partnerinställningarna.

Vid alternativ A avslutas partnerns API-ansvar efter att kontot och användaren skapats — alla återstående steg sker i Amili-appen.


Steg 1: Skapa kontot

Använd Account endpoint för att skapa kontot och dess inledande borgenär i ett enda anrop. Fältet initial_creditor_data är ett skrivskyddat objekt som bearbetas server-side för att skapa borgenären — det lagras inte i kontodokumentet.

Alternativ A: Skapa konto med partiell data

Borgenären skapas i inaktivt tillstånd. Fält som krävs för aktivering — standard_debt_description, sender_address, invoice_address och payout_details — utelämnas här och samlas in från klientanvändaren under Amili-appens onboardingflöde.

Onboardingflaggor

När en partner har configuration.force_creditor_onboarding aktiverat (konfigurerat av Amili), får nya konton automatiskt flaggan enable_creditor_onboarding. Detta talar om för Amili-appen att visa onboardingflödet i gränssnittet när klientanvändaren loggar in för första gången.

Om ditt partnerkonto inte är konfigurerat med force_creditor_onboarding kan du ange enable_creditor_onboarding: true explicit på kontot.

typescript
const accountData = {
  partner: '674dbeab08847b9501cc9130',
  name: 'Exempel Företag AB',
  organization_no: '556123-4567',
  agreement_address: {
    address_line_1: 'Storgatan 1',
    zip_code: '11122',
    city: 'Stockholm',
    country: 'SE',
  },
  initial_creditor_data: {
    is_active: false,
  },
}

const token = await auth.getValidToken()
const response = await axios.post(
  'https://api-sandbox.amili.se/accounts',
  accountData,
  {
    headers: {
      'X-API-Key': token,
      'Content-Type': 'application/json',
    },
  }
)
python
account_data = {
    "partner": "674dbeab08847b9501cc9130",
    "name": "Exempel Företag AB",
    "organization_no": "556123-4567",
    "agreement_address": {
        "address_line_1": "Storgatan 1",
        "zip_code": "11122",
        "city": "Stockholm",
        "country": "SE",
    },
    "initial_creditor_data": {
        "is_active": False,
    },
}

token = auth.get_valid_token()
response = requests.post(
    "https://api-sandbox.amili.se/accounts",
    json=account_data,
    headers={
        "X-API-Key": token,
        "Content-Type": "application/json",
    },
)
response.raise_for_status()
result = response.json()

Alternativ B: Skapa konto med komplett data

Borgenären skapas i aktivt tillstånd. Alla fält som krävs för aktivering måste anges i förväg: standard_debt_description, sender_address, invoice_address och payout_details (med minst en valuta och kontotyp).

typescript
const accountData = {
  partner: '674dbeab08847b9501cc9130',
  name: 'Exempel Företag AB',
  organization_no: '556123-4567',
  agreement_address: {
    address_line_1: 'Storgatan 1',
    zip_code: '11122',
    city: 'Stockholm',
    country: 'SE',
  },
  initial_creditor_data: {
    is_active: true,
    standard_debt_description: 'Obetalda fakturor',
    sender_address: {
      address_line_1: 'Storgatan 1',
      zip_code: '11122',
      city: 'Stockholm',
      country: 'SE',
    },
    invoice_address: {
      address_line_1: 'Storgatan 1',
      zip_code: '11122',
      city: 'Stockholm',
      country: 'SE',
    },
    payout_details: {
      sek: {
        bankgiro: '12312312',
      },
    },
  },
}

const token = await auth.getValidToken()
const response = await axios.post(
  'https://api-sandbox.amili.se/accounts',
  accountData,
  {
    headers: {
      'X-API-Key': token,
      'Content-Type': 'application/json',
    },
  }
)
python
account_data = {
    "partner": "674dbeab08847b9501cc9130",
    "name": "Exempel Företag AB",
    "organization_no": "556123-4567",
    "agreement_address": {
        "address_line_1": "Storgatan 1",
        "zip_code": "11122",
        "city": "Stockholm",
        "country": "SE",
    },
    "initial_creditor_data": {
        "is_active": True,
        "standard_debt_description": "Obetalda fakturor",
        "sender_address": {
            "address_line_1": "Storgatan 1",
            "zip_code": "11122",
            "city": "Stockholm",
            "country": "SE",
        },
        "invoice_address": {
            "address_line_1": "Storgatan 1",
            "zip_code": "11122",
            "city": "Stockholm",
            "country": "SE",
        },
        "payout_details": {
            "sek": {
                "bankgiro": "12312312",
            },
        },
    },
}

token = auth.get_valid_token()
response = requests.post(
    "https://api-sandbox.amili.se/accounts",
    json=account_data,
    headers={
        "X-API-Key": token,
        "Content-Type": "application/json",
    },
)
response.raise_for_status()
result = response.json()

Svar

Båda alternativen returnerar samma svarsstruktur, inklusive det nya konto-ID:t och ID:t för den inledande borgenären:

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

Viktiga ID:n i svaret

  • _id — Konto-ID:t. Spara detta för framtida API-anrop som kräver en account-referens.
  • _creditor — Det inledande borgenärs-ID:t. Spara detta för att följa upp onboardingstatus och registrera ärenden när borgenären är aktiv.

Spara båda ID:n. Borgenärs-ID:t behövs i synnerhet för alla efterföljande ärende- och fakturaregistreringar.


Steg 2: Skapa klientanvändare

Skapa minst en kontoadministratör för att ge klienten tillgång till kontot.

typescript
const accountId = '674dbeaf08847b9501cc9132'

const token = await auth.getValidToken()

// Hitta account_admin-åtkomstgruppen för det nya kontot
const where = encodeURIComponent(
  JSON.stringify({ account: accountId, type: 'account_admin' })
)
const groupsResponse = await axios.get(
  `https://api-sandbox.amili.se/access--groups?where=${where}`,
  { headers: { 'X-API-Key': token } }
)
const accountAdminGroupId = groupsResponse.data._items[0]._id

// Skapa klientanvändaren
const userResponse = await axios.post(
  'https://api-sandbox.amili.se/users',
  {
    account: accountId,
    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: accountAdminGroupId }],
  },
  { headers: { 'X-API-Key': token, 'Content-Type': 'application/json' } }
)
python
import json

account_id = '674dbeaf08847b9501cc9132'

token = auth.get_valid_token()
headers = {'X-API-Key': token, 'Content-Type': 'application/json'}

# Hitta account_admin-åtkomstgruppen för det nya kontot
where = json.dumps({'account': account_id, 'type': 'account_admin'})
groups_response = requests.get(
    'https://api-sandbox.amili.se/access--groups',
    params={'where': where},
    headers=headers,
)
groups_response.raise_for_status()
account_admin_group_id = groups_response.json()['_items'][0]['_id']

# Skapa klientanvändaren
user_response = requests.post(
    'https://api-sandbox.amili.se/users',
    json={
        'account': account_id,
        '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': account_admin_group_id}],
    },
    headers=headers,
)
user_response.raise_for_status()

Se Användarhantering för mer information om åtkomstgruppstyper och hur du skapar borgenärsnivå-användare efter att onboarding är slutförd.


Steg 3: Slutförande av onboarding via Amili-appen

Endast alternativ A

Det här steget gäller när du använder alternativ A (aktivera via Amili-appen). För alternativ B är borgenären redan aktiv efter steg 1 och inga ytterligare åtgärder krävs.

Hänvisa klientanvändaren till Amili-appen

När kontot och användaren har skapats hänvisar du klientanvändaren till Amili-appen (t.ex. https://app-sandbox.amili.se för sandbox). När de loggar in identifierar appen automatiskt det pågående onboardingtillståndet och vägleder dem genom processen, som inkluderar:

  • Bekräftelse av företagsuppgifter och konfigurering av utbetalningsinformation (bankkonto, avsändaradress, fakturaadress)
  • Genomläsning och signering av det juridiska avtalet med BankID eller Visma e-sign

När klientanvändaren har slutfört dessa steg aktiveras borgenären och partnern kan börja registrera fakturor och ärenden mot den via API:et.

App-URL:er

För korrekt app-URL för din miljö, se sidan Miljöer.

Kontrollera aktiveringsstatus

Borgenären som skapades i steg 1 har is_active: false tills onboarding är slutförd. Försök att registrera fakturor eller ärenden mot en inaktiv borgenär avvisas av API:et.

Ett bra mönster är att kontrollera borgenärens aktiveringsstatus i början av en klientanvändarsession — eller lättjefullt, vid den punkt där klientanvändaren försöker utföra en åtgärd som kräver en aktiv borgenär. Hämta borgenären med dess ID och inspektera fältet is_active:

http
GET /creditors/{creditor_id}

Om is_active är false, visa ett meddelande till klientanvändaren som förklarar att konfigurationen inte är slutförd och hänvisa dem tillbaka till Amili-appen för att slutföra onboarding.

Detta är en engångskontroll per session, inte en återkommande pollingloop.