Create AceDataCloud Platform Service Application

"Application" indicates the current account's subscription relationship to a service—an application must be made before creating API credentials or calling business interfaces for that application. The first application for a service will automatically receive the free quota set for that service (e.g., 1 Credit), allowing immediate trial use.

ℹ️ This interface belongs to the AceDataCloud Platform Management API, with a unified prefix of https://platform.acedata.cloud/api/v1/. For the complete interface index, see Get AceDataCloud Platform Documentation List.

Complete Integration Process

New users typically go through these 5 steps from registration to successfully calling the first business interface:

  1. Obtain Account TokenManage AceDataCloud Platform Account Token
  2. Select ServiceGet AceDataCloud Platform Service List
  3. Create Application (this document) → Automatically receive free quota
  4. Create API CredentialsCreate AceDataCloud Platform API Credentials
  5. Call Business Interface → Use the obtained 32-bit Token to call https://api.acedata.cloud/<path>

Interface Overview

Item Content
Method POST
URL https://platform.acedata.cloud/api/v1/applications/
Authentication ✅ Requires Account Token
Content-Type application/json

Authentication Description (How to Obtain Account Token)

Request Header:

Authorization: Bearer platform-v1-92eb****629c

The Account Token is a "account-level key" that developers use to manage their account resources via the API. Methods to obtain it:

  1. One-click Creation in Console (Recommended): Log in to AceDataCloud PlatformAccount Token Console → Click "Create" to obtain a token starting with platform-v1-.
  2. API Creation: Use an existing account token or browser login JWT to call POST /api/v1/platform-tokens/, see Manage AceDataCloud Platform Account Token for details.

⚠️ The account token is as sensitive as a password; it is prohibited to write it in front-end code or public repositories. If leaked, delete and recreate it immediately in the console.

Request Body

Parameter Type Required Description
service_id UUID The ID of the service to apply for. Can be obtained from the Service List items[].id

Request Example

cURL

curl -X POST 'https://platform.acedata.cloud/api/v1/applications/' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer platform-v1-92eb****629c' \
  -H 'content-type: application/json' \
  -d '{"service_id": "38ecf158-36f2-42f2-8e7f-6786cdfc2452"}'

Python

import requests

PLATFORM_TOKEN = "platform-v1-92eb****629c"
SERVICE_ID = "38ecf158-36f2-42f2-8e7f-6786cdfc2452"

resp = requests.post(
    "https://platform.acedata.cloud/api/v1/applications/",
    headers={
        "accept": "application/json",
        "authorization": f"Bearer {PLATFORM_TOKEN}",
        "content-type": "application/json",
    },
    json={"service_id": SERVICE_ID},
    timeout=10,
)

if resp.status_code == 201:
    app = resp.json()
    print(f"Application successful! application_id={app['id']}")
    print(f"Free quota granted: {app['remaining_amount']} {app.get('unit', '')}")
elif resp.status_code == 400 and resp.json().get("code") == "duplication":
    print("⚠️ This service has already been applied for, please find the existing application_id in the /applications/ list")
else:
    print(f"Application failed: HTTP {resp.status_code} - {resp.text}")

Node.js

const PLATFORM_TOKEN = 'platform-v1-92eb****629c'
const SERVICE_ID = '38ecf158-36f2-42f2-8e7f-6786cdfc2452'

const resp = await fetch('https://platform.acedata.cloud/api/v1/applications/', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: `Bearer ${PLATFORM_TOKEN}`,
    'content-type': 'application/json',
  },
  body: JSON.stringify({ service_id: SERVICE_ID }),
})

if (resp.status === 201) {
  const app = await resp.json()
  console.log('application_id =', app.id)
} else {
  console.error(await resp.text())
}

Response Example

Success (HTTP 201)

{
  "id": "82f57141-2323-4453-8730-60f7d833a2da",
  "service_id": "38ecf158-36f2-42f2-8e7f-6786cdfc2452",
  "remaining_amount": 1.0,
  "used_amount": 0.0,
  "paid": false,
  "user_id": "89518d07-5560-4b05-92c1-667f3ddf6a4b",
  "disabled": false,
  "allow_consume_global": false,
  "scope": "Individual",
  "type": "Usage",
  "expired_at": null,
  "tags": null,
  "metadata": null,
  "client_ip": null,
  "client_fingerprint": null,
  "created_at": "2026-04-26T07:52:27.462400Z",
  "updated_at": "2026-04-26T07:52:27.462400Z"
}

The returned field structure is consistent with Get AceDataCloud Platform Service Application Details.

Already Applied (HTTP 400)

{
  "detail": "Item already exists.",
  "code": "duplication",
  "trace_id": "1a87524f8cbba0b790b2951e2e43117e"
}

This is a design limitation: Each user can only have one Application for each service. If it already exists, find the existing application_id through Get AceDataCloud Platform Service Application List.

Service Not Found (HTTP 404)

{
  "detail": "Service not found.",
  "code": "not_found",
  "trace_id": "..."
}

Service Requires Review (HTTP 403)

{
  "detail": "This service requires manual verification.",
  "code": "need_verify",
  "trace_id": "..."
}

If the service's need_verify=true (this field can be seen in the service list), a ticket process must be followed to apply for a whitelist.

Error Handling

HTTP code Meaning
400 duplication This service has already been applied for by the current account
400 invalid service_id is missing or in the wrong format
401 not_authenticated Missing account token or the token has been deleted
403 need_verify The service requires review, please follow the ticket process
404 not_found The service does not exist or has been taken offline

Error response unified format:

{
  "detail": "...",
  "code": "...",
  "trace_id": "..."
}

Practical Tips

  • Application is a free operation: Only when creating an Application is a one-time free quota given, it will not deduct from the balance. After the free quota is used up, calling the business interface will fail, prompting the need to recharge.
  • Whether payment is required depends on the paid field: When first applied, paid=false, after calling Create AceDataCloud platform recharge order and completing the payment, it changes to true.
  • disabled=true means temporarily disabled—for example, triggered by risk control, arrears, etc. When disabled, the business interface will return 403.
  • Batch apply for N services: First call services/?limit=100 to get all service_ids, then concurrently call this interface, skipping if encountering duplication.