Moneyhub Transactions API
The transactions API from Moneyhub — 9 operation(s) for transactions.
The transactions API from Moneyhub — 9 operation(s) for transactions.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/moneyhub-transactions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
description: Documentation for the Moneyhub data API. <br/>Authentication is via bearer token. <br/>
title: Moneyhub Data Transactions API
version: 2.0.0
x-build-sha: 5d5191d
servers:
- url: https://api.moneyhub.co.uk/v2.0
security:
- Bearer: []
tags:
- name: transactions
paths:
/transactions:
get:
summary: Retrieve all transactions for a user that have been enriched with our categorisation engine
description: Requires **transactions:read:all** scope. Transactions usually start around the account opening date however in most cases we only retrive the last 12 months before the connection was created. The Opening Date is available at the /accounts endpoint.
parameters:
- description: Filter on the transaction's Ids (maximum allowed 50)
in: query
name: ids
schema:
type: array
items:
type: string
format: uuid
maxItems: 50
- description: The total number of records to retrieve
in: query
name: limit
schema:
type: integer
maximum: 1000
minimum: 0
- description: The offset at which to start retrieving records
in: query
name: offset
schema:
type: integer
maximum: 1000000000
minimum: 0
- description: The earliest date to receive transactions from (inclusive)
in: query
name: startDate
x-example: '2018-08-15'
schema:
type: string
format: date
- description: The latest date to receive transactions from (inclusive)
in: query
name: endDate
x-example: '2018-08-25'
schema:
type: string
format: date
- description: The earliest date the transactions were modified (inclusive)
in: query
name: startDateModified
schema:
type: string
format: date
- description: The latest date the transactions were modified (inclusive)
in: query
name: endDateModified
schema:
type: string
format: date
- description: The text to filter transactions descriptions/notes by
in: query
name: text
schema:
type: string
- description: The category id to filter transactions by
in: query
name: categoryId
x-example: std:39577c49-350f-45a4-8ec3-48ce205585fb
schema:
type: string
- description: The account id to filter transactions by
in: query
name: accountId
x-example: 39577c49-350f-45a4-8ec3-321321213213
schema:
type: string
- description: The account ids to filter transactions by
in: query
name: accountIds
schema:
type: array
items:
type: string
- description: The project id to filter transactions by
in: query
name: projectId
x-example: 39577c49-350f-45a4-8ec3-321321213213
schema:
type: string
- description: The project ids to filter transactions by
in: query
name: projectIds
schema:
type: array
items:
type: string
- description: Filter transactions depending on whether they are credit or debit transactions
in: query
name: creditDebitIndicator
schema:
type: string
pattern: ^(credit|debit)$
- description: Filter on whether transaction has an attached project
in: query
name: hasProject
schema:
type: boolean
- description: Ensures ONLY the count of transactions is returned in the meta object
in: query
name: onlyCount
schema:
type: boolean
default: false
- description: Filter on the beginning of words of a transaction's clean description or beginning of transaction amount
in: query
name: contains
schema:
type: string
- description: A property to check exists within a transaction
in: query
name: hasEnhancedCategory
schema:
type: string
- description: Filter on the transaction's counterparty Id
in: query
name: counterpartyIds
schema:
type: array
items:
type: string
- description: Filter on the transaction's counterparty Id (Deprecated)
in: query
name: counterpartyIdsV2
schema:
type: array
items:
type: string
- description: Counterparties version
in: query
name: counterpartiesVersion
schema:
type: string
enum:
- v2
- v3
- description: An enhanced category to filter transactions by in the form of ${categoryField}:${categoryValue}
in: query
name: enhancedCategories
schema:
type: string
responses:
'200':
description: Successful Transactions Response
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/Transaction'
type: array
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'400':
description: Unsuccessful Response - Bad request - Missing query parameters - Missing body properties
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
post:
summary: Create a single transaction for a user
description: Requires **transactions:read:all** and **transactions:write:all** scopes.
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/Transaction'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'400':
description: Unsuccessful Response - Bad request - Missing query parameters - Missing body properties
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionPost'
/transactions/unenriched:
get:
summary: Retrieve all transactions for a user - does not include data-enriched transaction properties
description: Requires **transactions:read:all** or **transactions_unenriched:read:all** scope. Transactions usually start around the account opening date however in most cases we only retrive the last 12 months before the connection was created. The Opening Date is available at the /accounts endpoint.
parameters:
- description: Filter on the transaction's Ids (maximum allowed 50)
in: query
name: ids
schema:
type: array
items:
type: string
format: uuid
maxItems: 50
- description: The total number of records to retrieve
in: query
name: limit
schema:
type: integer
maximum: 1000
minimum: 0
- description: The offset at which to start retrieving records
in: query
name: offset
schema:
type: integer
maximum: 1000000000
minimum: 0
- description: The earliest date to receive transactions from (inclusive)
in: query
name: startDate
x-example: '2018-08-15'
schema:
type: string
format: date
- description: The latest date to receive transactions from (inclusive)
in: query
name: endDate
x-example: '2018-08-25'
schema:
type: string
format: date
- description: The earliest date the transactions were modified (inclusive)
in: query
name: startDateModified
schema:
type: string
format: date
- description: The latest date the transactions were modified (inclusive)
in: query
name: endDateModified
schema:
type: string
format: date
- description: The text to filter transactions descriptions by
in: query
name: text
schema:
type: string
- description: The account id to filter transactions by
in: query
name: accountId
x-example: 39577c49-350f-45a4-8ec3-321321213213
schema:
type: string
- description: The account ids to filter transactions by
in: query
name: accountIds
schema:
type: array
items:
type: string
- description: Filter transactions depending on whether they are credit or debit transactions
in: query
name: creditDebitIndicator
schema:
type: string
pattern: ^(credit|debit)$
- description: Ensures ONLY the count of transactions is returned in the meta object
in: query
name: onlyCount
schema:
type: boolean
default: false
responses:
'200':
description: Successful Transactions Response
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/TransactionUnenriched'
type: array
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'400':
description: Unsuccessful Response - Bad request - Missing query parameters - Missing body properties
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
/transactions/{transactionId}:
get:
summary: Retrieve a single transaction that has been enriched with our categorisation engine
description: Requires **transactions:read:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
- description: Counterparties version
in: query
name: counterpartiesVersion
schema:
type: string
enum:
- v2
- v3
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/Transaction'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Unsuccessful Response - Too Many Requests - Rate limit has been reached
content:
application/json:
schema:
type: object
properties:
code:
type: string
example: TooManyRequests
message:
type: string
example: Too Many Requests
retryAfterSecs:
type: integer
description: Number of seconds to wait before retrying the request
example: 60
required:
- code
- message
- retryAfterSecs
tags:
- transactions
patch:
summary: Update a single transaction
description: Requires **transactions:read:all** and either of **transactions:write** or **transactions:write:all** scopes.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/Transaction'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionPatch'
delete:
summary: Delete a single transaction
description: Requires **transactions:write:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'204':
description: Successful Transaction Response
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
/transactions/unenriched/{transactionId}:
get:
summary: Retrieve a single transaction - does not include data-enriched transaction properties
description: Requires **transactions:read:all** or **transactions_unenriched:read:all** scopes.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/TransactionUnenriched'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
/transactions-collection:
post:
summary: Create multiple transactions for a user
description: Requires **transactions:read:all** and **transactions:write:all** scopes. A maximum of 50 transactions is imposed.
parameters:
- description: Enable categorisation of transactions
in: query
name: categorise
schema:
type: boolean
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
items:
additionalProperties: false
properties:
id:
description: The unique id of the transaction
example: c390a94f-3824-4cdf-8d02-b0c5304d9f66
format: uuid
type: string
type: object
required:
- id
type: array
minimum: 1
maximum: 50
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'400':
description: Unsuccessful Response - Bad request - Missing query parameters - Missing body properties
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionCollectionPost'
/transactions/{transactionId}/files:
get:
summary: Retrieve a transactions attachments
description: Requires **transactions:read:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'200':
description: Successful Transaction File Response
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/TransactionFile'
type: array
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
post:
summary: Add an attachment to a transaction
description: Requires **transactions:read:all** and either of **transactions:write** or **transactions:write:all** scopes.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'200':
description: Successful Transaction Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/TransactionFile'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
description: File to upload, limit of 10MB and must be an image or PDF.
format: binary
required:
- file
/transactions/{transactionId}/files/{fileId}:
get:
summary: Retrieve a transactions attachment
description: Requires **transactions:read:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
- description: The file id
in: path
name: fileId
required: true
x-example: 0b4e6488-6de0-420a-8f56-fee665707d57
schema:
type: string
responses:
'200':
description: Successful Transaction File Response
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/TransactionFile'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
delete:
summary: Delete a single attachment on a transaction
description: Requires **transactions:read:all** and either of **transactions:write** or **transactions:write:all** scopes.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
- description: The file id
in: path
name: fileId
required: true
x-example: 0b4e64886de0420a8f56fee665707d57
schema:
type: string
responses:
'204':
description: Successful Transaction Response
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
/transactions/{transactionId}/splits:
get:
summary: Retrieve a transactions splits
description: Requires **transactions:read:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'200':
description: Successful Transaction Splits Response
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/TransactionSplit'
type: array
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
post:
summary: Split a transaction
description: Requires **transactions:write:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'201':
description: Successful Transaction Splits Response
content:
application/json:
schema:
properties:
data:
type: array
items:
$ref: '#/components/schemas/TransactionSplit'
links:
$ref: '#/components/schemas/Links'
meta:
type: object
type: object
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TransactionSplitPost'
example:
- categoryId: std:5a7ff1f3-cd2c-4676-a368-caf09f2ca35a
description: Split 1
amount: 200
- categoryId: std:eac238ec-3899-49ff-8cce-e3b9f4b1aede
description: Split 2
amount: 400
delete:
summary: Merge split transactions
description: Requires **transactions:write:all** scope.
parameters:
- description: The transaction id
in: path
name: transactionId
required: true
x-example: 0b4e6488-6de0-420c-8f56-fee665707d57
schema:
type: string
format: uuid
responses:
'204':
description: Successful Transaction Splits Response
'401':
description: Unsuccessful Response - Not authorised - Missing authorization header - Invalid access Token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Unsuccessful Response - Forbidden - Invalid scopes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unsuccessful Response - Resource Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- transactions
/transactions/{transactionId}/splits/{splitId}:
patch:
summary: Patch a transaction split
description: Requires **transactions:write:a
# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/moneyhub/refs/heads/main/openapi/moneyhub-transactions-api-openapi.yml