Payment Status

Payment Status

Pay-In Status

Status Value Description
Awaiting payment Pending The Payment Request has been created; waiting for the customer to transfer funds
Paid successfully Paid The bank has confirmed the funds were received
Rejected Rejected The transaction was rejected (e.g. the amount didn't match)

Pay-Out Status

Status Value Description
Pending Pending The request has been received; awaiting processing
Transfer successful Paid Funds were successfully transferred to the destination account
Rejected Rejected The transfer failed (e.g. an invalid destination account)

Important: Always Check the Status in the Response Body

An HTTP status code of 200 only means the server accepted the request — you must always check the status field in the JSON response body as well.

{
  "status": "OK",       ← check here
  "description": "Success",
  "data": {
    "Status": "Pending"  ← and check the payment status here
  }
}

Example check in Python:

response = requests.post(url, auth=("api", API_KEY), json=payload)
result = response.json()

if result.get("status") != "OK":
    # API error — see description for details
    print(f"Error: {result.get('description')}")
else:
    payment_status = result["data"]["Status"]
    payment_id = result["data"]["Id"]
    print(f"Payment {payment_id} status: {payment_status}")

Real-Time Status

In addition to polling for status, the system supports receiving status updates in real time via WebSocket, using the SessionId and WebsocketPath returned in the Pay-In response.

const connection = new signalR.HubConnectionBuilder()
  .withUrl(`https://api.please-payment.com/realtime/payment-tx`, {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets,
    accessTokenFactory: () => API_KEY,
  })
  .build()

await connection.start()
await connection.invoke('JoinPayment', sessionId)

connection.on('payment.completed', (data) => {
  console.log('Payment completed:', data)
})