Support
How to reach PayDirect support, what to gather before you write, and how to escalate a payment that is stuck.
Contact us
| support@softmastersgroup.com | |
| Phone | (+233) 257 089 520 |
| Address | 3 Santana Street, Abelemkpe - Accra, Ghana |
Email is best for anything involving a transaction: it keeps the details below together in one
thread. Put your Integrator id and the environment (TEST or LIVE) in the subject line.
Before you write
Most payment questions resolve to a single transaction, and nearly all of them are answered faster if the first message already contains this:
| Gather | Where from |
|---|---|
The transaction id |
The response that created it, or GET /transactions/list over the window |
The Idempotency-Key |
Your own records - essential when no id came back |
| Request timestamp, with timezone | Your logs |
| HTTP status code and the full response envelope | Your logs |
| Environment | TEST or LIVE |
| The journey snapshot | GET /transactions/{id}/journey-snapshot |
journey-snapshot is the single most useful attachment. It shows each stage of the transaction
with timestamps, and it usually removes a round trip of questions entirely.
Never send your raw API key, secret key or webhook signing secret - not truncated, not in a screenshot. Nobody at PayDirect needs them to diagnose anything, and a credential in a ticket is a credential that has to be rotated.
Check these first
A large share of tickets resolve to one of these:
| Symptom | Likely cause |
|---|---|
401 Request expired on every request |
Timestamp in seconds instead of milliseconds, or server clock drift |
401 Signature verification failed |
Signing the public key rather than the raw key, or two different timestamps in the header and the message - see Authentication |
| Webhooks never arrive | No webhookUrl set, or it is not HTTPS, or your endpoint does not return 2xx |
| Signature verification fails on every webhook | Verifying re-serialised JSON instead of the raw body - see Verifying signatures |
| Webhooks arrive twice | Working as designed. Dedupe on eventId. |
| Payment "succeeded" but nothing shipped | Reading response.ok instead of data.status - see Errors |
422 on a retry |
Same Idempotency-Key with a changed body |
Transaction stuck PENDING |
Call the flow's reconcile endpoint before escalating |
403 on an endpoint that used to work |
A scope was narrowed, or an IP allowlist entry was added - see IP allowlisting |
403 right after adding an allowlist entry |
Your server's public egress address is not the one you listed, or it calls over IPv6 |
403 ... pending verification and approval |
A production key over GHS 1.00 while unverified - see Onboarding |
403 SANDBOX keys are limited to GHS 1.00 |
Working as designed - use a test key for larger test amounts |
403 ... type does not match its environment |
Contact us - the key needs correcting on our side |
403 ... cannot manage Integrator configuration |
A narrowed key used for a configuration change - use the dashboard |
| Cannot sign requests after issuing or revoking a key | Not all three values (apiKey, secretKey, publicKey) were saved - see If you lose a credential |
Escalating a stuck payment
- Reconcile it -
POST /transactions/{flow}/{id}/reconcile. This resolves most cases. - If it stays
PENDINGpast the rail's normal settlement time, pull the journey snapshot. - Send us the id, the timestamp, the environment and the snapshot.
Do not resubmit a payment that is still PENDING. It may yet succeed, and a resubmission with
a new idempotency key is a second payment, not a retry.
Where else to look
- API reference - every endpoint, every field, with "Try it out". Login required; ask us if you do not have one.
- OpenAPI document - generate a client, or diff it between releases.
- FAQ - short answers to the questions we hear most.
- Changelog - read before each deploy.
- Reconciliation - the playbook for books that disagree.
Asking for a change
Several things in these docs are configuration, not code, and we can change them on request:
- A higher per-minute rate limit.
chargeBearer: RECIPIENTinstead of the defaultSENDER.- A new or changed settlement account.
- Scope changes on an existing key.
- A new webhook signing secret.
- Starting or checking verification.
Tell us what you are trying to achieve rather than only which setting you want flipped - there is often a safer arrangement that gets you the same outcome.
Reporting a security issue
If you believe you have found a vulnerability, or a credential of yours has leaked, email
support@softmastersgroup.com with Security at the start
of the subject line, or call the number above. Do this straight away, rather than in a normal
ticket. If a key is involved, revoke it first with PATCH /apikey/revoke-my-key/{id} - you do not
need to wait for us to do that.
When reporting a vulnerability, describe what you found and how to reproduce it, but do not test it against other customers' data or try to move real money. See Security best practices.