API · حوالہ

Polymarket مارکیٹ ڈیٹا پڑھنے کے لیے کسی key کی ضرورت نہیں۔ آرڈر لگانے یا منسوخ کرنے کے لیے دو پرتوں کی تصدیق درکار ہے: API credentials بنانے کے لیے ایک L1 والٹ دستخط (EIP-712)، اور ہر تصدیق شدہ درخواست پر ایک L2 HMAC دستخط۔ یہ صفحہ دونوں کا احاطہ کرتا ہے، نیز چار signature types اور funder address - وہ دو چیزیں جو زیادہ تر auth خرابیوں کا سبب بنتی ہیں۔

ایک نظر میں
  • پڑھنا (Gamma، ڈیٹا، عوامی CLOB) - کوئی auth نہیں۔
  • L1 - آپ کا والٹ ایک EIP-712 پیغام (ClobAuth domain version "1") پر دستخط کرتا ہے تاکہ API credentials بنائے یا اخذ کرے۔
  • L2 - ہر آرڈر درخواست api_key / api_secret / api_passphrase کے HMAC سے دستخط ہوتی ہے۔

اپنے API credentials بنائیں یا اخذ کریں (L1)

آپ کا والٹ ایک بار دستخط کر کے API credentials کا ایک deterministic سیٹ بناتا (یا دوبارہ اخذ کرتا) ہے۔ V2 SDK استعمال کریں - V1 py-clob-client (0.34.x) آرکائیو شدہ اور ناکارہ ہے۔

from py_clob_client_v2 import ClobClient   # pip install py-clob-client-v2

# L1: your wallet signs to derive API credentials
client = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=PRIVATE_KEY)
creds = client.create_or_derive_api_key()    # api_key, api_secret, api_passphrase

# L1 + L2: rebuild the client WITH creds for authenticated calls (no set_api_creds in v2)
client = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=PRIVATE_KEY, creds=creds)
// polymarket_client_sdk_v2 - official Rust client (repo rs-clob-client-v2)
use polymarket_client_sdk_v2::clob::{Client, Config};
use polymarket_client_sdk_v2::clob::types::SignatureType;
let client = Client::new("https://clob.polymarket.com", Config::default())?
    .authentication_builder(&signer)
    .funder(deposit_wallet)                   // deposit wallets work in Rust today
    .signature_type(SignatureType::Poly1271)
    .authenticate().await?;

ان تینوں قدروں کو رازوں (env vars) کے طور پر محفوظ کریں۔ مارکیٹ ڈیٹا پڑھنے کے لیے ان کی کبھی ضرورت نہیں۔

Signature types (0-3)

signature type ایکسچینج کو بتاتی ہے کہ آپ کے آرڈر کا دستخط اُس والٹ سے کیسے جُڑتا ہے جو فنڈز رکھتا ہے (یعنی funder)۔ وہی چُنیں جو آپ کے اکاؤنٹ کے بننے کے طریقے سے میل کھاتا ہو۔

TypeNameکب
0EOAایک سادہ والٹ (مثلاً MetaMask) جو دستخط بھی کرتا ہے اور فنڈز بھی رکھتا ہے۔
1POLY_PROXYEmail / Magic.link سائن اپ - ایک proxy والٹ فنڈز رکھتا ہے؛ آپ کی key اس کی جانب سے دستخط کرتی ہے۔
2POLY_GNOSIS_SAFEایک Gnosis Safe فنڈز رکھتا ہے؛ ایک signer key اس کے لیے دستخط کرتی ہے۔
3POLY_1271ایک deposit والٹ (EIP-1271 smart-contract دستخط)۔

جب signing key فنڈ رکھنے والے address سے مختلف ہو (types 1-3)، تو آپ کو private key اور funder address دونوں دینے ضروری ہیں۔

Deposit والٹ (type 3) - آج Rust استعمال کریں۔ جون 2026 تک Python (py-clob-client-v2) اور TypeScript (@polymarket/clob-client-v2) clients میں ایک کھلا bug ہے: L1 auth، API key کو deposit والٹ کے بجائے آپ کے EOA سے باندھ دیتا ہے، اِس لیے آرڈر مسترد ہو جاتے ہیں ("maker address not allowed, please use the deposit wallet flow")۔ سرکاری Rust client، EIP-1271 deposit-wallet دستخط کو درست طریقے سے سنبھالتا ہے۔ Rust کے بغیر عارضی حل: ایک email/Magic اکاؤنٹ استعمال کریں اور signature_type = POLY_PROXY (type 1) سے دستخط کریں۔ fix کے لیے Polymarket issues #70 (Python) / #65 (TS) دوبارہ دیکھتے رہیں۔

درخواستوں پر دستخط (L2)

ہر تصدیق شدہ درخواست ایک HMAC دستخط لے کر جاتی ہے جو آپ کے API secret کے ساتھ درخواست کے method، path، body اور ایک timestamp سے بنتا ہے۔ V2 SDK آپ کے لیے یہ ہیڈر بناتا ہے۔ دو چیزیں درست رکھیں:

  • گھڑی - ~60 سیکنڈ سے زیادہ فرق آپ کے دستخط کو مسترد کروا دیتا ہے۔ NTP کے ذریعے sync کریں۔
  • Domains - L2/ClobAuth EIP-712 domain version "1" رہتی ہے؛ صرف V2 Exchange (آرڈر) domain "2" پر منتقل ہوا۔ ایک V1 client غلط آرڈر domain پر دستخط کر کے ناکام ہوتا ہے - دیکھیں order_version_mismatch۔

Key کی حفاظت

  • private keys یا API secrets کو کبھی hardcode نہ کریں - environment variables استعمال کریں؛ انہیں کبھی commit نہ کریں۔
  • جہاں ممکن ہو، اپنی signing key اور funder address کو روزمرہ کے والٹ سے الگ رکھیں۔
  • صرف پڑھنے والے بوٹس کو کسی credentials کی ضرورت نہیں - وہیں سے شروع کریں۔

اگلا: CLOB API: ایک آرڈر لگائیں · auth خرابی ٹھیک کریں · v1 → v2 منتقلی۔