Annual Ads

Documentación do desenvolvedor

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 prezos

Ti 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.

URL base

https://api.adhub365.com
OpenAPI 3

Autenticació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/json

Sandbox e produción

As claves de sandbox e de produción están totalmente illadas entre si — unha clave de sandbox nunca poderá ler nin escribir datos creados por unha clave de produción, e viceversa.

Alcance

Cada chave está limitada aos ámbitos cos que se emitiu — unha chave nunca ten máis acceso que a conta de socio que a creou.

As chaves de API son emitidas ás contas de socios aprobadas polo equipo de Anuncios Anuais.

Crear unha conta de socio

Compartición de ingresos publicitarios

Se as túas claves de API crean contas de anunciantes para os teus propios usuarios (modo Connect — véxase Autenticación máis arriba), gañas unha parte do que eses anunciantes pagan polos seus anuncios. A repartición que aparece a continuación léese en tempo real desde este mesmo punto final, nunca está codificada en pedra e é completamente independente da comisión de referencia máis abaixo nesta páxina.

GET https://api.adhub365.com/v1/partner-program
{
  "partner_share_percentage": 0.7,
  "platform_share_percentage": 0.3
}

70%

Vai para ti

Pago automático á túa carteira de pago configurada — non é necesario solicitar a retirada.

30%

Vai a Anuncios anuais

Cubre a moderación, a xestión de servidores e a infraestrutura de clasificación na que se executan os teus anuncios.

Como funciona

  1. Un dos teus anunciantes en modo Connect paga un anuncio a través da túa integración.
  2. O anuncio revísase e apróbase — automaticamente ou polo noso equipo de moderación.
  3. A túa parte está na cola para o pago automático á túa carteira, o mesmo mecanismo que no programa de referencias de abaixo.
Unha cota nunca se crea ata que o anuncio se aprobe realmente — se a moderación o rexeita, non se debe nada por ese pago. Unha recarga nun anuncio xa activo non supón ese risco e repártese inmediatamente.

Condicións de pago

  • Unha carteira de pago en criptomoedas está configurada na túa conta de socio.
  • Non se require KYC por parte túa — a túa conta de socio xa foi verificada no momento da súa creación.

Exemplo: lectura de accións acumuladas

GET https://api.adhub365.com/v1/partner/ad-revenue/earnings
Authorization: Bearer sk_sandbox_...
{
  "shares": [
    {
      "id": "share_1a2b...",
      "payment_id": "pay_9f2a...",
      "ad_id": "ad_7c31...",
      "partner_amount_usd": 140.0,
      "platform_amount_usd": 60.0,
      "status": "paid",
      "payable_after": "2026-08-03T00:00:00Z",
      "paid_at": "2026-08-05T10:12:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 140.0
}

Puntos finais

Contas

POST/v1/partner/advertisers

Crea 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

Anuncios

POST/v1/partner/ads

Crea 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}/image

Subir 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-url

Establece 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}/rank

Rango actual, categoría e ámbito xeográfico para un anuncio.

ads:read
GET/v1/partner/ads/{id}/stats

O 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

Pagos

POST/v1/partner/payments

Inicia 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

Remisións

POST/v1/partner/referrals

Crea un enlace de referencia.

referrals:write
GET/v1/partner/referrals/{code}/earnings

Ingresos acumulados por referencias, desagregados por estado.

referrals:read

Compartición de ingresos publicitarios

GET/v1/partner/ad-revenue/earnings

A túa cota do 70 % do que pagaron os anunciantes que creaches en modo Connect polos seus anuncios, desagregada por estado.

ad-revenue:read

Registro de acceso

GET/v1/partner/access-log

Historial completo de chamadas para esta clave — método, ruta, IP, marca de tempo.

Alí

Puntos finais públicos

GET/v1/rankings?category={id}&geo={scope}

Ranking de só lectura para unha categoría e ámbito xeográfico.

Público
GET/v1/tiers

Os 7 niveis de prezos configurados (umbral, beneficios desbloqueados).

Público
GET/v1/referral-program

Os porcentaxes de comisión actualmente activos para a cascada de referencias e o Fondo de Líderes.

Público
GET/v1/partner-program

A 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.

Ferramentas de IA

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.

Estes execútanse a través do inicio de sesión no panel de control do anunciante (un token de acceso de sesión), non mediante unha chave de API de socio: unha integración de terceiros non pode chamalos en nome do anunciante.
POST/v1/advertisers/{id}/ai/assistant

Ask 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-studio

Xera 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/image

Xera 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-advisor

Unha 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-audit

Analiza o sitio web externo do anunciante e suxire melloras concretas de SEO.

2 crédito(s)

Exemplo — xerar contido de anuncio

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
}

Gadxete

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.

Engádeo á túa páxina

<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>

Atributos

data-categoryID 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-geoAlcance xeográfico: local, rexional ou global. Por defecto, global.
data-countNúmero de anuncios para mostrar. Por defecto, 4.
data-columnsNúmero de columnas da grella. Por defecto, 2.
data-layoutgrid, 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-offsetNú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-partnerO 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.

Reparto de ingresos

Como a comisión de referencia dun socio realmente chega a el — o porcentaxe, o mecanismo de pago e as precondicións.

GET https://api.adhub365.com/v1/referral-program
{
  "levels": [
    {
      "level": 1,
      "percentage": 0.1
    }
  ],
  "leaders_pool_percentage_of_gmv": 0.05,
  "founding_advertiser_pool_percentage_of_gmv": 0.05,
  "payout_verification_window_hours": 48,
  "min_payout_usd": 1
}

Non é un número fixo

O porcentaxe da comisión está configurado do noso lado e pode cambiar — léeo sempre en tempo real neste endpoint en lugar de codificar un valor fixo.

Totalmente automático

Non hai un punto de retirada. Un traballo programado xera ingresos pagables, agrúpalos por anunciante e efectúa o pago automaticamente unha vez cumpridas todas as condicións seguintes.

Condicións de pago

  • Os ingresos totais pagables do anunciante alcanzan a cantidade mínima de pago.
  • Unha carteira de pago en criptomoedas está configurada na súa conta.
  • O seu estado KYC está verificado.

Exemplo: lectura dos beneficios acumulados

GET https://api.adhub365.com/v1/partner/referrals/{code}/earnings
Authorization: Bearer sk_sandbox_...
{
  "code": "ann-2f8c",
  "earnings": [
    {
      "id": "earn_1a2b...",
      "payment_id": "pay_9f2a...",
      "amount_usd": 30.0,
      "status": "paid",
      "payable_after": "2026-08-01T00:00:00Z",
      "paid_at": "2026-08-03T14:22:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 30.0
}

Niveis de prezos (en directo)

Ler en directo desde este punto final — non codifiques estes valores en pedra, poden cambiar do noso lado. Crea un selector de niveis para os teus propios usuarios en lugar dun campo de contía libre: cada prezo que se mostra é xa a contía exacta que hai que enviar ao crear o pago, e os beneficios desbloqueados que se amosan aquí din aos usuarios exactamente o que lles ofrece ese prezo, para que elixan un prezo que comprendan en lugar de adiviñar un número.

NivelPrezoDesbloqueos
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Vínculo clicable
Gold$500.00

Animation unlocked

Vínculo clicableAnimación
Platinum$1,000.00

Enhanced exposure

Vínculo clicableAnimación
Diamond$2,500.00

Premium placement

Vínculo clicableAnimación
Elite$5,000.00

Top-tier visibility

Vínculo clicableAnimación
Legendary$10,000.00

Maximum visibility & branding

Vínculo clicableAnimación

Límites de taxa

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.

Lista de enderezos IP permitidos

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.

Webhooks

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.succeededUn pago está confirmado.
payment.refundedEfectúase un reembolso.
ad.activatedUn anuncio faise activo, automaticamente ou despois da revisión do administrador.
invoice.issuedEmítese unha factura.
referral.payout.completedUnha comisión de referencia alcanza o estado de pagada.
referral.payout.failedUn lote de pagamentos de referencias falla no provedor — os ingresos volven ao estado pendente de pago e volven a procesarse.
rank.changedA posición dun anuncio cambia — incluso cando o pago doutro anunciante o provoca.
ad.expiring_soon30, 7 ou 1 día(s) antes de que un anuncio caduque.
partner_ad_revenue.payout.completedUn pago de repartición de ingresos publicitarios alcanza o estado de pago.
partner_ad_revenue.payout.failedUn lote de pagamentos de reparto de ingresos publicitarios falla no provedor — as participacións volven ao estado pendente de pago e volven a procesarse.

Conxuntos de desenvolvemento de software

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.

Inicio rápido

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": "...",
    },
)