You Need A Budget

Budgeting software API

api.ynab.com ↗
Version
1.68.0
OpenAPI
3.0.0
Endpoints
31
Schemas
66
88
Quality
Updated
3 days ago
Finance finance budgeting personal-finance
Use this API in your AI agent

Query structured spec data via REST or MCP. Get exactly what your agent needs.

Get API Key

Server URLs

https://api.ynab.com/v1

Endpoints

Clear filters

Accounts 2 endpoints

GET /budgets/{budget_id}/accounts

Returns all accounts

operationId: Accounts_listAll

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of requested accounts

404

No accounts were found

GET /budgets/{budget_id}/accounts
GET /budgets/{budget_id}/accounts/{account_id}

Returns a single account

operationId: Accounts_getSingleAccount

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

account_id path required string

The id of the account

Responses

default

An error occurred

200

The requested account

404

The requested account was not found

GET /budgets/{budget_id}/accounts/{account_id}

Budgets 3 endpoints

GET /budgets

Returns budgets list with summary information

operationId: Budgets_listSummary

Parameters

Name In Required Type Description
include_accounts query optional boolean

Whether to include the list of budget accounts

Responses

default

An error occurred

200

The list of budgets

404

No budgets were found

GET /budgets
GET /budgets/{budget_id}

Returns a single budget with all related entities. This resource is effectively a full budget export.

operationId: Budgets_getBudget

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The requested budget

404

The specified budget was not found

GET /budgets/{budget_id}
GET /budgets/{budget_id}/settings

Returns settings for a budget

operationId: Budgets_getSettings

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

Responses

default

An error occurred

200

The requested budget settings

404

The specified Budget was not found

GET /budgets/{budget_id}/settings

Categories 3 endpoints

GET /budgets/{budget_id}/categories

Returns all categories grouped by category group. Amounts (budgeted, activity, balance, etc.) are specific to the current budget month (UTC).

operationId: Categories_listByBudgetId

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The categories grouped by category group

404

No categories were found

GET /budgets/{budget_id}/categories
GET /budgets/{budget_id}/categories/{category_id}

Returns a single category. Amounts (budgeted, activity, balance, etc.) are specific to the current budget month (UTC).

operationId: Categories_getSingleCategory

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

category_id path required string

The id of the category

Responses

default

An error occurred

200

The requested category

404

The category not was found

GET /budgets/{budget_id}/categories/{category_id}
GET /budgets/{budget_id}/months/{month}/categories/{category_id}

Returns a single category for a specific budget month. Amounts (budgeted, activity, balance, etc.) are specific to the current budget month (UTC).

operationId: Categories_getMonthCategoryById

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

month path required string

The budget month in ISO format (e.g. 2016-12-01) (“current” can also be used to specify the current calendar month (UTC))

category_id path required string

The id of the category

Responses

default

An error occurred

200

The requested month category

404

The month category was not was found

GET /budgets/{budget_id}/months/{month}/categories/{category_id}

Months 2 endpoints

GET /budgets/{budget_id}/months

Returns all budget months

operationId: Months_list

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of budget months

404

No budget months were found

GET /budgets/{budget_id}/months
GET /budgets/{budget_id}/months/{month}

Returns a single budget month

operationId: Months_getSingle

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

month path required string

The budget month in ISO format (e.g. 2016-12-01) (“current” can also be used to specify the current calendar month (UTC))

Responses

default

An error occurred

200

The budget month detail

404

The budget month was not found

GET /budgets/{budget_id}/months/{month}

Payeelocations 3 endpoints

GET /budgets/{budget_id}/payee_locations

Returns all payee locations

operationId: PayeeLocations_listAll

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

Responses

default

An error occurred

200

The list of payee locations

404

No payees locations were found

GET /budgets/{budget_id}/payee_locations
GET /budgets/{budget_id}/payee_locations/{payee_location_id}

Returns a single payee location

operationId: PayeeLocations_getSingle

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

payee_location_id path required string

id of payee location

Responses

default

An error occurred

200

The payee location

404

The payee location was not found

GET /budgets/{budget_id}/payee_locations/{payee_location_id}
GET /budgets/{budget_id}/payees/{payee_id}/payee_locations

Returns all payee locations for a specified payee

operationId: PayeeLocations_listByPayee

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

payee_id path required string

id of payee

Responses

default

An error occurred

200

The list of requested payee locations

404

No payees locations were found

GET /budgets/{budget_id}/payees/{payee_id}/payee_locations

Payees 2 endpoints

GET /budgets/{budget_id}/payees

Returns all payees

operationId: Payees_listAll

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The requested list of payees

404

No payees were found

GET /budgets/{budget_id}/payees
GET /budgets/{budget_id}/payees/{payee_id}

Returns a single payee

operationId: Payees_getSinglePayee

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

payee_id path required string

The id of the payee

Responses

default

An error occurred

200

The requested payee

404

The payee was not found

GET /budgets/{budget_id}/payees/{payee_id}

Scheduledtransactions 2 endpoints

GET /budgets/{budget_id}/scheduled_transactions

Returns all scheduled transactions

operationId: ScheduledTransactions_listAll

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of requested scheduled transactions

404

No scheduled transactions were found

GET /budgets/{budget_id}/scheduled_transactions
GET /budgets/{budget_id}/scheduled_transactions/{scheduled_transaction_id}

Returns a single scheduled transaction

operationId: ScheduledTransactions_getSingleScheduledTransaction

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

scheduled_transaction_id path required string

The id of the scheduled transaction

Responses

default

An error occurred

200

The requested Scheduled Transaction

404

The scheduled transaction was not found

GET /budgets/{budget_id}/scheduled_transactions/{scheduled_transaction_id}

Transactions 5 endpoints

GET /budgets/{budget_id}/accounts/{account_id}/transactions

Returns all transactions for a specified account, excluding any pending transactions

operationId: Transactions_listByAccount

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

account_id path required string

The id of the account

since_date query optional string

If specified, only transactions on or after this date will be included. The date should be ISO formatted (e.g. 2016-12-30).

type query optional string

If specified, only transactions of the specified type will be included. “uncategorized” and “unapproved” are currently supported.

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of requested transactions

404

No transactions were found

GET /budgets/{budget_id}/accounts/{account_id}/transactions
GET /budgets/{budget_id}/categories/{category_id}/transactions

Returns all transactions for a specified category

operationId: Transactions_listByCategory

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

category_id path required string

The id of the category

since_date query optional string

If specified, only transactions on or after this date will be included. The date should be ISO formatted (e.g. 2016-12-30).

type query optional string

If specified, only transactions of the specified type will be included. “uncategorized” and “unapproved” are currently supported.

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of requested transactions

404

No transactions were found

GET /budgets/{budget_id}/categories/{category_id}/transactions
GET /budgets/{budget_id}/payees/{payee_id}/transactions

Returns all transactions for a specified payee

operationId: Transactions_listByPayee

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

payee_id path required string

The id of the payee

since_date query optional string

If specified, only transactions on or after this date will be included. The date should be ISO formatted (e.g. 2016-12-30).

type query optional string

If specified, only transactions of the specified type will be included. “uncategorized” and “unapproved” are currently supported.

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

default

An error occurred

200

The list of requested transactions

404

No transactions were found

GET /budgets/{budget_id}/payees/{payee_id}/transactions
GET /budgets/{budget_id}/transactions

Returns budget transactions, excluding any pending transactions

operationId: Transactions_listTransactions

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

since_date query optional string

If specified, only transactions on or after this date will be included. The date should be ISO formatted (e.g. 2016-12-30).

type query optional string

If specified, only transactions of the specified type will be included. “uncategorized” and “unapproved” are currently supported.

last_knowledge_of_server query optional integer

The starting server knowledge. If provided, only entities that have changed since last_knowledge_of_server will be included.

Responses

200

The list of requested transactions

400

An error occurred

404

No transactions were found

GET /budgets/{budget_id}/transactions
GET /budgets/{budget_id}/transactions/{transaction_id}

Returns a single transaction

operationId: Transactions_getSingleTransaction

Parameters

Name In Required Type Description
budget_id path required string

The id of the budget. “last-used” can be used to specify the last used budget and “default” can be used if default budget selection is enabled (see: https://api.ynab.com/#oauth-default-budget).

transaction_id path required string

The id of the transaction

Responses

default

An error occurred

200

The requested transaction

404

The transaction was not found

GET /budgets/{budget_id}/transactions/{transaction_id}

User 1 endpoints

GET /user

Returns authenticated user information

operationId: User_infoGet

Responses

default

An error occurred

200

The user info

GET /user

Schemas

object Account
{
  "type": "object",
  "required": [
    "balance",
    "cleared_balance",
    "closed",
    "deleted",
    "id",
    "name",
    "on_budget",
    "transfer_payee_id",
    "type",
    "uncleared_balance"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "note": {
      "type": "string",
      "nullable": true
    },
    "type": {
      "$ref": "#/components/schemas/AccountType"
    },
    "closed": {
      "type": "boolean",
      "description": "Whether this account is closed or not"
    },
    "balance": {
      "type": "integer",
      "format": "int64",
      "description": "The current balance of the account in milliunits format"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the account has been deleted.  Deleted accounts will only be included in delta requests."
    },
    "on_budget": {
      "type": "boolean",
      "description": "Whether this account is on budget or not"
    },
    "cleared_balance": {
      "type": "integer",
      "format": "int64",
      "description": "The current cleared balance of the account in milliunits format"
    },
    "transfer_payee_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "The payee id which should be used when transferring to this account"
    },
    "uncleared_balance": {
      "type": "integer",
      "format": "int64",
      "description": "The current uncleared balance of the account in milliunits format"
    },
    "last_reconciled_at": {
      "type": "string",
      "format": "date-time",
      "nullable": true,
      "description": "A date/time specifying when the account was last reconciled."
    },
    "debt_escrow_amounts": {
      "$ref": "#/components/schemas/LoanAccountPeriodicValue"
    },
    "debt_interest_rates": {
      "$ref": "#/components/schemas/LoanAccountPeriodicValue"
    },
    "direct_import_linked": {
      "type": "boolean",
      "description": "Whether or not the account is linked to a financial institution for automatic transaction import."
    },
    "debt_minimum_payments": {
      "$ref": "#/components/schemas/LoanAccountPeriodicValue"
    },
    "debt_original_balance": {
      "type": "integer",
      "format": "int64",
      "nullable": true,
      "description": "The original debt/loan account balance, specified in milliunits format."
    },
    "direct_import_in_error": {
      "type": "boolean",
      "description": "If an account linked to a financial institution (direct_import_linked=true) and the linked connection is not in a healthy state, this will be true."
    }
  }
}
object AccountResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "account"
      ],
      "properties": {
        "account": {
          "$ref": "#/components/schemas/Account"
        }
      }
    }
  }
}
string AccountType
{
  "enum": [
    "checking",
    "savings",
    "cash",
    "creditCard",
    "lineOfCredit",
    "otherAsset",
    "otherLiability",
    "mortgage",
    "autoLoan",
    "studentLoan",
    "personalLoan",
    "medicalDebt",
    "otherDebt"
  ],
  "type": "string",
  "description": "The type of account"
}
object AccountsResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "accounts",
        "server_knowledge"
      ],
      "properties": {
        "accounts": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Account"
          }
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object BudgetDetail
{
  "allOf": [
    {
      "$ref": "#/components/schemas/BudgetSummary"
    },
    {
      "type": "object",
      "properties": {
        "months": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/MonthDetail"
          }
        },
        "payees": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Payee"
          }
        },
        "accounts": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Account"
          }
        },
        "categories": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Category"
          }
        },
        "transactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/TransactionSummary"
          }
        },
        "category_groups": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/CategoryGroup"
          }
        },
        "payee_locations": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/PayeeLocation"
          }
        },
        "subtransactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/SubTransaction"
          }
        },
        "scheduled_transactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ScheduledTransactionSummary"
          }
        },
        "scheduled_subtransactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ScheduledSubTransaction"
          }
        }
      }
    }
  ]
}
object BudgetDetailResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "budget",
        "server_knowledge"
      ],
      "properties": {
        "budget": {
          "$ref": "#/components/schemas/BudgetDetail"
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object BudgetSettings
{
  "type": "object",
  "required": [
    "currency_format",
    "date_format"
  ],
  "properties": {
    "date_format": {
      "$ref": "#/components/schemas/DateFormat"
    },
    "currency_format": {
      "$ref": "#/components/schemas/CurrencyFormat"
    }
  }
}
object BudgetSettingsResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "settings"
      ],
      "properties": {
        "settings": {
          "$ref": "#/components/schemas/BudgetSettings"
        }
      }
    }
  }
}
object BudgetSummary
{
  "type": "object",
  "required": [
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "accounts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Account"
      },
      "description": "The budget accounts (only included if `include_accounts=true` specified as query parameter)"
    },
    "last_month": {
      "type": "string",
      "format": "date",
      "description": "The latest budget month"
    },
    "date_format": {
      "$ref": "#/components/schemas/DateFormat"
    },
    "first_month": {
      "type": "string",
      "format": "date",
      "description": "The earliest budget month"
    },
    "currency_format": {
      "$ref": "#/components/schemas/CurrencyFormat"
    },
    "last_modified_on": {
      "type": "string",
      "format": "date-time",
      "description": "The last time any changes were made to the budget from either a web or mobile client"
    }
  }
}
object BudgetSummaryResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "budgets"
      ],
      "properties": {
        "budgets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/BudgetSummary"
          }
        },
        "default_budget": {
          "$ref": "#/components/schemas/BudgetSummary"
        }
      }
    }
  }
}
object BulkResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "bulk"
      ],
      "properties": {
        "bulk": {
          "type": "object",
          "required": [
            "duplicate_import_ids",
            "transaction_ids"
          ],
          "properties": {
            "transaction_ids": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The list of Transaction ids that were created."
            },
            "duplicate_import_ids": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "If any Transactions were not created because they had an `import_id` matching a transaction already on the same account, the specified import_id(s) will be included in this list."
            }
          }
        }
      }
    }
  }
}
object BulkTransactions
{
  "type": "object",
  "required": [
    "transactions"
  ],
  "properties": {
    "transactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/SaveTransactionWithOptionalFields"
      }
    }
  }
}
object CategoriesResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "category_groups",
        "server_knowledge"
      ],
      "properties": {
        "category_groups": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/CategoryGroupWithCategories"
          }
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object Category
{
  "type": "object",
  "required": [
    "activity",
    "balance",
    "budgeted",
    "category_group_id",
    "deleted",
    "hidden",
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "note": {
      "type": "string",
      "nullable": true
    },
    "hidden": {
      "type": "boolean",
      "description": "Whether or not the category is hidden"
    },
    "balance": {
      "type": "integer",
      "format": "int64",
      "description": "Balance in milliunits format"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the category has been deleted.  Deleted categories will only be included in delta requests."
    },
    "activity": {
      "type": "integer",
      "format": "int64",
      "description": "Activity amount in milliunits format"
    },
    "budgeted": {
      "type": "integer",
      "format": "int64",
      "description": "Budgeted amount in milliunits format"
    },
    "goal_day": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "A day offset modifier for the goal's due date. When goal_cadence is 2 (Weekly), this value specifies which day of the week the goal is due (0 = Sunday, 6 = Saturday). Otherwise, this value specifies which day of the month the goal is due (1 = 1st, 31 = 31st, null = Last day of Month)."
    },
    "goal_type": {
      "enum": [
        "TB",
        "TBD",
        "MF",
        "NEED",
        "DEBT",
        null
      ],
      "type": "string",
      "nullable": true,
      "description": "The type of goal, if the category has a goal (TB='Target Category Balance', TBD='Target Category Balance by Date', MF='Monthly Funding', NEED='Plan Your Spending')"
    },
    "goal_target": {
      "type": "integer",
      "format": "int64",
      "nullable": true,
      "description": "The goal target amount in milliunits"
    },
    "goal_cadence": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "The goal cadence. Value in range 0-14. There are two subsets of these values which behave differently. For values 0, 1, 2, and 13, the goal's due date repeats every goal_cadence * goal_cadence_frequency, where 0 = None, 1 = Monthly, 2 = Weekly, and 13 = Yearly. For example, goal_cadence 1 with goal_cadence_frequency 2 means the goal is due every other month. For values 3-12 and 14, goal_cadence_frequency is ignored and the goal's due date repeats every goal_cadence, where 3 = Every 2 Months, 4 = Every 3 Months, ..., 12 = Every 11 Months, and 14 = Every 2 Years."
    },
    "category_group_id": {
      "type": "string",
      "format": "uuid"
    },
    "goal_overall_left": {
      "type": "integer",
      "format": "int64",
      "nullable": true,
      "description": "The amount of funding still needed to complete the goal within the current goal period."
    },
    "goal_target_month": {
      "type": "string",
      "format": "date",
      "nullable": true,
      "description": "The original target month for the goal to be completed.  Only some goal types specify this date."
    },
    "goal_under_funded": {
      "type": "integer",
      "format": "int64",
      "nullable": true,
      "description": "The amount of funding still needed in the current month to stay on track towards completing the goal within the current goal period. This amount will generally correspond to the 'Underfunded' amount in the web and mobile clients except when viewing a category with a Needed for Spending Goal in a future month.  The web and mobile clients will ignore any funding from a prior goal period when viewing category with a Needed for Spending Goal in a future month."
    },
    "category_group_name": {
      "type": "string"
    },
    "goal_creation_month": {
      "type": "string",
      "format": "date",
      "nullable": true,
      "description": "The month a goal was created"
    },
    "goal_overall_funded": {
      "type": "integer",
      "format": "int64",
      "nullable": true,
      "description": "The total amount funded towards the goal within the current goal period."
    },
    "goal_months_to_budget": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "The number of months, including the current month, left in the current goal period."
    },
    "goal_cadence_frequency": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "The goal cadence frequency. When goal_cadence is 0, 1, 2, or 13, a goal's due date repeats every goal_cadence * goal_cadence_frequency. For example, goal_cadence 1 with goal_cadence_frequency 2 means the goal is due every other month.  When goal_cadence is 3-12 or 14, goal_cadence_frequency is ignored."
    },
    "goal_percentage_complete": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "The percentage completion of the goal"
    },
    "original_category_group_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "DEPRECATED: No longer used.  Value will always be null."
    }
  }
}
object CategoryGroup
{
  "type": "object",
  "required": [
    "deleted",
    "hidden",
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "hidden": {
      "type": "boolean",
      "description": "Whether or not the category group is hidden"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the category group has been deleted.  Deleted category groups will only be included in delta requests."
    }
  }
}
object CategoryGroupWithCategories
{
  "allOf": [
    {
      "$ref": "#/components/schemas/CategoryGroup"
    },
    {
      "type": "object",
      "required": [
        "categories"
      ],
      "properties": {
        "categories": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Category"
          },
          "description": "Category group categories.  Amounts (budgeted, activity, balance, etc.) are specific to the current budget month (UTC)."
        }
      }
    }
  ]
}
object CategoryResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "category"
      ],
      "properties": {
        "category": {
          "$ref": "#/components/schemas/Category"
        }
      }
    }
  }
}
object CurrencyFormat
{
  "type": "object",
  "nullable": true,
  "required": [
    "currency_symbol",
    "decimal_digits",
    "decimal_separator",
    "display_symbol",
    "example_format",
    "group_separator",
    "iso_code",
    "symbol_first"
  ],
  "properties": {
    "iso_code": {
      "type": "string"
    },
    "symbol_first": {
      "type": "boolean"
    },
    "decimal_digits": {
      "type": "integer",
      "format": "int32"
    },
    "display_symbol": {
      "type": "boolean"
    },
    "example_format": {
      "type": "string"
    },
    "currency_symbol": {
      "type": "string"
    },
    "group_separator": {
      "type": "string"
    },
    "decimal_separator": {
      "type": "string"
    }
  },
  "description": "The currency format setting for the budget.  In some cases the format will not be available and will be specified as null."
}
object DateFormat
{
  "type": "object",
  "nullable": true,
  "required": [
    "format"
  ],
  "properties": {
    "format": {
      "type": "string"
    }
  },
  "description": "The date format setting for the budget.  In some cases the format will not be available and will be specified as null."
}
object ErrorDetail
{
  "type": "object",
  "required": [
    "detail",
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "detail": {
      "type": "string"
    }
  }
}
object ErrorResponse
{
  "type": "object",
  "required": [
    "error"
  ],
  "properties": {
    "error": {
      "$ref": "#/components/schemas/ErrorDetail"
    }
  }
}
object ExistingTransaction
{
  "allOf": [
    {
      "type": "object"
    },
    {
      "$ref": "#/components/schemas/SaveTransactionWithOptionalFields"
    }
  ]
}
object HybridTransaction
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TransactionSummary"
    },
    {
      "type": "object",
      "required": [
        "account_name",
        "type"
      ],
      "properties": {
        "type": {
          "enum": [
            "transaction",
            "subtransaction"
          ],
          "type": "string",
          "description": "Whether the hybrid transaction represents a regular transaction or a subtransaction"
        },
        "payee_name": {
          "type": "string",
          "nullable": true
        },
        "account_name": {
          "type": "string"
        },
        "category_name": {
          "type": "string",
          "description": "The name of the category.  If a split transaction, this will be 'Split'."
        },
        "parent_transaction_id": {
          "type": "string",
          "nullable": true,
          "description": "For subtransaction types, this is the id of the parent transaction.  For transaction types, this id will be always be null."
        }
      }
    }
  ]
}
object HybridTransactionsResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "transactions"
      ],
      "properties": {
        "transactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/HybridTransaction"
          }
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object LoanAccountPeriodicValue
{
  "type": "object",
  "nullable": true,
  "additionalProperties": {
    "type": "integer",
    "format": "int64"
  }
}
object MonthDetail
{
  "allOf": [
    {
      "$ref": "#/components/schemas/MonthSummary"
    },
    {
      "type": "object",
      "required": [
        "categories"
      ],
      "properties": {
        "categories": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Category"
          },
          "description": "The budget month categories.  Amounts (budgeted, activity, balance, etc.) are specific to the {month} parameter specified."
        }
      }
    }
  ]
}
object MonthDetailResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "month"
      ],
      "properties": {
        "month": {
          "$ref": "#/components/schemas/MonthDetail"
        }
      }
    }
  }
}
object MonthSummariesResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "months",
        "server_knowledge"
      ],
      "properties": {
        "months": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/MonthSummary"
          }
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object MonthSummary
{
  "type": "object",
  "required": [
    "activity",
    "budgeted",
    "deleted",
    "income",
    "month",
    "to_be_budgeted"
  ],
  "properties": {
    "note": {
      "type": "string",
      "nullable": true
    },
    "month": {
      "type": "string",
      "format": "date"
    },
    "income": {
      "type": "integer",
      "format": "int64",
      "description": "The total amount of transactions categorized to 'Inflow: Ready to Assign' in the month"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the month has been deleted.  Deleted months will only be included in delta requests."
    },
    "activity": {
      "type": "integer",
      "format": "int64",
      "description": "The total amount of transactions in the month, excluding those categorized to 'Inflow: Ready to Assign'"
    },
    "budgeted": {
      "type": "integer",
      "format": "int64",
      "description": "The total amount budgeted in the month"
    },
    "age_of_money": {
      "type": "integer",
      "format": "int32",
      "nullable": true,
      "description": "The Age of Money as of the month"
    },
    "to_be_budgeted": {
      "type": "integer",
      "format": "int64",
      "description": "The available amount for 'Ready to Assign'"
    }
  }
}
object NewTransaction
{
  "allOf": [
    {
      "$ref": "#/components/schemas/SaveTransactionWithOptionalFields"
    },
    {
      "type": "object",
      "properties": {
        "import_id": {
          "type": "string",
          "nullable": true,
          "maxLength": 36,
          "description": "If specified, a new transaction will be assigned this `import_id` and considered \"imported\".  We will also attempt to match this imported transaction to an existing \"user-entered\" transaction on the same account, with the same amount, and with a date +/-10 days from the imported transaction date.<br><br>Transactions imported through File Based Import or Direct Import (not through the API) are assigned an import_id in the format: 'YNAB:[milliunit_amount]:[iso_date]:[occurrence]'. For example, a transaction dated 2015-12-30 in the amount of -$294.23 USD would have an import_id of 'YNAB:-294230:2015-12-30:1'.  If a second transaction on the same account was imported and had the same date and same amount, its import_id would be 'YNAB:-294230:2015-12-30:2'.  Using a consistent format will prevent duplicates through Direct Import and File Based Import.<br><br>If import_id is omitted or specified as null, the transaction will be treated as a \"user-entered\" transaction. As such, it will be eligible to be matched against transactions later being imported (via DI, FBI, or API)."
        }
      }
    }
  ]
}
object PatchCategoryWrapper
{
  "type": "object",
  "required": [
    "category"
  ],
  "properties": {
    "category": {
      "$ref": "#/components/schemas/SaveCategory"
    }
  }
}
object PatchMonthCategoryWrapper
{
  "type": "object",
  "required": [
    "category"
  ],
  "properties": {
    "category": {
      "$ref": "#/components/schemas/SaveMonthCategory"
    }
  }
}
object PatchTransactionsWrapper
{
  "type": "object",
  "required": [
    "transactions"
  ],
  "properties": {
    "transactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/SaveTransactionWithIdOrImportId"
      }
    }
  }
}
object Payee
{
  "type": "object",
  "required": [
    "deleted",
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the payee has been deleted.  Deleted payees will only be included in delta requests."
    },
    "transfer_account_id": {
      "type": "string",
      "nullable": true,
      "description": "If a transfer payee, the `account_id` to which this payee transfers to"
    }
  }
}
object PayeeLocation
{
  "type": "object",
  "required": [
    "deleted",
    "id",
    "latitude",
    "longitude",
    "payee_id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether or not the payee location has been deleted.  Deleted payee locations will only be included in delta requests."
    },
    "latitude": {
      "type": "string"
    },
    "payee_id": {
      "type": "string",
      "format": "uuid"
    },
    "longitude": {
      "type": "string"
    }
  }
}
object PayeeLocationResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "payee_location"
      ],
      "properties": {
        "payee_location": {
          "$ref": "#/components/schemas/PayeeLocation"
        }
      }
    }
  }
}
object PayeeLocationsResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "payee_locations"
      ],
      "properties": {
        "payee_locations": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/PayeeLocation"
          }
        }
      }
    }
  }
}
object PayeeResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "payee"
      ],
      "properties": {
        "payee": {
          "$ref": "#/components/schemas/Payee"
        }
      }
    }
  }
}
object PayeesResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "payees",
        "server_knowledge"
      ],
      "properties": {
        "payees": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Payee"
          }
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object PostAccountWrapper
{
  "type": "object",
  "required": [
    "account"
  ],
  "properties": {
    "account": {
      "$ref": "#/components/schemas/SaveAccount"
    }
  }
}
object PostTransactionsWrapper
{
  "type": "object",
  "properties": {
    "transaction": {
      "$ref": "#/components/schemas/NewTransaction"
    },
    "transactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/NewTransaction"
      }
    }
  }
}
object PutTransactionWrapper
{
  "type": "object",
  "required": [
    "transaction"
  ],
  "properties": {
    "transaction": {
      "$ref": "#/components/schemas/ExistingTransaction"
    }
  }
}
object SaveAccount
{
  "type": "object",
  "required": [
    "balance",
    "name",
    "type"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The name of the account"
    },
    "type": {
      "$ref": "#/components/schemas/AccountType"
    },
    "balance": {
      "type": "integer",
      "format": "int64",
      "description": "The current balance of the account in milliunits format"
    }
  }
}
object SaveCategory
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "nullable": true
    },
    "note": {
      "type": "string",
      "nullable": true
    },
    "category_group_id": {
      "type": "string",
      "format": "uuid"
    }
  }
}
object SaveCategoryResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "category",
        "server_knowledge"
      ],
      "properties": {
        "category": {
          "$ref": "#/components/schemas/Category"
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        }
      }
    }
  }
}
object SaveMonthCategory
{
  "type": "object",
  "required": [
    "budgeted"
  ],
  "properties": {
    "budgeted": {
      "type": "integer",
      "format": "int64",
      "description": "Budgeted amount in milliunits format"
    }
  }
}
object SaveSubTransaction
{
  "type": "object",
  "required": [
    "amount"
  ],
  "properties": {
    "memo": {
      "type": "string",
      "nullable": true,
      "maxLength": 200
    },
    "amount": {
      "type": "integer",
      "format": "int64",
      "description": "The subtransaction amount in milliunits format."
    },
    "payee_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "The payee for the subtransaction."
    },
    "payee_name": {
      "type": "string",
      "nullable": true,
      "maxLength": 50,
      "description": "The payee name.  If a `payee_name` value is provided and `payee_id` has a null value, the `payee_name` value will be used to resolve the payee by either (1) a matching payee rename rule (only if import_id is also specified on parent transaction) or (2) a payee with the same name or (3) creation of a new payee."
    },
    "category_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "The category for the subtransaction.  Credit Card Payment categories are not permitted and will be ignored if supplied."
    }
  }
}
object SaveTransactionWithIdOrImportId
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "nullable": true,
          "description": "If specified, this id will be used to lookup a transaction by its `id` for the purpose of updating the transaction itself. If not specified, an `import_id` should be supplied."
        },
        "import_id": {
          "type": "string",
          "nullable": true,
          "maxLength": 36,
          "description": "If specified, this id will be used to lookup a transaction by its `import_id` for the purpose of updating the transaction itself. If not specified, an `id` should be supplied.  You may not provide both an `id` and an `import_id` and updating an `import_id` on an existing transaction is not allowed."
        }
      }
    },
    {
      "$ref": "#/components/schemas/SaveTransactionWithOptionalFields"
    }
  ]
}
object SaveTransactionWithOptionalFields
{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "The transaction date in ISO format (e.g. 2016-12-01).  Future dates (scheduled transactions) are not permitted.  Split transaction dates cannot be changed and if a different date is supplied it will be ignored."
    },
    "memo": {
      "type": "string",
      "nullable": true,
      "maxLength": 200
    },
    "amount": {
      "type": "integer",
      "format": "int64",
      "description": "The transaction amount in milliunits format.  Split transaction amounts cannot be changed and if a different amount is supplied it will be ignored."
    },
    "cleared": {
      "$ref": "#/components/schemas/TransactionClearedStatus"
    },
    "approved": {
      "type": "boolean",
      "description": "Whether or not the transaction is approved.  If not supplied, transaction will be unapproved by default."
    },
    "payee_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "The payee for the transaction.  To create a transfer between two accounts, use the account transfer payee pointing to the target account.  Account transfer payees are specified as `tranfer_payee_id` on the account resource."
    },
    "account_id": {
      "type": "string",
      "format": "uuid"
    },
    "flag_color": {
      "$ref": "#/components/schemas/TransactionFlagColor"
    },
    "payee_name": {
      "type": "string",
      "nullable": true,
      "maxLength": 50,
      "description": "The payee name.  If a `payee_name` value is provided and `payee_id` has a null value, the `payee_name` value will be used to resolve the payee by either (1) a matching payee rename rule (only if `import_id` is also specified) or (2) a payee with the same name or (3) creation of a new payee."
    },
    "category_id": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "The category for the transaction.  To configure a split transaction, you can specify null for `category_id` and provide a `subtransactions` array as part of the transaction object.  If an existing transaction is a split, the `category_id` cannot be changed.  Credit Card Payment categories are not permitted and will be ignored if supplied."
    },
    "subtransactions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/SaveSubTransaction"
      },
      "description": "An array of subtransactions to configure a transaction as a split. Updating `subtransactions` on an existing split transaction is not supported."
    }
  }
}
object SaveTransactionsResponse
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "server_knowledge",
        "transaction_ids"
      ],
      "properties": {
        "transaction": {
          "$ref": "#/components/schemas/TransactionDetail"
        },
        "transactions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/TransactionDetail"
          },
          "description": "If multiple transactions were specified, the transactions that were saved"
        },
        "transaction_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The transaction ids that were saved"
        },
        "server_knowledge": {
          "type": "integer",
          "format": "int64",
          "description": "The knowledge of the server"
        },
        "duplicate_import_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "If multiple transactions were specified, a list of import_ids that were not created because of an existing `import_id` found on the same account"
        }
      }
    }
  }
}