To handle PayPal via the API directly, follow our quick start guide on direct API integrations, or use the steps below.

Create a transactions

To create a PayPal transaction, set the method to paypal and the redirect_url to the endpoint of your application that can handle the customer returning once they’ve completed approving the transaction on paypal.com.

See the POST /transactions API endpoint for more details.

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": "paypal",
    "redirect_url": "https://example.com/return-url",
    "country": "AU",
    "currency": "AUD"
  },
  ...
}'

If successful, the response of this transaction will include a status set to buyer_approval_pending as well as a payment_method.approval_url.

{
    "type": "transaction",
    "id": "0c41c8df-27f4-480e-97f0-9401558ae25e",
    "status": "buyer_approval_pending",
    "intent": "authorize",
    "payment_method": {
        "type": "payment-method",
        "method": "paypal",
        "mode": "redirect",
        "approval_url": "https://www.sandbox.paypal.com/checkoutnow?token=7NP38594266148058",
       ...
    },
    "method": "paypal",
    ...
}

About tokenization

If your PayPal account supports Reference Transactions, then you can pass the store=true parameter to each request to vault a buyer’s PayPal account for future use.

This does require you to tick the Payment tokenization toggle for your PayPal connection in your dashboard.

Tokenization toggle

Once stored, you can use the stored PayPal account for future transactions without redirecting the buyer to PayPal.

Handle redirect to PayPal

Your application will need to redirect your customer to PayPal where they will be required to authenticate the payment. To do so, redirect the customer to the payment_method.approval_url. After they’ve authenticated themselves, the customer will be redirected back to the redirect_url that you set when creating the transaction.

If the customer abandons the checkout or somehow experiences network connection issues, the transaction state can get out of sync between your application and ours. We recommend the following best practices in handling these situations.

Handle the return to your app

When the customer is redirected back to your app, the transaction status is not known. Your application will therefore need to call our API to get the latest transaction status. To do this, your redirect_url will be appended with the gr4vy_transaction_id.

[redirect_url]?gr4vy_transaction_id=2f37e0d0-5549-42c4-9c5c-e03d5fa97148&gr4vy_transaction_status=capture_succeeded

Although we also provide the gr4vy_transaction_status in this callback, it’s recommended to also fetch the latest status via the API, as the status may have changed since.

After you’ve handled the redirect, you can display a message to your customer letting them know the result of the transaction.

Fetch the latest status

Finally, after the transaction has been created your application can get the latest details and status using the transaction ID received via the callback to the redirect URL, or on direct callback from the API.

curl -i -X GET "https://api.example.gr4vy.app/transactions/fe26475d-ec3e-4884-9553-f7356683f7f9" \
    -H "Authorization: Bearer [JWT_TOKEN]"

The transaction includes details about the payment method used and the status of the transaction.

{
  "type": "transaction",
  "id": "fe26475d-ec3e-4884-9553-f7356683f7f9",
  "status": "authorized",
  "amount": 1299,
  "currency": "AUD",
  "payment_method": {
    "type": "payment-method",
    "id": "77a76f7e-d2de-4bbc-ada9-d6a0015e6bd5",
    "method": "paypal",
    ...
  },
  ...
}

Visit the API reference documentation for full details about the transaction resource, and any other API.