# Update a Transaction

## Updating transaction amount

Flow:

1. The transaction must be created with "readyForPayment": false flag first
2. The customer can see the transaction page and can't choose any payment method
3. The platform calls PATCH API to update transaction details including "amount" field, this API can be invoke multiple times
4. The platform calls PATCH API with "readyForPayment" = true , which allows the customer to choose a payment method and pay - without having to refresh the page or tap again

This flow is useful for POS who would like to create an initial transaction object with zero amount and update the total amount and other fields during the products scanning proccess, or any other flow where there is a requirement to create transaction once, and update it's amount and data later.

{% hint style="info" %}
The customer will be allowed to make payment only after "readyForPayment" API will be called
{% endhint %}

### Step 1 - Creating a transaction in Setup state

POST

<https://api.sandbox.sensepass.com/api/transactions/init>

```json
{
    "amount": 100,
    "currency": "USD",
    "isCent": true,
    "readyForPayment": false,
    "deviceId": "YOUR-DEVICE-ID"
} 
```

### Step 2 - Updating transaction Data

PATCH

<https://api.sandbox.sensepass.com/api/transactions/250b859e1fb5b162d476f67dcc9ef9f0e2cb3a9412d13a610412d769>

```json
{
    "amount": 550,
    "currency": "USD",
    "isCent": true,
    "deviceId": "YOUR-DEVICE-ID",
    "products": [
      {
        "name": "Shirt",
        "quantity": 1,
        "amount": 190,
        "discount": 0,
        "vat": 0
      },
      {
        "name": "Service Fee",
        "quantity": 1,
        "amount": 10,
        "discount": 0,
        "vat": 0
      }
    ]
} 
```

### Step 3 - Allowing user to make payments

PATCH

<https://api.sandbox.sensepass.com/api/transactions/250b859e1fb5b162d476f67dcc9ef9f0e2cb3a9412d13a610412d769>

```json
{
    "amount": 550,
    "currency": "USD",
    "isCent": true,
    "deviceId": "YOUR-DEVICE-ID",
    "products": [
      {
        "name": "Shirt",
        "quantity": 1,
        "amount": 190,
        "discount": 0,
        "vat": 0
      },
      {
        "name": "Service Fee",
        "quantity": 1,
        "amount": 10,
        "discount": 0,
        "vat": 0
      }
    ],
    "readyForPayment": true
} 
```

## Updating transaction fields

The following fields can be updated using the PATCH method based on [Transaction Entity](https://docs.sensepass.com/sensepay/transaction-api/models/transaction-model):

1. reason
2. products
3. posData
4. metadata
5. clientPhoneNumber
6. clientEmail
7. readyForPayment

### Example

PATCH

<https://api.sandbox.sensepass.com/api/transactions/250b859e1fb5b162d476f67dcc9ef9f0e2cb3a9412d13a610412d769>

```json
{
  "reason": "New Reason",
  "posData": {
    "a": "b"
  },
  "metadata": {
    "x": "y"
  },
  "deviceId": "YOUR-DEVICE-ID"
}
```
