---
updatedAt: 2026-08-05T15:59:40.000Z
agentTools:
  projectIndex: https://docs.data.one/llms.txt
---

# Create Transactions for CaaS User Account

Given a `userId`, an `accountId` and an optional categorisation version, this endpoint will create new transactions for the user's CaaS account and initiate categorisation. Maximum limit on the number of transactions accepted on each call is 10,000.

The response includes a `jobId` that can be used to monitor categorisation progress via [GET /v1/jobs/{jobId}](https://docs.data.one/reference/getjob).

Note: New transactions will be appended to the account and existing transactions will remain untouched. If a transaction ID already exists, those transactions will not be added and will be ignored.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "x-readme": {
    "explorer-enabled": true,
    "proxy-enabled": true
  },
  "info": {
    "version": "v1",
    "title": "Retrieving Data",
    "description": "Endpoints relating to fetching and sending data for a user for the purposes of Categorisation-as-a-Service (CaaS)."
  },
  "paths": {
    "/v1/users/{userId}/accounts/{accountId}/transactions": {
      "post": {
        "tags": [
          "Transactions"
        ],
        "operationId": "createTransactionsForCaaSAccount",
        "summary": "Create Transactions for CaaS User Account",
        "description": "Given a `userId`, an `accountId` and an optional categorisation version, this endpoint will create new transactions for the user's CaaS account and initiate categorisation. Maximum limit on the number of transactions accepted on each call is 10,000.\n\nThe response includes a `jobId` that can be used to monitor categorisation progress via [GET /v1/jobs/{jobId}](https://docs.data.one/reference/getjob).\n\nNote: New transactions will be appended to the account and existing transactions will remain untouched. If a transaction ID already exists, those transactions will not be added and will be ignored.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserId"
          },
          {
            "$ref": "#/components/parameters/AccountId"
          },
          {
            "$ref": "#/components/parameters/CategorisationVersion"
          }
        ],
        "requestBody": {
          "description": "The transactions to be categorised.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCaaSTransactionsRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Categorisation successfully initiated for the transactions. Returns the created job.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetJobResponse"
                },
                "example": {
                  "jobId": "a55a649f-e3a3-4d09-ae62-643889e5ad76",
                  "jobType": "CAAS",
                  "status": "IN_PROGRESS",
                  "created": "2025-01-15T10:30:00Z",
                  "updated": "2025-01-15T10:30:00Z",
                  "metadata": {}
                }
              }
            }
          },
          "400": {
            "description": "Transaction data validation failed, or an unsupported categorisation version was provided."
          },
          "401": {
            "$ref": "#/components/responses/ApiKeyUnauthorizedError"
          },
          "403": {
            "description": "CaaS is forbidden for the requesting partner."
          },
          "404": {
            "description": "User or account is invalid or does not exist."
          },
          "409": {
            "description": "Account is not a CaaS account."
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api-sandbox.data.one",
      "description": "Hostname for sandbox API"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "Secret API key used for authentication."
      }
    },
    "schemas": {
      "CaaSTransactionRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID for the transaction."
          },
          "created": {
            "type": "string",
            "format": "date-time",
            "description": "The date of the transaction."
          },
          "description": {
            "type": "string",
            "description": "The description of the transaction."
          },
          "type": {
            "$ref": "#/components/schemas/TransactionType"
          },
          "amount": {
            "$ref": "#/components/schemas/AmountResponse"
          },
          "proprietaryProviderDetails": {
            "$ref": "#/components/schemas/ProprietaryProviderDetailsResponse"
          }
        },
        "required": [
          "id",
          "created",
          "description",
          "type",
          "amount"
        ]
      },
      "CreateCaaSTransactionsRequest": {
        "type": "object",
        "properties": {
          "transactions": {
            "type": "array",
            "description": "List of transactions to create.",
            "items": {
              "$ref": "#/components/schemas/CaaSTransactionRequest"
            }
          }
        },
        "example": {
          "transactions": [
            {
              "id": "37AAC874E490B412FD75065EE7CA2D8BAE90D2A5C26F0C4D84C2ACFE5D5F8FC2",
              "created": "2023-01-16T12:00:00Z",
              "description": "Morrisons",
              "type": "Debit",
              "amount": {
                "amount": 45.81,
                "currency": "GBP"
              },
              "proprietaryProviderDetails": {
                "proprietaryBankTransactionCode": "8066"
              }
            }
          ]
        }
      },
      "AmountResponse": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The amount of the transaction."
          },
          "currency": {
            "type": "string",
            "description": "The ISO 4217 currency code of the transaction."
          }
        },
        "required": [
          "amount",
          "currency"
        ]
      },
      "ProprietaryProviderDetailsResponse": {
        "type": "object",
        "properties": {
          "proprietaryBankTransactionCode": {
            "type": "string",
            "description": "Proprietary bank transaction code to identify the underlying transaction."
          }
        },
        "description": "The proprietary codes and details returned about a transaction from a financial provider."
      },
      "TransactionType": {
        "type": "string",
        "enum": [
          "Credit",
          "Debit"
        ],
        "description": "Specifies whether this was a debit or credit transaction."
      },
      "EmptyGetJobResponseMetadata": {
        "type": "object",
        "additionalProperties": false,
        "description": "Empty metadata for job types with no job-type-specific metadata, including CaaS categorisation jobs."
      },
      "GetJobResponse": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "format": "uuid"
          },
          "jobType": {
            "type": "string",
            "enum": [
              "ACCOUNT_REFRESH",
              "CAAS"
            ],
            "description": "The type of asynchronous job. CaaS transaction uploads use `CAAS`."
          },
          "status": {
            "type": "string",
            "enum": [
              "CREATED",
              "IN_PROGRESS",
              "COMPLETED",
              "FAILED"
            ]
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          },
          "metadata": {
            "$ref": "#/components/schemas/EmptyGetJobResponseMetadata",
            "description": "Job type specific metadata. CaaS jobs return empty metadata."
          }
        },
        "required": [
          "jobId",
          "jobType",
          "status",
          "created",
          "updated",
          "metadata"
        ],
        "example": {
          "jobId": "a55a649f-e3a3-4d09-ae62-643889e5ad76",
          "jobType": "CAAS",
          "status": "IN_PROGRESS",
          "created": "2025-01-15T10:30:00Z",
          "updated": "2025-01-15T10:30:00Z",
          "metadata": {}
        }
      }
    },
    "responses": {
      "ApiKeyUnauthorizedError": {
        "description": "API key authentication unsuccessful."
      }
    },
    "parameters": {
      "UserId": {
        "in": "path",
        "name": "userId",
        "description": "The User ID",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "required": true,
        "example": "2590eaff-94dc-43f4-be30-bdab6c2cec8b"
      },
      "AccountId": {
        "in": "path",
        "name": "accountId",
        "description": "The Account ID",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "required": true,
        "example": "845c7468-123a-4139-a098-e3378c7598b2"
      },
      "CategorisationVersion": {
        "in": "query",
        "name": "categorisationVersion",
        "schema": {
          "type": "string",
          "enum": [
            "42.0.0",
            "43.0.0",
            "44.0.0"
          ]
        },
        "required": false,
        "description": "The version of the DataOne categorisation engine that will be used to process transactions. \n\nIf no categorisation version is provided, the default version associated to the requesting organisation will be used.",
        "example": "43.0.0"
      }
    }
  }
}
```