{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/divvy/main/json-schema/divvy-transaction-response-dto-schema.json",
  "title": "TransactionResponseDto",
  "description": "Transactions response.",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/divvy-bill-v3-api-openapi.yml#/components/schemas/TransactionResponseDto",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "BILL-generated ID of the transaction",
      "deprecated": true
    },
    "uuid": {
      "type": "string",
      "description": "BILL-generated UUID of the transaction"
    },
    "childTransactionIds": {
      "type": "array",
      "description": "BILL-generated IDs of child transactions associated with the current transaction",
      "deprecated": true,
      "items": {
        "type": "string"
      }
    },
    "childTransactionUuids": {
      "type": "array",
      "description": "BILL-generated IDs of child transactions associated with the current transaction",
      "items": {
        "type": "string"
      }
    },
    "isLocked": {
      "type": "boolean",
      "description": "Set as `true` if the transaction is locked"
    },
    "isReconciled": {
      "type": "boolean",
      "description": "Set as `true` if the transaction is reconciled"
    },
    "transactionType": {
      "allOf": [
        {
          "$ref": "#/$defs/TransactionType"
        },
        {
          "description": "Transaction type."
        }
      ]
    },
    "parentTransactionId": {
      "type": "string",
      "description": "BILL-generated ID of the parent transaction. This field is set on child transactions when a parent transaction is split.",
      "deprecated": true
    },
    "userId": {
      "type": "string",
      "description": "BILL-generated ID of the user who created the transaction",
      "deprecated": true
    },
    "userUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the user who created the transaction"
    },
    "userName": {
      "type": "string",
      "description": "Display name of the user who created the transaction"
    },
    "rawMerchantName": {
      "type": "string",
      "description": "Raw merchant name for the transaction"
    },
    "merchantName": {
      "type": "string",
      "description": "Readable (cleaned) merchant name for the transaction"
    },
    "budgetId": {
      "type": "string",
      "description": "BILL-generated ID of the budget linked with the transaction",
      "deprecated": true
    },
    "budgetUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the budget linked with the transaction"
    },
    "budgetName": {
      "type": "string",
      "description": "Name of the budget linked with the transaction"
    },
    "parentBudgetUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the parent budget linked with the transaction"
    },
    "originalAuthTransactionId": {
      "type": "string",
      "description": "BILL-generated ID of the originating authorization transaction",
      "deprecated": true
    },
    "originalAuthTransactionUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the originating authorization transaction.\n\nAfter a transaction is authorized, it is set as cleared when it is complete. The `originalAuthTransactionUuid` ties the cleared transaction to the authorized transaction. The value is `null` when the transaction is not authorized."
    },
    "isCredit": {
      "type": "boolean",
      "description": "Set as `true` if the transaction is a credit"
    },
    "currencyData": {
      "allOf": [
        {
          "$ref": "#/$defs/CurrencyData"
        },
        {
          "description": "Transaction currency information"
        }
      ]
    },
    "receiptRequired": {
      "type": "boolean",
      "description": "Set as `true` if a receipt is required to complete the transaction"
    },
    "reviewRequired": {
      "type": "boolean",
      "description": "Set as `true` if a review is required to complete the transaction"
    },
    "status": {
      "allOf": [
        {
          "$ref": "#/$defs/TransactionStatusTagType"
        },
        {
          "description": "Transaction status"
        }
      ]
    },
    "occurredTime": {
      "type": "string",
      "description": "Created date and time",
      "format": "date-time"
    },
    "updatedTime": {
      "type": "string",
      "description": "Updated date and time",
      "format": "date-time"
    },
    "authorizedTime": {
      "type": "string",
      "description": "Transaction authorized date and time",
      "format": "date-time"
    },
    "complete": {
      "type": "boolean",
      "description": "Set as `true` if the transaction has all the required fields completed"
    },
    "pointsAwarded": {
      "type": "integer",
      "description": "Points awarded for the transaction. This value is `0` until the transaction is cleared.\n\n**Note**: Only `ADMIN` users can view any awarded points.",
      "format": "int64"
    },
    "customFields": {
      "type": "array",
      "description": "Transaction custom fields information",
      "items": {
        "$ref": "#/$defs/CustomFieldDto"
      }
    },
    "receipts": {
      "type": "array",
      "description": "List of receipts attached to the transaction",
      "items": {
        "$ref": "#/$defs/ReceiptImage"
      }
    },
    "network": {
      "allOf": [
        {
          "$ref": "#/$defs/ProgramNetworkType"
        },
        {
          "description": "Transaction network type."
        }
      ]
    },
    "isParent": {
      "type": "boolean",
      "description": "Set as `true` if the transaction is the parent of another transaction"
    },
    "reviews": {
      "type": "array",
      "description": "Transaction review information",
      "items": {
        "$ref": "#/$defs/Review"
      }
    },
    "amount": {
      "type": "number",
      "description": "Transaction amount including fees.\n\nWhen `amount` is negative, the transaction is a reversal or refund.\n* **Reversal**: For a reversal (cancel before funds are settled), `transactionType` is set as `AUTHORIZATION` and `amount` is a negative value.\n* **Refund**: For a refund (cancel after funds are settled), `transactionType` is set as `CLEAR` and `amount` is a negative value."
    },
    "transactedAmount": {
      "type": "number",
      "description": "Transaction amount not including fees"
    },
    "fees": {
      "type": "number",
      "description": "Sum of transaction fees (including `foreignExchangeFee`)"
    },
    "foreignExchangeFee": {
      "type": "number",
      "description": "Foreign exchange fee for the transaction (if any)"
    },
    "receiptStatus": {
      "allOf": [
        {
          "$ref": "#/$defs/ReceiptStatusType"
        },
        {
          "description": "Receipt status."
        }
      ]
    },
    "matchedClearTransactionId": {
      "type": "string",
      "description": "BILL-generated ID of the cleared transaction. Use this ID to identify the transaction after it is cleared.",
      "deprecated": true
    },
    "matchedClearTransactionUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the cleared transaction. Use this ID to identify the transaction after it is cleared."
    },
    "accountingIntegrationTransactions": {
      "type": "array",
      "description": "Accounting system integration information",
      "items": {
        "$ref": "#/$defs/AccountingIntegrationTransaction"
      }
    },
    "reviewers": {
      "type": "array",
      "description": "Transaction reviewers information",
      "items": {
        "$ref": "#/$defs/Reviewer"
      }
    },
    "cardId": {
      "type": "string",
      "description": "BILL-generated ID of the card used to make the transaction",
      "deprecated": true
    },
    "cardUuid": {
      "type": "string",
      "description": "BILL-generated UUID of the card used to make the transaction"
    },
    "cardLastFour": {
      "type": "string",
      "description": "Last four digits of the card number used to make the transaction"
    },
    "cardType": {
      "allOf": [
        {
          "$ref": "#/$defs/CardType"
        },
        {
          "description": "Type of the card used to make the transaction"
        }
      ]
    },
    "receiptSyncStatus": {
      "allOf": [
        {
          "$ref": "#/$defs/ReceiptSyncStatusType"
        },
        {
          "description": "Transaction receipt sync status."
        }
      ]
    },
    "merchantCategoryCode": {
      "type": "string",
      "description": "Merchant category code"
    },
    "declineReason": {
      "type": "string",
      "description": "Human-readable transaction decline reason. This field is available when `transactionType` is set as `DECLINE`."
    },
    "declineInternalReasonCode": {
      "type": "string",
      "description": "Transaction decline reason code. This field is available when `transactionType` is set as `DECLINE`."
    },
    "cardPresent": {
      "type": "boolean",
      "description": "Set as `true` if a physical card was present for the transaction"
    },
    "merchantLocation": {
      "allOf": [
        {
          "$ref": "#/$defs/TxMerchantLocationDto"
        },
        {
          "description": "Merchant location information for the transaction. This information is available when `cardPresent` is set as `true`."
        }
      ]
    },
    "disputeStatus": {
      "allOf": [
        {
          "$ref": "#/$defs/DisputeStatusType"
        },
        {
          "description": "Dispute status for the transaction. This information is available when the transaction has been disputed."
        }
      ]
    }
  },
  "$defs": {
    "AccountingIntegrationTransaction": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "BILL-generated ID of the transaction in your accounting system"
        },
        "billable": {
          "type": "boolean",
          "description": "Set as `true` if the transaction can be billed to a client or customer"
        },
        "integrationTxId": {
          "type": "string",
          "description": "Unique transaction ID in your accounting system"
        },
        "syncStatus": {
          "type": "string",
          "description": "Current sync status of the transaction with your accounting system"
        },
        "syncMessage": {
          "type": "string",
          "description": "Message describing the result of the previous sync attempt"
        },
        "integrationType": {
          "type": "string",
          "description": "Accounting system integration type"
        },
        "integrationId": {
          "type": "string",
          "description": "BILL-generated ID of the accounting system integration"
        },
        "syncRequestId": {
          "type": "string",
          "description": "Unique ID of the sync request that processed the transaction"
        }
      },
      "description": "Spend \\& Expense accounting integration transaction information."
    },
    "ApproverType": {
      "type": "string",
      "description": "Spend \\& Expense transactions approver type.",
      "enum": [
        "ADMIN",
        "MANAGER",
        "NEXT_MANAGER",
        "BUDGET_OWNER",
        "BOOKKEEPER",
        "SPECIFIC_PERSON"
      ]
    },
    "CardType": {
      "type": "string",
      "description": "CardType.",
      "enum": [
        "PHYSICAL",
        "VIRTUAL_MEMBER",
        "VIRTUAL_VENDOR",
        "VIRTUAL"
      ]
    },
    "CurrencyData": {
      "type": "object",
      "properties": {
        "exchangeRate": {
          "type": "number",
          "description": "Exchange rate for currency conversion"
        },
        "exponent": {
          "type": "integer",
          "description": "Number of decimal places in the currency format",
          "format": "int64"
        },
        "originalCurrencyAmount": {
          "type": "string",
          "description": "Transaction amount in the original currency before conversion"
        },
        "originalCurrencyCode": {
          "type": "string",
          "description": "Three-letter ISO currency code of the original currency"
        },
        "symbol": {
          "type": "string",
          "description": "Currency symbol for display purposes (e.g. $, €, £)"
        }
      },
      "description": "CurrencyData class for Spend \\& Expense Transactions."
    },
    "CustomFieldDto": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "BILL-generated ID of the custom field",
          "deprecated": true
        },
        "uuid": {
          "type": "string",
          "description": "BILL-generated UUID of the custom field"
        },
        "name": {
          "type": "string",
          "description": "Custom field name"
        },
        "note": {
          "type": "string",
          "description": "Custom field note"
        },
        "isRequired": {
          "type": "boolean",
          "description": "Set as `true` if the custom field is required"
        },
        "selectedValues": {
          "type": "array",
          "description": "List of selected values for this custom field.\n\n**NOTE**: In the response, you get up to 20 selected values for a custom field. Use `GET /v3/spend/custom-fields/{customFieldId}/values` to get the complete list of selected values.",
          "items": {
            "$ref": "#/$defs/CustomFieldValueDto"
          }
        }
      },
      "description": "Transaction custom field response."
    },
    "CustomFieldValueDto": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "BILL-generated ID of the custom field value",
          "deprecated": true
        },
        "uuid": {
          "type": "string",
          "description": "BILL-generated UUID of the custom field value"
        },
        "value": {
          "type": "string",
          "description": "Custom field value"
        }
      },
      "description": "Custom field value DTO object representing the custom field value return on Custom fields for transactions and reimbursements."
    },
    "DisputeStatusType": {
      "type": "string",
      "description": "Dispute status enum for Spend \\& Expense Transactions.",
      "enum": [
        "SUBMITTED",
        "IN_PROGRESS",
        "CLOSED_WON",
        "CLOSED_LOST"
      ]
    },
    "ProgramNetworkType": {
      "type": "string",
      "description": "ProgramNetworkType enum for Spend \\& Expense Transactions.",
      "enum": [
        "VISA",
        "MASTERCARD"
      ]
    },
    "ReceiptImage": {
      "required": [
        "filename",
        "url",
        "uuid"
      ],
      "type": "object",
      "properties": {
        "url": {
          "minLength": 1,
          "type": "string",
          "description": "Uploaded receipt URL"
        },
        "filename": {
          "minLength": 1,
          "type": "string",
          "description": "Receipt file name"
        },
        "uuid": {
          "minLength": 1,
          "type": "string",
          "description": "BILL-generated UUID for the receipt image"
        }
      },
      "description": "DTO representing an image from the Spend API."
    },
    "ReceiptStatusType": {
      "type": "string",
      "description": "ReceiptStatusType enum for Spend \\& Expense Transactions.",
      "enum": [
        "VALIDATED",
        "NOT_VALIDATED",
        "ATTACHED",
        "MISSING",
        "NOT_REQUIRED",
        "NOT_ATTACHED"
      ]
    },
    "ReceiptSyncStatusType": {
      "type": "string",
      "description": "ReceiptSyncStatusType enum for Spend \\& Expense Transactions.",
      "enum": [
        "NOT_SYNCED",
        "SYNCED",
        "SYNC_ERROR",
        "NO_ATTACHMENTS"
      ]
    },
    "Review": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "BILL-generated ID of the review"
        },
        "isApproved": {
          "type": "boolean",
          "description": "Set as `true` if the transaction was approved"
        },
        "note": {
          "type": "string",
          "description": "Review note"
        },
        "createdTime": {
          "type": "string",
          "description": "Review created date and time",
          "format": "date-time"
        },
        "deletedTime": {
          "type": "string",
          "description": "Review deleted date and time (if available)",
          "format": "date-time"
        },
        "reviewerId": {
          "type": "string",
          "description": "BILL-generated ID of the user who reviewed the transaction",
          "deprecated": true
        },
        "reviewerUuid": {
          "type": "string",
          "description": "BILL-generated UUID of the user who reviewed the transaction"
        }
      },
      "description": "Review class for Spend \\& Expense Transactions."
    },
    "Reviewer": {
      "type": "object",
      "properties": {
        "approverType": {
          "allOf": [
            {
              "$ref": "#/$defs/ApproverType"
            },
            {
              "description": "Approver type."
            }
          ]
        },
        "reviewedTime": {
          "type": "string",
          "description": "Transaction review date and time",
          "format": "date-time"
        },
        "status": {
          "allOf": [
            {
              "$ref": "#/$defs/TransactionReviewerStatusType"
            },
            {
              "description": "Review status."
            }
          ]
        },
        "userId": {
          "type": "string",
          "description": "BILL-generated ID of the user assigned to review the transaction",
          "deprecated": true
        },
        "userUuid": {
          "type": "string",
          "description": "BILL-generated UUID of the user assigned to review the transaction"
        },
        "userName": {
          "type": "string",
          "description": "Display name of the user assigned to review the transaction"
        }
      },
      "description": "Spend \\& Expense transactions reviewer information."
    },
    "TransactionReviewerStatusType": {
      "type": "string",
      "description": "Spend \\& Expense transactions reviewer status type.",
      "enum": [
        "WAITING",
        "APPROVED",
        "DENIED"
      ]
    },
    "TransactionStatusTagType": {
      "type": "string",
      "description": "StatusTag enum for Spend \\& Expense Transactions.",
      "enum": [
        "APPROVED",
        "COMPLETE",
        "DECLINED",
        "DENIED",
        "DISPUTE_LOST",
        "DISPUTE_UPDATE",
        "DISPUTE_WON",
        "DISPUTED",
        "DO_NOT_SYNC",
        "INCOMPLETE",
        "NONE",
        "PENDING",
        "PTR_INCOMPLETE",
        "PTR_NEEDS_YOUR_APPROVAL",
        "PTR_PENDING_APPROVAL",
        "PTR_UPCOMING_APPROVAL",
        "REVIEWED"
      ]
    },
    "TransactionType": {
      "type": "string",
      "description": "TransactionType.",
      "enum": [
        "CLEAR",
        "DECLINE",
        "AUTHORIZATION",
        "OTHER"
      ]
    },
    "TxMerchantLocationDto": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string",
          "description": "Merchant city"
        },
        "state": {
          "type": "string",
          "description": "Merchant state or region"
        },
        "postalCode": {
          "type": "string",
          "description": "Merchant zip or postal code"
        },
        "country": {
          "type": "string",
          "description": "Merchant country"
        }
      },
      "description": "Transaction merchant address info."
    }
  }
}