> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gr4vy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Azupay - PayID

> Connect to Azupay to accept PayID bank payments in Australia.

Azupay PayID is a bank payment method that allows buyers in Australia to pay using a PayID. Azupay uses a redirect flow where the buyer completes the payment on the Azupay hosted page.

## Setup

Azupay provides a self-service sign-up for a sandbox account. To sign up for an
account, visit the
[sign-up page](https://developer.azupay.com.au/docs/signing-up) and follow the
instructions.

## Credentials

When setting up PayID in the dashboard, configure the following credentials:

* **Client ID** - The client ID provided as part of the Azupay account request form once the account is created.
* **Secret key** - The secret key generated in the [Azupay Dashboard](https://dashboard.azupay.com.au/settings) under **Settings** > **API Keys**.

## Features

Azupay PayID supports the following features:

* **Direct capture** - Payments are captured immediately at the time of authorization
* **Partial refunds** - Refund a portion of the captured amount
* **Refunds** - Refund transactions in full

## Supported countries

Azupay PayID supports transactions from buyers in `AU`.

## Supported currencies

Azupay PayID supports processing payments in `AUD`.

## Limitations

The following features are not supported by this connector:

* **Delayed capture** - Authorizing a payment and capturing it later is not supported
* **Void** - Canceling an authorized transaction before capture is not supported
* **Partial capture** - Capturing a portion of the authorized amount is not supported
* **Over capture** - Capturing more than the authorized amount is not supported
* **Partial authorization** - Accepting a partial amount is not supported
* **Payment method tokenization** - Storing payment methods for future use is not supported
* **Zero auth** - Zero-dollar verification transactions are not supported
* **Transaction sync** - Automatic transaction status synchronization is not supported
* **Settlement reporting** - Automatic settlement reporting is not supported

Additional limitations:

* **PayID generation** - Azupay automatically generates the PayID with the suffix registered at the time of sign-up. Dynamic suffix as part of the payload is not supported.
* **Concurrent refunds** - Another refund cannot be initiated while there is an outstanding in-progress refund.
* **PayID expiry** - The PayID expires after 20 minutes. Payments initiated against the PayID after expiry are automatically declined and returned by Azupay.

## Webhooks

Azupay sends webhook events for every payment request status change. Ensure all webhook events are enabled:

1. Log in to the [Azupay Dashboard](https://dashboard.azupay.com.au/settings).
2. Navigate to **Settings** > **Payment Request webhook events**.
3. Set the webhook URL as defined by the connector.

Configure the Azupay account to decline payments where the amount paid by the buyer does not match the amount requested.

## Integration

The default integration for Azupay PayID uses a redirect to a hosted payments page.

Start by creating a new transaction with the following required fields.

<CodeGroup>
  ```csharp C# theme={"system"}
  var transaction = await client.Transactions.CreateAsync(
    transactionCreate: new TransactionCreate()
    {
      Amount = 1299,
      Currency = "AUD",
      Country = "AU",
      PaymentMethod =
        TransactionCreatePaymentMethod.CreateCheckoutSessionWithUrlPaymentMethodCreate(
          new RedirectPaymentMethodCreate()
          {
            Method = "payid",
            RedirectUrl = "https://example.com/callback",
          }
        ),
    }
  );
  ```

  ```go Go theme={"system"}
  amount := int64(1299)
  currency := "AUD"
  country := "AU"
  method := "payid"
  redirectUrl := "https://example.com/callback"

  redirectPaymentMethodCreate := components.RedirectPaymentMethodCreate{
    Method: method,
    RedirectUrl: redirectUrl,
  }
  paymentMethod := components.CreateTransactionCreatePaymentMethodRedirectPaymentMethodCreate(redirectPaymentMethodCreate)

  transactionCreate := components.TransactionCreate{
    Amount:        amount,
    Currency:      currency,
    Country:       &country,
    PaymentMethod: &paymentMethod,
  }

  transaction, err := client.Transactions.Create(ctx, transactionCreate, nil, nil)
  ```

  ```java Java theme={"system"}
  CreateTransactionResponse transactionResponse = gr4vyClient.transactions().create()
    .transactionCreate(TransactionCreate.builder()
      .amount(1299L)
      .currency("AUD")
      .country("AU")
      .paymentMethod(TransactionCreatePaymentMethod.of(RedirectPaymentMethodCreate.builder()
        .method("payid")
        .redirectUrl("https://example.com/callback")
        .build()))
      .build())
    .call();

  Transaction transaction = transactionResponse.transaction().orElse(null);
  ```

  ```php PHP theme={"system"}
  $transactionCreate = new TransactionCreate(
    amount: 1299,
    currency: 'AUD',
    country: 'AU',
    paymentMethod: new RedirectPaymentMethodCreate(
      method: 'payid',
      redirectUrl: 'https://example.com/callback'
    )
  );
  $response = $client->transactions->create($transactionCreate);
  $transaction = $response->transaction;
  ```

  ```python Python theme={"system"}
  transaction: models.Transaction = client.transactions.create(
    amount=1299,
    currency="AUD",
    country="AU",
    payment_method={
      "method": "payid",
      "redirect_url": "https://example.com/callback",
    }
  )
  ```

  ```ts TypeScript theme={"system"}
  const transaction = await client.transactions.create({
    amount: 1299,
    currency: "AUD",
    country: "AU",
    paymentMethod: {
      method: "payid",
      redirectUrl: "https://example.com/callback"
    }
  })
  ```
</CodeGroup>

After the transaction is created, the API response includes a `payment_method.approval_url` and the status is set to `buyer_approval_pending`. The PayID expires after 20 minutes.

```json theme={"system"}
{
  "type": "transaction",
  "id": "ea1efdd0-20f9-44d9-9b0b-0a3d71e9b625",
  "payment_method": {
    "type": "payment-method",
    "approval_url": "https://cdn.gr4vy.com/connectors/..."
  },
  "method": "payid"
}
```

Redirect the buyer to the `approval_url` (open in a browser or Webview), where they can complete the payment. Once the buyer approves, the transaction progresses to a `capture_succeeded` state.
