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

# Validate character count

> Validate. Read only; needs social:read. Ids are yours: accounts acc_..., profiles prf_..., posts pst_...; every other object id is checked against your accounts before the call.

Check weighted character count per platform and whether the text is within each platform's limit.

Returns counts and limits for all 15 supported platform variants.

### Counting

- X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars).
- All other platforms use plain character length.

### X rows

X returns two rows, and this endpoint cannot tell you which one applies to you: it takes only `text`, so it never resolves an account.

- `twitter` (280) is the free tier limit.
- `twitterPremium` (25000) applies only when the target X account has a paid X subscription. Publishing enforces 280 instead for any post carrying a poll. This endpoint has no poll input, so the `twitterPremium` row always shows 25000.

A free account trusting the `twitterPremium` row can pass validation here and still fail at publish time, where the account's real limit is enforced.

### Per-account limits

To validate against the per-account limit, use `POST /apis/v1/social/tools/validate/post` instead. It accepts an `accountId` per platform entry, resolves X Premium status, and checks the text against the limit publishing enforces, including the poll cap.

A missing, foreign, or invalid `accountId` falls back to the conservative 280.

<!-- aisa-pricing:start -->
A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ.
<!-- aisa-pricing:end -->

## Request contract

* **Method and path:** POST /apis/v1/social/tools/validate/post-length
* **Availability:** enabled
* **Request URL template:** `https://api.aisa.one/apis/v1/social/tools/validate/post-length`
* **Runtime facts:** 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd

[Complete OpenAPI definition](https://aisa.one/docs/reference-contracts/aisa-social.json)

Effective request and pricing declaration (including authentication and referenced schemas):

```json theme={null}
{
  "operationId": "post_aisa_social_apis_v1_social_tools_validate_po_783463",
  "method": "POST",
  "path": "/apis/v1/social/tools/validate/post-length",
  "servers": [
    {
      "url": "https://api.aisa.one"
    }
  ],
  "parameters": [],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "requestBody": {
    "content": {
      "application/json": {
        "example": {
          "text": "example"
        },
        "schema": {
          "properties": {
            "text": {
              "description": "The post text to check",
              "type": "string"
            }
          },
          "required": [
            "text"
          ],
          "type": "object"
        }
      }
    },
    "required": true
  },
  "x-aisa-status": "enabled",
  "x-aisa-pricing": {
    "description": "Included with your connected social accounts: AIsa does not charge per call.",
    "kind": "no_customer_charge"
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  }
}
```

## Cost and request rules

A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ.

Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.


## OpenAPI

````yaml reference-contracts/aisa-social.json POST /apis/v1/social/tools/validate/post-length
openapi: 3.1.0
info:
  description: ''
  title: AIsa Social
  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: 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd
    generator_version: '3'
    protocol_version: '1'
    schema_version: '1'
    composer_version: '27'
    response_pending: []
    document_hash: sha256:7f9742cb1ea233c648dcb290fdfbf24e53a27dcf900ec1386f83a8ef2e6b1bf9
  x-aisa-plans:
    builder: 1
    display_plan: payg
    payg: 1
    similarweb_payg: 1
    team: 1
    version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
  x-aisa-provider: aisa-social
  x-aisa-catalogs:
    aisa-social:
      title: AIsa Social
      description: ''
      x-aisa-document:
        facts_hash: 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd
        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/social/tools/validate/post-length:
    post:
      summary: Validate character count
      description: >-
        Validate. Read only; needs social:read. Ids are yours: accounts acc_...,
        profiles prf_..., posts pst_...; every other object id is checked
        against your accounts before the call.


        Check weighted character count per platform and whether the text is
        within each platform's limit.


        Returns counts and limits for all 15 supported platform variants.


        ### Counting


        - X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars).

        - All other platforms use plain character length.


        ### X rows


        X returns two rows, and this endpoint cannot tell you which one applies
        to you: it takes only `text`, so it never resolves an account.


        - `twitter` (280) is the free tier limit.

        - `twitterPremium` (25000) applies only when the target X account has a
        paid X subscription. Publishing enforces 280 instead for any post
        carrying a poll. This endpoint has no poll input, so the
        `twitterPremium` row always shows 25000.


        A free account trusting the `twitterPremium` row can pass validation
        here and still fail at publish time, where the account's real limit is
        enforced.


        ### Per-account limits


        To validate against the per-account limit, use `POST
        /apis/v1/social/tools/validate/post` instead. It accepts an `accountId`
        per platform entry, resolves X Premium status, and checks the text
        against the limit publishing enforces, including the poll cap.


        A missing, foreign, or invalid `accountId` falls back to the
        conservative 280.


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

        A request reference price is not currently available; use a request
        quote where supported. Account-specific pricing and final settlement may
        differ.

        <!-- aisa-pricing:end -->
      operationId: post_aisa_social_apis_v1_social_tools_validate_po_783463
      parameters: []
      requestBody:
        content:
          application/json:
            example:
              text: example
            schema:
              properties:
                text:
                  description: The post text to check
                  type: string
              required:
                - text
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  platforms:
                    additionalProperties:
                      properties:
                        count:
                          description: Character count for this platform
                          type: integer
                        limit:
                          description: Maximum allowed characters
                          type: integer
                        valid:
                          description: Whether the text is within the limit
                          type: boolean
                      type: object
                    type: object
                  text:
                    type: string
                type: object
          description: Character counts per platform
        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:
                        enum:
                          - never
                          - after_delay
                          - after_reconnect
                          - reconcile_first
                          - null
                        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.
      x-codeSamples:
        - lang: text
          label: Reference example
          source: >-
            # Fixed reference example. Playground inputs do not update this
            sample.

            curl --request POST \
              --url https://api.aisa.one/apis/v1/social/tools/validate/post-length \
              --header 'Authorization: Bearer <token>' \
              --header 'Content-Type: application/json' \
              --data '{
              "text": "example"
            }'
components:
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````

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