Partner APIs: Merchant Onboarding
Create Onboarding
Creates a new merchant onboarding record. This is always the first API call in the
onboarding sequence. The onboardingId returned is required for all subsequent calls.
POST
/
gcc
/
v2
/
partner
/
merchant
/
onboard
Create Onboarding
curl --request POST \
--url https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard \
--header 'Content-Type: application/json' \
--header 'x-gl-auth: <api-key>' \
--header 'x-gl-digest: <api-key>' \
--data '
{
"externalOnboardingId": "partner-merchant-001",
"panNumber": "ABCDE1234F"
}
'import requests
url = "https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard"
payload = {
"externalOnboardingId": "partner-merchant-001",
"panNumber": "ABCDE1234F"
}
headers = {
"x-gl-auth": "<api-key>",
"x-gl-digest": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.post("https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard")
.header("x-gl-auth", "<api-key>")
.header("x-gl-digest", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalOnboardingId\": \"partner-merchant-001\",\n \"panNumber\": \"ABCDE1234F\"\n}")
.asString();const url = 'https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard';
const options = {
method: 'POST',
headers: {
'x-gl-auth': '<api-key>',
'x-gl-digest': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({externalOnboardingId: 'partner-merchant-001', panNumber: 'ABCDE1234F'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "",
"data": {
"merchantInfo": {
"onboardingId": "pg_onboard_abc123",
"partnerOnboardingId": "partner-merchant-001",
"onboardingStatus": "INITIATED"
}
}
}{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "VALIDATION_ERROR",
"data": {},
"errors": null,
"errorDetails": [
{
"fieldName": "paymentData.totalAmount",
"message": "This field is required"
}
]
}{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "UNAUTHORIZED",
"data": {},
"errors": null,
"errorDetails": [
{
"fieldName": "authorization",
"message": "Invalid x-gl-token-external"
}
]
}When to Use
Always the first API call in the onboarding sequence. TheonboardingId returned in the response is required as a path parameter for every subsequent call.
A merchant is uniquely identified by their PAN. Each PAN can have only one active onboarding record in the PayGlocal system.
Valid PAN types: P (Individual), C (Company), T (Trust), F (Firm).
Error Scenarios
| Scenario | HTTP Code |
|---|---|
| Required fields missing or empty | 400 |
| Invalid field format | 400 |
| PAN type is not one of P, C, T, F | 400 |
| PAN already exists in the PayGlocal system | 400 |
| PAN does not exist (invalid PAN) | 400 |
Authorizations
Static API Key generated from the PayGlocal Partner Dashboard.
Per-request HmacSHA256 signature, Base64-encoded, using your API Secret as the HMAC key.
- For GET requests: sign the request URI path (e.g.
/gcc/v2/partner/merchant/onboard/business-category), including query string if present. - For POST/PUT requests: sign the exact raw request body.
Body
application/json
Create Onboarding
curl --request POST \
--url https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard \
--header 'Content-Type: application/json' \
--header 'x-gl-auth: <api-key>' \
--header 'x-gl-digest: <api-key>' \
--data '
{
"externalOnboardingId": "partner-merchant-001",
"panNumber": "ABCDE1234F"
}
'import requests
url = "https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard"
payload = {
"externalOnboardingId": "partner-merchant-001",
"panNumber": "ABCDE1234F"
}
headers = {
"x-gl-auth": "<api-key>",
"x-gl-digest": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.post("https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard")
.header("x-gl-auth", "<api-key>")
.header("x-gl-digest", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalOnboardingId\": \"partner-merchant-001\",\n \"panNumber\": \"ABCDE1234F\"\n}")
.asString();const url = 'https://api.onboard.payglocal.in/gcc/v2/partner/merchant/onboard';
const options = {
method: 'POST',
headers: {
'x-gl-auth': '<api-key>',
'x-gl-digest': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({externalOnboardingId: 'partner-merchant-001', panNumber: 'ABCDE1234F'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "",
"data": {
"merchantInfo": {
"onboardingId": "pg_onboard_abc123",
"partnerOnboardingId": "partner-merchant-001",
"onboardingStatus": "INITIATED"
}
}
}{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "VALIDATION_ERROR",
"data": {},
"errors": null,
"errorDetails": [
{
"fieldName": "paymentData.totalAmount",
"message": "This field is required"
}
]
}{
"gid": "gl_9c2645ed09edb22e",
"timestamp": "10/01/2026 15:00:00",
"reasonCode": "UNAUTHORIZED",
"data": {},
"errors": null,
"errorDetails": [
{
"fieldName": "authorization",
"message": "Invalid x-gl-token-external"
}
]
}
