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

# Digital Services

> Learn how to collect one-time payments for digital products, top-ups, and instant-access services using Novac Payment Links and the Checkout API.

# Overview

Digital services are downloadable products, course access, API credits, airtime top-ups, gift cards, or any content unlocked immediately after payment. They share a common requirement i.e, payment must be confirmed instantly before access is granted.

Novac is well-suited for this. You can use **Payment Links** for zero-code collection, the **Checkout API** for custom flows, or the **Bills API** for utility and airtime purchases all backed by real-time webhook notifications.

***

## Common Digital Service Scenarios

| Scenario                         | Recommended Integration                |
| -------------------------------- | -------------------------------------- |
| Sell a course or ebook           | Payment Link or Checkout API           |
| Top up API credits in-app        | Checkout API with prebuilt checkout    |
| Sell gift cards or voucher codes | Checkout API + webhook to deliver code |
| Purchase airtime or data bundles | Bills API (Airtime / Data)             |
| Pay for electricity              | Bills API (Electricity)                |
| Accept donations                 | Payment Link with open amount          |

***

## Prerequisites

<Accordion title="See details" defaultOpen={true}>
  * [Create an account](/docs/getting-started/create-merchant-account) with completed KYC
  * [Obtain your API keys](/docs/getting-started/obtain-api-keys) — Public key for checkout, Secret key for server-side operations
  * A **webhookURL** to receive payment confirmation before granting access
  * A **callbackURL** to redirect customers after payment completes
</Accordion>

***

## Payment Links (No-Code)

Payment Links are the fastest way to start collecting payments for digital products. Create a link from the Novac dashboard, share it anywhere, social media, email, WhatsApp and customers can pay immediately.

Best for Content creators, course sellers, freelancers, donations, flexible-amount payments.

### Create a Payment Link from the Dashboard

<Steps>
  <Step title="Log in to your Novac Dashboard">
    Sign in at [app.novacpayment.com](https://app.novacpayment.com).
  </Step>

  <Step title="Navigate to Payment Links">
    Go to **Payments > Payment Links** in the sidebar and click **New Payment Link**.
  </Step>

  <Step title="Fill in the details">
    Enter your product name, amount (leave blank for open/flexible amounts), and description.

    <Note>
      Leaving the **Amount** field empty allows customers to enter any amount, ideal for donations and pay-what-you-want products.
    </Note>
  </Step>

  <Step title="Share the link">
    Once created, Novac generates a shareable URL and an **NQR code** that customers can scan to pay.
  </Step>
</Steps>

[Full guide → Create a Payment Link](/docs/accept-payment/accept-payment-with-payment-links)

***

## Checkout API (Programmatic)

For digital services that require tracking who paid and granting access automatically, initiate checkouts via the API. This gives you a unique `transactionReference` per purchase, which you verify before delivering the digital product.

Best for SaaS platforms, in-app purchases, credit top-ups, any service that needs per-customer tracking.

### Initiate a Checkout

```bash Request theme={null}
curl --request POST \
  --url https://api.novacpayment.com/api/v1/checkout \
  --header 'Authorization: Bearer <your-public-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "amount": 3500,
    "currency": "NGN",
    "email": "user@example.com",
    "reference": "DIGITAL-PURCHASE-00101",
    "callbackUrl": "https://yourapp.com/payment/callback",
    "redirectUrl": "https://yourapp.com/library"
  }'
```

Redirect the customer to the `checkoutUrl` returned in the response.

### Verify Payment Before Granting Access

When the customer returns to your `callbackURL`, verify the transaction server-side before unlocking access.

```bash Request theme={null}
curl --request GET \
  --url https://api.novacpayment.com/api/v1/checkout/DIGITAL-PURCHASE-00101/verify \
  --header 'Authorization: Bearer <your-secret-key>'
```

```json Response (excerpt) theme={null}
{
  "status": true,
  "data": {
    "status": "successful",
    "transactionReference": "DIGITAL-PURCHASE-00101",
    "amount": 3500,
    "currency": "NGN",
    "customer": {
      "email": "user@example.com",
      "name": "Fatima Bello"
    }
  }
}
```

Only unlock the digital product, download link, or access key when `data.status === "successful"`.

<Warning>
  Do not rely on the `status` query parameter in the callback URL. Always call the Verify API from your server before granting access.
</Warning>

[Full guide > Verify a Transaction](/docs/accept-payment/manage-payment/verify-transaction)

***

## Bills API (Utility Purchases)

For platforms that facilitate airtime top-ups, mobile data purchases, or electricity payments, Novac's Bills API handles the full flow — from fetching available providers to completing the purchase.

**Best for:** Fintech apps, super-apps, agent banking platforms.

### Purchase Airtime

```bash theme={null}
# 1. Fetch available airtime providers
curl --request GET \
  --url https://api.novacpayment.com/api/v1/bills/providers?type=airtime \
  --header 'Authorization: Bearer <your-secret-key>'

# 2. Purchase airtime
curl --request POST \
  --url https://api.novacpayment.com/api/v1/bills/airtime \
  --header 'Authorization: Bearer <your-secret-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "provider": "MTN",
    "phone": "08012345678",
    "amount": 1000,
    "reference": "AIRTIME-00202"
  }'
```

[Full guide → Purchase Airtime](/docs/make-payment/bills/purchase-airtime)

### Purchase Electricity

```bash theme={null}
# Validate meter number first
curl --request POST \
  --url https://api.novacpayment.com/api/v1/bills/electricity/validate \
  --header 'Authorization: Bearer <your-secret-key>' \
  --data '{
    "meterNumber": "12345678901",
    "provider": "IKEDC"
  }'
```

[Full guide → Purchase Electricity](/docs/make-payment/bills/purchase-electricity)

***

## Real-Time Notifications via Webhook

For digital services, webhooks are critical — they let your system act on payment outcomes immediately, even if the customer closes the browser before being redirected.

```json Webhook Payload (successful purchase) theme={null}
{
  "notify": "transaction",
  "notifyType": "successful",
  "data": {
    "transactionReference": "DIGITAL-PURCHASE-00101",
    "amount": 3500,
    "status": "successful",
    "customer": {
      "email": "user@example.com",
      "name": "Fatima Bello"
    }
  }
}
```

On receipt of a `notifyType: "successful"` event:

1. Verify the transaction via the API (do not skip this step).
2. Deliver the digital product, send the download link, activate the account, issue the voucher code.
3. Respond to Novac's webhook request with `HTTP 200 OK`.

[Full guide → Webhooks](/docs/api-basics/webhooks)

***

## What's Next?

* **Payment Links** - [Create shareable payment links](/docs/accept-payment/accept-payment-with-payment-links) for products and services, no code required.
* **Prebuilt Checkout** - Use Novac's [hosted checkout](/docs/accept-payment/complete-payment/prebuilt-checkout) for fast, reliable payment collection.
* **Purchase Airtime & Data** - Integrate mobile top-up and [data bundle purchases](/docs/make-payment/bills/purchase-airtime) via the Bills API.
