curl -X PATCH https://api.kwugwo.africa/v1/onye/ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{ "first_name": "Adaeze", "meta": { "source": "shopify", "tier": "vip" } }'
const onye = await fetch(
`https://api.kwugwo.africa/v1/onye/${onyeUid}`,
{
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
first_name: "Adaeze",
meta: { source: "shopify", tier: "vip" },
}),
}
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/onye/{$onyeUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'first_name' => 'Adaeze',
'meta' => ['source' => 'shopify', 'tier' => 'vip'],
]),
]);
$onye = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
onye = requests.patch(
f"https://api.kwugwo.africa/v1/onye/{onye_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
json={"first_name": "Adaeze", "meta": {"source": "shopify", "tier": "vip"}},
).json()
body, _ := json.Marshal(map[string]any{
"first_name": "Adaeze",
"meta": map[string]string{"source": "shopify", "tier": "vip"},
})
url := fmt.Sprintf("https://api.kwugwo.africa/v1/onye/%s", onyeUid)
req, _ := http.NewRequest("PATCH", url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"email": "ada@example.com",
"first_name": "Adaeze",
"last_name": "Okeke",
"nzube_ref": "user_8821",
"billing_address": {
"address": "12 Marina",
"address2": "",
"city": "Lagos",
"state": "Lagos",
"zip": "101001",
"country": "NG"
},
"created_at": "2026-05-15T09:14:22+00:00",
"updated_at": "2026-05-16T11:02:09+00:00",
"meta": { "source": "shopify", "tier": "vip" },
"total_successful_activities": 0,
"total_failed_activities": 0,
"latest_ugwo_activity": null
}
{
"message": "nzube.onye.error.already_exists",
"code": "already_exists",
"params": []
}
{
"code": 404,
"message": "nzube.onye.error.not_found"
}
Customers (Onye)
Update a customer
Change a customer’s details.
PATCH
/
v1
/
onye
/
{uid}
curl -X PATCH https://api.kwugwo.africa/v1/onye/ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{ "first_name": "Adaeze", "meta": { "source": "shopify", "tier": "vip" } }'
const onye = await fetch(
`https://api.kwugwo.africa/v1/onye/${onyeUid}`,
{
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
first_name: "Adaeze",
meta: { source: "shopify", tier: "vip" },
}),
}
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/onye/{$onyeUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'first_name' => 'Adaeze',
'meta' => ['source' => 'shopify', 'tier' => 'vip'],
]),
]);
$onye = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
onye = requests.patch(
f"https://api.kwugwo.africa/v1/onye/{onye_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
json={"first_name": "Adaeze", "meta": {"source": "shopify", "tier": "vip"}},
).json()
body, _ := json.Marshal(map[string]any{
"first_name": "Adaeze",
"meta": map[string]string{"source": "shopify", "tier": "vip"},
})
url := fmt.Sprintf("https://api.kwugwo.africa/v1/onye/%s", onyeUid)
req, _ := http.NewRequest("PATCH", url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"email": "ada@example.com",
"first_name": "Adaeze",
"last_name": "Okeke",
"nzube_ref": "user_8821",
"billing_address": {
"address": "12 Marina",
"address2": "",
"city": "Lagos",
"state": "Lagos",
"zip": "101001",
"country": "NG"
},
"created_at": "2026-05-15T09:14:22+00:00",
"updated_at": "2026-05-16T11:02:09+00:00",
"meta": { "source": "shopify", "tier": "vip" },
"total_successful_activities": 0,
"total_failed_activities": 0,
"latest_ugwo_activity": null
}
{
"message": "nzube.onye.error.already_exists",
"code": "already_exists",
"params": []
}
{
"code": 404,
"message": "nzube.onye.error.not_found"
}
Updates only the fields you send; everything else is left as is.
Path parameters
string
required
Customer ID,
ony.XXXX.YYYY....Body parameters
All optional. The same limits as Create apply.string
New email. Must not belong to another customer on the workspace (
409).string | null
Your reference (returned as
nzube_ref). null clears it.string | null
null clears it.string | null
null clears it.object | null
A complete address (all six fields) replaces the current one;
null
removes it.object
Merged into the existing metadata: keys you send are added or
overwritten, keys you omit are kept. Send a key with
null to delete
it, e.g. { "tier": null }.Response
The updated Customer object.curl -X PATCH https://api.kwugwo.africa/v1/onye/ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{ "first_name": "Adaeze", "meta": { "source": "shopify", "tier": "vip" } }'
const onye = await fetch(
`https://api.kwugwo.africa/v1/onye/${onyeUid}`,
{
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
first_name: "Adaeze",
meta: { source: "shopify", tier: "vip" },
}),
}
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/onye/{$onyeUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'first_name' => 'Adaeze',
'meta' => ['source' => 'shopify', 'tier' => 'vip'],
]),
]);
$onye = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
onye = requests.patch(
f"https://api.kwugwo.africa/v1/onye/{onye_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
json={"first_name": "Adaeze", "meta": {"source": "shopify", "tier": "vip"}},
).json()
body, _ := json.Marshal(map[string]any{
"first_name": "Adaeze",
"meta": map[string]string{"source": "shopify", "tier": "vip"},
})
url := fmt.Sprintf("https://api.kwugwo.africa/v1/onye/%s", onyeUid)
req, _ := http.NewRequest("PATCH", url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "ony.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"email": "ada@example.com",
"first_name": "Adaeze",
"last_name": "Okeke",
"nzube_ref": "user_8821",
"billing_address": {
"address": "12 Marina",
"address2": "",
"city": "Lagos",
"state": "Lagos",
"zip": "101001",
"country": "NG"
},
"created_at": "2026-05-15T09:14:22+00:00",
"updated_at": "2026-05-16T11:02:09+00:00",
"meta": { "source": "shopify", "tier": "vip" },
"total_successful_activities": 0,
"total_failed_activities": 0,
"latest_ugwo_activity": null
}
{
"message": "nzube.onye.error.already_exists",
"code": "already_exists",
"params": []
}
{
"code": 404,
"message": "nzube.onye.error.not_found"
}