Overview

Every user has two profile views:
ViewEndpointWho can see it
Private profileGET /profile-getAuthenticated user only
Public profileGET /profile-public?user_id=<id>Anyone — shown to counterparties
The private profile includes sensitive fields (phone number, address, marital status, next of kin). The public profile strips those and adds trust signals — escrow count, review count, average rating, and recent reviews.

Fetching your profile

GET /profile-get
Authorization: Bearer <token>
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "first_name": "Ade",
  "last_name": "Johnson",
  "username": "adejohnson",
  "phone_number": "+2348012345678",
  "address": "12 Lagos Street, Ikeja",
  "marital_status": "single",
  "bio": "Verified trader on Ketapay since 2025.",
  "avatar": {
    "avatar_url": "https://...",
    "storage_path": "avatars/a1b2c3d4.jpg",
    "status": "approved"
  },
  "next_of_kin": null,
  "created_at": "2025-01-01T00:00:00Z",
  "updated_at": "2026-04-01T00:00:00Z"
}

Updating your profile

All fields are optional — only send what you want to change:
PATCH /profile-update
Authorization: Bearer <token>

{
  "first_name": "Adewale",
  "bio": "Verified trader on Ketapay since 2025.",
  "username": "adewale_j"
}
FieldConstraints
first_name / last_name1–100 characters
username3–30 characters, letters/numbers/underscores only
bioMax 300 characters
addressMax 500 characters
marital_statussingle, married, divorced, or widowed
avatar_urlValid URL

Public profile

The public profile is what counterparties see when they’re deciding whether to accept an escrow invite:
GET /profile-public?user_id=<uuid>
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "first_name": "Ade",
  "last_name": "Johnson",
  "username": "adejohnson",
  "bio": "Verified trader on Ketapay since 2025.",
  "avatar": { "avatar_url": "https://..." },
  "stats": {
    "escrow_count": 14,
    "is_verified": true,
    "review_count": 11,
    "avg_rating": 4.8
  },
  "reviews": [ ...most recent reviews ],
  "created_at": "2025-01-01T00:00:00Z"
}
Sensitive fields (phone, address, marital status, next of kin) are never included in the public response.

Next of kin

Required for Tier 4+ KYC upgrades. Register or update next of kin details:
PATCH /profile-nok-update
Authorization: Bearer <token>

{
  "first_name": "Funke",
  "last_name": "Johnson",
  "phone": "+2348098765432",
  "address": "12 Lagos Street, Ikeja",
  "relationship": "spouse"
}
All five fields are required. If next of kin already exists, this call replaces it entirely.