/api/payments/hostedΑπαιτείται Idempotency-KeyΔημιουργία πληρωμής
Επιστρέφει 201 με τη νέα πληρωμή. Η εκ νέου αποστολή του ίδιου αιτήματος με το ίδιο Idempotency-Key επιστρέφει 200 με την ίδια πληρωμή.
Σώμα αιτήματος
| Πεδίο | Τύπος | Υποχρεωτικό | Περιγραφή | Παράδειγμα |
|---|---|---|---|---|
merchant_order_id | string | Υποχρεωτικό | Ο κωδικός της παραγγελίας σας: 1–64 χαρακτήρες από το σύνολο A-Z a-z 0-9 . _ -. Κάθε κωδικός μπορεί να χρησιμοποιηθεί για μία πληρωμή ανά περιβάλλον, ακόμη και αν η πληρωμή αυτή απέτυχε ή έληξε. Η μοναδικότητα ελέγχεται χωρίς διάκριση πεζών-κεφαλαίων: τα ORDER-1 και order-1 θεωρούνται ο ίδιος κωδικός. | ORDER-2026-001 |
amount | string | Υποχρεωτικό | Θετικό ποσό με δύο δεκαδικά ψηφία και χωρίς αρχικά μηδενικά, για παράδειγμα "100.00". Πρέπει να είναι εντός των ορίων του λογαριασμού σας. | "100.00" |
currency | string | Προαιρετικό | Αν παραλειφθεί, ισχύει το κύριο νόμισμα του συστήματος.USDEURAEDTRY | USD |
webhook_url | string · uri | Υποχρεωτικό | Τελικό σημείο που λαμβάνει τα webhooks αυτής της πληρωμής. Δημόσιο HTTPS στη θύρα 443, έως 500 χαρακτήρες, χωρίς στοιχεία χρήστη ή fragment. Ιδιωτικές και τοπικές διευθύνσεις δεν γίνονται δεκτές, ούτε στο sandbox· το όνομα κεντρικού υπολογιστή πρέπει να επιλύεται σε δημόσια διεύθυνση IP τη στιγμή του αιτήματος, αλλιώς 422 9000008. | https://merchant.example/webhooks/payments |
success_url | string · uri | Υποχρεωτικό | Προορισμός ανακατεύθυνσης του προγράμματος περιήγησης μετά από επιτυχή πληρωμή. HTTPS, έως 2048 χαρακτήρες, χωρίς στοιχεία χρήστη (userinfo) ή αναγνωριστικό τμήματος (fragment). Το sandbox δέχεται επίσης http://localhost, 127.0.0.1 και [::1]. | https://merchant.example/payment/success |
fail_url | string · uri | Υποχρεωτικό | Προορισμός ανακατεύθυνσης του προγράμματος περιήγησης όταν η πληρωμή αποτυγχάνει, λήγει ή ακυρώνεται. Ισχύουν οι ίδιοι κανόνες με το success_url. | https://merchant.example/payment/failure |
customer | object | Υποχρεωτικό | Τα στοιχεία επικοινωνίας του πληρωτή· χρησιμοποιούνται για το αποτέλεσμα της πληρωμής, την απόδειξη και τα βήματα επαλήθευσης της τράπεζας. Γίνονται δεκτά μόνο τα email και phone· κάθε άλλο πεδίο μέσα στο customer απορρίπτεται με 422 1000001. | { … } |
customer.email | string | Υποχρεωτικό | Η πραγματική διεύθυνση e-mail του πληρωτή: RFC 5322, έως 254 χαρακτήρες, με τομέα που περιέχει τελεία. Αποθηκεύεται με πεζά γράμματα. | [email protected] |
customer.phone | string | Υποχρεωτικό | Ο πραγματικός αριθμός τηλεφώνου του πληρωτή σε διεθνή μορφή (+ κωδικός χώρας, E.164), για παράδειγμα +37061234567. Κανόνας για την Τουρκία: +90 και ο 10ψήφιος εθνικός αριθμός (5xx κινητό, 2xx, 3xx, 4xx σταθερό, 8xx ειδικοί αριθμοί). Αριθμός που στέλνεται χωρίς κωδικό χώρας αντιμετωπίζεται ως τουρκικός (+90). | +37061234567 |
Τα τρία αυτά URL ισχύουν μόνο για τη συγκεκριμένη πληρωμή και δεν λαμβάνονται από τις ρυθμίσεις του πάνελ σας.
Η σελίδα πληρωμής δεν ζητά ξανά από τον πληρωτή τη διεύθυνση e-mail και τον αριθμό τηλεφώνου. Για λόγους απορρήτου, το customer δεν επιστρέφεται στο αντικείμενο πληρωμής ούτε στα webhooks.
| Πεδίο | Αιτία | Μήνυμα στο errors |
|---|---|---|
customer.email | Μη έγκυρη μορφή ή περισσότεροι από 254 χαρακτήρες. | customer.email must be a valid e-mail address (max 254 characters). |
customer.email | Διεύθυνση-δείγμα, παράδειγμα ή προσωρινή διεύθυνση. | customer.email must be the payer's real address; placeholder, example or disposable addresses (example.com, test@…, mailinator…) are not accepted. |
customer.phone | Μη έγκυρος αριθμός σε διεθνή μορφή. | customer.phone must be a valid phone number in international format (e.g. +37061234567). |
customer.phone | Μοτίβο επαναλαμβανόμενων ή διαδοχικών ψηφίων. | customer.phone must be the payer's real number; repeated or sequential digit patterns (5555555555, 1234567890) are not accepted. |
customer.phone | Τουρκικός αριθμός που δεν έχει τη μορφή +90 και 10 ψηφία που αρχίζουν από 2, 3, 4, 5 ή 8. | customer.phone for Türkiye must be +90 followed by a 10-digit number starting with 2, 3, 4, 5 or 8 (e.g. +905321234567). |
HTTP 422 · 1000001
{
"type": "https://payniko.com/problems/1000001",
"title": "Validation failed",
"status": 422,
"detail": "The submitted fields are not valid.",
"code": "1000001",
"correlation_id": "4c7a1e9d-2b3f-4d85-9a6e-0f1b2c3d4e5f",
"errors": {
"customer.email": [
"customer.email must be the payer's real address; placeholder, example or disposable addresses (example.com, test@…, mailinator…) are not accepted."
],
"customer.phone": [
"customer.phone must be the payer's real number; repeated or sequential digit patterns (5555555555, 1234567890) are not accepted."
]
}
}Αν ένα αίτημα απορριφθεί λόγω του customer, δείξτε στον πληρωτή την αιτία με σαφήνεια (για παράδειγμα: εισαγάγετε τη δική σας διεύθυνση e-mail ή τον αριθμό τηλεφώνου σας) και αφήστε τον να διορθώσει το πεδίο πριν δημιουργήσετε ξανά την πληρωμή. Τα μηνύματα στο errors είναι στα αγγλικά και προορίζονται για τα αρχεία καταγραφής και την υποστήριξή σας.
Οι σελίδες συνδέσμων πληρωμής της Payniko εφαρμόζουν τους ίδιους κανόνες στη διεύθυνση e-mail και στον αριθμό τηλεφώνου που εισάγει εκεί ο πληρωτής και του δείχνουν την αιτία της απόρριψης.
Σώμα αιτήματος · Παράδειγμα
{
"merchant_order_id": "ORDER-2026-001",
"amount": "100.00",
"currency": "USD",
"webhook_url": "https://merchant.example/webhooks/payments",
"success_url": "https://merchant.example/payment/success",
"fail_url": "https://merchant.example/payment/failure",
"customer": {
"email": "[email protected]",
"phone": "+37061234567"
}
}KEY="$(openssl rand -hex 16)" # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/payments/hosted' '{
"merchant_order_id": "ORDER-2026-001",
"amount": "100.00",
"currency": "USD",
"webhook_url": "https://merchant.example/webhooks/payments",
"success_url": "https://merchant.example/payment/success",
"fail_url": "https://merchant.example/payment/failure",
"customer": {
"email": "[email protected]",
"phone": "+37061234567"
}
}' "$KEY"import {api, randomUUID} from './payniko.mjs';
const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const payment = await api('POST', '/api/payments/hosted', {
"merchant_order_id": "ORDER-2026-001",
"amount": "100.00",
"currency": "USD",
"webhook_url": "https://merchant.example/webhooks/payments",
"success_url": "https://merchant.example/payment/success",
"fail_url": "https://merchant.example/payment/failure",
"customer": {
"email": "[email protected]",
"phone": "+37061234567"
}
}, key);
console.log(payment);<?php
require __DIR__ . '/payniko.php';
$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$payment = payniko_api('POST', '/api/payments/hosted', [
"merchant_order_id" => 'ORDER-2026-001',
"amount" => '100.00',
"currency" => 'USD',
"webhook_url" => 'https://merchant.example/webhooks/payments',
"success_url" => 'https://merchant.example/payment/success',
"fail_url" => 'https://merchant.example/payment/failure',
"customer" => [
"email" => '[email protected]',
"phone" => '+37061234567',
],
], $key);
print_r($payment);from payniko import api
import uuid
key = str(uuid.uuid4()) # store with the order; reuse it after network errors
payment = api("POST", "/api/payments/hosted", {
"merchant_order_id": "ORDER-2026-001",
"amount": "100.00",
"currency": "USD",
"webhook_url": "https://merchant.example/webhooks/payments",
"success_url": "https://merchant.example/payment/success",
"fail_url": "https://merchant.example/payment/failure",
"customer": {
"email": "[email protected]",
"phone": "+37061234567"
}
}, key)
print(payment)Απάντηση · 201
Επιστρέφει { "data": Payment } με status: requires_action και next_action.url.
Απάντηση · Παράδειγμα
{
"data": {
"payment_id": "LUVEI-PAYN-123456",
"merchant_order_id": "ORDER-2026-001",
"flow": "hosted",
"status": "requires_action",
"amount": "100.00",
"currency": "USD",
"environment": "sandbox",
"next_action": {
"type": "redirect",
"url": "https://payniko.com/l/example-checkout",
"expires_at": "2026-11-02T12:00:00.000Z"
},
"card": null,
"failure": null,
"created_at": "2026-11-01T12:00:00.000Z",
"expires_at": "2026-11-02T12:00:00.000Z",
"completed_at": null
}
}Λοιπές απαντήσεις
200: στάλθηκαν ξανά το ίδιο κλειδί και το ίδιο σώμα. Επιστρέφεται η αρχική πληρωμή και δεν δημιουργείται νέα πληρωμή.4099000010: αυτό το κλειδί έχει ήδη χρησιμοποιηθεί με διαφορετικό σώμα.4099000039: το πρώτο αίτημα με αυτό το κλειδί βρίσκεται ακόμη υπό επεξεργασία. Στείλτε ξανά το ίδιο αίτημα μετά από σύντομη αναμονή.4099000007: υπάρχει ήδη πληρωμή για αυτό τοmerchant_order_id.4229000005: το ποσό βρίσκεται εκτός των ορίων του λογαριασμού σας· τοlimitsπεριέχει το επιτρεπόμενο εύρος.4221000001μεcustomer,customer.emailήcustomer.phoneστοerrors: τα στοιχεία επικοινωνίας λείπουν ή δεν είναι έγκυρα.4221000001,1000020,1000021,9000008,9000038: ένα πεδίο δεν είναι έγκυρο· λεπτομέρειες περιέχονται σταerrorsκαιintegration.violations.
HTTP 422 · 9000005
{
"type": "https://payniko.com/problems/9000005",
"title": "Invalid amount",
"status": 422,
"detail": "The amount is outside the account limits.",
"code": "9000005",
"correlation_id": "6d1f0c2e-8a4b-4c7d-9e21-3f5a7b9c1d20",
"limits": {
"currency_code": "USD",
"min_amount": "25.00",
"max_amount": null
}
}Τα όρια ελέγχονται στο κύριο νόμισμα του συστήματος (limits.currency_code), αφού γίνει η μετατροπή του ποσού σας. Το max_amount: null σημαίνει ότι δεν υπάρχει ανώτατο όριο. Οι τιμές ορίων σε αυτό το παράδειγμα είναι ενδεικτικές.