Skip to main content
The Kotlin SDK is currently in Beta.
In this guide, you’ll learn how to:
  • Install the Kotlin SDK
  • Create an Onramp order for your authenticated users
  • Use the embedded checkout component to handle KYC, payment, and delivery
Crossmint Onramp Embedded Checkout Demo

Native Android onramp with Google Pay support

You can start testing Onramp in staging. Once you are ready to go live, reach out to sales to enable the feature in production

Requirements

  • Android SDK 24+
  • Jetpack Compose
  • Android Studio Arctic Fox or later

1. Installation

Install the Crossmint Kotlin SDK using Maven Central.
1

Add Dependency

Add the following dependency to your app’s build.gradle.kts file:
dependencies {
    implementation("com.crossmint:crossmint-sdk-android:0.0.9")
}
2

Create API key

Create a server-side API key with the orders.create and orders.read scopes enabled. In staging, all scopes are included in your API key.

2. Create Order

Use the Create Order API to initiate the purchase process from your backend. Use the following token addresses for USDC on staging:
ChainStaging Token Address
Solana Devnet4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
Base Sepolia0x036CbD53842c5426634e7929541eC2318f3dCF7e
🚨 IMPORTANT: The payment.receiptEmail parameter is required for compliance reasons. This email is used by Crossmint to determine whether KYC is required for the order. The API accepts either recipient.email OR recipient.walletAddress, not both.
Example API call for USDC on Solana Devnet:
curl --request POST \
  --url https://staging.crossmint.com/api/2022-06-09/orders \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <YOUR_SERVER_API_KEY>' \
  --data '{
    "lineItems": [
      {
        "tokenLocator": "solana:4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
        "executionParameters": {
          "mode": "exact-in",
          "amount": "5"
        }
      }
    ],
    "payment": {
      "method": "card",
      "receiptEmail": "[email protected]"
    },
    "recipient": {
      "walletAddress": "example-wallet-address"
    }
  }'
{
  "clientSecret": "example-client-secret",
  "order": {
    "orderId": "example-order-id",
    "phase": "payment",
    "locale": "en-US",
    "lineItems": [
      {
        "chain": "solana",
        "metadata": {
          "name": "USDC",
          "description": "USDC Token",
          "imageUrl": "https://cryptologos.cc/logos/usd-coin-usdc-logo.svg?v=040"
        },
        "quote": {
          "status": "valid",
          "charges": {
            "unit": {
              "amount": "1.47",
              "currency": "usd"
            }
          },
          "totalPrice": {
            "amount": "2",
            "currency": "usd"
          },
          "quantityRange": {
            "lowerBound": "1.36",
            "upperBound": "1.36"
          }
        },
        "delivery": {
          "status": "awaiting-payment",
          "recipient": {
            "locator": "solana:example-wallet-address",
            "walletAddress": "example-wallet-address"
          }
        },
        "executionMode": "exact-in",
        "maxSlippageBps": "0",
        "executionParams": {
          "mintHash": "example-mint-hash",
          "mode": "exact-in",
          "amount": "2"
        }
      }
    ],
    "quote": {
      "status": "valid",
      "quotedAt": "2025-03-07T23:04:11.996Z",
      "expiresAt": "2025-03-07T23:14:11.996Z",
      "totalPrice": {
        "amount": "2",
        "currency": "usd"
      }
    },
    "payment": {
      "method": "checkoutcom-flow",
      "currency": "usd",
      "status": "requires-kyc",
      "preparation": {
        "kyc": {
          "provider": "persona",
          "templateId": "example-template-id",
          "referenceId": "example-reference-id"
        }
      }
    }
  }
}

3. Use Component

Once you have the order response with orderId and clientSecret, use Crossmint’s embedded checkout component in your Jetpack Compose view. The component supports native Google Pay for a seamless Android payment experience.
import com.crossmint.kotlin.checkout.CheckoutEnvironment
import com.crossmint.kotlin.checkout.CrossmintEmbeddedCheckout
import com.crossmint.kotlin.checkout.models.*

CrossmintEmbeddedCheckout(
    orderId = "<your_order_id>",
    clientSecret = "<your_client_secret>",
    payment = CheckoutPayment(
        crypto = CheckoutCryptoPayment(enabled = false),
        fiat = CheckoutFiatPayment(
            enabled = true,
            allowedMethods = CheckoutAllowedMethods(
                googlePay = true,  // Native Google Pay support
                applePay = false,
                card = true
            )
        )
    ),
    appearance = CheckoutAppearance(
        rules = CheckoutAppearanceRules(
            destinationInput = CheckoutDestinationInputRule(display = "hidden"),
            receiptEmailInput = CheckoutReceiptEmailInputRule(display = "hidden")
        )
    ),
    environment = CheckoutEnvironment.STAGING
)

Key Features

  • Native Google Pay: Seamless integration with Android payment system
  • Jetpack Compose Components: Modern declarative UI framework
  • Automatic KYC: Handles verification flow automatically
  • Customizable Appearance: Control visibility of UI elements

4. Track Order

After the user completes payment, you can track the order status using webhooks or polling.
Poll the order status endpoint from your backend:
curl --request GET \
  --url https://staging.crossmint.com/api/2022-06-09/orders/{orderId} \
  --header 'x-api-key: YOUR_SERVER_API_KEY'
Check the order.payment.status and order.lineItems[].delivery.status fields to track progress.

5. Transaction Completion

Upon successful payment:
1

KYC Verification

The embedded checkout component handles all the complexity of KYC verification automatically.
2

Token Delivery

The purchased tokens (minus fees) are sent directly to the user's wallet.
3

Receipt Sent

User receives an email receipt from [email protected].

6. Next Steps