Configuration

Custom configuration for this application may be specified via an environment variable APP_CONFIG to a configuration file that will be merged with the default configuration file.

Endpoint

ACHGateway has a GET :9494/config endpoint to return the full config object.

General Configuration

ACHGateway:
  Admin:
    BindAddress: <string> # Example :9494

Database

  Database:
    MySQL:
      Address: <string> # Example tcp(localhost:3306)
      User: <string>
      Password: <string>
      Connections: # Optional Object
        MaxOpen: <integer>
        MaxIdle: <integer>
        MaxLifetime: <duration>
        MaxIdleTime: <duration>
      [ UseTLS: <boolean> | default = false ]
      [ TLSCAFile: <string> ]
      [ InsecureSkipVerify: <boolean> | default = false ]
      [ VerifyCAFile: <boolean> | default = false]
      TLSClientCerts:
        - CertFilePath: <string>
          KeyFilePath: <string>
    SQLite:
      Path: <string>
    DatabaseName: <string>

Inbound

  Inbound:
    HTTP:
      BindAddress: <string> # Example :8484
      Transform:
        Encoding:
          [ Base64: <boolean> | default = false ]
          [ Compress: <boolean> | default = false ]
        Encryption:
          AES:
            [ Key: <string> | default = "" ]
    InMem:
      [ URL: <string> ]
    Kafka:
      Brokers:
        - <string>
      Key: <string>
      Secret: <string>
      [ Group: <string> | default = "" ]
      Topic: <string>
      TLS: <boolean>
      AutoCommit: <boolean>
      Transform:
        Encoding:
          [ Base64: <boolean> | default = false ]
          [ Compress: <boolean> | default = false ]
        Encryption:
          AES:
            [ Key: <string> | default = "" ]
      Consumer: {}
      Producer:
        [ MaxMessageBytes: <number> | default = 1000000 ]
    ODFI:
      Audit:
        ID: <string>
        # BucketURI is the S3-compatiable bucket location. AWS S3 and Google Cloud Storage are supported.
        # See https://gocloud.dev/howto/blob/ for more information on configuring each cloud provide.r.
        # Example: s3://my-bucket?region=us-west-1 OR gcs://my-bucket/
        BucketURI: <string>
        BasePath: <string> # Example: "incoming"
        GPG: # Optional, but recommended
          KeyFile: <string>
          Signer:
            KeyFile: <string>
            KeyPassword: <string>
      Processors:
        Corrections:
          [ Enabled: <boolean> | default = false]
          # Partial filename to match on. Example: "CORRECTION_"
          [ PathMatcher: <string> | default = "" ]
        Incoming:
          [ Enabled: <boolean> | default = false]
          # Partial filename to match on. Example: "CORRECTION_"
          [ PathMatcher: <string> | default = "" ]
          # Booleans to skip emitting events for files containing the specified record type
          [ ExcludeCorrections: <boolean> | default = false ]
          [ ExcludePrenotes: <boolean> | default = false ]
          [ ExcludeReturns: <boolean> | default = false ]
          [ ExcludeReconciliations: <boolean> | default = false ]
        Reconciliation:
          [ Enabled: <boolean> | default = false ]
          # Partial filename to match on. Example: "RECON_"
          [ PathMatcher: <string> | default = "" ]
          [ ProduceFileEvents: <boolean> | default = false ]
          [ ProduceEntryEvents: <boolean> | default = false ]
        Prenotes:
          [ Enabled: <boolean> | default = false]
          # Partial filename to match on. Example: "PRENOTE_"
          [ PathMatcher: <string> | default = "" ]
        Returns:
          [ Enabled: <boolean> | default = false]
          # Partial filename to match on. Example: "RET_"
          [ PathMatcher: <string> | default = "" ]
        Validation:
          # See moov-io/ach's ValidateOpts for the full list of options
      Publishing:
        Kafka:
          Brokers:
            - <string>
          Key: <string>
          Secret: <string>
          Topic: <string>
          [ TLS: <boolean> | default = false ]
          [ AutoCommit: <boolean> | default = false ]
      Interval: <duration>
      ShardNames:
        - <string>
      Storage:
        Directory: <string>
        [ CleanupLocalDirectory: <boolean> | default = false]
        [ KeepRemoteFiles: <boolean> | default = false]
        [ RemoveZeroByteFiles: <boolean> | default = false]

Eventing

  Events:
    Stream:
      Kafka
        Brokers:
          - <string>
        Key: <string>
        Secret: <string>
        Topic: <string>
        [ TLS: <boolean> | default = false ]
        [ AutoCommit: <boolean> | default = false ]
    Webhook:
      [ Endpoint: <string> | default = "" ]

Sharding

  Sharding:
    Shards:
      - Name: <string>
        Cutoffs:
          Timezone: <string>
          Windows:
            - <string>
        PreUpload:
          GPG: # Optional
            KeyFile: <string>
            Signer:
              KeyFile: <string>
              KeyPassword: <string>
        UploadAgent: <string>
        Mergable:
          # If Conditions is nil files are merged until reaching Nacha's limit of 10,000 lines
          Conditions:
            MaxLines: <integer>
            MaxDollarAmount: <integer>
          FlattenBatches: {} # Specify a non-null object to flatten batches, often not needed
        OutboundFilenameTemplate: <string>
        Audit:
          ID: <string>
          # BucketURI is the S3-compatiable bucket location. AWS S3 and Google Cloud Storage are supported.
          # See https://gocloud.dev/howto/blob/ for more information on configuring each cloud provide.r.
          # Example: s3://my-bucket?region=us-west-1 OR gcs://my-bucket/
          BucketURI: <string>
          BasePath: <string> # Example: "outgoing"
          GPG:
            KeyFile: <string>
            Signer:
              KeyFile: <string>
              KeyPassword: <string>
        Output:
          Format: <string> # Example nacha, base64, encrypted-bytes
        Notifications:
          Email:
            - ID: <string>
              From: <string>
              To:
                - <string>
              ConnectionURI: <string>
              Template: <string>
              CompanyName: <string>
          PagerDuty:
            - ID: <string>
              ApiKey: <string>
              From: <string>
              ServiceKey: <string>
          Slack:
            - ID: <string>
              WebhookURL: <string>
          Retry:
            Interval: <duration>
            MaxRetries: <integer>
    [ Default: <string> ]
    Mappings:
      - ShardKey: <string>  # Can be random value (UUID, fixed string)
        ShardName: <string> # Maps to Sharding.Shards[_].name

Upload Agents

  Upload:
    Agents:
    - ID: <string>
      # Configuration for using a remote File Transfer Protocol server
      # for ACH file uploads.
      FTP:
        Hostname: <host>
        Username: <string>
        [ Password: <secret> ]
        [ CAFile: <filename> ]
        [ DialTimeout: <duration> | default = 10s ]
        # Offer EPSV to be used if the FTP server supports it.
        [ DisabledEPSV: <boolean> | default = false ]
      # Configuration for using a remote SSH File Transfer Protocol server
      # for ACH file uploads
      SFTP:
        Hostname: <host>
        Username: <string>
        [ Password: <secret> ]
        [ ClientPrivateKey: <string> ]
        [ ClientPrivateKeyFile: <filename> ]
        [ HostPublicKey: <filename> ]
        [ DialTimeout: <duration> | default = 10s ]
        [ MaxConnectionsPerFile: <number> | default = 1 ]
        # Sets the maximum size of the payload, measured in bytes.
        # Try lowering this on "failed to send packet header: EOF" errors.
        [ MaxPacketSize: <number> | default = 20480 ]
        [ SkipDirectoryCreation: <boolean> | default = false ]
      Paths:
        # These paths point to directories on the remote FTP/SFTP server.
        # It is recommended to use absolute paths (e.g. /home/user/outbound/)
        # where possible to correctly identify filesystem locations.
        Inbound: <filename>
        Outbound: <filename>
        Reconciliation: <filename>
        Return: <filename>
      Notifications:
        Email:
          - <string>
        PagerDuty:
          - <string>
        Slack:
          - <string>
      AllowedIPs: <string>
    Merging:
      Storage:
        Filesystem:
          [ Directory: <strong> | default = "" ]
        Encryption:
          AES:
            [ Base64Key: <string> | default = "" ]
          Encoding: <string> # Example: base64
    Retry:
      Interval: <duration>
      MaxRetries: <integer>
    DefaultAgentID: <string>

Error Alerting

  Errors:
    PagerDuty:
      ApiKey: <string>
      RoutingKey: <string>
    Slack:
      AccessToken: <string>
      ChannelID: <string>
    Mock:
      Enabled: <boolean>