Annual Ads

Tài liệu dành cho nhà phát triển

Phát triển trực tiếp trên nền tảng Annual Ads — tạo tài khoản nhà quảng cáo, đăng quảng cáo, thực hiện thanh toán và theo dõi thứ hạng, hoàn toàn thông qua API.

Xem bảng giá đầy đủ

Bạn vẫn giữ 70% từ số tiền mà các nhà quảng cáo ở chế độ Connect trả cho quảng cáo của họ — số tiền này sẽ được chuyển tự động vào ví của bạn. Hãy xem cách thức hoạt động dưới đây.

URL gốc

https://api.adhub365.com
OpenAPI 3

Xác thực

Mỗi yêu cầu đều được xác thực bằng một khóa bí mật trong tiêu đề Authorization, thông qua cơ chế Bearer.

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

Môi trường thử nghiệm & môi trường sản xuất

Các khóa trong môi trường thử nghiệm và môi trường sản xuất được cách ly hoàn toàn với nhau — một khóa trong môi trường thử nghiệm không bao giờ có thể đọc hoặc ghi dữ liệu do một khóa trong môi trường sản xuất tạo ra, và ngược lại.

Phạm vi

Mỗi khóa chỉ có hiệu lực trong phạm vi mà nó được cấp — một khóa không bao giờ có quyền truy cập rộng hơn tài khoản đối tác đã tạo ra nó.

Các khóa API được nhóm Annual Ads cấp cho các tài khoản đối tác đã được phê duyệt.

Tạo tài khoản đối tác

Chia sẻ doanh thu quảng cáo

Nếu các khóa API của bạn được dùng để tạo tài khoản nhà quảng cáo cho người dùng của chính bạn (chế độ Connect — xem phần Xác thực ở trên), bạn sẽ nhận được một phần hoa hồng từ số tiền mà các nhà quảng cáo đó chi trả cho quảng cáo của họ. Tỷ lệ phân chia dưới đây được lấy trực tiếp từ chính điểm cuối này, không bao giờ được cài đặt cố định, và hoàn toàn tách biệt với hoa hồng giới thiệu được đề cập ở phần sau của trang này.

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

70%

Đến lượt bạn

Tiền sẽ được chuyển tự động vào ví nhận tiền mà bạn đã thiết lập — không cần yêu cầu rút tiền.

30%

Chuyển đến mục Quảng cáo hàng năm

Bao gồm các nội dung về kiểm duyệt, lưu trữ và cơ sở hạ tầng xếp hạng mà quảng cáo của bạn chạy trên đó.

Cách thức hoạt động

  1. Một trong những nhà quảng cáo ở chế độ Connect của bạn thanh toán tiền quảng cáo thông qua hệ thống tích hợp của bạn.
  2. Quảng cáo sẽ được xem xét và phê duyệt — tự động hoặc bởi đội ngũ kiểm duyệt của chúng tôi.
  3. Phần thưởng của bạn đã được đưa vào danh sách chờ để được thanh toán tự động vào ví của bạn, theo cơ chế tương tự như chương trình giới thiệu dưới đây.
Phần chia sẻ sẽ không bao giờ được tạo ra trước khi quảng cáo thực sự được phê duyệt — nếu bộ phận kiểm duyệt từ chối quảng cáo đó, sẽ không có khoản thanh toán nào phải thực hiện cho lần thanh toán đó. Việc nạp thêm tiền vào một quảng cáo đã đang hoạt động không tiềm ẩn rủi ro như vậy và phần chia sẻ sẽ được thực hiện ngay lập tức.

Điều kiện thanh toán

  • Một ví nhận tiền điện tử đã được thiết lập trên tài khoản đối tác của bạn.
  • Bạn không cần phải thực hiện xác minh danh tính (KYC) — tài khoản đối tác của bạn đã được kiểm tra kỹ lưỡng ngay từ khi được tạo.

Ví dụ: đọc số cổ phần tích lũy

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
}

Điểm cuối

Tài khoản

POST/v1/partner/advertisers

Tạo tài khoản nhà quảng cáo thay mặt cho một trong những người dùng của bạn (chế độ Connect).

advertisers:write
GET/v1/partner/advertisers/{id}

Tra cứu tài khoản nhà quảng cáo do đối tác này tạo.

advertisers:read

Quảng cáo

POST/v1/partner/ads

Tạo một quảng cáo. Quảng cáo sẽ bắt đầu ở trạng thái bản nháp. Các trường tùy chọn như advertiser_type, promotion_type, link_type và promoted_brand dùng để mô tả các loại quảng cáo như liên kết tiếp thị, giới thiệu, người sáng tạo nội dung hoặc cá nhân — xem lưu ý bên dưới.

ads:write
GET/v1/partner/ads/{id}

Tìm kiếm một quảng cáo.

ads:read
PATCH/v1/partner/ads/{id}

Cập nhật nội dung biên tập — tiêu đề, mô tả, liên kết, loại nhà quảng cáo, loại chương trình khuyến mãi, loại liên kết và thương hiệu được quảng bá. Danh mục, khu vực địa lý và bất kỳ thông tin nào được công cụ xếp hạng đọc đều không thể thay đổi tại đây.

ads:write
POST/v1/partner/ads/{id}/image

Tải lên trực tiếp hình ảnh quảng cáo (định dạng JPEG/PNG/WebP, tối đa 5 MB). Yêu cầu này phải được thực hiện trước khi thực hiện khoản thanh toán đầu tiên — xem phần “Thanh toán” bên dưới.

ads:write
POST/v1/partner/ads/{id}/image-url

Đặt hình ảnh quảng cáo từ một URL thay vì tải lên tệp — máy chủ sẽ tự động tải về và lưu trữ lại hình ảnh đó. Yêu cầu tương tự: phải thực hiện trước khi thực hiện khoản thanh toán đầu tiên.

ads:write
GET/v1/partner/ads/{id}/rank

Xếp hạng hiện tại, danh mục và phạm vi địa lý của một quảng cáo.

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

Tổng số lượt xem và lượt nhấp vào quảng cáo — số ngày đã trôi qua/còn lại được lấy từ các trường `activated_at`/`expires_at` đã có sẵn trong yêu cầu GET /{id}, còn thứ hạng được lấy từ yêu cầu GET /{id}/rank.

ads:read

Thanh toán

POST/v1/partner/payments

Bắt đầu thanh toán bằng tiền điện tử cho giao dịch mua ban đầu hoặc nạp tiền. Giao dịch thanh toán ban đầu sẽ bị lỗi với mã 422 trừ khi quảng cáo đã có hình ảnh — xem phần uploadAdImage/setAdImageUrl ở trên.

payments:write
GET/v1/partner/payments/{id}

Kiểm tra trạng thái thanh toán.

payments:read

Giới thiệu

POST/v1/partner/referrals

Tạo liên kết giới thiệu.

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

Tổng thu nhập từ giới thiệu, phân tích theo từng trạng thái.

referrals:read

Chia sẻ doanh thu quảng cáo

GET/v1/partner/ad-revenue/earnings

70% phần chia của bạn từ số tiền mà các nhà quảng cáo do bạn tạo ra trong chế độ Connect đã chi trả cho quảng cáo của họ, được phân loại theo trạng thái.

ad-revenue:read

Nhật ký truy cập

GET/v1/partner/access-log

Lịch sử cuộc gọi đầy đủ cho khóa này — phương thức, đường dẫn, địa chỉ IP, dấu thời gian.

Ở đó

Các điểm cuối công khai

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

Xếp hạng chỉ đọc cho một danh mục và phạm vi địa lý.

Công khai
GET/v1/tiers

7 mức giá đã được thiết lập (mức ngưỡng, các quyền lợi được mở khóa).

Công khai
GET/v1/referral-program

Các tỷ lệ hoa hồng hiện đang áp dụng cho chương trình giới thiệu theo cấp bậc và Quỹ Lãnh đạo.

Công khai
GET/v1/partner-program

Tỷ lệ chia sẻ doanh thu quảng cáo hiện tại (chế độ Connect) giữa bạn và Annual Ads.

Công khai
GET/v1/search?q={query}

Tìm kiếm bằng ngôn ngữ tự nhiên — chuyển một truy vấn như "các nhà quảng cáo đồ nội thất ở Kenya" đến danh mục và phạm vi địa lý phù hợp, sau đó trả về kết quả xếp hạng đó theo thứ tự chính xác như thực tế.

Công khai

Quảng cáo liên kết và giới thiệu

advertiser_type, promotion_type, link_type và promoted_brand là các trường tùy chọn trong các yêu cầu POST và PATCH gửi đến /v1/partner/ads — Annual Ads không chỉ giới hạn ở các doanh nghiệp tự quảng cáo cho mình. Khi link_type là affiliate_link hoặc referral_invitation_link, hoặc promotion_type là affiliate_offer hoặc referral_opportunity, affiliate_terms_accepted phải có giá trị true, nếu không yêu cầu sẽ bị từ chối với mã trạng thái 422. "title" bị giới hạn tối đa 35 ký tự và "description" tối đa 80 ký tự — cả hai đều được áp dụng ở phía máy chủ, không chỉ trong giao diện người dùng (UI) của bảng điều khiển.

Các công cụ AI

Mỗi tài khoản nhà quảng cáo đều được cung cấp một bộ công cụ AI tích hợp sẵn — bao gồm công cụ tạo nội dung và hình ảnh quảng cáo, trợ lý trò chuyện, công cụ tư vấn ngân sách và công cụ kiểm tra SEO bên ngoài — được thanh toán bằng tín dụng AI, bên cạnh mức giá cố định hàng năm.

Các chức năng này được thực hiện thông qua thông tin đăng nhập vào bảng điều khiển của chính nhà quảng cáo (một mã thông báo truy cập phiên), chứ không phải thông qua khóa API của đối tác — do đó, một giải pháp tích hợp của bên thứ ba không thể gọi các chức năng này thay mặt cho nhà quảng cáo.
POST/v1/advertisers/{id}/ai/assistant

Hỏi Annual Ads — một trợ lý trò chuyện ảo, chỉ mang tính chất cung cấp thông tin, chỉ có quyền truy cập đọc đối với dữ liệu tài khoản.

Công khai
POST/v1/advertisers/{id}/ai/creative-studio

Tạo tiêu đề quảng cáo, mô tả và từ khóa dựa trên một đoạn mô tả ngắn về doanh nghiệp.

2 tín chỉ
POST/v1/advertisers/{id}/ai/creative-studio/image

Tạo hình ảnh danh sách (PNG) dựa trên cùng một mô tả doanh nghiệp, đã được lưu trữ và sẵn sàng để đính kèm vào quảng cáo.

8 tín chỉ
POST/v1/advertisers/{id}/ai/budget-advisor

Một dự báo thống kê thực sự — chứ không phải là một phỏng đoán mang tính suy diễn — về xác suất duy trì một thứ hạng nhất định sau 30/90/365 ngày.

1 tín chỉ
POST/v1/advertisers/{id}/ai/seo-audit

Phân tích trang web bên ngoài của chính nhà quảng cáo và đề xuất các biện pháp cải thiện SEO cụ thể.

2 tín chỉ

Ví dụ — tạo nội dung quảng cáo

Danh mục và mô tả hoạt động kinh doanh này cũng được sử dụng làm cơ sở cho công cụ tạo hình ảnh bên dưới.

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
}

Tạo hình ảnh phù hợp cho quảng cáo đó:

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
}

Widget

Chỉ cần kéo và thả một đơn vị quảng cáo đã được tạo sẵn vào trang web của bạn — không cần bước xây dựng, không cần iframe. Tập lệnh này được hiển thị trực tiếp trên trang trong một Shadow DOM cách ly, do đó các kiểu định dạng của nó sẽ không bao giờ ảnh hưởng đến trang web của bạn, và ngược lại, các kiểu định dạng của trang web bạn cũng sẽ không bao giờ ảnh hưởng đến nó.

Thêm vào trang của bạn

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

Theo mặc định, phần này hiển thị bảng xếp hạng công khai đầy đủ cho danh mục đó — bao gồm tất cả các nhà quảng cáo trên nền tảng, không chỉ những nhà quảng cáo do bạn giới thiệu. Để chỉ hiển thị các quảng cáo từ những nhà quảng cáo mà bạn đã tạo thông qua Chế độ Connect (những nhà quảng cáo mang lại phần chia sẻ cho bạn), hãy thêm thuộc tính `data-partner` kèm theo ID đối tác của bạn (bạn có thể tìm thấy ID này trên trang Nhà phát triển trong bảng điều khiển của chính bạn):

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

Nếu các nhà quảng cáo của bạn thuộc nhiều danh mục khác nhau, hãy loại bỏ hoàn toàn thuộc tính `data-category` — chỉ cần giữ lại thuộc tính `data-partner`, tiện ích sẽ hiển thị tất cả các quảng cáo của bạn thuộc mọi danh mục trong một lưới duy nhất, thay vì phải tạo một khối tiện ích riêng cho từng danh mục:

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

Bạn muốn có một đơn vị quảng cáo kiểu chân trang bên cạnh đơn vị quảng cáo trong nội dung, mỗi đơn vị hiển thị các quảng cáo khác nhau? Hãy thêm một khối widget thứ hai với thuộc tính `data-layout="compact"` (một quảng cáo duy nhất, có thể thu gọn thành ô nhỏ) và thuộc tính `data-offset` được đặt bằng số lượng quảng cáo mà widget đầu tiên của bạn đang hiển thị:

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

Thuộc tính

data-categoryID danh mục cần hiển thị. Bắt buộc — trừ khi đã thiết lập thuộc tính `data-partner`; trong trường hợp đó, việc bỏ trống trường này sẽ hiển thị quảng cáo của đối tác đó trên tất cả các danh mục.
data-geoPhạm vi địa lý: địa phương, khu vực hoặc toàn cầu. Mặc định là toàn cầu.
data-countSố lượng quảng cáo sẽ hiển thị. Giá trị mặc định là 4.
data-columnsSố cột của lưới. Giá trị mặc định là 2.
data-layoutbố cục dạng lưới, danh sách hoặc dạng gọn. Mặc định là bố cục dạng lưới. Chế độ “compact” hiển thị một quảng cáo duy nhất (thuộc tính `data-count` sẽ bị bỏ qua) kèm theo nút để thu gọn quảng cáo thành một ô nhỏ và mở rộng lại — đây là một đơn vị kiểu chân trang, không bao giờ được skript tự động cố định vị trí; bạn có thể tự do đặt vị trí và định dạng phần tử `div` chứa quảng cáo theo ý muốn trên trang của mình.
data-offsetSố lượng quảng cáo có thứ hạng cao nhất cần bỏ qua. Giá trị mặc định là 0. Tính năng này cho phép một widget thứ hai trên cùng một trang (ví dụ: một widget nhỏ gọn ở phần chân trang và một widget dạng lưới ở phía trên) hiển thị các quảng cáo khác nhau thay vì lặp lại cùng một quảng cáo hai lần — hãy truyền vào số lượng quảng cáo mà widget kia đã hiển thị.
data-partnerID đối tác của bạn (bạn có thể tìm thấy thông tin này trên trang “Developers” trong bảng điều khiển cá nhân). Tùy chọn — nếu không nhập ID này, tiện ích sẽ hiển thị bảng xếp hạng công khai đầy đủ cho danh mục đó, bao gồm tất cả các nhà quảng cáo trên nền tảng. Nếu nhập ID này, tiện ích sẽ chỉ hiển thị các quảng cáo từ những nhà quảng cáo mà bạn đã giới thiệu thông qua chế độ Connect — tức là những nhà quảng cáo thực sự mang lại phần chia sẻ hoa hồng cho bạn.

Phần chia doanh thu

Cách thức hoa hồng giới thiệu thực sự được chuyển đến đối tác — tỷ lệ phần trăm, cơ chế thanh toán và các điều kiện tiên quyết.

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
}

Không phải là một con số cố định

Tỷ lệ hoa hồng được cấu hình từ phía chúng tôi và có thể thay đổi — hãy luôn lấy giá trị này theo thời gian thực từ điểm cuối này thay vì cài đặt cố định một giá trị.

Hoàn toàn tự động

Không có thời điểm kết thúc việc rút tiền. Một tác vụ được lên lịch sẽ tính toán số tiền thu nhập đến hạn thanh toán, gộp chúng lại theo từng nhà quảng cáo và tự động thanh toán ngay khi tất cả các điều kiện dưới đây được đáp ứng.

Điều kiện thanh toán

  • Tổng số tiền thu nhập phải thanh toán cho nhà quảng cáo đã đạt đến mức thanh toán tối thiểu.
  • Một ví nhận tiền điện tử đã được thiết lập trên tài khoản của họ.
  • Tình trạng xác minh danh tính (KYC) của họ đã được xác nhận.

Ví dụ: xem lợi nhuận lũy kế

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
}

Các mức giá (đang áp dụng)

Đọc dữ liệu trực tiếp từ điểm cuối này — tuyệt đối không được ghi cứng các giá trị này, vì chúng có thể thay đổi từ phía chúng tôi. Hãy tạo một công cụ chọn gói dịch vụ cho người dùng của bạn thay vì một trường nhập số tiền miễn phí: mỗi mức giá hiển thị đã là số tiền chính xác cần chuyển khi tạo giao dịch thanh toán, và các lợi ích được mở khóa hiển thị tại đây cho người dùng biết chính xác họ sẽ nhận được gì với mức giá đó, nhờ đó họ có thể chọn mức giá mà họ hiểu rõ thay vì phải đoán mò.

Cấp độGiáMở khóa
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Liên kết có thể nhấp vào
Gold$500.00

Animation unlocked

Liên kết có thể nhấp vàoHoạt hình
Platinum$1,000.00

Enhanced exposure

Liên kết có thể nhấp vàoHoạt hình
Diamond$2,500.00

Premium placement

Liên kết có thể nhấp vàoHoạt hình
Elite$5,000.00

Top-tier visibility

Liên kết có thể nhấp vàoHoạt hình
Legendary$10,000.00

Maximum visibility & branding

Liên kết có thể nhấp vàoHoạt hình

Giới hạn tốc độ

Số lượng yêu cầu được giới hạn theo từng khóa và theo từng phút. Mỗi phản hồi đã được xác thực đều chứa các tiêu đề X-RateLimit-Limit, X-RateLimit-Remaining và X-RateLimit-Reset; nếu vượt quá giới hạn, hệ thống sẽ trả về mã trạng thái 429 Too Many Requests kèm theo tiêu đề Retry-After.

Danh sách cho phép IP

Tùy chọn, cho từng đối tác. Cho đến khi bạn thêm một mục, các khóa của bạn sẽ chấp nhận yêu cầu từ bất kỳ địa chỉ IP nào — mục đầu tiên sẽ chuyển tất cả các khóa của đối tác đó sang chế độ chỉ cho phép các địa chỉ trong danh sách cho phép.

Webhooks

Mỗi webhook đều được ký bằng HMAC-SHA256 bằng cách sử dụng một khóa bí mật được cấp một lần duy nhất tại thời điểm tạo — hãy xác minh chữ ký trước khi tin tưởng vào nội dung tin nhắn. Các sự kiện chỉ được gửi đến đối tác sở hữu nhà quảng cáo liên quan.

payment.succeededGiao dịch thanh toán đã được xác nhận.
payment.refundedViệc hoàn tiền đã được thực hiện.
ad.activatedMột quảng cáo sẽ được kích hoạt, tự động hoặc sau khi được quản trị viên duyệt.
invoice.issuedHóa đơn đã được lập.
referral.payout.completedHoa hồng giới thiệu đã đạt trạng thái đã thanh toán.
referral.payout.failedMột đợt thanh toán hoa hồng giới thiệu bị lỗi tại phía nhà cung cấp — số tiền thu được được chuyển trở lại vào khoản phải trả và sẽ được thực hiện lại.
rank.changedThứ hạng của một quảng cáo có thể thay đổi — bao gồm cả trường hợp do khoản thanh toán của một nhà quảng cáo khác gây ra.
ad.expiring_soon30, 7 hoặc 1 ngày trước khi quảng cáo hết hạn.
partner_ad_revenue.payout.completedMột khoản thanh toán chia sẻ doanh thu quảng cáo đã đạt trạng thái “đã thanh toán”.
partner_ad_revenue.payout.failedMột đợt thanh toán chia sẻ doanh thu quảng cáo không thành công tại phía nhà cung cấp — các khoản chia sẻ được chuyển trở lại danh sách phải trả và sẽ được thử lại.

Bộ công cụ phát triển phần mềm

Các bộ SDK chính thức cho JavaScript/TypeScript và Python, được tạo ra dựa trên cùng một đặc tả API này, đang được lên kế hoạch nhưng chưa được công bố — cho đến khi đó, hãy gọi trực tiếp API HTTP.

Hướng dẫn nhanh

Hiện chưa có SDK — các phương thức này gọi trực tiếp API HTTP và hiện đã hoạt động trên mọi ngôn ngữ lập trình.

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