# Method: projects.beginTransaction

- [HTTP request](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.HTTP_TEMPLATE)
- [Path parameters](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.PATH_PARAMETERS)
- [Request body](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.request_body)
  - [JSON representation](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.request_body.SCHEMA_REPRESENTATION)
- [Response body](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.response_body)
  - [JSON representation](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.BeginTransactionResponse.SCHEMA_REPRESENTATION)
- [Authorization scopes](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#body.aspect)
- [TransactionOptions](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#TransactionOptions)
  - [JSON representation](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#TransactionOptions.SCHEMA_REPRESENTATION)
- [ReadWrite](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadWrite)
  - [JSON representation](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadWrite.SCHEMA_REPRESENTATION)
- [ReadOnly](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadOnly)
  - [JSON representation](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadOnly.SCHEMA_REPRESENTATION)
- [Try it!](https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#try-it)

Begins a new transaction.

### HTTP request

Choose a location:
<button value="global" default="">global</button> <button value="africa-south1">africa-south1</button> <button value="asia-east1">asia-east1</button> <button value="asia-east2">asia-east2</button> <button value="asia-northeast1">asia-northeast1</button> <button value="asia-northeast2">asia-northeast2</button> <button value="asia-northeast3">asia-northeast3</button> <button value="asia-south1">asia-south1</button> <button value="asia-south2">asia-south2</button> <button value="asia-southeast1">asia-southeast1</button> <button value="asia-southeast2">asia-southeast2</button> <button value="asia-southeast3">asia-southeast3</button> <button value="australia-southeast1">australia-southeast1</button> <button value="australia-southeast2">australia-southeast2</button> <button value="europe-central2">europe-central2</button> <button value="europe-north1">europe-north1</button> <button value="europe-north2">europe-north2</button> <button value="europe-southwest1">europe-southwest1</button> <button value="europe-west1">europe-west1</button> <button value="europe-west10">europe-west10</button> <button value="europe-west12">europe-west12</button> <button value="europe-west2">europe-west2</button> <button value="europe-west3">europe-west3</button> <button value="europe-west4">europe-west4</button> <button value="europe-west6">europe-west6</button> <button value="europe-west8">europe-west8</button> <button value="europe-west9">europe-west9</button> <button value="me-central1">me-central1</button> <button value="me-central2">me-central2</button> <button value="me-west1">me-west1</button> <button value="northamerica-northeast1">northamerica-northeast1</button> <button value="northamerica-northeast2">northamerica-northeast2</button> <button value="northamerica-south1">northamerica-south1</button> <button value="southamerica-east1">southamerica-east1</button> <button value="southamerica-west1">southamerica-west1</button> <button value="us-central1">us-central1</button> <button value="us-east1">us-east1</button> <button value="us-east4">us-east4</button> <button value="us-east5">us-east5</button> <button value="us-south1">us-south1</button> <button value="us-west1">us-west1</button> <button value="us-west2">us-west2</button> <button value="us-west3">us-west3</button> <button value="us-west4">us-west4</button> <button value="eu">eu</button> <button value="us">us</button>   
`POST https://datastore.googleapis.com/v1beta3/projects/{projectId}:beginTransaction`

<br />

The URLs use [gRPC Transcoding](https://google.aip.dev/127) syntax.

### Path parameters

| Parameters ||
|---|---|
| `projectId` | `string` Required. The ID of the project against which to make the request. |

### Request body

The request body contains data with the following structure:

| JSON representation |
|---|
| ``` { "transactionOptions": { object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#TransactionOptions`) } } ``` |

| Fields ||
|---|---|
| `transactionOptions` | ``object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#TransactionOptions`)`` Options for a new transaction. |

### Response body

The response for `https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#google.datastore.v1beta3.Datastore.BeginTransaction`.

If successful, the response body contains data with the following structure:

| JSON representation |
|---|
| ``` { "transaction": string } ``` |

| Fields ||
|---|---|
| `transaction` | `string (https://developers.google.com/discovery/v1/type-format format)` The transaction identifier (always present). A base64-encoded string. |

### Authorization scopes

Requires one of the following OAuth scopes:

- `https://www.googleapis.com/auth/datastore`
- `https://www.googleapis.com/auth/cloud-platform`

For more information, see the [Authentication Overview](https://docs.cloud.google.com/docs/authentication#authorization-gcp).

## TransactionOptions

Options for beginning a new transaction.

Transactions can be created explicitly with calls to `https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#google.datastore.v1beta3.Datastore.BeginTransaction` or implicitly by setting `ReadOptions.new_transaction` in read requests.

| JSON representation |
|---|
| ``` { // Union field `mode` can be only one of the following: "readWrite": { object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadWrite`) }, "readOnly": { object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadOnly`) } // End of list of possible types for union field `mode`. } ``` |

| Fields ||
|---|---|
| Union field `mode`. The `mode` of the transaction, indicating whether write operations are supported. `mode` can be only one of the following: ||
| `readWrite` | ``object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadWrite`)`` The transaction should allow both reads and writes. |
| `readOnly` | ``object (`https://docs.cloud.google.com/datastore/docs/reference/data/rest/v1beta3/projects/beginTransaction#ReadOnly`)`` The transaction should only allow reads. |

## ReadWrite

Options specific to read / write transactions.

| JSON representation |
|---|
| ``` { "previousTransaction": string } ``` |

| Fields ||
|---|---|
| `previousTransaction` | `string (https://developers.google.com/discovery/v1/type-format format)` The transaction identifier of the transaction being retried. A base64-encoded string. |

## ReadOnly

Options specific to read-only transactions.

| JSON representation |
|---|
| ``` { "readTime": string } ``` |

| Fields ||
|---|---|
| `readTime` | ``string (`https://protobuf.dev/reference/protobuf/google.protobuf#timestamp` format)`` Reads entities at the given time. This must be a microsecond precision timestamp within the past one hour, or if Point-in-Time Recovery is enabled, can additionally be a whole minute timestamp within the past 7 days. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: `"2014-10-02T15:01:23Z"`, `"2014-10-02T15:01:23.045123456Z"` or `"2014-10-02T15:01:23+05:30"`. |