Skip to content
HitchPay API Docs

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) resets kyc_status to pending_kyc so 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.updated webhook.

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.