Annual Ads

개발자 문서

Annual Ads 플랫폼에서 직접 구축하세요. 광고주 생성, 광고 게재, 결제 처리, 순위 추적 등 모든 과정을 API를 통해 수행할 수 있습니다.

전체 가격표 보기

70%를 보유 중입니다. Connect 모드에 참여하는 광고주들이 광고비로 지불하는 금액의 일정 비율을 — 귀하의 지갑으로 자동으로 입금해 드립니다. 아래에서 작동 방식을 확인해 보세요.

기본 URL

https://api.adhub365.com
OpenAPI 3

인증

모든 요청은 Bearer 방식을 사용하여 Authorization 헤더에 포함된 비밀 키로 인증됩니다.

POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/json

샌드박스 및 운영 환경

샌드박스 키와 프로덕션 키는 서로 완전히 분리되어 있습니다. 즉, 샌드박스 키는 프로덕션 키가 생성한 데이터를 읽거나 쓸 수 없으며, 그 반대의 경우도 마찬가지입니다.

범위

각 키는 발급 당시 지정된 범위 내에서만 사용이 제한되며, 키가 가진 접근 권한은 해당 키를 생성한 파트너 계정의 권한을 초과할 수 없습니다.

API 키는 Annual Ads 팀에서 승인된 파트너 계정에 발급합니다.

파트너 계정 만들기

광고 수익 분배

API 키를 통해 자체 사용자를 위한 광고주 계정을 생성하는 경우(Connect 모드 — 위의 ‘인증’ 항목 참조), 해당 광고주들이 광고비로 지불하는 금액의 일정 비율을 수익으로 얻게 됩니다. 아래의 수익 분배 비율은 이 엔드포인트에서 실시간으로 읽어오며, 절대 하드코딩되어 있지 않으며, 이 페이지 하단에 설명된 추천 수수료와는 완전히 별개입니다.

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

70%

당신 차례예요

설정해 둔 지급 지갑으로 자동으로 지급되므로 별도의 출금 신청이 필요하지 않습니다.

30%

연간 광고로 이동

광고 운영, 호스팅 및 광고가 게재되는 순위 결정 인프라에 대해 다룹니다.

작동 원리

  1. 귀사의 Connect 모드 광고주 중 한 곳이 귀사의 연동 기능을 통해 광고 비용을 결제합니다.
  2. 해당 광고는 자동으로 또는 당사의 심사 팀에 의해 검토 및 승인됩니다.
  3. 귀하의 지분은 아래의 추천 프로그램과 동일한 방식으로 지갑으로 자동 지급될 예정이며, 현재 대기 중입니다.
광고가 실제로 승인되기 전에는 수익 분배가 절대 이루어지지 않습니다. 검토 과정에서 광고가 거부될 경우, 해당 결제에 대한 지급 의무는 없습니다. 이미 게재 중인 광고에 대한 추가 충전은 이러한 위험이 없으며, 수익은 즉시 분배됩니다.

지급 조건

  • 파트너 계정에 암호화폐 지급 지갑이 설정되어 있습니다.
  • 사용자 측에서 KYC 절차는 필요하지 않습니다. 파트너 계정은 생성 시 이미 심사를 거쳤기 때문입니다.

예시: 누적 주식 수 조회

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
}

엔드포인트

계정

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, 최대 5MB). 첫 결제 전에 필수로 처리해야 합니다. 자세한 내용은 아래 ‘결제’ 항목을 참조하세요.

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

광고의 총 조회수 및 클릭 수, 경과일/잔여일은 이미 GET /{id}에 포함된 activated_at/expires_at 필드에서 가져오며, 순위는 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%의 몫을 상태별로 분류한 내역입니다.

ad-revenue:read

접속 로그

GET/v1/partner/access-log

이 키에 대한 전체 호출 내역 — 메서드, 경로, IP, 타임스탬프.

거기

공개 엔드포인트

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

카테고리 및 지역 범위에 대한 읽기 전용 순위.

공개
GET/v1/tiers

7가지로 구성된 요금제 단계(요금 기준, 해제된 혜택).

공개
GET/v1/referral-program

현재 추천 계단식 및 리더 풀에 적용 중인 수수료 비율입니다.

공개
GET/v1/partner-program

현재 귀하와 Annual Ads 간의 광고 수익 분배 비율(Connect 모드).

공개
GET/v1/search?q={query}

자연어 검색 — “케냐의 가구 광고주”와 같은 검색어를 해당 카테고리와 지역 범위로 전달한 다음, 정확한 실제 순서대로 해당 검색 결과를 반환합니다.

공개

제휴 및 추천 광고

advertiser_type, promotion_type, link_type 및 promoted_brand는 /v1/partner/ads에 대한 POST 및 PATCH 요청 시 선택적 필드입니다. — Annual Ads는 자사를 광고하는 기업에만 국한되지 않습니다. link_type이 affiliate_link 또는 referral_invitation_link이거나, promotion_type이 affiliate_offer 또는 referral_opportunity인 경우, affiliate_terms_accepted는 true여야 하며, 그렇지 않으면 요청이 422 오류로 거부됩니다. title은 최대 35자, description은 최대 80자로 제한되며, 이는 대시보드 UI뿐만 아니라 서버 측에서도 적용됩니다.

AI 도구

모든 광고주 계정에는 연간 정액 요금 외에 AI 크레딧으로 결제되는 일련의 내장형 AI 도구(광고 콘텐츠 및 시각 자료 생성기, 대화형 어시스턴트, 예산 자문 도구, 외부 SEO 감사 도구)가 제공됩니다.

이 기능들은 파트너 API 키가 아닌 광고주 자신의 대시보드 로그인 정보(세션 액세스 토큰)를 통해 실행되므로, 제3자 통합 서비스는 광고주를 대신하여 이 기능을 호출할 수 없습니다.
POST/v1/advertisers/{id}/ai/assistant

Ask 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 모드를 통해 생성한 광고주(귀하의 수익 분배 대상이 되는 광고주)의 광고만 표시하려면, 파트너 ID(자신의 대시보드 내 ‘개발자’ 페이지에서 확인 가능)를 data-partner 속성에 추가하십시오:

<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’만 지정하면, 위젯이 카테고리별로 별도의 위젯 블록을 만들 필요 없이 모든 카테고리에 걸친 광고를 하나의 그리드에 모두 표시합니다:

<div
  class="annualads-widget"
  data-geo="global"
  data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>

콘텐츠 내 위젯과 별도로 푸터 스타일의 위젯을 추가하여, 각각 다른 광고를 표시하고 싶으신가요? data-layout="compact"(광고 하나만 표시되며 작은 알약 모양으로 접을 수 있음) 속성을 지정하고, data-offset 값을 첫 번째 위젯이 이미 표시하고 있는 광고 개수만큼 설정하여 두 번째 위젯 블록을 추가하세요:

<!-- 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. 필수 항목 — 단, data-partner가 설정된 경우에는 이를 생략하면 해당 파트너의 광고가 모든 카테고리에 표시됩니다.
data-geo지리적 범위: 지역, 광역 또는 전 세계. 기본값은 전 세계입니다.
data-count표시할 광고 수. 기본값은 4입니다.
data-columns그리드 열의 개수. 기본값은 2입니다.
data-layoutgrid, list 또는 compact. 기본값은 grid입니다. compact를 선택하면 광고가 하나만 표시되며(data-count는 무시됨), 이를 작은 알약 모양으로 접거나 다시 펼칠 수 있는 버튼이 제공됩니다. 이는 푸터 스타일의 단위로, 스크립트 자체에 의해 고정 위치로 설정되지 않으므로, 사용자는 자신의 페이지에서 컨테이너 div의 위치와 스타일을 원하는 대로 설정할 수 있습니다.
data-offset건너뛸 상위 순위 광고의 수입니다. 기본값은 0입니다. 같은 페이지에 있는 두 번째 위젯(예: 푸터에 있는 소형 위젯과 그보다 위쪽에 있는 그리드형 위젯)이 동일한 광고를 두 번 반복해서 표시하는 대신 다른 광고를 표시할 수 있도록 합니다. 다른 위젯에 이미 표시되고 있는 광고 수를 이 매개변수로 전달하세요.
data-partner파트너 ID(본인의 대시보드 내 ‘개발자’ 페이지에서 확인할 수 있습니다). 선택 사항 — 이 정보를 입력하지 않으면 위젯에는 해당 카테고리의 전체 공개 순위, 즉 플랫폼에 등록된 모든 광고주의 순위가 표시됩니다. 이 정보를 입력하면 ‘Connect’ 모드를 통해 유치한 광고주, 즉 실제로 귀하의 수익 분배를 발생시키는 광고주의 광고만 표시됩니다.

수익 분배

파트너에게 추천 수수료가 실제로 어떻게 지급되는지 — 수수료율, 지급 방식, 그리고 전제 조건.

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
}

정해진 숫자가 아님

수수료 비율은 당사 측에서 설정되며 변경될 수 있으므로, 값을 고정으로 지정하지 말고 항상 이 엔드포인트에서 실시간으로 확인하시기 바랍니다.

완전 자동

인출 마감 시점은 없습니다. 예약된 작업은 지급 가능한 수익을 산정하고, 광고주별로 묶은 후, 아래의 모든 조건이 충족되면 자동으로 지급합니다.

지급 조건

  • 광고주의 총 지급 대상 수익이 최소 지급 금액에 도달했습니다.
  • 해당 계정에 암호화폐 지급 지갑이 설정되어 있습니다.
  • 해당 사용자의 KYC 상태가 확인되었습니다.

예시: 누적 이익 확인하기

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
}

가격 등급 (실시간)

이 엔드포인트에서 실시간으로 데이터를 읽어오세요. 이 값들을 절대 하드코딩하지 마세요. 당사 측에서 변경될 수 있습니다. 무료 금액 입력란 대신 사용자를 위한 요금제 선택기를 구축하세요. 표시된 각 가격은 결제 생성 시 전송해야 할 정확한 금액이며, 여기에 표시된 혜택은 해당 가격으로 무엇을 얻을 수 있는지 사용자에게 명확히 알려주므로, 사용자는 숫자를 추측하는 대신 자신이 이해할 수 있는 가격을 선택할 수 있습니다.

티어가격잠금 해제
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

클릭 가능한 링크
Gold$500.00

Animation unlocked

클릭 가능한 링크애니메이션
Platinum$1,000.00

Enhanced exposure

클릭 가능한 링크애니메이션
Diamond$2,500.00

Premium placement

클릭 가능한 링크애니메이션
Elite$5,000.00

Top-tier visibility

클릭 가능한 링크애니메이션
Legendary$10,000.00

Maximum visibility & branding

클릭 가능한 링크애니메이션

요율 상한선

요청은 키당, 분당 제한이 적용됩니다. 인증된 모든 응답에는 X-RateLimit-Limit, X-RateLimit-Remaining 및 X-RateLimit-Reset 헤더가 포함되며, 제한을 초과할 경우 Retry-After 헤더가 포함된 429 Too Many Requests 오류가 반환됩니다.

IP 허용 목록

선택 사항이며, 파트너별로 적용됩니다. 항목을 추가하기 전까지는 해당 파트너의 모든 키가 모든 IP의 요청을 수락하지만, 첫 번째 항목을 추가하면 해당 파트너의 모든 키가 허용 목록으로만 제한됩니다.

웹훅

모든 웹훅은 생성 시점에 한 번 발급된 비밀 키를 사용하여 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광고 수익 분배 지급 처리가 제공업체 측에서 실패했습니다. 분배금은 미지급금으로 되돌아가며 다시 시도됩니다.

소프트웨어 개발 키트

이 API 사양을 기반으로 생성된 공식 JavaScript/TypeScript 및 Python SDK는 출시될 예정이지만 아직 공개되지 않았습니다. 출시 전까지는 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": "...",
    },
)