Annual Ads 플랫폼에서 직접 구축하세요. 광고주 생성, 광고 게재, 결제 처리, 순위 추적 등 모든 과정을 API를 통해 수행할 수 있습니다.
전체 가격표 보기70%를 보유 중입니다. Connect 모드에 참여하는 광고주들이 광고비로 지불하는 금액의 일정 비율을 — 귀하의 지갑으로 자동으로 입금해 드립니다. 아래에서 작동 방식을 확인해 보세요.
모든 요청은 Bearer 방식을 사용하여 Authorization 헤더에 포함된 비밀 키로 인증됩니다.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPI 키는 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, 최대 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/tiers7가지로 구성된 요금제 단계(요금 기준, 해제된 혜택). | 공개 |
| 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 도구(광고 콘텐츠 및 시각 자료 생성기, 대화형 어시스턴트, 예산 자문 도구, 외부 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-advisor30일, 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-layout | grid, list 또는 compact. 기본값은 grid입니다. compact를 선택하면 광고가 하나만 표시되며(data-count는 무시됨), 이를 작은 알약 모양으로 접거나 다시 펼칠 수 있는 버튼이 제공됩니다. 이는 푸터 스타일의 단위로, 스크립트 자체에 의해 고정 위치로 설정되지 않으므로, 사용자는 자신의 페이지에서 컨테이너 div의 위치와 스타일을 원하는 대로 설정할 수 있습니다. |
data-offset | 건너뛸 상위 순위 광고의 수입니다. 기본값은 0입니다. 같은 페이지에 있는 두 번째 위젯(예: 푸터에 있는 소형 위젯과 그보다 위쪽에 있는 그리드형 위젯)이 동일한 광고를 두 번 반복해서 표시하는 대신 다른 광고를 표시할 수 있도록 합니다. 다른 위젯에 이미 표시되고 있는 광고 수를 이 매개변수로 전달하세요. |
data-partner | 파트너 ID(본인의 대시보드 내 ‘개발자’ 페이지에서 확인할 수 있습니다). 선택 사항 — 이 정보를 입력하지 않으면 위젯에는 해당 카테고리의 전체 공개 순위, 즉 플랫폼에 등록된 모든 광고주의 순위가 표시됩니다. 이 정보를 입력하면 ‘Connect’ 모드를 통해 유치한 광고주, 즉 실제로 귀하의 수익 분배를 발생시키는 광고주의 광고만 표시됩니다. |
요청은 키당, 분당 제한이 적용됩니다. 인증된 모든 응답에는 X-RateLimit-Limit, X-RateLimit-Remaining 및 X-RateLimit-Reset 헤더가 포함되며, 제한을 초과할 경우 Retry-After 헤더가 포함된 429 Too Many Requests 오류가 반환됩니다.
선택 사항이며, 파트너별로 적용됩니다. 항목을 추가하기 전까지는 해당 파트너의 모든 키가 모든 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": "...",
},
)