NeoPays
Ana sayfa
API v1 · REST

NeoPays Entegrasyon API

Sitenizin yatırım ve çekim işlemlerini programatik olarak NeoPays’e iletin; işlem durumlarını imzalı webhook ile anında alın. Sunucudan sunucuya, JSON.

Base URL

panel.neopaystr.com

Kimlik

Bearer npk_…

Format

HTTPS · JSON · UTF-8

01

Genel Bakış

NeoPays API, yatırım yapan sitelerin (merchant) yatırım ve çekim işlemlerini programatik olarak NeoPays’e iletmesini, NeoPays’in de işlem durum güncellemelerini webhook ile siteye geri bildirmesini sağlar.

Base URLhttps://panel.neopaystr.com
ProtokolHTTPS + JSON (dekont için multipart/form-data)
Kimlik doğrulamaAuthorization: Bearer <API_KEY>
Karakter setiUTF-8
Sürümv1 (/api/v1)

Akış

Akış
Site  ──POST /api/v1/deposit──►  NeoPays  ──(operator)──►  Webhook ──►  Site
Site  ──POST /api/v1/withdraw─►  NeoPays  ──(operator)──►  Webhook ──►  Site

İşlemler NeoPays’e PENDING (beklemede) olarak düşer; operatör onayladığında/reddettiğinde site’ın kayıtlı webhook adresine imzalı bir bildirim gönderilir.

02

Kimlik Doğrulama

Her istek Authorization başlığında site’ye özel API anahtarını taşımalıdır:

HTTP
Authorization: Bearer npk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • API anahtarı NeoPays panelinden site oluşturulurken üretilir ve yalnızca bir kez gösterilir (npk_ öneki + 64 karakter). Kaybolursa panelden “Yenile” ile yeni anahtar üretilir; eski anahtar anında geçersiz olur.
  • Anahtar hiçbir zaman URL’de veya istemci (tarayıcı) tarafında bulunmamalı; yalnızca sunucudan sunucuya kullanılmalıdır.
Uç noktaKabul edilen anahtar
POST /api/v1/depositSite anahtarı
POST /api/v1/withdrawYalnızca site anahtarı (para çıkışı güvenliği)
Geçersiz/eksik anahtar → 401. Sitenin ilgili işlemi kapalıysa (allowDeposit / allowWithdrawal = kapalı) → 403.
03

Yatırım Bildirimi

Müşteri siteye yatırım yaptığında, site bunu NeoPays’e bildirir. NeoPays’te DEPOSIT / PENDING kaydı oluşur ve operatör paneline düşer.

POST/api/v1/deposit

İstek gövdesi (JSON)

AlanTipZor.Açıklama
amountnumberYatırım tutarı (>0)
currencystringPara birimi (varsayılan TRY)
customerNamestringMüşteri adı (opsiyonel)
customerRefstringSitenizin kendi müşteri kimliği (mutabakat için önerilir)
ibanstringMüşterinin gönderdiği IBAN (varsa)
dekontFileUrlstringDekont görselinin erişilebilir URL’i
dekontIdstringÖnceden yüklenmiş dekont kimliği

Örnek istek

cURL
curl -X POST https://panel.neopaystr.com/api/v1/deposit \
  -H "Authorization: Bearer npk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 2350,
    "currency": "TRY",
    "customerName": "Müşteri Adı",
    "customerRef": "u10234",
    "iban": "TR000000000000000000000000"
  }'

Başarılı yanıt · 200

JSON
{
  "ok": true,
  "id": "cmr…",
  "status": "PENDING",
  "awaitingDekont": false
}

Dekontlu yatırım (opsiyonel)

Dekont iki şekilde iletilebilir:

  • A) JSON ile URL vererek — gövdeye dekontFileUrl ekleyin.
  • B) Dosyayı doğrudan yükleyerek — multipart/form-data:
cURL
curl -X POST https://panel.neopaystr.com/api/v1/deposit \
  -H "Authorization: Bearer npk_…" \
  -F "amount=2350" \
  -F "customerRef=u10234" \
  -F "file=@dekont.jpg"

İzinli dosya tipleri: jpg, jpeg, png, webp, pdf.

“Dekont bekleniyor” davranışı

Site ayarında “dekont zorunlu” açıksa ve istekte dekont yoksa, yatırım reddedilmez — PENDING olarak oluşturulur ve awaitingDekont: true işaretlenir:

JSON
{
  "ok": true,
  "id": "cmr…",
  "status": "PENDING",
  "awaitingDekont": true,
  "message": "Yatırım alındı — dekont bekleniyor."
}

Dekont sonradan POST /api/v1/dekont ile transactionId alanı verilerek bağlanabilir; bağlanınca awaitingDekont otomatik false olur.

04

Çekim Talebi

Müşteri siteden çekim istediğinde, site bunu NeoPays’e iletir. NeoPays’te WITHDRAWAL / PENDING kaydı oluşur; operatör onaylayınca ödeme yapılır ve webhook gönderilir.

Para çıkışı olduğu için çekim uç noktası yalnızca site anahtarı kabul eder.
POST/api/v1/withdraw

İstek gövdesi

AlanTipZor.Açıklama
amountnumberÇekim tutarı (>0)
ibanstringMüşteri IBAN’ı — geçerli TR IBAN (checksum doğrulanır)
customerNamestringMüşteri adı
customerRefstringSitenizin müşteri kimliği
currencystringPara birimi (varsayılan TRY)

Örnek istek

cURL
curl -X POST https://panel.neopaystr.com/api/v1/withdraw \
  -H "Authorization: Bearer npk_…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 2000,
    "iban": "TR000000000000000000000000",
    "customerName": "Müşteri Adı",
    "customerRef": "u10234"
  }'

Başarılı yanıt · 200

JSON
{
  "ok": true,
  "id": "cmr…",
  "status": "PENDING"
}
IBAN checksum tutmuyorsa 400 döner (typo’lu IBAN’a ödeme kaybını önler). Operatör onay aşamasında da geçersiz IBAN’lı çekim onaylanamaz.
05

Webhook — Durum Bildirimi

İşlemin durumu değiştiğinde (operatör onayı/reddi), NeoPays sitenin kayıtlı webhook adresine imzalı bir POST gönderir. Sitenin durum güncellemesini alması için birincil ve yeterli yöntem budur — ayrıca sorgulama gerekmez.

  • Webhook adresi ve imzalama sırrı (whsec_…) NeoPays panelinde site kaydında tanımlanır.
  • Her istek gövdenin HMAC-SHA256 imzasını X-Signature başlığında taşır.
  • Site HTTP 2xx dönmelidir; aksi halde NeoPays teslimatı başarısız olarak loglar.

Gelen istek

HTTP
POST https://<sitenizin-webhook-adresi>
Content-Type: application/json
X-Signature: <hmac_sha256_hex>

Gövde (payload)

JSON
{
  "event": "transaction.status",
  "id": "cmr…",
  "type": "DEPOSIT",
  "status": "APPROVED",
  "amount": "2350",
  "currency": "TRY",
  "customerRef": "u10234",
  "iban": "TR…",
  "timestamp": "2026-07-18T21:00:00.000Z"
}

İmza doğrulama (zorunlu)

İmza, ham (raw) istek gövdesi üzerinden webhookSecret ile hesaplanır. Gövdeyi yeniden serialize etmeden, geldiği haliyle doğrulayın:

webhook.js
const crypto = require('crypto')

app.post('/api/neopays/webhook',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    const signature = req.headers['x-signature']
    const expected  = crypto
      .createHmac('sha256', process.env.NEOPAYS_WEBHOOK_SECRET)  // whsec_…
      .update(req.body)
      .digest('hex')

    if (signature !== expected) return res.status(401).send('bad signature')

    const data = JSON.parse(req.body.toString())
    // data.id -> find your record, update by data.status
    // APPROVED/COMPLETED -> confirm · REJECTED/CANCELLED -> cancel

    return res.status(200).json({ ok: true })
  }
)
İmza sırrını panelden “Yenile” ile değiştirirseniz, sitedeki NEOPAYS_WEBHOOK_SECRET değerini de aynı anda güncelleyin — yoksa imza doğrulaması başarısız olur.
06

Durum Değerleri

PENDINGAPPROVEDMATCHEDCOMPLETEDREJECTEDCANCELLED
statusAnlamı
PENDINGBeklemede — operatör incelemesi bekleniyor
APPROVEDOnaylandı
MATCHEDYatırım, gelen ödeme ile eşleşti
COMPLETEDTamamlandı
REJECTEDReddedildi
CANCELLEDİptal edildi

Pratik yorum: APPROVED / MATCHED / COMPLETED → olumlu (para geçerli), REJECTED / CANCELLED → olumsuz.

07

Hata Kodları

KodAnlamıÖrnek
400Geçersiz istekamount yok/≤0, IBAN checksum tutmuyor
401Kimlik doğrulama başarısızAnahtar eksik/geçersiz; çekimde global anahtar
403İşlem kapalıSitede yatırım/çekim kapalı
404BulunamadıGeçersiz id
503Kaynak yok(IBAN alma) uygun IBAN kalmadı

Hata yanıt formatı

JSON
{ "error": "Açıklama", "hint": "Authorization: Bearer <API_KEY>" }
08

(Opsiyonel) Yatırım IBAN’ı Alma

Müşteriye gösterilecek yatırım IBAN’ını NeoPays havuzundan rotasyonla almak için:

HTTP
POST /api/v1/iban/next
Authorization: Bearer npk_…
Content-Type: application/json

{ "amount": 2350, "customerRef": "u10234" }

Uygun IBAN yoksa 503 ({ "code": "NO_IBAN_AVAILABLE" }) döner.

09

Entegrasyon Kontrol Listesi

  • Panelden site oluşturuldu, API anahtarı güvenli saklandı (npk_…).
  • Webhook adresi ve imza sırrı (whsec_…) panele girildi.
  • Yatırım: POST /api/v1/deposit → PENDING kaydı düşüyor.
  • Çekim: POST /api/v1/withdraw → geçerli IBAN ile PENDING kaydı düşüyor.
  • Webhook: onay/red sonrası X-Signature doğrulanıp durum güncelleniyor, 2xx dönülüyor.
  • İmza sırrı bir tarafta değişince diğer taraf da güncelleniyor.
Geliştirici API · Entegrasyon Dokümantasyonu · NeoPays