Δημιουργήστε περιεχόμενο απευθείας στην πλατφόρμα Annual Ads — προσθέστε διαφημιζόμενους, δημοσιεύστε διαφημίσεις, ενεργοποιήστε πληρωμές και παρακολουθήστε την κατάταξη, αποκλειστικά μέσω του API.
Δείτε τον πλήρη πίνακα τιμώνΔιατηρείτε το 70% από τα έσοδα που αποφέρουν οι διαφημιστές σας στη λειτουργία «Connect» — τα οποία καταβάλλονται αυτόματα στο πορτοφόλι σας. Δείτε παρακάτω πώς λειτουργεί.
Κάθε αίτημα πιστοποιείται με ένα μυστικό κλειδί στην κεφαλίδα «Authorization», χρησιμοποιώντας το σχήμα «Bearer».
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonΤα κλειδιά API εκδίδονται σε εγκεκριμένους λογαριασμούς συνεργατών από την ομάδα του Annual Ads.
Δημιουργία λογαριασμού συνεργάτη| POST | /v1/partner/advertisersΔημιουργήστε έναν λογαριασμό διαφημιζόμενου εκ μέρους ενός από τους χρήστες σας (λειτουργία «Σύνδεση»). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Αναζητήστε έναν λογαριασμό διαφημιζόμενου που έχει δημιουργηθεί από αυτόν τον συνεργάτη. | advertisers:read |
| POST | /v1/partner/adsΔημιουργήστε μια διαφήμιση. Αρχικά, η διαφήμιση εμφανίζεται ως πρόχειρο. Τα προαιρετικά πεδία advertiser_type, promotion_type, link_type και promoted_brand περιγράφουν διαφημίσεις συνεργατών, παραπομπών, δημιουργών ή ιδιωτών — δείτε τη σημείωση παρακάτω. | ads:write |
| GET | /v1/partner/ads/{id}Αναζήτηση αγγελίας. | ads:read |
| PATCH | /v1/partner/ads/{id}Ενημέρωση του περιεχομένου του άρθρου — τίτλος, περιγραφή, σύνδεσμος, τύπος διαφημιζόμενου, τύπος προώθησης, τύπος συνδέσμου και προωθούμενη μάρκα. Η κατηγορία, η γεωγραφική περιοχή και οποιαδήποτε άλλη πληροφορία λαμβάνει υπόψη η μηχανή κατάταξης δεν μπορούν ποτέ να τροποποιηθούν εδώ. | ads:write |
| POST | /v1/partner/ads/{id}/imageΑνεβάστε απευθείας μια εικόνα για την αγγελία (JPEG/PNG/WebP, μέγιστο μέγεθος 5 MB). Απαιτείται πριν από την πρώτη πληρωμή — δείτε την ενότητα «Πληρωμές» παρακάτω. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlΟρίστε την εικόνα μιας διαφήμισης από μια διεύθυνση URL αντί να ανεβάσετε ένα αρχείο — ο διακομιστής την ανακτά και την φιλοξενεί εκ νέου ο ίδιος. Ίδια απαίτηση: πρέπει να γίνει πριν από την πρώτη πληρωμή. | ads:write |
| GET | /v1/partner/ads/{id}/rankΤρέχουσα κατάταξη, κατηγορία και γεωγραφικό εύρος μιας διαφήμισης. | ads:read |
| GET | /v1/partner/ads/{id}/statsΟ συνολικός αριθμός προβολών και κλικ για μια διαφήμιση — καθώς και οι ημέρες που έχουν παρέλθει ή απομένουν — προέρχονται από τα πεδία activated_at/expires_at που περιλαμβάνονται ήδη στο GET /{id}, ενώ η κατάταξη προέρχεται από το GET /{id}/rank. | ads:read |
| POST | /v1/partner/paymentsΞεκινήστε μια πληρωμή με κρυπτονόμισμα για μια αρχική αγορά ή μια ανανέωση. Η αρχική πληρωμή αποτυγχάνει με κωδικό σφάλματος 422, εκτός αν η διαφήμιση διαθέτει ήδη εικόνα — δείτε τις λειτουργίες uploadAdImage/setAdImageUrl παραπάνω. | payments:write |
| GET | /v1/partner/payments/{id}Ελέγξτε την κατάσταση μιας πληρωμής. | payments:read |
| POST | /v1/partner/referralsΔημιουργήστε έναν σύνδεσμο παραπομπής. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsΣυνολικά έσοδα από παραπομπές, ανά κατηγορία. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsΤο μερίδιό σας, ύψους 70%, από τα ποσά που κατέβαλαν οι διαφημιζόμενοι που δημιουργήσατε στη λειτουργία «Connect» για τις διαφημίσεις τους, κατανεμημένο ανά κατάσταση. | ad-revenue:read |
| GET | /v1/partner/access-logΠλήρες ιστορικό κλήσεων για αυτό το κλειδί — μέθοδος, διαδρομή, IP, χρονική σήμανση. | Εκεί |
| GET | /v1/rankings?category={id}&geo={scope}Κατάταξη μόνο για ανάγνωση ανά κατηγορία και γεωγραφική περιοχή. | Δημόσιο |
| GET | /v1/tiersΤα 7 καθορισμένα επίπεδα τιμολόγησης (όριο, πρόσβαση σε προνόμια). | Δημόσιο |
| GET | /v1/referral-programΤα ποσοστά προμήθειας που ισχύουν επί του παρόντος για το σύστημα κλιμακωτών παραπομπών και το Leaders Pool. | Δημόσιο |
| GET | /v1/partner-programΗ τρέχουσα κατανομή των εσόδων από διαφημίσεις (λειτουργία «Connect») μεταξύ εσάς και της Annual Ads. | Δημόσιο |
| GET | /v1/search?q={query}Αναζήτηση σε φυσική γλώσσα — κατευθύνει ένα ερώτημα όπως «διαφημιστές επίπλων στην Κένυα» στην αντίστοιχη κατηγορία και γεωγραφική περιοχή και, στη συνέχεια, εμφανίζει την κατάταξη, με την ακριβή πραγματική σειρά. | Δημόσιο |
Διαφήμιση μέσω προγραμμάτων συνεργατών και συστάσεων
Τα πεδία advertiser_type, promotion_type, link_type και promoted_brand είναι προαιρετικά στις κλήσεις POST και PATCH προς το /v1/partner/ads — Το Annual Ads δεν περιορίζεται σε επιχειρήσεις που διαφημίζουν τον εαυτό τους. Όταν το link_type είναι affiliate_link ή referral_invitation_link, ή το promotion_type είναι affiliate_offer ή referral_opportunity, το affiliate_terms_accepted πρέπει να είναι true, διαφορετικά το αίτημα απορρίπτεται με κωδικό 422. Το title έχει ανώτατο όριο 35 χαρακτήρων και η περιγραφή 80 — και τα δύο επιβάλλονται από την πλευρά του διακομιστή, όχι μόνο στο περιβάλλον χρήστη του πίνακα ελέγχου.
Κάθε λογαριασμός διαφημιζόμενου διαθέτει μια σειρά ενσωματωμένων εργαλείων τεχνητής νοημοσύνης — έναν δημιουργό περιεχομένου και οπτικών στοιχείων διαφημίσεων, έναν βοηθό συνομιλίας, έναν σύμβουλο προϋπολογισμού και έναν εξωτερικό ελεγκτή SEO — τα οποία χρεώνονται με πιστώσεις τεχνητής νοημοσύνης, επιπλέον της ετήσιας κατ’ αποκοπή τιμής.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — ένας «αιωρούμενος» βοηθός συνομιλίας, αποκλειστικά ενημερωτικού χαρακτήρα, με πρόσβαση μόνο για ανάγνωση στα δεδομένα του λογαριασμού. | Δημόσιο |
| POST | /v1/advertisers/{id}/ai/creative-studioΔημιουργήστε έναν τίτλο διαφήμισης, μια περιγραφή και λέξεις-κλειδιά με βάση μια σύντομη περιγραφή της επιχείρησης. | 2 μονάδες |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageΔημιουργήστε μια εικόνα καταχώρισης (PNG) με βάση την ίδια περιγραφή της επιχείρησης, η οποία θα είναι ήδη αποθηκευμένη και έτοιμη για επισύναψη σε μια αγγελία. | 8 μονάδες |
| POST | /v1/advertisers/{id}/ai/budget-advisorΜια πραγματική στατιστική πρόβλεψη — και όχι μια τυχαία εκτίμηση — των πιθανοτήτων διατήρησης μιας συγκεκριμένης κατάταξης στις 30/90/365 ημέρες. | 1 μονάδες |
| POST | /v1/advertisers/{id}/ai/seo-auditΑναλύστε τον εξωτερικό ιστότοπο του διαφημιζόμενου και προτείνετε συγκεκριμένες βελτιώσεις SEO. | 2 μονάδες |
Η ίδια κατηγορία και περιγραφή δραστηριότητας τροφοδοτούν επίσης τον παρακάτω δημιουργό εικόνων.
POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio
Authorization: Bearer <session access token>
Content-Type: application/json
{
"category_name": "Furniture",
"business_description": "We sell handmade oak dining tables"
}{
"title": "Handmade Oak Dining Tables — Built to Last",
"description": "Solid oak dining tables crafted by hand, built to last a lifetime.",
"keywords": ["oak furniture", "dining table", "handmade"],
"credits_remaining": 8
}Δημιουργήστε ένα αντίστοιχο γραφικό για την ίδια διαφήμιση:
POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio/image
Authorization: Bearer <session access token>
Content-Type: application/json
{
"category_name": "Furniture",
"business_description": "We sell handmade oak dining tables"
}{
"visual_url": "https://cdn.uploadscenter.com/file_01m1...",
"credits_remaining": 4
}Τοποθετήστε μια έτοιμη διαφημιστική ενότητα στον ιστότοπό σας — χωρίς να χρειαστεί να τη δημιουργήσετε και χωρίς iframe. Το σενάριο εμφανίζεται απευθείας στη σελίδα μέσα σε ένα απομονωμένο Shadow DOM, οπότε τα στυλ του δεν επηρεάζουν ποτέ τον ιστότοπό σας, ενώ τα στυλ του ιστότοπού σας δεν επηρεάζουν ποτέ το δικό του.
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-count="4"
data-columns="2"
></div>
<script async src="https://adhub365.com/widget.js"></script>Από προεπιλογή, εδώ εμφανίζεται η πλήρης δημόσια κατάταξη για την κατηγορία — όλοι οι διαφημιζόμενοι στην πλατφόρμα, όχι μόνο εκείνοι που έχετε προσθέσει εσείς. Για να εμφανίσετε μόνο τις διαφημίσεις από διαφημιζόμενους που δημιουργήσατε μέσω της λειτουργίας «Connect» (αυτοί που σας αποφέρουν το μερίδιό σας), προσθέστε το στοιχείο «data-partner» με τον κωδικό συνεργάτη σας (θα τον βρείτε στη σελίδα «Developers» του δικού σας πίνακα ελέγχου):
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Εάν οι διαφημιζόμενοί σας καλύπτουν διάφορες κατηγορίες, παραλείψτε εντελώς το «data-category» — χρησιμοποιώντας μόνο το «data-partner», το widget εμφανίζει όλες τις διαφημίσεις σας από όλες τις κατηγορίες σε ένα πλέγμα, αντί να απαιτείται ένα μπλοκ widget για κάθε κατηγορία:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Θέλετε να εμφανίζεται μια μονάδα τύπου υποσέλιδου παράλληλα με αυτή που βρίσκεται μέσα στο περιεχόμενο, με κάθε μία να προβάλλει διαφορετικές διαφημίσεις; Προσθέστε ένα δεύτερο μπλοκ widget με το data-layout="compact" (μία μόνο διαφήμιση, που μπορεί να συμπτυχθεί σε ένα μικρό «χάπι») και το data-offset ρυθμισμένο στον αριθμό των διαφημίσεων που εμφανίζει ήδη το πρώτο σας widget:
<!-- in your content -->
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-count="4"
data-columns="2"
></div>
<!-- in your footer, showing different ads via data-offset -->
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-layout="compact"
data-offset="4"
></div>
<script async src="https://adhub365.com/widget.js"></script>data-category | Αναγνωριστικό κατηγορίας προς εμφάνιση. Απαιτείται — εκτός αν έχει οριστεί το «data-partner», οπότε η παράλειψή του συνεπάγεται την εμφάνιση των διαφημίσεων αυτού του συνεργάτη σε όλες τις κατηγορίες. |
data-geo | Γεωγραφικό πεδίο: τοπικό, περιφερειακό ή παγκόσμιο. Η προεπιλογή είναι «παγκόσμιο». |
data-count | Αριθμός διαφημίσεων προς εμφάνιση. Η προεπιλεγμένη τιμή είναι 4. |
data-columns | Αριθμός στηλών του πλέγματος. Η προεπιλεγμένη τιμή είναι 2. |
data-layout | πλέγμα, λίστα ή συμπαγής. Η προεπιλογή είναι το πλέγμα. Η επιλογή «συμπαγής» εμφανίζει μία μόνο διαφήμιση (η παράμετρος `data-count` αγνοείται) με ένα κουμπί για να την συμπτύξετε σε ένα μικρό «χάπι» και να την επαναφέρετε — πρόκειται για μια ενότητα τύπου υποσέλιδου, η οποία δεν τοποθετείται ποτέ σταθερά από το ίδιο το σενάριο· μπορείτε να τοποθετήσετε και να διαμορφώσετε το div-περιέκτη όπως επιθυμείτε στη δική σας σελίδα. |
data-offset | Αριθμός διαφημίσεων με την υψηλότερη κατάταξη που θα παραλειφθούν. Η προεπιλεγμένη τιμή είναι 0. Επιτρέπει σε ένα δεύτερο widget στην ίδια σελίδα (π.χ. ένα συμπαγές στο υποσέλιδο και ένα σε μορφή πλέγματος πιο πάνω) να εμφανίζει διαφορετικές διαφημίσεις αντί να επαναλαμβάνει τη ίδια δύο φορές — ορίστε τον αριθμό των διαφημίσεων που εμφανίζει ήδη το άλλο widget. |
data-partner | Ο κωδικός συνεργάτη σας (θα τον βρείτε στη σελίδα «Προγραμματιστές» του πίνακα ελέγχου σας). Προαιρετικό — χωρίς αυτόν, το widget εμφανίζει την πλήρη δημόσια κατάταξη για την εν λόγω κατηγορία, δηλαδή όλους τους διαφημιζόμενους της πλατφόρμας. Με αυτόν, εμφανίζονται μόνο οι διαφημίσεις από διαφημιζόμενους που έχετε προσθέσει μέσω της λειτουργίας «Connect» — δηλαδή εκείνες που σας αποφέρουν πραγματικά το μερίδιό σας. |
Υπάρχει ανώτατο όριο αιτήσεων ανά κλειδί, ανά λεπτό. Κάθε πιστοποιημένη απόκριση περιλαμβάνει τις κεφαλίδες X-RateLimit-Limit, X-RateLimit-Remaining και X-RateLimit-Reset· σε περίπτωση υπέρβασης του ορίου, επιστρέφεται ο κωδικός κατάστασης 429 Too Many Requests με την κεφαλίδα Retry-After.
Προαιρετικό, ανά συνεργάτη. Μέχρι να προσθέσετε μια καταχώριση, τα κλειδιά σας δέχονται αιτήματα από οποιαδήποτε διεύθυνση IP — η πρώτη καταχώριση αλλάζει όλα τα κλειδιά αυτού του συνεργάτη ώστε να δέχονται αιτήματα μόνο από τη λίστα επιτρεπόμενων διευθύνσεων.
Κάθε webhook υπογράφεται με HMAC-SHA256 χρησιμοποιώντας ένα μυστικό κλειδί που εκδίδεται μία φορά, κατά τη δημιουργία του — επαληθεύστε την υπογραφή πριν εμπιστευτείτε το περιεχόμενο. Τα συμβάντα παραδίδονται μόνο στον συνεργάτη στον οποίο ανήκει ο σχετικός διαφημιζόμενος.
payment.succeeded | Η πληρωμή επιβεβαιώθηκε. |
payment.refunded | Πραγματοποιείται η επιστροφή χρημάτων. |
ad.activated | Μια αγγελία ενεργοποιείται, είτε αυτόματα είτε μετά από έλεγχο από τον διαχειριστή. |
invoice.issued | Εκδίδεται τιμολόγιο. |
referral.payout.completed | Μια προμήθεια παραπομπής έχει καταστεί πληρωτέα. |
referral.payout.failed | Μια παρτίδα πληρωμών για παραπομπές αποτυγχάνει στον πάροχο — τα έσοδα επιστρέφουν στο λογαριασμό πληρωτέων και η διαδικασία επαναλαμβάνεται. |
rank.changed | Η κατάταξη μιας διαφήμισης μεταβάλλεται — μεταξύ άλλων, όταν αυτό οφείλεται στην πληρωμή ενός άλλου διαφημιζόμενου. |
ad.expiring_soon | 30, 7 ή 1 ημέρα(ες) πριν από τη λήξη μιας αγγελίας. |
partner_ad_revenue.payout.completed | Μια πληρωμή από το μερίδιο των διαφημιστικών εσόδων έχει φτάσει στο στάδιο της εξόφλησης. |
partner_ad_revenue.payout.failed | Μια μαζική πληρωμή μεριδίου εσόδων από διαφημίσεις αποτυγχάνει στον πάροχο — τα μερίδια επιστρέφουν στο υπό πληρωμή και η διαδικασία επαναλαμβάνεται. |
Προβλέπεται η κυκλοφορία επίσημων SDK για JavaScript/TypeScript και Python, τα οποία θα δημιουργηθούν με βάση την ίδια προδιαγραφή API, αλλά δεν έχουν ακόμη δημοσιευτεί — μέχρι τότε, χρησιμοποιήστε απευθείας το HTTP API.
Δεν υπάρχει ακόμα SDK — αυτές οι λειτουργίες καλούν απευθείας το HTTP API και λειτουργούν ήδη σήμερα σε οποιαδήποτε γλώσσα προγραμματισμού.
cURL
curl -X POST https://api.adhub365.com/v1/partner/ads \
-H "Authorization: Bearer sk_sandbox_..." \
-H "Content-Type: application/json" \
-d '{"advertiser_id":"adv_9f2a...","category_id":"cat_furniture","geo_scope":"local","title":"..."}'JavaScript
await fetch("https://api.adhub365.com/v1/partner/ads", {
method: "POST",
headers: {
Authorization: "Bearer sk_sandbox_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
advertiser_id: "adv_9f2a...",
category_id: "cat_furniture",
geo_scope: "local",
title: "...",
}),
});Python
import requests
requests.post(
"https://api.adhub365.com/v1/partner/ads",
headers={"Authorization": "Bearer sk_sandbox_..."},
json={
"advertiser_id": "adv_9f2a...",
"category_id": "cat_furniture",
"geo_scope": "local",
"title": "...",
},
)