Integrera AML-tjänst i Vitec Express

← Alla tjänsteintegrationer

Beskrivning

En AML-tjänst hjälper mäklaren med kundkännedom och riskbedömning av köpare och säljare på ett objekt. Mäklaren startar en AML-process på en part i Vitec Express, ni utför screening och samlar in kundkännedom, och resultatet skickas tillbaka in i Vitec Express där det landar på partens riskbedömning.

Integrationen består av två riktningar, och ni behöver bygga båda:

  • Vitec Express anropar er för att styra processen: hämta förutsättningar, starta process, skicka påminnelse och avbryta process. Detta är endpoints som ni exponerar och som vi konfigureras mot.
  • Ni anropar Connect för att leverera resultatet: screeningträffar, kundkännedom och underlag för riskklassificering, samt egen data kopplad till processen.

En AML-tjänst är en partnertjänst av typen Aml. Det finns bara en aktiv AML-tjänst per kontor och objektstyp.

Komma igång

Börja med att registrera er i vår Connectportal.

Meddela oss på Vitec med följande information genom att klicka här:

  • Partner id eller namn så att vi kan identifiera er i Connectportalen.
  • Namn och beskrivning av tjänsten (namnet visas för mäklaren i Vitec Express).
  • Bas-url till ert API.
  • Sökvägar för de operationer ni exponerar, se Konfiguration nedan.
  • Om ni kräver att den enskilda användaren har ett konto hos er, se avsnittet Användarkonto.
  • Om ni behöver att mäklaren gör val innan processen startar, se avsnittet Förutsättningar.
  • Vilken autentisering ni vill använda för anropen från oss till er.

Ni behöver också en nyckel för att kunna anropa Connect i andra riktningen. Läs mer om nycklar och säkerhet under Teknisk beskrivning.

Konfiguration

På tjänsten anges en sökväg per operation. Sökvägarna är relativa mot er bas-url. Lämnar ni en sökväg tom används standardsökvägen i tabellen nedan.

Sökväg förMetodStandardsökvägBeskrivning
Förutsättningar GET ingen Hämtar val som mäklaren ska göra innan processen startar. Lämnas tom om ni inte behöver några val.
Starta process POST /api/process Startar en AML-process på en part.
Avsluta process PUT /api/process Avslutar en pågående process.
Påminnelse POST /api/process/remind Skickar en påminnelse till slutkunden.
Användarkontroll GET ingen Kontrollerar om den inloggade mäklaren är upplagd hos er. Lämnas tom om tjänsten inte kräver konto per användare.

Utöver sökvägarna anges om mäklaren ska kunna registrera sitt konto hos er direkt från Vitec Express.

Observera att Starta process och Avsluta process har samma standardsökväg men olika HTTP-metod. Ni kan alltså använda samma sökväg för båda och skilja dem på metoden, eller ange skilda sökvägar.

Lämnar ni en sökväg tom som inte har någon standardsökväg anropar vi er bas-url som den är. Ange därför alltid en sökväg för de operationer ni faktiskt vill ta emot.

Autentisering

De två riktningarna autentiseras på olika sätt.

När vi anropar era endpoints skickar vi alltid med customerId som url-parameter, så att ni vet vilket kontor anropet gäller. Utöver det finns tre alternativ:

  • Tokenbaserad (rekommenderas). Vi genererar en token och skickar den som url-parametern token. För att få ut parametrarna som rör tokenet, anropa Connect via denna metod.
  • Basic authentication via HTTP-headern Authorization: Basic {value}.
  • Ingen. Då skickar vi istället med orderId, userId, currentUserId, estateId, estateType och eventuellt chainId direkt i url:en.

Standardtiden vi väntar på ert svar är 60 sekunder. Behöver ni längre tid så konfigurerar vi det på tjänsten.

Observera att en AML-process inte skapar någon beställning i Vitec Express. Parametern orderId är därför densamma för alla AML-anrop från ett och samma kontor och ska inte användas för att skilja processer åt. Använd estateId tillsammans med contact.id, eller ert eget id via Extension.

Anropen mot Connect autentiseras med basic authentication över HTTPS, där användarnamnet är ert partner-id och lösenordet är er nyckel. Kontoret anges som customerId i url:en, och ni kommer bara åt de kontor ni har fått åtkomst till.

Se Teknisk beskrivning för nycklar, säkerhet, parametern kund-id och felhantering.

Ni kommer bara åt de AML-processer som är kopplade till er som partner. Data som en annan partner har registrerat är inte synlig för er.

Anropen är hastighetsbegränsade. Slår begränsningen till svarar vi med statuskod 429 och ni behöver vänta innan ni försöker igen.

Sekvensdiagram

Så här hänger de två riktningarna ihop:

sequenceDiagram title AML-process actor User as Mäklare participant Express participant Partner participant Connect actor EndCustomer as Slutkund opt Användarkonto Express->>+Partner: GET användare Partner-->>-Express: isAmlEnabled end opt Förutsättningar User->>+Express: Vill starta AML-process Express->>+Partner: GET förutsättningar Partner-->>-Express: Val som mäklaren ska göra Express-->>-User: Visar valen end User->>+Express: Startar processen Express->>+Partner: POST starta process Partner-->>-Express: isSuccessful Express-->>-User: Processen är igång Partner->>EndCustomer: Kontaktar slutkunden opt Egen data om processen Partner->>Connect: POST extension end opt Screening Partner->>Partner: Screening mot PEP och sanktionslistor Partner->>Connect: PATCH screening Connect->>User: Notifiering vid träff end opt Kundkännedom besvarad EndCustomer->>Partner: Fyller i formulär Partner->>Connect: PATCH riskbedömning Connect->>Connect: Hämtar dokument via url Connect->>User: Notifiering end opt Påminnelse User->>+Express: Påminn slutkunden Express->>+Partner: POST påminnelse Partner-->>-Express: isSuccessful Partner->>EndCustomer: Skickar påminnelse Express-->>-User: Påminnelse skickad end opt Avbryt User->>+Express: Avbryter processen Express->>+Partner: PUT avbryt process Partner-->>-Express: isSuccessful Express-->>-User: Processen avbruten end
Svarsformat för anrop från oss till er

Samtliga endpoints som ni exponerar ska svara med samma omslag. Fältet data används bara av de operationer som hämtar information.

{
  "isSuccessful": true,
  "isCritical": false,
  "errors": [],
  "data": null
}

Vid fel:

{
  "isSuccessful": false,
  "isCritical": false,
  "errors": [
    {
      "errorCode": 2001,
      "errorMessage": "Customer is missing a valid agreement",
      "displayedMessage": "Kunden saknar ett giltigt avtal för tjänsten.",
      "fieldName": null
    }
  ]
}
FältTypBeskrivning
isSuccessfulbooleanOm operationen lyckades. Krävs.
isCriticalbooleanOm felet är allvarligt och processen inte kan fortsätta.
errorsarrayFel som uppstod.
errors[].errorCodenumberFelkod för snabbare jämförelse. Valfri.
errors[].errorMessagestringTeknisk beskrivning av felet, används i loggar.
errors[].displayedMessagestringTexten som visas för mäklaren. Lämnas den tom visas errorMessage istället.
errors[].fieldNamestringFältet som felet gäller. Valfri.
dataobjectSvarsdata, se respektive operation nedan.

Svarar ni med en HTTP-statuskod från 300 och uppåt tolkas det som ett fel även om ni skickar ett giltigt omslag. Ett svar med statuskod 200 och tom body räknas som lyckat, eftersom isSuccessful är sant som standard. Vill ni signalera fel måste ni alltså uttryckligen sätta isSuccessful till false.

Texten i displayedMessage visas för mäklaren rakt av, så skriv den på svenska och formulera den så att mäklaren förstår vad som behöver göras.

Anrop från Vitec Express till er

Nedan är de operationer ni exponerar. Metoden är fast per operation, sökvägen konfigureras.

GET mot sökvägen för Användarkontroll

Anropas när Vitec Express visar AML-funktionerna för mäklaren, förutsatt att en sökväg för användarkontroll är angiven. Använd det för tjänster där varje mäklare måste ha ett eget konto hos er.

Svarar ni att användaren inte är aktiverad, eller svarar ni med ett fel, så stängs AML-funktionerna av för den mäklaren.

Ingen request body.

Response Exempel

{
  "isSuccessful": true,
  "data": {
    "isAmlEnabled": true
  }
}

Response Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AmlAccountUserResponse",
  "type": "object",
  "properties": {
    "isSuccessful": { "type": "boolean" },
    "isCritical": { "type": "boolean" },
    "errors": { "type": "array", "items": { "type": "object" } },
    "data": {
      "type": "object",
      "properties": {
        "isAmlEnabled": {
          "description": "Om den inloggade mäklaren har ett aktivt konto hos partnern",
          "type": "boolean"
        }
      },
      "required": ["isAmlEnabled"],
      "additionalProperties": false
    }
  },
  "required": ["isSuccessful"],
  "additionalProperties": false
}

GET mot sökvägen för Förutsättningar

Anropas innan processen startar, förutsatt att en sökväg för förutsättningar är angiven. Returnera de val som mäklaren behöver göra. Varje post blir en fråga i gränssnittet och de valda alternativens id skickas sedan tillbaka i prerequisitesChoices när processen startas.

Varje post renderas som en enkelvalslista där det första alternativet är förvalt. Varje post måste därför innehålla minst ett alternativ.

Anropet görs varje gång mäklaren öppnar vyn för att starta en process. Svarar ni med ett fel kan mäklaren inte starta någon process alls, så svara bara med fel när något verkligen är trasigt. Har ni inga val att ställa, lämna sökvägen för förutsättningar tom.

Ingen request body.

Response Exempel

{
  "isSuccessful": true,
  "isCritical": false,
  "errors": [],
  "data": {
    "entries": [
      {
        "id": "coverage",
        "label": "Omfattning",
        "options": [
          { "id": "basic", "text": "Grundläggande", "subtext": "Screening mot PEP och sanktionslistor" },
          { "id": "extended", "text": "Utökad", "subtext": "Screening samt kundkännedomsformulär till slutkunden" }
        ]
      }
    ]
  }
}

Response Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AmlProcessPrerequisitesResponse",
  "type": "object",
  "properties": {
    "isSuccessful": { "type": "boolean" },
    "isCritical": { "type": "boolean" },
    "errors": { "type": "array", "items": { "type": "object" } },
    "data": {
      "type": "object",
      "properties": {
        "entries": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "description": "Id på frågan, skickas tillbaka som id i prerequisitesChoices",
                "type": "string"
              },
              "label": {
                "description": "Rubriken som visas för mäklaren",
                "type": "string"
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "description": "Id på alternativet, skickas tillbaka i answerIds om det väljs",
                      "type": "string"
                    },
                    "text": {
                      "description": "Texten som visas för alternativet",
                      "type": "string"
                    },
                    "subtext": {
                      "description": "Undertext som förklarar vad alternativet innebär",
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["id", "text"],
                  "additionalProperties": false
                }
              }
            },
            "required": ["id", "label", "options"],
            "additionalProperties": false
          }
        }
      },
      "required": ["entries"],
      "additionalProperties": false
    }
  },
  "required": ["isSuccessful"],
  "additionalProperties": false
}

POST mot sökvägen för Starta process, som standard /api/process

Startar en AML-process för en part på ett objekt. Efter ett lyckat svar räknar Vitec Express processen som pågående och mäklaren kan se den på parten.

Parten identifieras med contact.id. Samma id används sedan när ni skickar in screening och riskbedömning till Connect.

Parten är alltid köpare eller säljare på objektet, vilket framgår av isBuyer och isSeller. Vitec Express kräver att parten har personnummer och e-postadress innan processen kan startas, och för utländskt personnummer även födelsedatum och nationalitet. FullMonitoring erbjuds bara för privatpersoner.

Request Exempel

{
  "contact": {
    "id": "3f2a7c10-0b44-4f1a-9c2e-8d5b7a1e4f30",
    "type": "Person",
    "role": "None"
  },
  "scope": "FullMonitoring",
  "prerequisitesChoices": [
    { "id": "coverage", "answerIds": ["extended"] }
  ],
  "isBuyer": false,
  "isSeller": true
}

Response Exempel

{
  "isSuccessful": true,
  "isCritical": false,
  "errors": []
}

Request Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AmlStartProcessRequest",
  "type": "object",
  "properties": {
    "contact": {
      "description": "Parten som processen gäller",
      "type": "object",
      "properties": {
        "id": {
          "description": "Kontaktens id, används som contactId när ni anropar Connect",
          "type": "string"
        },
        "type": {
          "description": "Typ av kontakt",
          "type": "string",
          "enum": ["Person", "Company", "Estate"]
        },
        "role": {
          "description": "Särskild roll för parten. DeceasedEstateParty anger dödsbodelägare",
          "type": "string",
          "enum": ["None", "DeceasedEstateParty"]
        }
      },
      "required": ["id", "type", "role"],
      "additionalProperties": false
    },
    "scope": {
      "description": "Omfattning som mäklaren har valt. I praktiken ScreeningOnly eller FullMonitoring",
      "type": "string",
      "enum": ["None", "Manual", "ScreeningOnly", "FullMonitoring"]
    },
    "prerequisitesChoices": {
      "description": "Mäklarens svar på de val ni returnerade från förutsättningar. Utelämnas om ni inte har några",
      "type": ["array", "null"],
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Id på frågan, samma som entries[].id",
            "type": "string"
          },
          "answerIds": {
            "description": "Valda alternativ. Innehåller alltid minst ett element",
            "type": "array",
            "items": { "type": "string" }
          }
        },
        "required": ["id", "answerIds"],
        "additionalProperties": false
      }
    },
    "isBuyer": {
      "description": "Om parten är köpare",
      "type": "boolean"
    },
    "isSeller": {
      "description": "Om parten är säljare. Alltid motsatsen till isBuyer",
      "type": "boolean"
    }
  },
  "required": ["contact", "scope", "isBuyer", "isSeller"],
  "additionalProperties": false
}

scope talar om hur mycket mäklaren har beställt. ScreeningOnly betyder att ni bara ska screena parten. FullMonitoring betyder att ni även ska samla in kundkännedom från slutkunden, vilket är det som senare skickas in som riskbedömning.

Startas processen om för en part som redan har en pågående process, t. ex. för att mäklaren ändrar omfattningen, får ni ett nytt anrop med den nya omfattningen. Det finns ingen separat metod för att ändra en pågående process.

POST mot sökvägen för Påminnelse, som standard /api/process/remind

Mäklaren har begärt att ni påminner slutkunden, t. ex. om att fylla i kundkännedomsformuläret. Skicka påminnelsen och svara om den gick iväg.

Request Exempel

{
  "contact": {
    "id": "3f2a7c10-0b44-4f1a-9c2e-8d5b7a1e4f30",
    "type": "Person",
    "role": "None"
  }
}

Response Exempel

{
  "isSuccessful": true,
  "isCritical": false,
  "errors": []
}

Request Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AmlRemindRequest",
  "type": "object",
  "properties": {
    "contact": {
      "type": "object",
      "properties": {
        "id": { "type": "string" },
        "type": { "type": "string", "enum": ["Person", "Company", "Estate"] },
        "role": { "type": "string", "enum": ["None", "DeceasedEstateParty"] }
      },
      "required": ["id", "type", "role"],
      "additionalProperties": false
    }
  },
  "required": ["contact"],
  "additionalProperties": false
}

PUT mot sökvägen för Avsluta process, som standard /api/process

Avslutar processen för parten. Avsluta bevakning och pågående arbete. Observera att detta är en PUT, medan start är en POST mot samma standardsökväg.

Anropet skickas både när mäklaren själv avbryter processen och när processen avslutas automatiskt på tillträdesdagen. De två fallen ser likadana ut för er, så behandla anropet som ett avslut oavsett orsak.

Samma request body som påminnelse.

Request Exempel

{
  "contact": {
    "id": "3f2a7c10-0b44-4f1a-9c2e-8d5b7a1e4f30",
    "type": "Person",
    "role": "None"
  }
}

Response Exempel

{
  "isSuccessful": true,
  "isCritical": false,
  "errors": []
}
Anrop från er till Connect

Det här är hur ni levererar resultatet in i Vitec Express. Samtliga anrop utgår från Aml/{customerId} och identifierar parten med bostadens id och kontaktens id, där contactId är samma id som ni fick i contact.id när processen startades.

Kontakten måste vara köpare eller säljare på objektet. Är den inte det avvisas anropet.

Till skillnad från anropen i andra riktningen används inget isSuccessful-omslag här. Ett lyckat anrop svarar med statuskod 200 och antingen efterfrågad data eller ingen body alls. Vid fel svarar vi med en felkod och ett felobjekt:

{
  "message": "Comment is required when risk indicator is true.",
  "type": "Validation",
  "validationErrors": ["Pep.Comment"]
}
StatuskodtypeBetyder
400ValidationInnehållet bröt mot en valideringsregel, se listan under respektive operation.
400BadRequestKund-id saknas eller är ogiltigt.
403ForbiddenNi har inte åtkomst till det angivna kontoret.
404NotFoundDet efterfrågade saknas.
429–Hastighetsbegränsningen har slagit till.
503ServiceUnavailableKundmiljön är tillfälligt otillgänglig, försök igen senare.
504GatewayTimeoutKundmiljön svarade inte i tid, försök igen om en stund.

PATCH Aml/{customerId}/Estate/{estateId}/Contact/{contactId}/Screening

Registrerar resultatet av er screening på parten. Skicka in det så snart ni har ett resultat, och skicka in igen om resultatet ändras vid en förnyad screening.

Vid träff på någon av indikatorerna skickas en notifiering till objektets mäklare, och till ytterligare en mäklare om ni anger brokerIdToNotify.

Request Exempel

{
  "pep": {
    "value": true,
    "comment": "Träff mot person i politiskt utsatt ställning, kommunalråd sedan 2021."
  },
  "sanctionsListMatch": {
    "value": false
  },
  "rca": {
    "value": false
  },
  "sip": {
    "value": false
  },
  "brokerIdToNotify": "9a1c4f22-7d3e-4b8a-b6f1-2c5e9d8a3b47"
}

Request Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "ScreeningData",
  "type": "object",
  "properties": {
    "sanctionsListMatch": { "$ref": "#/$defs/riskIndicator", "description": "Träff mot sanktionslista" },
    "pep": { "$ref": "#/$defs/riskIndicator", "description": "Person i politiskt utsatt ställning" },
    "rca": { "$ref": "#/$defs/riskIndicator", "description": "Känd närstående till PEP" },
    "sip": { "$ref": "#/$defs/riskIndicator", "description": "Person med särskild bevakning" },
    "brokerIdToNotify": {
      "description": "Id på ytterligare en mäklare som ska notifieras utöver objektets mäklare",
      "type": ["string", "null"]
    }
  },
  "required": [],
  "additionalProperties": false,
  "$defs": {
    "riskIndicator": {
      "type": ["object", "null"],
      "properties": {
        "value": {
          "description": "Indikatorvärde. Utelämna eller sätt null om ni inte har kontrollerat indikatorn",
          "type": ["boolean", "null"]
        },
        "comment": {
          "description": "Kommentar till indikatorn. Krävs när value är true",
          "type": ["string", "null"]
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}

Samtliga indikatorer är valfria. En indikator ni utelämnar lämnas orörd i Vitec Express, så ni kan skicka in en delmängd. Sätter ni value till true måste ni ange comment, annars avvisas anropet.

Screening skapar ingen koppling mellan er och processen. Vill ni kunna hitta tillbaka till parten utifrån ert eget ärendenummer, registrera en utökning under fliken Egen data.

PATCH Aml/{customerId}/Estate/{estateId}/Contact/{contactId}/RiskAssessment

Registrerar kundkännedom och underlag för riskklassificering, typiskt när slutkunden har besvarat ert kundkännedomsformulär. Utöver screeningindikatorerna kan ni skicka identifiering, ytterligare riskindikatorer, dokument och en sammanvägd riskklassificering.

Anropet skapar ett underlag som mäklaren sedan tar ställning till i Vitec Express, och en notifiering skickas till objektets mäklare samt till brokerIdToNotify om det anges. Processen markeras som att formuläret är besvarat.

Request Exempel

{
  "identificationMethod": "BankId",
  "identificationDate": "2026-08-14T09:35:00",
  "identificationComment": "Identifierad med BankID i vårt formulär.",
  "pep": { "value": false },
  "sanctionsListMatch": { "value": false },
  "rca": { "value": false },
  "sip": { "value": false },
  "hrtcConnection": {
    "value": true,
    "comment": "Kunden uppger inkomst från verksamhet i högrisktredjeland."
  },
  "otherUbo": { "value": false },
  "remoteBusinessRelation": {
    "value": true,
    "comment": "Hela affärsrelationen har skett på distans."
  },
  "isBasicKycAchieved": true,
  "riskLevel": "Medium",
  "riskLevelComment": "Distansrelation samt koppling till högrisktredjeland ger förhöjd risk.",
  "documents": [
    {
      "url": "https://my-service.example/documents/kyc-3f2a7c10.pdf",
      "name": "Kundkännedomsformulär.pdf"
    }
  ],
  "brokerIdToNotify": "9a1c4f22-7d3e-4b8a-b6f1-2c5e9d8a3b47"
}

Request Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "RiskData",
  "type": "object",
  "properties": {
    "identificationMethod": {
      "description": "Typ av id-handling som kontrollerats. Kräver att identificationDate anges",
      "type": ["string", "null"],
      "enum": ["NotSet", "BankId", "DriversLicense", "Passport", "NationaId", "SisId", "ForeignPassport", "ForeignID", "Other", null]
    },
    "identificationDate": {
      "description": "Datum då identifieringen utfördes",
      "type": ["string", "null"],
      "format": "date-time"
    },
    "identificationComment": { "type": ["string", "null"] },
    "sanctionsListMatch": { "$ref": "#/$defs/riskIndicator" },
    "pep": { "$ref": "#/$defs/riskIndicator" },
    "rca": { "$ref": "#/$defs/riskIndicator" },
    "sip": { "$ref": "#/$defs/riskIndicator" },
    "hrtcConnection": { "$ref": "#/$defs/riskIndicator", "description": "Koppling till högrisktredjeland" },
    "otherUbo": { "$ref": "#/$defs/riskIndicator", "description": "Annan verklig huvudman" },
    "remoteBusinessRelation": { "$ref": "#/$defs/riskIndicator", "description": "Distansaffärsrelation" },
    "isBasicKycAchieved": {
      "description": "Om grundläggande kundkännedom är uppnådd",
      "type": ["boolean", "null"]
    },
    "riskLevel": {
      "description": "Sammanvägd riskklassificering. Kräver att riskLevelComment anges",
      "type": ["string", "null"],
      "enum": ["NotSet", "Low", "Medium", "High", null]
    },
    "riskLevelComment": {
      "description": "Motivering till vald riskklassificering. Krävs när riskLevel anges",
      "type": ["string", "null"]
    },
    "documents": {
      "description": "Dokument som ska hämtas och lagras på objektet",
      "type": ["array", "null"],
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "description": "Url som vi hämtar dokumentet från. Krävs när name är angiven",
            "type": ["string", "null"]
          },
          "name": {
            "description": "Visningsnamn inklusive filändelse. Krävs när url är angiven",
            "type": ["string", "null"]
          }
        },
        "required": [],
        "additionalProperties": false
      }
    },
    "brokerIdToNotify": { "type": ["string", "null"] }
  },
  "required": [],
  "additionalProperties": false,
  "$defs": {
    "riskIndicator": {
      "type": ["object", "null"],
      "properties": {
        "value": { "type": ["boolean", "null"] },
        "comment": {
          "description": "Krävs när value är true",
          "type": ["string", "null"]
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}

Valideringsregler

  • Anges identificationMethod måste identificationDate också anges.
  • Anges riskLevel måste riskLevelComment också anges.
  • Sätts en riskindikators value till true måste comment anges.
  • Ett dokument måste ha både url och name, eller ingen av dem.

Dokument

Vi hämtar varje dokument från den url ni anger och lagrar filen på objektet i Vitec Express, kopplad till parten. Url:en anropas utan autentisering, så den behöver vara åtkomlig för oss. Använd gärna en url som är svår att gissa och som slutar gälla efter en tid.

Endast PDF stöds. Filen lagras alltid som PDF, så skicka inte andra filformat. Sätt name till ett läsbart filnamn, det är namnet mäklaren ser i dokumentlistan.

Kan vi inte hämta filen misslyckas hela anropet, och varken riskbedömning eller övriga dokument registreras. Kontrollera därför att url:en fungerar innan ni skickar in den.

POST Aml/{customerId}/Estate/{estateId}/Contact/{contactId}/Extension
GET Aml/{customerId}/Estate/{estateId}/Contact/{contactId}/Extension

Här kan ni lagra ert eget id på processen tillsammans med valfri JSON-data. Använd det för att koppla samman er process med parten i Vitec Express, och för att slippa egen lagring av kopplingen.

POST skapar eller uppdaterar utökningen, GET hämtar den. Data är helt fri JSON och tolkas inte av oss.

Se även metoden för att lagra och metoden för att hämta.

Request Exempel

{
  "id": "case-88213",
  "data": {
    "caseUrl": "https://my-service.example/cases/88213",
    "formSentAt": "2026-08-12T10:02:00Z",
    "reminderCount": 1
  }
}

Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AmlExtension",
  "type": "object",
  "properties": {
    "id": {
      "description": "Ert externa id på processen. Används för att slå upp parten via External-metoden",
      "type": ["string", "null"]
    },
    "data": {
      "description": "Valfri JSON. Objekt, array, sträng, tal, boolean eller null"
    }
  },
  "required": [],
  "additionalProperties": false
}

Ett GET-anrop för en part som saknar utökning svarar med ett tomt objekt, inte med ett fel.

GET Aml/{customerId}/External/{externalId}/Extension

Slår upp vilken part och vilket objekt en utökning hör till, utifrån det id ni själva satte på utökningen. Använd det när ni får ett event i ert eget system och bara har ert eget ärendenummer, och behöver få fram estateId och contactId för att kunna skicka in screening eller riskbedömning.

Se metoden.

Response Exempel

{
  "estateId": "7c1e9b04-52a8-4d6f-9f13-6b0a2d4e8c91",
  "contactId": "3f2a7c10-0b44-4f1a-9c2e-8d5b7a1e4f30",
  "extension": {
    "id": "case-88213",
    "data": {
      "caseUrl": "https://my-service.example/cases/88213",
      "formSentAt": "2026-08-12T10:02:00Z",
      "reminderCount": 1
    }
  }
}

Hittas ingen utökning svarar vi med ett tomt objekt.

Riskindikatorer

Riskindikatorerna har samma form överallt: ett valfritt value och en comment som krävs när värdet är true. Indikatorer ni inte skickar med lämnas orörda, vilket gör att ni kan komplettera en tidigare registrering utan att skicka om allt.

IndikatorScreeningRiskbedömningBetydelse
sanctionsListMatchJaJaTräff mot sanktionslista.
pepJaJaPerson i politiskt utsatt ställning.
rcaJaJaKänd närstående till en PEP.
sipJaJaPerson med särskild bevakning.
hrtcConnectionNejJaKoppling till högrisktredjeland.
otherUboNejJaAnnan verklig huvudman.
remoteBusinessRelationNejJaAffärsrelationen sker på distans.

identificationMethod

VärdeBetydelse
NotSetEj angivet
BankIdBankID
DriversLicenseKörkort
PassportPass
NationaIdNationellt id
SisIdSIS-märkt id-kort
ForeignPassportUtländskt pass
ForeignIDUtländskt id
OtherAnnat

riskLevel

VärdeBetydelse
NotSetEj angivet
LowLåg risk
MediumMedelhög risk
HighHög risk

Riskklassificeringen ni skickar in är ett underlag. Det är alltid mäklaren som fattar det slutliga beslutet om riskklassificering i Vitec Express.

Notifieringar till mäklaren

Vi notifierar mäklaren i Vitec Express när ni skickar in något som kräver uppmärksamhet:

  • Screening med träff. Notifiering skickas när minst en av indikatorerna i screeninganropet är satt till true. Screening utan träff notifierar inte.
  • Riskbedömning. Notifiering skickas alltid när ni skickar in kundkännedom och underlag för riskklassificering.

Notifieringen går till objektets mäklare. Behöver ni notifiera ytterligare en mäklare, t. ex. en AML-ansvarig, anger ni mäklarens id i brokerIdToNotify.

Samtliga anrop loggas också i objektets AML-tidslinje, oavsett om de leder till en notifiering.

Att tänka på
  • Skicka in screeningresultatet så snart ni har det, även när ni inte hittar någon träff. Mäklaren ser då att kontrollen är gjord.
  • Använd Extension för att lagra er koppling till processen, så slipper ni egen lagring av vilka objekt och parter era ärenden hör till.
  • Svara snabbt på våra anrop. Mäklaren väntar på svaret, och vi bryter efter 60 sekunder om inget annat är konfigurerat.
  • Använd displayedMessage för fel som mäklaren kan göra något åt, och errorMessage för det tekniska. Det är displayedMessage som visas i gränssnittet.
  • Processen kan avbrytas av mäklaren när som helst. Se till att en avbruten process inte fortsätter skicka påminnelser till slutkunden.