Contents

GET /aml/$OFFICER_PUB/measures#

To enable the AML staff SPA to give AML staff a choice of possible measures, a new endpoint /aml/$OFFICER_PUB/measures is added that allows the AML SPA to dynamically GET the list of available measures. It returns a list of known KYC checks (by name) with their descriptions and a list of AML programs with information about the required context.

This endpoint was introduced in protocol v20.

Request:

Taler-AML-Officer-Signature:

The client must provide Base-32 encoded EdDSA signature with $OFFICER_PRIV, affirming the desire to obtain AML data. Note that this is merely a simple authentication mechanism, the details of the request are not protected by the signature.

Response:

200 Ok:

Information about possible measures is returned in a AvailableMeasureSummary object.

Details:

interface AvailableMeasureSummary {

  // Available original measures that can be
  // triggered directly by default rules.
  roots: { "$measure_name" : MeasureInformation; };

  // Available AML programs.
  programs: { "$prog_name" : AmlProgramRequirement; };

  // Available KYC checks.
  checks: { "$check_name" : KycCheckInformation; };

  // Default KYC rules. This is the set of KYC rules that
  // applies by default to new "accounts".  Note that some
  // rules only apply to wallets, while others only apply to
  // bank accounts. The returned array is the union of all
  // possible rules, applications should consider the
  // operation_type to filter for rules that actually
  // apply to a specific situation.
  // @since protocol **v28**.
  default_rules: KycRule[];

}
interface MeasureInformation {

  // Name of a KYC check.
  check_name: string;

  // Name of an AML program.
  // Optional @since protocol **v30**.
  prog_name?: string;

  // Context for the check. Optional.
  context?: Object;

  // Operation that this measure relates to.
  // NULL if unknown. Useful as a hint to the
  // user if there are many (voluntary) measures
  // and some related to unlocking certain operations.
  // (and due to zero-amount thresholds, no measure
  // was actually specifically triggered).
  //
  // Must be one of "WITHDRAW", "DEPOSIT",
  // (p2p) "MERGE", (wallet) "BALANCE",
  // (reserve) "CLOSE", "AGGREGATE",
  // "TRANSACTION" or "REFUND".
  // @since protocol **v21**.
  operation_type?: string;

  // Can this measure be undertaken voluntarily?
  // Optional, default is false.
  // @since protocol **vATTEST**.
  voluntary?: boolean;

}
interface AmlProgramRequirement {

  // Description of what the AML program does.
  description: string;

  // List of required field names in the context to run this
  // AML program. SPA must check that the AML staff is providing
  // adequate CONTEXT when defining a measure using this program.
  context: string[];

  // List of required attribute names in the
  // input of this AML program.  These attributes
  // are the minimum that the check must produce
  // (it may produce more).
  inputs: string[];

}
interface KycCheckInformation {

  // Description of the KYC check.  Should be shown
  // to the AML staff but will also be shown to the
  // client when they initiate the check in the KYC SPA.
  description: string;

  // Map from IETF BCP 47 language tags to localized
  // description texts.
  description_i18n ?: { [lang_tag: string]: string};

  // Names of the fields that the CONTEXT must provide
  // as inputs to this check.
  // SPA must check that the AML staff is providing
  // adequate CONTEXT when defining a measure using
  // this check.
  requires: string[];

  // Names of the attributes the check will output.
  // SPA must check that the outputs match the
  // required inputs when combining a KYC check
  // with an AML program into a measure.
  outputs: string[];

  // Name of a root measure taken when this check fails.
  fallback: string;
}