1. TopupAndBalance
Cosmic Agency Ad Accounts API
  • Auth
    • 获取 tenant_access_token
      POST
    • Bearer probe
      GET
  • AdAccounts
    • List ad accounts (token-bound client only)
      GET
  • TopUpsList
    • List top-ups for token-bound client
      GET
    • Get one top-up (404 if other tenant)
      GET
  • FundTransfersList
    • List clear/deduct tickets for token-bound client
      GET
    • Get one fund transfer (404 if other tenant)
      GET
  • Insights
    • Daily spend for Meta ad accounts
      GET
    • Daily spend by country for Meta ad accounts
      GET
  • TopupAndBalance
    • Submit topup (aligns with New Top-up modal)
      POST
    • Balance clear → wallet (pending approval)
      POST
    • Partial deduct → wallet (pending approval)
      POST
  1. TopupAndBalance

Partial deduct → wallet (pending approval)

POST
/api/v1/ad-accounts/balance-deduct

Partial deduct

  • Hard rate limit: 1 request / 5 seconds per API client (money_write bucket).

  • Requires Idempotency-Key (same key within 24h replays first response).

  • Each item also requires unique_id UUID stored on the row; reuse → 409 DUPLICATE_UNIQUE_ID.

  • Failed requests also count. Over limit → 429 RATE_LIMITED + Retry-After.

  • Scope: ad_accounts:deduct.

  • Active accounts only; amount <= 60% of balance; HK/Package blocked.

  • Each item meta_id is the Meta ad account id (act_ prefix optional). Each item requires unique_id; reuse → 409 DUPLICATE_UNIQUE_ID.

Webhook

We POST this JSON to the webhook_url saved in Developer Settings. This is not an endpoint you call.

  • unique_id is the item id from the request. status is success or fail. reason is present on fail only.
  • Success is deduped by (api_client, unique_id, type) for about 24 hours. Any 2xx from your URL counts as received.
  • Not sent for validation errors.
  • This call only creates a pending-approval ticket. No webhook is sent at submit time.
  • After an admin approves and the deduct completes, type is deduct and status is success. After an admin denies, status is fail.
{ "type": "deduct", "unique_id": "550e8400-e29b-41d4-a716-446655440002", "status": "success" }
{ "type": "deduct", "unique_id": "550e8400-e29b-41d4-a716-446655440002", "status": "fail", "reason": "denied" }

请求参数

Authorization
Bearer Token
在 Header 添加参数
Authorization
,其值为在 Bearer 之后拼接 Token
示例:
Authorization: Bearer ********************
or
Header 参数

Body 参数application/json必填

示例
{
    "items": [
        {
            "meta_id": "123456789012345",
            "amount": 1,
            "unique_id": "677cf8c4-9b37-4a4b-b000-2ee947357c3a"
        }
    ]
}

请求示例代码

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
请求示例请求示例
Shell
JavaScript
Java
Swift
curl --location 'https://www.cosmicads.app/api/v1/ad-accounts/balance-deduct' \
--header 'Idempotency-Key;' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
    "items": [
        {
            "meta_id": "123456789012345",
            "amount": 1,
            "unique_id": "677cf8c4-9b37-4a4b-b000-2ee947357c3a"
        }
    ]
}'

返回响应

🟢200
application/json
Created pending deduct
Bodyapplication/json

示例
{
    "code": 0,
    "msg": "ok",
    "data": {
        "records": [
            {
                "id": "d4e5f6a7-b8c9-0123-def0-234567890123",
                "unique_id": "e5f6a7b8-c9d0-1234-ef01-345678901234",
                "from_ad_account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                "status": "pending approval",
                "amount": 50,
                "is_all_amount": false,
                "is_to_wallet": true,
                "created_at": "2026-10-01T00:00:00.000Z"
            }
        ]
    },
    "request_id": "string"
}
🟠400
🟠403
🟠409
🟠429
修改于 2026-10-28 06:38:51
上一页
Balance clear → wallet (pending approval)
Built with