API למפתחים
ממשק קריאה בלבד. הוא מחזיר בדיוק את מה שבעל המפתח רואה במסכים שלו — אותן שורות, מאותו מסד נתונים, תחת אותן מדיניות הרשאה. אין כאן פעולה שמשנה משהו.
תוספת בתשלום
גישת API היא תוספת בתשלום, לחנויות ולשותפים כאחד. הדשבורד וייצוא ה-CSV נשארים חינמיים תמיד — כל קליק, כל המרה וכל עמלה נראים ונשמרים כקובץ בלי לשלם. מה שנוסף הוא הצינור האוטומטי.
עדיין אין חבילות מוגדרות. דברו איתנו ונתאים. עד שההפעלה נעשית, מפתח קיים מחזיר רשימה ריקה — לא שגיאה.
אימות
כל בקשה נושאת מפתח בכותרת Authorization: Bearer afp_live_…. המפתח נוצר במסך החשבון ומוצג פעם אחת בלבד — אצלנו נשמר ממנו רק גיבוב, ולכן גם לנו אין דרך להראות אותו שוב.
מפתח שייך לאדם, לא לחנות ולא לשותף. מה שהוא יכול לקרוא נגזר ממה שאותו אדם יכול לקרוא במערכת באותו רגע: מי שמנהל שתי חנויות יקבל את שתיהן באותו מפתח, ומי שהוא גם שותף וגם בעל חנות יכול לסמן משאבים משני הצדדים.
הסימון בזמן היצירה רק מצמצם. הוא לא מרחיב כלום: משאב שסומן למי שלא אמור לראות אותו יחזיר רשימה ריקה, לעולם לא נתונים של מישהו אחר.
דוגמה
curl -H "Authorization: Bearer $API_KEY" \ "https://affilcore.com/api/v1/store-orders?days=30&limit=100"
התשובה היא { data: [...], meta: { resource, count, limit, from, to } }.count הוא מספר השורות בתשובה הזו, לא הסך הכול.
פרמטרים
fromו-to— טווח כולל, בפורמטyyyy-MM-dd. שניהם ביחד, אחרת הם מתעלמים.days— 7, 30 או 90 ימים אחורה כולל היום. ברירת המחדל: 30.limit— בין 1 ל-1000, ברירת מחדל 100. ערך מחוץ לטווח נחתך ולא נדחה.
בקשה חריגה לא מחזירה שגיאה אלא נופלת לברירת המחדל: מחרוזת שאילתה שנערכה ביד לא אמורה להפיל אינטגרציה.
מגבלת קצב
120 בקשות לדקה, נספרות לפי אדם ולא לפי מפתח — כך ששני מפתחות של אותו אדם חולקים את אותו מכסה. חריגה מחזירה 429 עם Retry-After.
המשאבים
חמישה, והם בדיוק אותם משאבים שאפשר להוריד כקובץ CSV מהמסכים. רשימת העמודות נבחרה אחת-אחת: מזהים פסבדונימיים ונתונים שאיש לא ביקש פשוט לא יוצאים מכאן.
GET /api/v1/affiliate-sales
המרות
למי: שותף · מסונן לפי occurred_at
occurred_atתאריך ושעה (ISO 8601)מתיstore_nameטקסטחנותorder_idטקסטמספר הזמנהprogram_nameטקסטקמפייןevent_typeטקסט — purchase | lead | signup | trial | subscription | renewal | booking | installסוגtotalמספר עשרוניסכום ההזמנהrefunded_amountמספר עשרוניזיכוי ללקוחcurrencyטקסטמטבעattribution_reasonטקסטשויך לפיcoupon_codeטקסטקוד קופוןcommission_amountמספר עשרוניעמלהcommission_adjustmentsמספר עשרוניהתאמות לעמלהcommission_statusטקסט — pending | approved | rejected | reversed | paidמצב העמלה
GET /api/v1/affiliate-commissions
לוח-שחרור
למי: שותף · ללא סינון תאריכים
release_onתאריך (yyyy-MM-dd)תאריך שחרורkindטקסטמה יקרהcommissionsמספר שלםמספר עמלותamountמספר עשרוניסכום
GET /api/v1/store-orders
הזמנות
למי: בעל חנות · מפעיל · מסונן לפי occurred_at
occurred_atתאריך ושעה (ISO 8601)מתיorder_idטקסטמספר הזמנהtotalמספר עשרוניסכוםcurrencyטקסטמטבעrefunded_amountמספר עשרוניזיכוי ללקוחaffiliate_nameטקסטשותףprogram_nameטקסטקמפייןcoupon_codeטקסטקוד קופוןattribution_reasonטקסטשויך לפיcommission_amountמספר עשרוניעמלהcommission_adjustmentsמספר עשרוניתיקוניםcommission_statusטקסטמצב העמלה
GET /api/v1/store-partners
שותפים
למי: בעל חנות · מפעיל · ללא סינון תאריכים
display_nameטקסטשותףref_codeטקסטקודaffiliate_statusטקסט — pending | approved | rejected | paused | terminatedמצבclicksמספר שלםקליקיםordersמספר שלםהזמנותrevenueמספר עשרונימחזורcommission_pendingמספר עשרוניעמלה בהמתנהcommission_approvedמספר עשרוניעמלה מאושרתcommission_paidמספר עשרוניעמלה ששולמה
GET /api/v1/operator-commissions
עמלות
למי: מפעיל · מסונן לפי created_at
order_idטקסטמספר הזמנהstore_nameטקסטחנותaffiliate_nameטקסטשותףaffiliate_refטקסטקוד שותףamountמספר עשרוניסכוםadjustmentsמספר עשרוניתיקוניםcurrencyטקסטמטבעstatusטקסט — pending | approved | rejected | reversed | paidסטטוסlocked_untilתאריך ושעה (ISO 8601)משוחררת ב
מה אין כאן, בכוונה
אין postback ואין webhook יוצא. הפלטפורמה לא שולחת נתונים של אף אחד ליעד חיצוני מיוזמתה — מי שרוצה נתונים מבקש אותם. זו החלטה על מה מותר לזרום החוצה, לא מגבלה טכנית.
אין גם כתיבה דרך ה-API. מדידה נכנסת דרך הפיקסל והוובהוקים, ששומרים על הפרדה בין שתי שכבות המדידה; פעולה שמשנה כסף נעשית במסך, עם מי שאחראי עליה מחובר.