common.transfer

io.token.proto.common.transfer common/src/main/proto/transfer.proto


syntax = "proto3";
package io.token.proto.common.transfer;

option java_outer_classname = "TransferProtos";
option csharp_namespace = "Tokenio.Proto.Common.TransferProtos";

import "account.proto";
import "money.proto";
import "providerspecific.proto";
import "security.proto";
import "submission.proto";
import "token.proto";
import "transaction.proto";
import "transferinstructions.proto";
import "v2/payout.proto";

// A transfer record as persisted on the ledger.
message Transfer {
  string id = 1;                               // Computed as the hash of the transfer payload.
  string transaction_id = 2;                   // Bank transaction reference id.
  int64 created_at_ms = 3;
  TransferPayload payload = 4;
  repeated io.token.proto.common.security.Signature payload_signatures = 5; // Signatures
  io.token.proto.common.transaction.TransactionStatus status = 6;
  string order_id = 7;                         // Currency Ledger order id.
  Method method = 8;                           // Instant (currency ledger) or default
  string execution_date = 9;                   // Execution date. Same as the value on the transfer token payload.
  io.token.proto.common.transferinstructions.TransferEndpoint source = 10; // Optional; Contains iban and holder name
  providerspecific.ProviderTransferDetails provider_details = 11;
  string status_reason_information = 12;       // Optional: provides detailed information on the status reason
  io.token.proto.common.account.Refund refund = 14;    // Optional: a refund object will be returned
  io.token.proto.common.token.ActingAs acting_as = 15; // Provides information about sub-tpps
  io.token.proto.common.v2.payout.TransferRefundStatus transfer_refund_status = 16  [deprecated=true]; // use refund_details.transfer_refund_status
  Refund refund_details = 17;    // Refund details, such as transfer refund status and settled refund amount
  bool converted_to_future_dated_payment = 18; // whether transfer is from a auto single immediate payment to future dated payment conversion
  ScaStatus sca_status = 19; // Optional: SCA Status object will be returned
  enum Method {
    DEFAULT = 0;
    INSTANT = 1; // Use Token's Currency Ledger
  }
  enum ScaStatus {
    UNKNOWN = 0;
    APPLIED = 1;
    EXEMPTED = 2;
  }
}

message Refund {
  io.token.proto.common.v2.payout.TransferRefundStatus transfer_refund_status = 1;
  io.token.proto.common.money.Money settled_refund_amount = 2; // total amount of settled refunds (with status INITIATION_COMPLETED)
  io.token.proto.common.money.Money remaining_refund_amount = 3; // remaining amount to be refunded (total transfer amount - total amount of non-failed refunds)
}

message BulkTransfer {
  string id = 1;                            // Token ID computed as the hash of the token payload
  string token_id = 2;
  int64 created_at_ms = 3;
  repeated Transaction transactions = 4;    // Transactions for which the bank provides IDs and/or statuses.
                                            // Might not be populated right away.
  string total_amount = 5;                  // Total amount irrespective of currency. Used for redundancy check.
  transferinstructions.TransferEndpoint source = 6;

  message Transaction {
    io.token.proto.common.token.BulkTransferBody.Transfer transfer = 1;
    string transaction_id = 2;
    transaction.TransactionStatus status = 3;
  }
}

// A transfer payload that is being signed by the redeemer and the bank.
message TransferPayload {
  string ref_id = 1;                                                                      // Client assigned unique request id.
  string token_id = 2;                                                                    // Token id.
  io.token.proto.common.money.Money amount = 3;                                           // Amount and currency.
  repeated io.token.proto.common.transferinstructions.TransferEndpoint destinations = 5 [deprecated=true];
  string description = 6;                                                                 // Optional
  repeated io.token.proto.common.transferinstructions.TransferDestination transfer_destinations = 7;  // Transfer destinations, sorted in priority order.
  io.token.proto.common.transferinstructions.TransferInstructions.Metadata metadata = 8;
  bool confirm_funds = 9;
}