Customer Enrollment & KYC
Update Customer
Correct a profile that was enrolled with the wrong details
PATCH /v1/customer/:uuid
The usual fix when a valid BVN/NIN keeps getting rejected because the name or date of birth on the profile doesn't match the ID.
PUT is accepted as an alias.
Send only the fields you want to change; anything you omit is left untouched.
Use this endpoint to
- Fix a typo'd name or date of birth before resubmitting KYC
- Update a customer's contact details or address
- Unstick a KYC rejection caused by a profile/ID mismatch, without re-enrolling the customer
Request
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
uuid |
string | Yes | Customer id from Enroll Customer |
Body parameters
Send only the fields you want to change.
| Field | Editable | Notes |
|---|---|---|
customerid, email, phone, image, address |
Always | Same validation as Enroll Customer; customerid and email/phone stay unique per business. At least one of email/phone must remain set |
firstname, lastname, dob, nationality |
Until verified | Locked once the customer has an approved KYC, a provisioned account, or a live card — returns IDENTITY_LOCKED (409) |
Code Samples
const response = await fetch(
"https://sandbox.hitchpay.ng/v1/customer/CUSTOMER_UUID",
{
method: "PATCH",
headers: {
Authorization: "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
firstname: "Jonathan",
dob: "12-05-1990",
phone: "08012345678"
})
}
);
const data = await response.json();
console.log(data);<?php
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://sandbox.hitchpay.ng/v1/customer/CUSTOMER_UUID",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
"firstname" => "Jonathan",
"dob" => "12-05-1990",
"phone" => "08012345678"
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Content-Type: application/json"
]
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;import requests
url = "https://sandbox.hitchpay.ng/v1/customer/CUSTOMER_UUID"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
payload = {
"firstname": "Jonathan",
"dob": "12-05-1990",
"phone": "08012345678"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.json())Response
Returns the full updated customer — same shape as Get Customer.
{
"status": "success",
"message": "Customer updated successfully.",
"data": {
"uuid": "…",
"customerid": "your-customer-ref-001",
"firstname": "Jonathan",
"lastname": "Doe",
"email": "[email protected]",
"phone": "08012345678",
"address": {
"house_no": "12",
"street": "Bode Thomas",
"city": "Surulere",
"state": "Lagos",
"postal_code": "101241",
"country": "NG"
},
"kyc_status": "pending_kyc",
"created_at": "1782947655"
}
}Behavior notes
- Correcting an identity field (
firstname,lastname,dob,nationality) resetskyc_statustopending_kycso you can resubmit KYC right away. If a verification is still in flight, it's left running and will be matched against the corrected profile. - Rejected KYC submissions don't block resubmission — after the fix, just call Submit KYC again with the same
type. - Fires the
customer.updatedwebhook.
Errors
| Code | HTTP | Meaning |
|---|---|---|
INVALID_REQUEST |
400 | Invalid field values, e.g. malformed dob |
UNAUTHORIZED |
401 | Business not found or inactive |
NOT_FOUND |
404 | Customer not found |
DUPLICATE_ACCOUNT |
400 | The new customerid, email, or phone is already used by another customer |
IDENTITY_LOCKED |
409 | Attempted to change firstname, lastname, dob, or nationality after KYC approval, account provisioning, or card issuance |
Questions? Email [email protected]. Also on GitBook.