---
title: Bill Onboarding
slug: poc-onboarding
createdAt: 2025-06-06T05:00:49.607Z
---

Monoova's onboarding API flow is modular and lightweight. It allows you to verify a business and its associated individuals (UBOs) without the need to manage application states or workflows. Simply submit the business, retrieve detected individuals, verify them, and continue through to activation. This guide walks you through verifying your business, provisioning your ledger, and enabling PayID and PayTo.

## How It Works

- Verify business and individuals via KYB
- Create a Ledger
- Register a PayID against the Ledger
- Create a PayTo Agreement for account funding
- Check Agreement Status

Each step can be tested in Monoova’s sandbox environment.

## Step 1: Business and Individual Verification with Monoova KYB API

**Base URL:** https\://dev-api.monoova.com

Monoova’s KYB (Know Your Business) API fits seamlessly into your onboarding flow, verifying businesses and individuals without needing to manage application states.

:::::WorkflowBlock
::::WorkflowBlockItem
### Authenticate and Get Token

Use your API key to retrieve a 24-hour bearer token for all other KYB steps.

**Endpoint:** POST /kyb/auth/token

**Headers:**

:::BlockQuote
Accept: application/json
Content-Type: application/json
apikey: YOUR\_API\_KEY
:::
::::

::::WorkflowBlockItem
### Create and Verify Business Entity

Submit the business details to begin KYB verification.

**Endpoint:** POST /kyb/v1/CreateVerifyEntity

**Request Body:**

:::BlockQuote
\{
&#x20; "companyName": "Example Pty Ltd",
&#x20; "registrationNumber": "1122334455",
&#x20; "country": "AUS",
&#x20; "sourceKey": "InternalID\_123",
&#x20; "externalUserId": \["user123"]
}
:::

The response will return an applicantId. This identifier is required for all subsequent KYB steps.

**Polling for Verification Completion**

**Endpoint:** POST /kyb/v1/EntityStatus

**Request Body:**

:::BlockQuote
\{
&#x20; "applicantId": "your\_applicant\_id"
}
:::

Poll every 2–3 minutes until the status is Completed.
::::

::::WorkflowBlockItem
### Retrieve UBOs

After the entity is verified, retrieve the beneficial owners (UBOs) detected by Monoova.

**Endpoint:** POST /kyb/v1/RetrieveUbos

**Request Body:**

:::BlockQuote
\{
&#x20; "applicantId": "your\_applicant\_id"
}
:::

**Example Response:**

:::BlockQuote
\{
&#x20; "ownershipInsight": \{
&#x20;   "parentEntity": "1749164367937x165083117408993500",
&#x20;   "applicantId": "null",
&#x20;   "uboType": "Individual",
&#x20;   "name": "ANNETTE JOY KRUGER",
&#x20;   "detectedPosition": \["Sole Trader"],
&#x20;   "inputtedPosition": "null",
&#x20;   "address": "",
&#x20;   "registrationNumber": "null",
&#x20;   "shares": \[],
&#x20;   "shareClass": \[]
&#x20; }
}
:::

Each UBO returned here must be submitted individually for verification in the next step.
::::

::::WorkflowBlockItem
### &#x20;Create and Verify Individual(s)

Submit each UBO for identity verification.

**Endpoint:** POST /kyb/v1/CreateVerifyInd

**Request Body:**

:::BlockQuote
\{
&#x20; "email": "example\@monoova.com",
&#x20; "phone": "0400000000",
&#x20; "firstName": "ANNETTE",
&#x20; "middleName": "JOY",
&#x20; "lastName": "KRUGER",
&#x20; "dob": "1985-10-27",
&#x20; "idNumber": "1234567A",
&#x20; "sourceCountry": "AUS",
&#x20; "street": "123 EXAMPLE LANE",
&#x20; "city": "BRISBANE",
&#x20; "stateTerritory": "QUEENSLAND",
&#x20; "postCode": "4610",
&#x20; "country": "AUS"
}
:::

Poll POST /kyb/v1/IndStatus every 2–3 minutes using the applicantId.

Once all individuals are verified, the applicantId is eligible to provision a ledger and enable payments.
::::
:::::

***

## Step 2: Create a Monoova Ledger - [Full Docs](https://api-docs.monoova.com/payments#tag/Ledger-Account/operation/LedgerCreate)

Use your verified applicantId to provision a ledger account.

This API uses basic auth using your sandbox API key as username

**Endpoint:** POST https\://api.m-pay.com.au/ledger/v1/create

**Request Body:**

:::BlockQuote
\{
&#x20; "ledgerUniqueReference": "1749164367937x165083117408993500",
&#x20; "abn": "38210198813",
&#x20; "name": "BOB SMITH",
&#x20; "description": "ABCD Corp Pay",
&#x20; "automatcherDetails": \{
&#x20;   "bankAccountName": "Business Account"
&#x20; }
}
:::

Store the following values for future steps:

- ledgerAccountNumber
- automatcherDetails.bsb
- automatcherDetails.bankAccountNumber

These are used in all Transaction requests as either the payer (payout) or payee (inbound).

***

## Step 3: Register PayID - [Full Docs](https://api-docs.monoova.com/payments#tag/PayID/operation/ReceivablesRegisterPayID)

Enable PayID on the ledger to receive instant payments.

**Endpoint:** POST https\://api.m-pay.com.au/receivables/v1/payid/registerpayid

**Request Body:**

:::BlockQuote
\{
&#x20; "bankAccountNumber": "714038466",
&#x20; "bsb": "802-985",
&#x20; "payIdName": "John Smith",
&#x20; "payId": ""
}
:::

Leave payId blank to auto-generate one like abc123\@monoova.me. You can provide a custom PayID like @abccorp.com after Monoova enables it.

Store the PayID for displaying to customers.

***

## Step 4: Generate a Bearer Token (PayTo) - [Full Docs](https://api-docs.monoova.com/payTo#tag/Subscriptions/operation/SubscriptionsReport)

Generate a 24-hour bearer token for use with the PayTo API.

This API uses basic auth with your sandbox mAccount as username and sandbox APIKey as password.

**Endpoint:** POST https\://sand-api.monoova.com/au/security/oauth-v1/Token

**Authentication:**

- **Username:** Your mAccount number from portal
- **Password:** Your API key from portal

Returns a Bearer token for use with PayTo endpoints.

***

## Step 5: Create a PayTo Agreement - [Full Docs](https://api-docs.monoova.com/payTo#tag/Manage-Payment-Agreements/operation/post-paymentagreement)

**Endpoint:** POST https\://sand-api.monoova.com/au/payto/pam-v1/PaymentAgreement

**Request Body:**

:::BlockQuote
\{
&#x20; "paymentAgreementUID": "BobsBuilders1",
&#x20; "payeeDetails": \{
&#x20;   "payeeLinkedBsb": "802-985",
&#x20;   "payeeLinkedAccount": "917567642"
&#x20; },
&#x20; "payerDetails": \{
&#x20;   "payerType": "ORGN",
&#x20;   "linkedBsb": "802950",
&#x20;   "linkedAccount": "22090100",
&#x20;   "payer": "Bobs Builders",
&#x20;   "ultimatePayer": "ABCCORPCo",
&#x20;   "payerPartyReference": "Bill payments"
&#x20; },
&#x20; "paymentTerms": \{
&#x20;   "numberOfTransactionsPermitted": "50",
&#x20;   "frequency": "DAIL",
&#x20;   "agreementType": "VARI",
&#x20;   "maximumAmount": "1000"
&#x20; },
&#x20; "paymentDetails": \{
&#x20;   "automaticRenewal": true,
&#x20;   "purpose": "OTHR",
&#x20;   "startDate": "2025-06-06",
&#x20;   "description": "Bill payment request",
&#x20;   "shortDescription": "Pay your Bills"
&#x20; }
}
:::

**Example Response:**

:::BlockQuote
\{
&#x20; "paymentAgreementUID": "BOBSBUILDERS1",
&#x20; "paymentAgreementStatus": "Created",
&#x20; "paymentAgreementStatusDescription": "Pending Payer Approval"
}
:::

In sandbox:

- Wait \~30 minutes for the agreement to auto-approve
- Or share UID with Monoova on Slack to approve manually

***

## Step 6: Check Agreement Status - [Full Docs](https://api-docs.monoova.com/payTo#tag/Reporting/operation/get-paymentagreement-id)

**Endpoint:** GET https\://sand-api.monoova.com/au/payto/pam-v1/paymentAgreement/&#x7B;paymentAgreementUID}

**Example Response:**

:::BlockQuote
\{
&#x20; "pendingActions": \[
&#x20;   \{
&#x20;     "status": "PendingApproval"
&#x20;   }
&#x20; ]
}
:::

**Status Values:**

- PendingApproval: Waiting for payer approval
- Approved: Agreement active and ready
- Rejected: Agreement was declined
- Expired: Approval expired

***

## You’re Live

Your business is now fully onboarded with Monoova:

- KYB and UBOs verified
- Ledger provisioned
- PayID registered
- PayTo agreement created

You’re now ready to send and receive money using Monoova’s infrastructure.
