Construír directamente na plataforma Annual Ads: crear anunciantes, publicar anuncios, xerar pagos e rastrexar a posición, todo a través da API.
Ver a táboa completa de prezosTi conservas 70% do que pagan os anunciantes en modo Connect polos seus anuncios — abonado automaticamente na túa carteira. Vexa como funciona a continuación.
Cada solicitude autentícase cunha clave secreta na cabeceira Autorización, empregando o esquema Bearer.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAs chaves de API son emitidas ás contas de socios aprobadas polo equipo de Anuncios Anuais.
Crear unha conta de socio| POST | /v1/partner/advertisersCrea unha conta de anunciante en nome dun dos teus usuarios (modo Connect). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Busca unha conta de anunciante creada por este socio. | advertisers:read |
| POST | /v1/partner/adsCrea un anuncio. Inicia en estado de borrador. Os campos opcionais advertiser_type, promotion_type, link_type e promoted_brand describen publicidade de afiliado, de referencia, de creador ou individual — véxase a nota a continuación. | ads:write |
| GET | /v1/partner/ads/{id}Busca un anuncio. | ads:read |
| PATCH | /v1/partner/ads/{id}Actualizar o contido editorial — título, descrición, ligazón, tipo de anunciante, tipo de promoción, tipo de ligazón e marca promovida. Categoría, xeografía e calquera cousa lida polo motor de clasificación nunca se poden cambiar aquí. | ads:write |
| POST | /v1/partner/ads/{id}/imageSubir directamente unha imaxe do anuncio (JPEG/PNG/WebP, 5 MB máx.). Requirido antes do primeiro pago — véxase o grupo de pagos a continuación. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlEstablece a imaxe dun anuncio a partir dunha URL en lugar de subir un ficheiro — o servidor recóllo e alóxaa de novo por si mesmo. Mesmo requisito: necesario antes do primeiro pago. | ads:write |
| GET | /v1/partner/ads/{id}/rankRango actual, categoría e ámbito xeográfico para un anuncio. | ads:read |
| GET | /v1/partner/ads/{id}/statsO número total de visualizacións e clics nun anuncio — os días transcorridos/pendentes proceden dos campos activated_at/expires_at xa dispoñibles en GET /{id}, e o ranqueo de GET /{id}/rank. | ads:read |
| POST | /v1/partner/paymentsInicia un pago en criptomoeda para unha compra inicial ou unha recarga. Un pago inicial falla co erro 422 a menos que o anuncio xa teña unha imaxe — véxase uploadAdImage/setAdImageUrl máis arriba. | payments:write |
| GET | /v1/partner/payments/{id}Comprobar o estado dun pago. | payments:read |
| POST | /v1/partner/referralsCrea un enlace de referencia. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsIngresos acumulados por referencias, desagregados por estado. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsA túa cota do 70 % do que pagaron os anunciantes que creaches en modo Connect polos seus anuncios, desagregada por estado. | ad-revenue:read |
| GET | /v1/partner/access-logHistorial completo de chamadas para esta clave — método, ruta, IP, marca de tempo. | Alí |
| GET | /v1/rankings?category={id}&geo={scope}Ranking de só lectura para unha categoría e ámbito xeográfico. | Público |
| GET | /v1/tiersOs 7 niveis de prezos configurados (umbral, beneficios desbloqueados). | Público |
| GET | /v1/referral-programOs porcentaxes de comisión actualmente activos para a cascada de referencias e o Fondo de Líderes. | Público |
| GET | /v1/partner-programA repartición actual dos ingresos publicitarios (modo Connect) entre ti e Annual Ads. | Público |
| GET | /v1/search?q={query}Búsqueda en linguaxe natural — enruta unha consulta como "anunciantes de mobles en Quenia" á categoría e ao ámbito xeográfico correspondentes e, a continuación, devolve esa clasificación na súa orde real exacta. | Público |
Publicidade de afiliado e de referencia
advertiser_type, promotion_type, link_type e promoted_brand son campos opcionais en POST e PATCH /v1/partner/ads — Annual Ads non se limita a empresas que se anuncian a si mesmas. Cando link_type é affiliate_link ou referral_invitation_link, ou promotion_type é affiliate_offer ou referral_opportunity, affiliate_terms_accepted debe ser true ou a solicitude rexeítase cun 422. O título está limitado a 35 caracteres e a descrición a 80 — ambos se aplican no lado do servidor, non só na interface de usuario do panel de control.
Cada conta de anunciante recibe un conxunto de ferramentas de IA integradas — un xerador de contido e imaxes publicitarias, un asistente conversacional, un asesor de orzamento e un auditor SEO externo — pagadas con créditos de IA, ademais do prezo anual fixo.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — un asistente conversacional flotante, só informativo, en modo de só lectura nos datos da conta. | Público |
| POST | /v1/advertisers/{id}/ai/creative-studioXera un título de anuncio, unha descrición e palabras clave a partir dunha breve descrición empresarial. | 2 crédito(s) |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageXera unha imaxe de listaxe (PNG) a partir da mesma descrición do negocio, aloxada e lista para adxuntar a un anuncio. | 8 crédito(s) |
| POST | /v1/advertisers/{id}/ai/budget-advisorUnha auténtica proxección estatística — nunca unha suposición xerativa — das probabilidades de manter un determinado rango a 30/90/365 días. | 1 crédito(s) |
| POST | /v1/advertisers/{id}/ai/seo-auditAnaliza o sitio web externo do anunciante e suxire melloras concretas de SEO. | 2 crédito(s) |
A mesma categoría e descrición do negocio tamén alimentan o xerador de imaxes a continuación.
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
}Xera unha imaxe visual correspondente para o mesmo anuncio:
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
}Solta unha unidade de anuncio prefabricada no teu propio sitio — sen necesidade de construír nada, sen iframe. O script renderízase directamente na páxina dentro dun Shadow DOM illado, de xeito que os seus estilos nunca se filtran no teu sitio e os estilos do teu sitio nunca se filtran nel.
<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>Por defecto, isto amosa a clasificación pública completa da categoría — todos os anunciantes da plataforma, non só os que ti achegaches. Para amosar só os anuncios dos anunciantes que creaches a través do modo Connect (os que xeran a túa cota), engade data-partner co teu ID de socio (podes atopalo na páxina de Desenvolvedores do teu propio panel de control):
<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>Se os teus anunciantes abarcan varias categorías, elimina por completo data-category — só con data-partner, o widget amosa todos os teus anuncios en todas as categorías nunha única cuadrícula, en lugar de necesitar un bloque de widget por categoría:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>¿Queres unha unidade de estilo de pé de páxina xunto á túa de contido, cada unha amosando anuncios diferentes? Engade un segundo bloque de widgets con data-layout="compact" (un único anuncio, colapsable nunha pequena píldora) e data-offset configurado ao número de anuncios que xa amosa o teu primeiro 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 | ID da categoría para mostrar. Obrigatorio — a menos que estea configurado data-partner, nese caso omitilo amosa os anuncios dese socio en todas as categorías. |
data-geo | Alcance xeográfico: local, rexional ou global. Por defecto, global. |
data-count | Número de anuncios para mostrar. Por defecto, 4. |
data-columns | Número de columnas da grella. Por defecto, 2. |
data-layout | grid, list ou compact. Por defecto, grid. compact amosa un único anuncio (data-count ignórase) cun botón para colapsalo nunha pequena píldora e devolvelo — unha unidade estilo pé de páxina, que o script nunca sitúa fixa; ti colocas e estilizas o elemento div do contedor como queiras na túa propia páxina. |
data-offset | Número de anuncios de alta posición que omitir. Por defecto, 0. Permite que un segundo widget na mesma páxina (por exemplo, un de compacto no pé de páxina e outro en rede máis arriba) amose anuncios diferentes en lugar de repetir o mesmo dúas veces — pasa o número de anuncios que o outro widget xa amosa. |
data-partner | O teu ID de socio (atópalo na páxina de Desenvolvedores do teu propio panel de control). Opcional — sen el, o widget amosa a clasificación pública completa desa categoría, con todos os anunciantes da plataforma. Con el, só os anuncios dos anunciantes que trouxeches a través do modo Connect — os que realmente xeran a túa cota. |
As solicitudes están limitadas por chave e por minuto. Cada resposta autenticada inclúe as cabeceiras X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset; superar o límite devolve un código 429 Too Many Requests cunha cabeceira Retry-After.
Opcional, por socio. Ata que engadas unha entrada, as túas claves aceptan solicitudes de calquera IP — a primeira entrada cambia todas as claves dese socio para que só permitan solicitudes da lista de permitidos.
Cada webhook está asinado con HMAC-SHA256 empregando un segredo emitido unha soa vez no momento da creación — comproba a sinatura antes de confiar na carga útil. Os eventos entreganse só ao socio que posúe o anunciante correspondente.
payment.succeeded | Un pago está confirmado. |
payment.refunded | Efectúase un reembolso. |
ad.activated | Un anuncio faise activo, automaticamente ou despois da revisión do administrador. |
invoice.issued | Emítese unha factura. |
referral.payout.completed | Unha comisión de referencia alcanza o estado de pagada. |
referral.payout.failed | Un lote de pagamentos de referencias falla no provedor — os ingresos volven ao estado pendente de pago e volven a procesarse. |
rank.changed | A posición dun anuncio cambia — incluso cando o pago doutro anunciante o provoca. |
ad.expiring_soon | 30, 7 ou 1 día(s) antes de que un anuncio caduque. |
partner_ad_revenue.payout.completed | Un pago de repartición de ingresos publicitarios alcanza o estado de pago. |
partner_ad_revenue.payout.failed | Un lote de pagamentos de reparto de ingresos publicitarios falla no provedor — as participacións volven ao estado pendente de pago e volven a procesarse. |
Os SDKs oficiais de JavaScript/TypeScript e Python, xerados a partir desta mesma especificación da API, están previstos pero aínda non foron publicados — ata entón, chame directamente á API HTTP.
Aínda non hai SDK — estas chaman directamente á API HTTP e funcionan hoxe en calquera linguaxe.
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": "...",
},
)