> ## Documentation Index
> Fetch the complete documentation index at: https://wpay-feat-edp-guide.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Step 3: Create a transaction

After your buyer selects their method of payment in the previous step, you're ready to create a transaction.

## Create a Transaction

The transaction should be populated with the selected `method`, your `redirect_url`, and
any other relevant transaction information.

* `payment_method.method` - This will be the method selected by the customer at checkout. This will be one of the values retrieved from the payment options endpoint in the previous step.

* `payment_method.redirect_url` - This should be provided to redirect the buyer back to your application after they have authenticated the payment. This is also required for card in order to support 3-D Secure.

See the [`POST /transactions`](/reference/transactions/new-transaction) API endpoint for more details.

<CodeGroup>
  ```js cURL
  curl -i -X POST "https://api.example.gr4vy.app/transactions" \
      -H "Authorization: Bearer [JWT_TOKEN]" \
      -d '{
    "amount": 1400,
    "currency": "AUD",
    "intent": "capture",
    "payment_method": {
      "method": "clearpay",
      "redirect_url": "[REDIRECT_URL]",
      "country": "AU",
      "currency": "AUD"
    },
    "cart_items": [
      {
          "name": "GoPro HERO9 Camcorder",
          "quantity": 1,
          "unit_amount": 1500,
          "discount_amount": 0,
          "tax_amount": 0,
          "sku": "sku-789123",
          "product_url": "https://example.com/items/gopro",
          "image_url": "https://example.com/images/items/gopro.png",
          "categories": [],
          "product_type": "physical"
      },
      {
          "name": "Discount",
          "quantity": 1,
          "unit_amount": 0,
          "discount_amount": 100,
          "tax_amount": 0,
          "sku": "discount",
          "categories": [],
          "product_type": "discount"
      }
    ],
    "external_identifier": "abc123",
    "store": "true",
    "payment_source": "card_on_file",
    "merchant_initiated": false,
    "is_subsequent_payment": false
  }'
  ```

  ```js Node
  const transactionRequest = new TransactionRequest()
  transactionRequest.amount = AMOUNT
  transactionRequest.currency = 'AUD'
  transactionRequest.metadata = { source: 'node_sdk' }
  transactionRequest.paymentMethod = new TransactionPaymentMethodRequest()
  transactionRequest.paymentMethod.method = 'card'
  transactionRequest.paymentMethod.number = '4111111111111111'
  transactionRequest.paymentMethod.expirationDate = '11/25'
  transactionRequest.paymentMethod.securityCode = '123'

  const transaction = await client.newTransaction("", transactionRequest)
  ```

  ```python Python
  transaction_request = {
      "amount":1299,
      "currency":"AUD",
      "intent":"authorize",
      "payment_method": {
          "method":"card",
          "number":"4111111111111111",
          "expiration_date":"11/25",
          "security_code":"123",
          "redirect_url":"https://example.com/callback",
      },
  }
  transaction = client.create_new_transaction(**transaction_request)
  ```

  ```php PHP
  $transaction_request = array("amount"=>1000,"currency"=>"AUD", "payment_method"=>array("method"=>"card", "number"=>"4111111111111111", "expiration_date"=> "01/24", "security_code"=>"432"));

  $result = $config->authorizeNewTransaction($transaction_request);
  ```
</CodeGroup>

The response of this transaction will include a `status`, which will tell you how to handle the
next step.

<Warning>
  Requests that require a redirect will return a `status` of `buyer_approval_pending` with a `payment_method.approval_url`.  In the next step we will show you how to handle this situation.
</Warning>

```json
{
    "type": "transaction",
    "id": "0c41c8df-27f4-480e-97f0-9401558ae25e",
    "merchant_account_id": "default",
    "created_at": "2023-04-28T08:33:06.979938+00:00",
    "updated_at": "2023-04-28T08:33:14.791510+00:00",
    "amount": 1299,
    "captured_amount": 0,
    "refunded_amount": 0,
    "currency": "AUD",
    "country": "AU",
    "external_identifier": null,
    "status": "buyer_approval_pending",
    "intent": "authorize",
    "payment_method": {
        "type": "payment-method",
        "method": "paypal",
        "mode": "redirect",
        "label": null,
        "scheme": null,
        "expiration_date": null,
        "approval_url": "https://www.sandbox.paypal.com/checkoutnow?token=7NP38594266148058",
        "country": "AU",
        "currency": "AUD",
        "details": null,
        "id": null,
        "approval_target": "any",
        "external_identifier": null
    },
    "method": "paypal",
    "error_code": null,
    "payment_service": {
        "id": "e9bd6ec4-03eb-410c-b655-45b458f185f2",
        "type": "payment-service",
        "payment_service_definition_id": "paypal-paypal",
        "method": "paypal",
        "display_name": "PayPal"
    },
    "buyer": null,
    "raw_response_code": "CREATED",
    "raw_response_description": "",
    "shipping_details": null,
    "avs_response_code": null,
    "cvv_response_code": null,
    "payment_source": "ecommerce",
    "merchant_initiated": false,
    "is_subsequent_payment": false,
    "cart_items": [],
    "statement_descriptor": null,
    "scheme_transaction_id": null,
    "three_d_secure": null,
    "payment_service_transaction_id": "7NP38594266148058",
    "metadata": null,
    "authorized_at": null,
    "captured_at": null,
    "voided_at": null,
    "buyer_approval_timedout_at": null
}
```

## Summary

In this step you:

* Called the transactions endpoint
* Handled the transaction response
