Moov · Schema

Moov Transfer

Schema for a Moov money movement transfer between two accounts. Transfers move funds via ACH, RTP, or card rails and have a source payment method and a destination payment method. The transfer progresses through a lifecycle from created to completed or failed.

BankingEmbedded FinanceFinancial InfrastructureMoney MovementPaymentsTransfers

Properties

Name Type Description
transferID string Unique identifier for the transfer assigned by Moov.
status string Current lifecycle status of the transfer.
source object The payment method and account from which funds are debited.
destination object The payment method and account to which funds are credited.
amount object The total amount being transferred.
description string Human-readable description of the transfer purpose.
metadata object Custom key-value pairs for application-specific data attached to the transfer.
facilitatorFee object Optional fee amount collected by the platform facilitator on this transfer.
moovFee integer Moov platform fee in cents charged for processing the transfer.
moovFeeDecimal string Moov platform fee expressed as a decimal string for high-precision representation.
createdOn string ISO 8601 timestamp when the transfer was created.
updatedOn string ISO 8601 timestamp when the transfer was last updated.
completedOn string ISO 8601 timestamp when the transfer reached a terminal status.
View JSON Schema on GitHub

JSON Schema

moov-transfer-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api.moov.io/schemas/moov/transfer.json",
  "title": "Moov Transfer",
  "description": "Schema for a Moov money movement transfer between two accounts. Transfers move funds via ACH, RTP, or card rails and have a source payment method and a destination payment method. The transfer progresses through a lifecycle from created to completed or failed.",
  "type": "object",
  "required": ["transferID", "status", "source", "destination", "amount", "createdOn"],
  "properties": {
    "transferID": {
      "type": "string",
      "format": "uuid",
      "description": "Unique identifier for the transfer assigned by Moov."
    },
    "status": {
      "type": "string",
      "description": "Current lifecycle status of the transfer.",
      "enum": ["created", "pending", "completed", "failed", "reversed"]
    },
    "source": {
      "$ref": "#/$defs/TransferParticipant",
      "description": "The payment method and account from which funds are debited."
    },
    "destination": {
      "$ref": "#/$defs/TransferParticipant",
      "description": "The payment method and account to which funds are credited."
    },
    "amount": {
      "$ref": "#/$defs/Amount",
      "description": "The total amount being transferred."
    },
    "description": {
      "type": "string",
      "description": "Human-readable description of the transfer purpose.",
      "maxLength": 100
    },
    "metadata": {
      "type": "object",
      "description": "Custom key-value pairs for application-specific data attached to the transfer.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "facilitatorFee": {
      "$ref": "#/$defs/Amount",
      "description": "Optional fee amount collected by the platform facilitator on this transfer."
    },
    "moovFee": {
      "type": "integer",
      "description": "Moov platform fee in cents charged for processing the transfer.",
      "minimum": 0
    },
    "moovFeeDecimal": {
      "type": "string",
      "description": "Moov platform fee expressed as a decimal string for high-precision representation.",
      "pattern": "^\\d+\\.\\d+$"
    },
    "createdOn": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp when the transfer was created."
    },
    "updatedOn": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp when the transfer was last updated."
    },
    "completedOn": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp when the transfer reached a terminal status."
    }
  },
  "$defs": {
    "Amount": {
      "type": "object",
      "description": "A monetary amount with ISO 4217 currency denomination.",
      "required": ["currency", "value"],
      "properties": {
        "currency": {
          "type": "string",
          "description": "ISO 4217 three-letter currency code (e.g., USD).",
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]{3}$"
        },
        "value": {
          "type": "integer",
          "description": "Amount in the smallest currency unit (e.g., cents for USD). Must be a non-negative integer.",
          "minimum": 0
        }
      }
    },
    "TransferParticipant": {
      "type": "object",
      "description": "One side of a transfer, representing the payment method and account involved.",
      "required": ["paymentMethodID"],
      "properties": {
        "paymentMethodID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier of the payment method used for this side of the transfer."
        },
        "paymentMethodType": {
          "type": "string",
          "description": "The type of payment instrument used.",
          "enum": [
            "moov-wallet",
            "ach-debit-fund",
            "ach-debit-collect",
            "ach-credit-standard",
            "ach-credit-same-day",
            "rtp-credit",
            "card-payment"
          ]
        },
        "account": {
          "$ref": "#/$defs/AccountRef",
          "description": "Reference to the Moov account on this side of the transfer."
        },
        "bankAccount": {
          "$ref": "#/$defs/BankAccountRef",
          "description": "Bank account details when the payment method type is an ACH rail."
        },
        "wallet": {
          "$ref": "#/$defs/WalletRef",
          "description": "Wallet details when the payment method type is moov-wallet."
        },
        "card": {
          "$ref": "#/$defs/CardRef",
          "description": "Card details when the payment method type is card-payment."
        }
      }
    },
    "AccountRef": {
      "type": "object",
      "description": "A lightweight reference to a Moov account.",
      "properties": {
        "accountID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the Moov account."
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "Email address of the account holder."
        },
        "displayName": {
          "type": "string",
          "description": "Display name of the account."
        }
      }
    },
    "BankAccountRef": {
      "type": "object",
      "description": "Summary of a linked bank account involved in a transfer.",
      "properties": {
        "bankAccountID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the bank account."
        },
        "bankName": {
          "type": "string",
          "description": "Name of the financial institution."
        },
        "bankAccountType": {
          "type": "string",
          "description": "Type of bank account.",
          "enum": ["checking", "savings", "loan"]
        },
        "lastFourAccountNumber": {
          "type": "string",
          "description": "Last four digits of the bank account number for identification.",
          "pattern": "^\\d{4}$"
        },
        "routingNumber": {
          "type": "string",
          "description": "ABA routing transit number for the bank.",
          "pattern": "^\\d{9}$"
        }
      }
    },
    "WalletRef": {
      "type": "object",
      "description": "Reference to a Moov digital wallet involved in a transfer.",
      "properties": {
        "walletID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the wallet."
        }
      }
    },
    "CardRef": {
      "type": "object",
      "description": "Summary of a linked card involved in a transfer.",
      "properties": {
        "cardID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the card."
        },
        "brand": {
          "type": "string",
          "description": "Card network brand.",
          "enum": ["Visa", "Mastercard", "AmericanExpress", "Discover", "DinersClub", "JCB"]
        },
        "cardType": {
          "type": "string",
          "description": "Type of card instrument.",
          "enum": ["debit", "credit", "prepaid", "unknown"]
        },
        "lastFourCardNumber": {
          "type": "string",
          "description": "Last four digits of the card number.",
          "pattern": "^\\d{4}$"
        },
        "expiration": {
          "type": "object",
          "description": "Card expiration date.",
          "properties": {
            "month": {
              "type": "string",
              "description": "Two-digit expiration month.",
              "pattern": "^(0[1-9]|1[0-2])$"
            },
            "year": {
              "type": "string",
              "description": "Two-digit expiration year.",
              "pattern": "^\\d{2}$"
            }
          }
        }
      }
    },
    "Refund": {
      "type": "object",
      "description": "A refund issued against a completed card transfer, returning funds to the original payment method.",
      "required": ["refundID", "status", "amount"],
      "properties": {
        "refundID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the refund."
        },
        "status": {
          "type": "string",
          "description": "Current processing status of the refund.",
          "enum": ["created", "pending", "completed", "failed"]
        },
        "amount": {
          "$ref": "#/$defs/Amount",
          "description": "Amount being refunded. Must not exceed the original transfer amount."
        },
        "createdOn": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 timestamp when the refund was initiated."
        },
        "updatedOn": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 timestamp when the refund was last updated."
        }
      }
    },
    "TransferCancellation": {
      "type": "object",
      "description": "A cancellation request for a pending transfer that has not yet been submitted to the payment rail.",
      "required": ["cancellationID", "status"],
      "properties": {
        "cancellationID": {
          "type": "string",
          "format": "uuid",
          "description": "Unique identifier for the cancellation request."
        },
        "status": {
          "type": "string",
          "description": "Status of the cancellation request.",
          "enum": ["pending", "confirmed", "declined"]
        },
        "createdOn": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 timestamp when the cancellation was requested."
        }
      }
    }
  }
}