Hello Clever – Customer Technical Support Engineer Take-Home
Assessment
Candidate Name: Le Tan Loc
Submission Date: [Insert Date]
1. PayID Transaction Shows as Completed but Not Reflected in
Merchant System
Investigation Steps:
1. Confirm the PayID, transaction timestamp, and customer details.
2. Check payment gateway logs to verify incoming transaction status.
3. Review webhook delivery logs to confirm if the notification was
received.
4. Query internal database or call GET /transactions to locate the
transaction.
5. Inspect any asynchronous queues or retries if applicable.
Tools/Logs to Use:
Payment gateway logs
Webhook delivery logs
Admin backend tools
API testing tools (Postman)
Message queues if implemented
Customer Email Response:
Dear [Customer Name],
Thank you for contacting us. We understand your concern regarding the
PayID transaction marked as completed on your banking app but not yet
reflected in our system.
We are currently investigating and can confirm that while the
transaction appears successful on your bank's end, it has not yet
reached our system due to potential delays in settlement or webhook
delivery.
Our team is closely monitoring this and will notify you as soon as the
transaction is reconciled in our system.
Thank you for your patience.
Best regards,
Loc – Customer Support Team
2. 422 Unprocessable Entity Error During Contact Creation
Possible Causes:
Invalid data format (e.g., malformed email or phone)
Missing required fields
Duplicate entries (email or phone already exists)
Incorrect Payload Example:
{
"email": "user@@domain.com",
"phone": "12345"
}
Corrected Payload Example:
{
"email": "
[email protected]",
"phone": "+84123456789",
"name": "Nguyen Van A"
}
Merchant Communication:
Hi [Merchant Name],
We reviewed the issue and found that the 422 error is caused by
invalid field formats, such as the email or phone number.
Please ensure your request payload adheres to the expected format.
Here's a corrected sample you can follow:
[Insert corrected JSON payload here]
Let us know if you continue to face issues.
Best regards,
Loc
3. Inconsistent Subscription Billing
Troubleshooting Approach:
Review logs for duplicate or missing idempotency keys
Verify cron job timing or retry mechanisms
Analyze payment gateway responses (e.g., declined, timeout)
Match subscription DB records with payment history
Internal Developer Communication:
Share payloads, timestamps, and frequency of duplicates
Validate system triggers vs. retry logic
Propose adding more detailed logs if insufficient
User Communication:
Hi [User],
We noticed some inconsistencies in your subscription billing. We're
investigating whether these issues are related to retry logic or
timing overlaps during payment processing.
Our engineering team is reviewing the gateway logs and transaction IDs
to identify the root cause. Meanwhile, please avoid retrying charges
if the status is still pending.
We'll keep you updated within 24 hours.
Best regards,
Loc
Temporary Workaround:
Use unique idempotency keys for all payment requests
Avoid client-side retries without explicit failure response
4. API Authentication
Authentication Scheme: Bearer Token (Token-based Authentication)
Sample curl Command:
curl -X GET https://api.helloclever.co/v1/contacts \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"
5. API Endpoint Structure
Base URLs:
Production: https://api.helloclever.co
Sandbox: https://sandbox-api.helloclever.co
Switching Environments in Postman:
Use environments and define {{base_url}} variable
Replace request URLs with {{base_url}}/v1/contacts
Switch environment using Postman’s environment dropdown
6. API Error Handling
Status Code Example Scenario
200 Payment/contact/refund
processed successfully
400 Missing required field in
request payload
401 Missing or invalid
Authorization token
422 Payload is well-formed but
semantically invalid
500 Server error, DB failure, or
internal exception
7. Withdrawable Balance Shows as Zero
Troubleshooting Using API:
GET /api/v2/balances/detail?currency=JPY
Authorization: Bearer YOUR_TOKEN
Possible Causes:
Funds not yet settled
Funds available but not withdrawable due to hold period
Recent withdrawal not yet reconciled
Sample API Response:
{
"currency": "JPY",
"available_balance": 200000,
"withdrawable_balance": 0,
"pending_settlement": 200000
}
Customer-Facing Explanation:
Hi [Merchant],
Thank you for reaching out. We’ve reviewed your JPY balance and
confirmed that while multiple successful payments were received, the
funds are currently in a pending settlement state.
This means they are available but not withdrawable yet due to the
standard settlement delay (T+1 or T+2). Once finalized, the balance
will be updated and available for withdrawal.
We'll notify you when the funds are fully settled.
Best regards,
Loc
8. Simulate Payin Request Completion in Sandbox
API Endpoint:
POST /sandbox/v1/payin/simulate
Request Body:
{
"uuid": "MB3Y26GO",
"status": "COMPLETED",
"amount": 500
}
Curl Command:
curl -X POST https://sandbox-api.helloclever.co/v1/payin/simulate \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"uuid": "MB3Y26GO",
"status": "COMPLETED",
"amount": 500
}'
Important Restriction: Only applicable for transactions in PENDING state.
Error If Not in Pending State:
{
"error": "Transaction status must be PENDING to simulate completion"
}
9. Webhook Notifications Not Received
Possible Reasons:
1. Webhook endpoint down or timeout
2. Incorrect event configuration (e.g., missing payment.authorised)
3. Endpoint failed to return HTTP 200 OK
Token Behavior in Webhooks:
Token appears only if payment was card-based and authorised
Not present in failed or non-card transactions
Sample Payload:
{
"event": "payment.authorised",
"payment_id": "PAY123456789",
"amount": 1000,
"currency": "AUD",
"card_token": "tok_abc123xyz",
"status": "authorised",
"timestamp": "2025-07-02T10:00:00Z"
}
Best Practices:
1. Always respond with 200 OK quickly
2. Log all webhook events and responses
3. Validate signatures (e.g., HMAC) if supported
Retry Behavior: Hello Clever retries failed webhooks with exponential
backoff. Persistent failures may result in webhook deactivation.
10. JavaScript SDK Configuration
SDK Script URLs:
Sandbox: <script
src="https://sandbox-cdn.helloclever.co/sdk.js"></script>
Production: <script
src="https://cdn.helloclever.co/sdk.js"></script>
Importance of Using Correct Script:
Sandbox scripts only simulate payments
Production scripts process real transactions
Consequences of Using Sandbox in Production:
Payments won’t be captured
No webhook triggers
Customer confusion or financial loss
End of Assessment