/api/v0/customer/getById

GET

Get a customer by ID

To fetch the status of a customer by ID, you must send a GET request to the following endpoint:

https://platform.arva.ai/api/v0/customer/getById?id=<CUSTOMER_ID>

You must provide the customer ID as an id parameter in the query string.

curl -X GET "https://platform.arva.ai/api/v0/customer/getById?id=<CUSTOMER_ID>" -H "Authorization: Bearer <API_KEY>"

The response will be a JSON object with the following fields:

{
  id: string // customer ID
  name: string
  state: string | undefined
  createdAt: Date
  verdict: 'ACCEPT' | 'REJECT' | 'REQUEST_INFORMATION' | 'PENDING'
  riskLevel: 'HIGH' | 'MEDIUM' | 'LOW' | undefined
  periodicReviewYears: number | undefined // undefined unless the verdict is ACCEPT
  rfi: string | undefined // undefined unless the verdict is REQUEST_INFORMATION
  requiresManualReview: boolean
  checks: {
    type: string
    verdict: 'ACCEPT' | 'REJECT' | 'REQUEST_INFORMATION' | 'PENDING'
    riskLevel: 'HIGH' | 'MEDIUM' | 'LOW' | undefined // undefined unless the verdict is ACCEPT
    reason: string
    periodicReviewYears: number | undefined // undefined unless the verdict is ACCEPT
    requiresManualReview: boolean
    proofs: Proof[]
    // Some checks return additional details e.g. registry results
    details: Record<string, unknown> | undefined
  }[]
  entities: EntityWithScreeningResults[]
}

Where:

type Proof = {
  id: string
  type: 'DOCUMENT' | 'WEBSITE'
  inferredType: string
  name: string
  url: string
}

type IndividualEntity = {
  type: 'individual'
  metadata: {
    firstName: string
    middleNames: string | undefined
    lastName: string
    dateOfBirth: {
      day: number | undefined
      month: number | undefined
      year: number
    } | undefined
    address: string | undefined
    country: string | undefined
  }
}

type CorporateOrTrustEntity = {
  type: 'corporate' | 'trust'
  metadata: {
    name: string
    registrationJurisdiction: string | undefined
    registrationNumber: string | undefined
    address: string | undefined
  }
  relationships: Relationship[]
}

type Entity = IndividualEntity | CorporateOrTrustEntity

type Relationship = {
  type: 'director' | 'officer' | 'psc'
  positions: string[]
} | {
  type: 'owner'
  ownershipPercentage: number
  entityId?: string // ID of the owned entity, if not the customer entity
} | {
  type: 'additional'
  reason: string
}


type EntityWithScreeningResults = Entity & {
  screeningHits: ScreeningResult[]
}

type ScreeningResult = {
  type: 'adverse_media' | 'sanctions_screening' | 'peps_screening' | 'other_screening'
  verdict: 'LOW' | 'MEDIUM' | 'HIGH' | 'REJECT' | 'DISCOUNTED' | 'REVIEW'
  reason: string
  source: string // e.g. 'webSearch', 'complyAdvantage'
  fromMonitoring: boolean
  externalIds: {
    // varies by provider
  }
  matchingName: string
  // Additional fields vary by type and provider
  names: string[] | undefined
  url: string | undefined
  date: string | undefined
  lists: {
    name: string
    identifier: string
    url: string
    countryCodes: string[]
    dateAdded: string
  }[] | undefined
  groupId: string | undefined // Adverse media hits that share the same groupId are likely to be the same event
}

Finally, learn about webhooks.