object VOIReport
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/BaseReportAckWithPortfolioId"
    },
    {
      "type": "object",
      "properties": {
        "days": {
          "type": "integer",
          "format": "int64",
          "example": 200,
          "description": "Number of days covered by the report"
        },
        "income": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ReportIncomeStreamSummary"
          },
          "description": "Income details"
        },
        "endDate": {
          "$ref": "#/components/schemas/ReportEndDate"
        },
        "seasoned": {
          "type": "boolean",
          "example": true,
          "description": "\"true\" if the report covers more than 180 days"
        },
        "startDate": {
          "$ref": "#/components/schemas/ReportStartDate"
        },
        "institutions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ReportInstitution"
          },
          "description": "A list of institution records"
        }
      }
    }
  ],
  "description": "A VOI report"
}
object VOIReportAccount
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "format": "int64",
      "example": 1000023996,
      "description": "The ID of the account"
    },
    "name": {
      "type": "string",
      "example": "Checking",
      "description": "The account name from the institution"
    },
    "type": {
      "type": "string",
      "example": "checking",
      "description": "One of the values from account types"
    },
    "number": {
      "type": "string",
      "example": "1111",
      "description": "The account number from the institution (all digits except the last four are obfuscated)"
    },
    "balance": {
      "type": "number",
      "example": 714.16,
      "description": "The cleared balance of the account as-of `balanceDate`"
    },
    "ownerName": {
      "$ref": "#/components/schemas/ReportAccountOwnerName"
    },
    "miscDeposits": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ReportTransaction"
      },
      "maxItems": 100,
      "minItems": 0,
      "description": "A list of miscellaneous deposits"
    },
    "ownerAddress": {
      "$ref": "#/components/schemas/ReportAccountOwnerAddress"
    },
    "transactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ReportTransaction"
      },
      "description": "a list of transaction records"
    },
    "incomeStreams": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/VOIReportIncomeStream"
      },
      "description": "A list of income stream records"
    },
    "currentBalance": {
      "type": "number",
      "example": 714.16,
      "description": "Current balance of the account"
    },
    "availableBalance": {
      "type": "number",
      "example": 714.16,
      "description": "The available balance for the account"
    },
    "beginningBalance": {
      "type": "number",
      "example": 714.77,
      "description": "Beginning balance of account per the time period in the report"
    },
    "aggregationStatusCode": {
      "type": "integer",
      "format": "int32",
      "example": 0,
      "description": "The status of the most recent aggregation attempt"
    },
    "averageMonthlyBalance": {
      "type": "number",
      "example": 720.75,
      "description": "The average monthly balance of this account"
    }
  }
}
object VOIReportAck
{
  "allOf": [
    {
      "$ref": "#/components/schemas/BaseReportAckWithPortfolioId"
    },
    {
      "type": "object",
      "properties": {
        "constraints": {
          "$ref": "#/components/schemas/VOIReportConstraintsOut"
        }
      }
    }
  ],
  "required": [
    "id",
    "portfolioId",
    "customerType",
    "customerId",
    "requestId",
    "requesterName",
    "createdDate",
    "title",
    "consumerId",
    "consumerSsn",
    "type",
    "status",
    "constraints"
  ],
  "description": "A VOI report being generated"
}
object VOIReportConstraints
{
  "type": "object",
  "properties": {
    "fromDate": {
      "$ref": "#/components/schemas/UnixDate"
    },
    "accountIds": {
      "$ref": "#/components/schemas/ReportAccountIdsString"
    },
    "reportCustomFields": {
      "$ref": "#/components/schemas/ReportCustomFields"
    },
    "incomeStreamConfidenceMinimum": {
      "$ref": "#/components/schemas/IncomeStreamConfidenceMinimum"
    }
  }
}
object VOIReportConstraintsOut
{
  "type": "object",
  "properties": {
    "fromDate": {
      "$ref": "#/components/schemas/UnixDate"
    },
    "accountIds": {
      "$ref": "#/components/schemas/ReportAccountIds"
    },
    "reportCustomFields": {
      "$ref": "#/components/schemas/ReportCustomFields"
    },
    "incomeStreamConfidenceMinimum": {
      "$ref": "#/components/schemas/IncomeStreamConfidenceMinimum"
    }
  }
}
object VOIReportIncomeStream
{
  "type": "object",
  "required": [
    "id",
    "name",
    "status",
    "estimateInclusion",
    "confidence",
    "cadence",
    "transactions"
  ],
  "properties": {
    "id": {
      "type": "string",
      "example": "dens28i3vsch-voi1",
      "description": "Income stream ID"
    },
    "name": {
      "type": "string",
      "example": "none",
      "description": "A human-readable name based on the `normalizedPayee` name of the transactions for this income stream"
    },
    "status": {
      "$ref": "#/components/schemas/ActiveStatus"
    },
    "cadence": {
      "$ref": "#/components/schemas/CadenceDetails"
    },
    "netAnnual": {
      "type": "number",
      "example": 110475.7,
      "description": "Sum of all values in `netMonthlyIncome` over the previous 12 months"
    },
    "confidence": {
      "type": "integer",
      "format": "int32",
      "example": 70,
      "description": "Level of confidence that the deposit stream represents income (example: 85%)"
    },
    "netMonthly": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/NetMonthly"
      },
      "description": "A list of net monthly records. One instance for each complete calendar month in the report."
    },
    "transactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ReportTransaction"
      },
      "description": "A list of transaction records"
    },
    "estimateInclusion": {
      "$ref": "#/components/schemas/EstimateInclusion"
    },
    "incomeStreamMonths": {
      "type": "integer",
      "format": "int32",
      "example": 18,
      "description": "The number of months the income transactions are observed"
    },
    "projectedNetAnnual": {
      "type": "number",
      "example": 0,
      "description": "Projected net income over the next 12 months, across all income streams, based on `netAnnualIncome`"
    },
    "estimatedGrossAnnual": {
      "type": "number",
      "example": 12321.1,
      "description": "Before-tax gross annual income (estimated from `netAnnual`) across all income stream in the past 12 months"
    },
    "projectedGrossAnnual": {
      "type": "number",
      "example": 151609,
      "description": "Projected gross income over the next 12 months, across all active income streams, based on `projectedNetAnnual`"
    },
    "averageMonthlyIncomeNet": {
      "type": "number",
      "example": 9206.31,
      "description": "Monthly average amount over the previous 24 months"
    }
  }
}
object VerifiedMicroDeposit
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "example": "Verified",
      "description": "Micro entries successful verification status"
    },
    "statusDescription": {
      "type": "string",
      "example": "Micro entries are successfully verified",
      "description": "Micro entries successful verification description"
    }
  }
}
string Warnings
{
  "type": "string",
  "example": "Test warnings",
  "description": "An array containing warning messages. Warnings can be one of:\n\n  * Address: Input postal code was corrected\n  * Address: Input state corrected\n  * Email: Address is too long\n  * Email: General syntax error\n  * Email: Invalid domain syntax \n  * Email: Invalid top-level-domain (TLD) in address\n  * Email: Invalid username syntax\n  * IP: IP address is in private range\n  * Phone: Invalid country_hint value. Only Alpha-2 supported"
}
string Webhook
{
  "type": "string",
  "example": "https://webhook.site/8d4421a7-d1d1-4f01-bb08-5370aff0321b",
  "description": "The publicly available URL you want to be notified with events as the user progresses through the application. See [Connect Webhook Event](https://developer.mastercard.com/open-banking-us/documentation/webhooks/webhooks-connect/) for event details."
}
string WebhookContentType
{
  "type": "string",
  "default": "application/json",
  "example": "application/json",
  "description": "The content type the webhook events will be sent in. Supported types: \"application/json\" and \"application/xml\"."
}
object WebhookData
{
  "type": "object",
  "description": "Allows additional identifiable information to be inserted into the payload of connect webhook events. See: [Custom Webhooks](https://developer.mastercard.com/open-banking-us/documentation/webhooks/webhooks-custom/)."
}
object WebhookHeaders
{
  "type": "object",
  "description": "Allows additional identifiable information to be included as headers of connect webhook event. See: [Custom Webhooks](https://developer.mastercard.com/open-banking-us/documentation/webhooks/webhooks-custom/)."
}
boolean WithInsights
{
  "type": "boolean",
  "example": true,
  "description": "If Identity Insights data must be returned or not"
}
string ZipCode
{
  "type": "string",
  "example": "84123",
  "description": "A ZIP code"
}