---
title: "Start upload session"
method: POST
path: "/companies/{companyId}/connections/{connectionId}/bankStatements/upload/startSession"
tags: ["Bank statements"]
---

# Start upload session

`POST /companies/{companyId}/connections/{connectionId}/bankStatements/upload/startSession`

Use the *Start upload session* endpoint to initiate a bank statement upload session for a given company.

A session is a one-time process that enables you to upload bank statements to Codat. It will time out after 90 minutes if no data is uploaded. 

You can only have one active session per data type at a time. You can complete or cancel a session using the [*End upload session*](https://docs.codat.io/lending-api#/operations/end-bank-statement-upload-session) endpoint.

## Request body

- StartUploadSessionRequest
  - `dataType` 'banking-accounts' | 'banking-transactions' — A key for a Codat data type.

## Response `200`

Success

- PullOperation — Information about a queued, in progress or completed pull operation. *Formally called `dataset`*
  - `id` string, uuid, required — Unique identifier of the pull operation.
  - `companyId` string, uuid, required — Unique identifier of the company associated to this pull operation.
  - `connectionId` string, uuid, required — Unique identifier of the connection associated to this pull operation.
  - `dataType` string, required — The data type you are requesting in a pull operation.
  - `status` 'Initial' | 'Queued' | 'Fetching' | 'MapQueued' | 'Mapping' | 'Complete' | 'FetchError' | 'MapError' | 'InternalError' | 'ProcessingQueued' | 'Processing' | 'ProcessingError' | 'ValidationQueued' | 'Validating' | 'ValidationError' | 'AuthError' | 'Cancelled' | 'NotSupported' | 'RateLimitError' | 'PermissionsError' | 'PrerequisiteNotMet', required — The current status of the dataset.
  - `statusDescription` string, nullable — Additional information about the dataset status.
  - `errorMessage` string, nullable — A message about a transient or persistent error returned by Codat or the source platform.
  - `requested` string, required — In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2020-10-08T22:40:50Z 2021-01-01T00:00:00 ``` When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` - Unqualified local time: `2021-11-15T01:00:00` - UTC time offsets: `2021-11-15T01:00:00-05:00` > Time zones > > Not all dates from Codat will contain information about time zones. > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
  - `completed` string — In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2020-10-08T22:40:50Z 2021-01-01T00:00:00 ``` When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` - Unqualified local time: `2021-11-15T01:00:00` - UTC time offsets: `2021-11-15T01:00:00-05:00` > Time zones > > Not all dates from Codat will contain information about time zones. > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
  - `progress` integer, required — An integer signifying the progress of the pull operation.
  - `isCompleted` boolean, required — `True` if the pull operation is completed successfully. The `isCompleted` property is not queryable. To filter failed pull operations, query by `status!=Complete&&status!=NotSupported` instead.
  - `isErrored` boolean, required — `True` if the pull operation entered an error state.

## Other responses

- `400` — The request made is not valid.
- `401` — Your API request was not properly authorized.
- `402` — An account limit has been exceeded. The type of limit is described in the error property: - You have exceeded the 50-company limit that applies to a Free plan. Delete any companies you no longer need and retry the request. - The requested sync schedule is not allowed. You requested an hourly sync schedule but this functionality is not included in the Free plan. - Your Free account is older than 365 days and has expired. Contact support@codat.io.
- `403` — You are using an outdated API key or a key not associated with that resource.
- `404` — One or more of the resources you referenced could not be found. This might be because your company or data connection id is wrong, or was already deleted.
- `429` — Too many requests were made in a given amount of time. Wait a short period and then try again.
- `500` — There is a problem with our server. Please try again later.
- `503` — The Codat API is temporarily offline for maintenance. Please try again later.

---

[API](https://skmtc.net/codatio/apis/lending.md) · [All operations](https://skmtc.net/codatio/apis/lending/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/codatio/lending/revisions/791e242d1faf/schema)
