SSeev PlusDocs
Get Paid

Checkout API

Use the SeevPlus REST API to initiate checkout payments programmatically and verify checkout results server-side.

API product

Requires developer access and an API key

The Checkout API is how developers integrate Seev's payment gateway directly into their own application. Developer checkout payments are initiated through SeevPlus so the organization, environment, and transaction can be recorded before the customer is redirected to checkout.

Before you use the Checkout API, open the Developer Dashboard, accept the developer terms, select Checkout API as a product, and generate an API key. Don't have an API key yet? Start with the API Keys guide.

If your integration still calls gateway-api.seevcash.com directly, migrate to the SeevPlus payment routes for more reliable organization-scoped processing. See Migrate to the SeevPlus Payment Routes.

Who it's for

The Checkout API is the right choice if:

  • You are building a web or mobile app and need payments as part of your own product flow
  • You need to pass payment data programmatically — amount or items, customer info, payment channels, redirect URL, and gateway metadata
  • You want to control the redirect and run your own post-payment logic (update a database, send confirmation emails, provision access)
  • You're building a platform or marketplace where multiple merchants or customers transact through your app
  • You need programmatic access to checkout initiation, status checks, and transaction history

If you just need to send someone a link or sell a product without writing code, use Payment Links or the Storefront instead.

API key requirement

Checkout API requests must be authenticated with a Checkout API key from the same environment you are using.

EnvironmentKey to use
SandboxA sandbox Checkout API key for testing.
ProductionA production Checkout API key after your account is approved for live mode.

If you generate keys for multiple products, make sure you use the key created for Checkout API. Product keys are scoped to their own Seev services.

Before your first request

  • Create checkout from a backend or server function, never directly from browser code.
  • Keep your secret API key in server-side environment variables.
  • Create and save your own order before requesting a checkout session.
  • Choose a stable internal order ID for idempotency and reconciliation if you want retry protection.
  • Prepare a callback route and a signed webhook endpoint.
  • Start in sandbox and test success, failure, and repeated submission.

How it works

Your server          Seev API           Customer
    │                    │                  │
    │── create session ─▶│                  │
    │◀── checkout_url ───│                  │
    │                    │                  │
    │─── redirect ───────────────────────▶ │
    │                    │◀── pays ─────────│
    │                    │── redirect ─────▶│
    │                    │ (to redirect URL)│
    │◀── session ref ────────────────────── │
    │                    │                  │
    │── verify session ─▶│                  │
    │◀── result ─────────│                  │
    │                    │                  │
    │─── fulfil order ───────────────────▶ │
  1. Your server creates a checkout session with the customer and order details.
  2. Seev returns a checkout URL — redirect the customer there.
  3. The customer completes payment using a method enabled on the hosted checkout page.
  4. Seev redirects the customer back to your redirect_url with a session reference.
  5. Your server verifies the session before fulfilling the order.

API routes

Use these routes from your backend.

ActionMethodRoute
Create checkout sessionPOSThttps://api.seevplus.com/api/v1/developer/payments
Verify checkout sessionGEThttps://api.seevplus.com/api/v1/developer/payments/{sessionRef}

Use https://api.seevplus.com as the base URL for Checkout API integrations.

Official SDKs, browser packages, mobile SDKs, and platform plugins such as WordPress or WooCommerce are coming soon. For production integrations today, use the REST API from your backend.

Create a checkout session

Create checkout sessions from your backend with a Checkout API key. The endpoint accepts Authorization: Bearer $SEEV_CHECKOUT_API_KEY; X-API-Key: $SEEV_CHECKOUT_API_KEY may be used instead of Authorization. Idempotency-Key is optional. When supplied, it is forwarded to the payment gateway. Without it, every request creates a new payment.

curl -X POST "https://api.seevplus.com/api/v1/developer/payments" \
  -H "Authorization: Bearer $SEEV_CHECKOUT_API_KEY" \
  -H "Idempotency-Key: order_123_attempt_1" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "checkout",
    "recipient": {
      "name": "Kwame Asante",
      "email": "kwame@example.com"
    },
    "items": [
      {
        "name": "Web Development",
        "description": "Landing page design",
        "quantity": 1,
        "price": 800,
        "image": "https://example.com/web-development.png"
      },
      {
        "name": "Hosting (1 year)",
        "description": "Cloud hosting plan",
        "quantity": 1,
        "price": 200,
        "image": ""
      }
    ],
    "currency": "GHS",
    "channels": ["mobile_money", "crypto"],
    "redirect_url": "https://yourapp.com/payment/callback",
    "meta": {
      "orderId": "order_123"
    }
  }'

The request body is the same as the Seev gateway initiation API. Use either amount or items; the gateway calculates the final amount. Amount values and item prices are expressed in the currency’s smallest unit, so 10000 means GHS 100.00. Keep redirect_url and meta exactly as shown. Do not add organizationId or user_id; SeevPlus adds the correct organization context internally. Existing merchant-defined meta values are preserved.

The response is the gateway initiation response unchanged. A successful response includes the hosted checkout URL:

{
    "success": true,
    "data": {
        "amount": 1000,
        "channels": ["mobile_money", "crypto"],
        "checkout_url": "https://pay.seevplus.com/PAY-20260718-f23159df-9df8-4e69-8306-c11d71ead351",
        "currency": "GHS",
        "env": "production",
        "expires_at": "2026-07-18T21:08:46.776302Z",
        "items": [
            {
                "id": "f0c72f6b-59fc-4371-b68b-540f54d12f5b",
                "session_id": "d636387f-6872-469e-be31-76a79301fcb1",
                "name": "Web Development",
                "description": "Landing page design",
                "quantity": 1,
                "price": 800,
                "image": "https://example.com/web-development.png"
            },
            {
                "id": "62342bee-7eeb-4f31-984a-96718e2fd997",
                "session_id": "d636387f-6872-469e-be31-76a79301fcb1",
                "name": "Hosting (1 year)",
                "description": "Cloud hosting plan",
                "quantity": 1,
                "price": 200,
                "image": ""
            }
        ],
        "recipient": {
            "email": "kwame@example.com",
            "name": "Kwame Asante"
        },
        "redirect_url": "https://yourapp.com/payment/callback",
        "reference": "PAY-20260718-f23159df-9df8-4e69-8306-c11d71ead351",
        "status": "pending"
    },
    "request_id": "fb4f88c-9429-41d7-b3ca-5e4226a50736",
    "timestamp": "2026-07-18T20:38:46.779595765Z"
}

Redirect the customer to data.checkout_url. SeevPlus records its internal transaction from the gateway-calculated amount, currency, status, reference, checkout URL, and expiry.

The response is passed through from the payment gateway, so gateway fields such as env, redirect_url, item IDs, item session IDs, empty values, and future response fields are preserved.

Official SDKs are coming soon. For production integrations today, create checkout sessions with the SeevPlus REST API from your backend.

Payment initiation parameters

ParameterTypeRequiredDescription
type"checkout" | "invoice" | "payment_link"YesPayment context. Use checkout for custom app or storefront checkout flows.
recipient.namestringYesCustomer’s full name.
recipient.emailstringYesCustomer’s valid email address.
recipient.phonestringNoCustomer’s phone number.
amountintegerYes, or itemsPayment amount in the currency’s smallest unit, such as pesewas for GHS.
itemsarrayYes, or amountLine items with name, quantity, and price; the gateway calculates the final amount.
currencystringYesSupported currency code such as GHS, USD, EUR, GBP, NGN, USDC, or USDT.
channelsstring[]NoOptional checkout payment-channel restrictions, such as ["mobile_money"].
redirect_urlstringYesValid HTTP or HTTPS URL where the customer returns after checkout.
metaobjectNoMerchant-defined JSON metadata passed through to the gateway.
Idempotency-Key headerstringNoOptional unique request key used to prevent duplicate payment initiation. Without it, every request creates a payment.

Idempotency behavior

ScenarioResponse
New payment requestHTTP 201
Identical retry with the same Idempotency-KeyHTTP 200 with the existing payment
Same Idempotency-Key reused with a different requestHTTP 409
In-progress request whose checkout session is not attached yetHTTP 202

If an initiation failed before checkout was created, use a new idempotency key for a deliberate retry.

Existing keys

SeevPlus stores only a one-way hash of newly issued checkout secrets. Checkout keys created before this route was introduced must be rotated once before they can authenticate here. Plaintext secret keys are never persisted.

This endpoint currently records and initiates payments only. Production outbound developer webhooks and durable gateway-event processing are intentionally outside this phase.

Verify the payment

Always verify the payment on your server before fulfilling the order. The redirect alone is not proof of payment — it can be triggered manually by anyone with your redirect URL.

Use the SeevPlus wrapper for gateway session lookup. Developers should use the gateway reference returned during initiation, or the corresponding session reference received after redirect.

No API key or Authorization header is required for this GET endpoint. A successful request returns the current gateway session payload, allowing clients to check payment status without calling the gateway API directly.

curl -X GET \
  "https://api.seevplus.com/api/v1/developer/payments/$SESSION_REF"

Check the returned status before fulfilling the order:

{
    "success": true,
    "data": {
        "id": "checkout_xyz",
        "reference": "PAY-20260701-abc123",
        "status": "completed",
        "amount": 10000,
        "final_amount": 10000,
        "currency": "GHS"
    }
}

Official SDK verification helpers are coming soon. For production integrations today, verify payments with the SeevPlus REST API from your backend.

Treat completed or success as paid. Treat pending, failed, or cancelled as not fulfilled.

PropertyDescription
data.idThe checkout session ID
data.statusRaw status string (completed, success, failed, pending, cancelled)
data.referenceTransaction reference for your records
data.amountAmount paid in the smallest currency unit
data.final_amountFinal amount confirmed by the payment session
data.currencyPayment currency

For webhook-based verification (recommended for fulfilment), see Webhooks.

Supported payment methods

By default, all methods enabled for the checkout are shown. Mobile money is currently available for live checkout.

ValueChannel
mobile_moneyMTN MoMo, Telecel Cash, Airtel Money

Card, direct bank-transfer checkout, and crypto should not be offered to a customer until they are selectable on the live checkout page.

See Payment Methods for current availability and customer instructions.

Common integration problems

The API returns unauthorized

Confirm that the key is a Checkout API key, belongs to the selected organization, and matches sandbox or production. A rotated, deleted, or partially copied secret will not work.

Checkout is created but the customer is not fulfilled

Do not fulfil from the redirect alone. Verify the session on your server and process a valid signed success webhook idempotently.

A retry creates another checkout

Generate one stable idempotency key for the logical order and reuse it for retries. Do not generate a new random key on every attempt.

Production is blocked

Complete organization verification, switch the Developer Dashboard to production, and create a separate production key. Sandbox credentials cannot process production activity.

On this page