> ## Documentation Index
> Fetch the complete documentation index at: https://aisa.one/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> - Base URLs: models `https://api.aisa.one/v1` (Gemini GenerateContent: `https://api.aisa.one/v1beta`); data APIs `https://api.aisa.one/apis/v1`. The `servers` of each operation in https://aisa.one/openapi.yaml is authoritative.
> - Auth: `Authorization: Bearer $AISA_API_KEY`. Never print, log, or commit the key.
> - MCP (preferred for agents): `https://mcp.aisa.one/mcp`, signed in with OAuth, so there is no key to paste.
> - Agent Skill: `npx skills add AIsa-team/agent-skills --skill aisa`. Fallback with the AIsa CLI: `aisa skills install aisa`.
> - Spending: docs, https://aisa.one/models, https://aisa.one/api, `/v1/models`, and MCP `search`, `list_categories`, `get_details`, `batch_quote`, and the `account` operation are free. Quote the exact calls before running them (MCP `batch_quote`, CLI `aisa quote --json`). If the quote reports `auto_execute_eligible: true`, run it unless the user set a tighter limit or asked only for a quote. Otherwise, tell the user in one message the planned calls, the quoted price, and a total USD budget for the task, then wait for approval. Direct HTTP calls follow the stricter rule at https://aisa.one/docs/get-started/cli.md#direct-http-fallback. Do not make paid calls to test availability. Full rule: https://aisa.one/llms.txt

# Create a standalone creative

> Ad Creatives. Changes the ad account without starting or raising spend; audited. Creates a reusable Meta creative from an image or carousel without creating an ad, ready to attach to ads later. The creative goes in the library WITHOUT an ad, reusable on the create endpoints via `existingCreativeId`. ### Source Provide exactly one of: `imageUrl` (uploaded server-side) `imageHash` (from POST /apis/v1/ads/images or the library list) `carouselCards` (2-10 hand-built cards)

<!-- aisa-pricing:start -->
当前未提供请求参考价格；请使用接口支持的报价功能确认费用。 最终费用以账户适用价格及实际结算为准。
<!-- aisa-pricing:end -->

## 请求规范

* **方法与路径:** POST /apis/v1/ads/creatives
* **可用状态:** enabled
* **请求 URL 模板:** `https://api.aisa.one/apis/v1/ads/creatives`
* **connectionId:** query; 必填
* **Runtime 事实版本:** fe60122939c67dc98a3a6ac6b97bd5c326b526105150c8959304dd2160d4dd09

[完整 OpenAPI 定义](https://aisa.one/docs/reference-contracts/zh/aisa-ads.json)

有效请求与价格声明（包括认证和引用的 schema）：

```json theme={null}
{
  "operationId": "post_aisa_ads_apis_v1_ads_creatives",
  "method": "POST",
  "path": "/apis/v1/ads/creatives",
  "servers": [
    {
      "url": "https://api.aisa.one"
    }
  ],
  "parameters": [
    {
      "description": "The ads connection (adc_...) the request runs on: one of yours, from GET /apis/v1/ads/connections. On a request with a JSON body it may be sent as a top-level body member instead.",
      "in": "query",
      "name": "connectionId",
      "required": true,
      "schema": {
        "pattern": "^adc_[0-9A-Za-z]+$",
        "type": "string"
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "requestBody": {
    "content": {
      "application/json": {
        "example": {
          "adAccountId": "act_123456789",
          "body": "Use SAVE20 at checkout.",
          "connectionId": "adc_7f3k2m9q",
          "creativeFeatures": {
            "auto_promotion_tag": "OPT_OUT"
          },
          "headline": "Save on your next order",
          "imageUrl": "https://example.com/ad.jpg",
          "linkUrl": "https://example.com/shop"
        },
        "schema": {
          "additionalProperties": true,
          "properties": {
            "adAccountId": {
              "description": "Platform ad account id (Meta act_, Google customer id, LinkedIn account id, ...).",
              "type": "string"
            },
            "aiDisclosure": {
              "description": "Meta only. Meta's \"Ad includes media created or edited with AI\" disclosure (the Ads Manager checkbox), stored on the creative as `generative_asset_spec.transparency_metadata.self_disclosure`. OPT_IN: checks it.",
              "enum": [
                "OPT_IN",
                "OPT_OUT"
              ],
              "type": "string"
            },
            "body": {
              "description": "Primary text",
              "type": "string"
            },
            "callToAction": {
              "default": "LEARN_MORE",
              "description": "CTA type (same whitelist as POST /apis/v1/ads/create).",
              "type": "string"
            },
            "carouselCards": {
              "items": {
                "properties": {
                  "callToAction": {
                    "type": "string"
                  },
                  "description": {
                    "maxLength": 255,
                    "type": "string"
                  },
                  "headline": {
                    "maxLength": 255,
                    "type": "string"
                  },
                  "imageUrl": {
                    "format": "uri",
                    "type": "string"
                  },
                  "linkUrl": {
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "imageUrl",
                  "linkUrl"
                ],
                "type": "object"
              },
              "maxItems": 10,
              "minItems": 2,
              "type": "array"
            },
            "connectionId": {
              "description": "The ads connection (adc_...), when not sent as the connectionId query parameter.",
              "pattern": "^adc_[0-9A-Za-z]+$",
              "type": "string"
            },
            "creativeFeatures": {
              "additionalProperties": {
                "enum": [
                  "OPT_IN",
                  "OPT_OUT"
                ],
                "type": "string"
              },
              "description": "Meta Advantage+ creative enhancements. Map snake_case feature names to OPT_IN or OPT_OUT; Meta validates supported keys and unspecified features default to OPT_OUT.",
              "type": "object"
            },
            "description": {
              "description": "Link description below the headline; omitted = Meta scrapes the destination's OG description.",
              "maxLength": 255,
              "type": "string"
            },
            "headline": {
              "maxLength": 255,
              "type": "string"
            },
            "imageHash": {
              "description": "Existing library image hash (POST /apis/v1/ads/images or GET /apis/v1/ads/images).",
              "type": "string"
            },
            "imageUrl": {
              "description": "Publicly reachable image; uploaded to the account's library server-side.",
              "format": "uri",
              "type": "string"
            },
            "linkUrl": {
              "format": "uri",
              "type": "string"
            },
            "multiAdvertiser": {
              "description": "Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave.",
              "enum": [
                "OPT_IN",
                "OPT_OUT"
              ],
              "type": "string"
            },
            "optimizeCardOrder": {
              "description": "Only with `carouselCards` (a 400 without them). Sets `link_data.multi_share_optimized`: `false`: keeps the cards in the order given. Meta then takes at most 5 cards, so `false` with more than 5 cards is a 400.",
              "type": "boolean"
            },
            "promotion": {
              "description": "Not supported. Send null or omit the field, and set the Promotion on the ad in Ads Manager. Any object is rejected with 400 invalid_field_value.",
              "type": [
                "object",
                "null"
              ]
            },
            "urlTags": {
              "description": "Appended to every outbound URL (e.g. utm_source=fb).",
              "type": "string"
            }
          },
          "required": [
            "adAccountId",
            "body",
            "headline",
            "linkUrl"
          ],
          "type": "object"
        }
      }
    },
    "required": true
  },
  "x-aisa-status": "enabled",
  "x-aisa-pricing": {
    "description": "Ads operations are free. Ad spend is billed by the ad platform to the connected ad account, never by AIsa.",
    "kind": "no_customer_charge"
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  }
}
```

## 费用与请求规则

当前未提供请求参考价格；请使用接口支持的报价功能确认费用。 最终费用以账户适用价格及实际结算为准。

公开参考值不是你的账户报价或最终扣费。对于支持 X-AISA-Cost-Mode: quote 的接口，执行前请针对完整请求获取免费报价；执行后通过响应费用元数据和 Usage Logs 核对结算费用。1 USD 等于 1,000,000 个整数 micro-USD。


## OpenAPI

````yaml reference-contracts/zh/aisa-ads.json POST /apis/v1/ads/creatives
openapi: 3.1.0
info:
  description: ''
  title: AIsa Ads
  version: '1'
  x-aisa-capabilities:
    idempotency: Idempotency-Key
    max_price: X-AISA-Max-Price-USD
    quote:
      header: X-AISA-Cost-Mode
      value: quote
  x-aisa-configured-paths: []
  x-aisa-document:
    facts_hash: fe60122939c67dc98a3a6ac6b97bd5c326b526105150c8959304dd2160d4dd09
    generator_version: '3'
    protocol_version: '1'
    schema_version: '1'
    composer_version: '27'
    response_pending: []
    document_hash: sha256:ba353f59e89e1ebabe0e301d8ef57d3cbfa6bb406a8c591ee9c3833d64b60520
  x-aisa-plans:
    builder: 1
    display_plan: payg
    payg: 1
    similarweb_payg: 1
    team: 1
    version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
  x-aisa-provider: aisa-ads
  x-aisa-catalogs:
    aisa-ads:
      title: AIsa Ads
      description: ''
      x-aisa-document:
        facts_hash: fe60122939c67dc98a3a6ac6b97bd5c326b526105150c8959304dd2160d4dd09
        generator_version: '3'
        protocol_version: '1'
        schema_version: '1'
      x-aisa-plans:
        builder: 1
        display_plan: payg
        payg: 1
        similarweb_payg: 1
        team: 1
        version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
      x-aisa-capabilities:
        idempotency: Idempotency-Key
        max_price: X-AISA-Max-Price-USD
        quote:
          header: X-AISA-Cost-Mode
          value: quote
servers:
  - url: https://api.aisa.one
security:
  - bearerAuth: []
paths:
  /apis/v1/ads/creatives:
    post:
      summary: Create a standalone creative
      description: >-
        Ad Creatives. Changes the ad account without starting or raising spend;
        audited. Creates a reusable Meta creative from an image or carousel
        without creating an ad, ready to attach to ads later. The creative goes
        in the library WITHOUT an ad, reusable on the create endpoints via
        `existingCreativeId`. ### Source Provide exactly one of: `imageUrl`
        (uploaded server-side) `imageHash` (from POST /apis/v1/ads/images or the
        library list) `carouselCards` (2-10 hand-built cards)


        <!-- aisa-pricing:start -->

        当前未提供请求参考价格；请使用接口支持的报价功能确认费用。 最终费用以账户适用价格及实际结算为准。

        <!-- aisa-pricing:end -->
      operationId: post_aisa_ads_apis_v1_ads_creatives
      parameters:
        - description: >-
            The ads connection (adc_...) the request runs on: one of yours, from
            GET /apis/v1/ads/connections. On a request with a JSON body it may
            be sent as a top-level body member instead.
          in: query
          name: connectionId
          required: true
          schema:
            pattern: ^adc_[0-9A-Za-z]+$
            type: string
      requestBody:
        content:
          application/json:
            example:
              adAccountId: act_123456789
              body: Use SAVE20 at checkout.
              connectionId: adc_7f3k2m9q
              creativeFeatures:
                auto_promotion_tag: OPT_OUT
              headline: Save on your next order
              imageUrl: https://example.com/ad.jpg
              linkUrl: https://example.com/shop
            schema:
              additionalProperties: true
              properties:
                adAccountId:
                  description: >-
                    Platform ad account id (Meta act_, Google customer id,
                    LinkedIn account id, ...).
                  type: string
                aiDisclosure:
                  description: >-
                    Meta only. Meta's "Ad includes media created or edited with
                    AI" disclosure (the Ads Manager checkbox), stored on the
                    creative as
                    `generative_asset_spec.transparency_metadata.self_disclosure`.
                    OPT_IN: checks it.
                  enum:
                    - OPT_IN
                    - OPT_OUT
                  type: string
                body:
                  description: Primary text
                  type: string
                callToAction:
                  default: LEARN_MORE
                  description: CTA type (same whitelist as POST /apis/v1/ads/create).
                  type: string
                carouselCards:
                  items:
                    properties:
                      callToAction:
                        type: string
                      description:
                        maxLength: 255
                        type: string
                      headline:
                        maxLength: 255
                        type: string
                      imageUrl:
                        format: uri
                        type: string
                      linkUrl:
                        format: uri
                        type: string
                    required:
                      - imageUrl
                      - linkUrl
                    type: object
                  maxItems: 10
                  minItems: 2
                  type: array
                connectionId:
                  description: >-
                    The ads connection (adc_...), when not sent as the
                    connectionId query parameter.
                  pattern: ^adc_[0-9A-Za-z]+$
                  type: string
                creativeFeatures:
                  additionalProperties:
                    enum:
                      - OPT_IN
                      - OPT_OUT
                    type: string
                  description: >-
                    Meta Advantage+ creative enhancements. Map snake_case
                    feature names to OPT_IN or OPT_OUT; Meta validates supported
                    keys and unspecified features default to OPT_OUT.
                  type: object
                description:
                  description: >-
                    Link description below the headline; omitted = Meta scrapes
                    the destination's OG description.
                  maxLength: 255
                  type: string
                headline:
                  maxLength: 255
                  type: string
                imageHash:
                  description: >-
                    Existing library image hash (POST /apis/v1/ads/images or GET
                    /apis/v1/ads/images).
                  type: string
                imageUrl:
                  description: >-
                    Publicly reachable image; uploaded to the account's library
                    server-side.
                  format: uri
                  type: string
                linkUrl:
                  format: uri
                  type: string
                multiAdvertiser:
                  description: >-
                    Meta only. Multi-advertiser ads: whether Meta may show this
                    ad alongside other advertisers' in one unit. Meta
                    auto-enrols since Aug 2024, so send OPT_OUT to leave.
                  enum:
                    - OPT_IN
                    - OPT_OUT
                  type: string
                optimizeCardOrder:
                  description: >-
                    Only with `carouselCards` (a 400 without them). Sets
                    `link_data.multi_share_optimized`: `false`: keeps the cards
                    in the order given. Meta then takes at most 5 cards, so
                    `false` with more than 5 cards is a 400.
                  type: boolean
                promotion:
                  description: >-
                    Not supported. Send null or omit the field, and set the
                    Promotion on the ad in Ads Manager. Any object is rejected
                    with 400 invalid_field_value.
                  type:
                    - object
                    - 'null'
                urlTags:
                  description: Appended to every outbound URL (e.g. utm_source=fb).
                  type: string
              required:
                - adAccountId
                - body
                - headline
                - linkUrl
              type: object
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                properties:
                  adAccountId:
                    type: string
                  creativeId:
                    description: Platform creative id, reusable via existingCreativeId.
                    type: string
                type: object
          description: Creative created
        default:
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type:
                          - string
                          - 'null'
                      details:
                        additionalProperties: {}
                        type:
                          - object
                          - 'null'
                      message:
                        type:
                          - string
                          - 'null'
                      param:
                        type:
                          - string
                          - 'null'
                      retryHint:
                        type:
                          - string
                          - 'null'
                      retryable:
                        type:
                          - boolean
                          - 'null'
                      type:
                        type:
                          - string
                          - 'null'
                    type:
                      - object
                      - 'null'
                type: object
          description: Error. The code field is stable; see the error catalog.
components:
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.