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

# Extract Bing AI Mode

> Get the answer text, sources and citation pills from Bing AI Mode for a prompt, by country and US state.

Extract the answer, its sources and its inline citation pills from Bing AI Mode, the AI answer page at `bing.com/copilotsearch`.

## Request parameters

`prompt` and `country` are required. `state` and the `include` flags are optional.

* **`prompt`**: Bing puts the prompt in the page URL, so the limit is 3,500 characters after URL encoding. A letter, digit or space counts as 1, most punctuation as 3, an accented or Cyrillic letter as 6, and a Chinese, Japanese or Korean character as 9. Thus a CJK prompt can have a maximum of 388 characters. A longer prompt returns a `400` with the message `Prompt is too long (max 3,500 characters, fewer for non-Latin scripts)`.
* **`country`**: all countries except `BY`, `CN`, `IR`, `RU`, `SY` and `VE`. [`GET /v1/countries?model=bing_aimode`](https://cloro.dev/docs/api-reference/endpoint/countries) returns the list.
* **`state`**: a US state code, only with `country: "US"`. It is a [paid add-on](https://cloro.dev/docs/guides/providers.md#state-level-targeting).

For async requests, send the same body as `payload` with `taskType: "BING_AIMODE"` to [`POST /v1/async/task`](https://cloro.dev/docs/api-reference/endpoint/create-async-task) or [`POST /v1/async/task/batch`](https://cloro.dev/docs/api-reference/endpoint/create-batch-tasks).

## Response schema

Includes the [common response fields](https://cloro.dev/docs/guides/making-requests/sync.md#common-response-fields) plus these fields:

| Field | Description |
| - | - |
| `result.sources` | The pages Bing read for the answer, then any other page that a citation chip links. See [sources](https://cloro.dev/docs/api-reference/endpoint/bing-aimode/sources.md) |
| `result.citationPills` | One entry per (chip, source) pair. See [citation pills](https://cloro.dev/docs/api-reference/endpoint/bing-aimode/citation-pills.md) |
| `result.markdown` | The answer in Markdown, with each chip replaced by links to its sources. Section headings, tables and Bing's follow-up question are only in this field. Only when `include.markdown` is `true` |
| `result.html` | A URL to the full page that Bing rendered. Only when `include.html` is `true` |

## Example

```json Request theme={null}
{
  "prompt": "best running shoes for beginners",
  "country": "US",
  "include": {
    "markdown": true,
    "html": true
  }
}
```

```json Response theme={null}
{
  "success": true,
  "result": {
    "text": "The ASICS Novablast 6 is the strongest all‑around beginner pick thanks to its excellent cushioning, stable feel, and ability to grow with you as your runs get longer. ...",
    "sources": [
      {
        "position": 1,
        "label": "7 Best Running Shoes For Beginners in 2026 - RunRepeat",
        "url": "https://runrepeat.com/guides/best-for-beginners-running-shoes",
        "description": "Find out the top picks for beginner-friendly running shoes based on comfort, support, cushioning, and performance. ..."
      },
      {
        "position": 2,
        "label": "The 5 Best Running Shoes For Beginners of 2026 - RTINGS.com",
        "url": "https://www.rtings.com/running-shoes/reviews/best/beginners",
        "description": "We've tested over 310 running shoes, and these are our picks for the best beginner running shoes. ..."
      },
      {
        "position": 3,
        "label": "10 Best Running Shoes For Beginners - RunToTheFinish",
        "url": "https://runtothefinish.com/running-shoes-for-beginners/",
        "description": "You’ve decided to start running and the list of questions are mounting, but first among them what are the best running shoes for beginners. ..."
      }
    ],
    "citationPills": [
      {
        "position": 2,
        "label": "The 5 Best Running Shoes For Beginners of 2026 - RTINGS.com",
        "url": "https://www.rtings.com/running-shoes/reviews/best/beginners",
        "domain": "rtings.com",
        "citationPillId": 1
      },
      {
        "position": 2,
        "label": "The 5 Best Running Shoes For Beginners of 2026 - RTINGS.com",
        "url": "https://www.rtings.com/running-shoes/reviews/best/beginners",
        "domain": "rtings.com",
        "citationPillId": 2
      },
      {
        "position": 2,
        "label": "The 5 Best Running Shoes For Beginners of 2026 - RTINGS.com",
        "url": "https://www.rtings.com/running-shoes/reviews/best/beginners",
        "domain": "rtings.com",
        "citationPillId": 3
      }
    ],
    "markdown": "The **ASICS Novablast 6** is the strongest all‑around beginner pick thanks to its excellent cushioning, stable feel, and ability to grow with you as your runs get longer [The 5 Best Running Shoes For Beginners of 2026 - RTINGS.com](https://www.rtings.com/running-shoes/reviews/best/beginners). ...",
    "html": "https://cdn.cloro.dev/results/8af292bd-8cc6-42d2-841a-6dc4822d5105/page-1.html"
  }
}
```


## OpenAPI

````yaml api-reference/openapi.json POST /v1/monitor/bing/aimode
openapi: 3.1.0
info:
  title: cloro
  description: >-
    API for monitoring AI responses across different providers and regions. One
    request returns the engine's answer as structured JSON: parsed text, cited
    sources, brand entities, shopping results, and ads, geo-targeted by country;
    coverage varies by provider (`GET /v1/countries?model=<provider>` lists it).


    ## Authentication


    Send your API key as `Authorization: Bearer <key>`. Keys are self-serve from
    the [dashboard](https://dashboard.cloro.dev/api-keys) and every account
    starts on a free tier of 500 monthly credits. One key grants every endpoint;
    there are no per-key scopes today.


    ## Versioning and deprecation


    The version is in the URL path. Every endpoint lives under `/v1/`; there is
    no version header or query parameter.


    Within a version, changes are additive: new endpoints, new optional request
    fields, and new response fields can appear at any time. A client must ignore
    response fields it does not recognize. A breaking change gets a new version
    path (`/v2/`) rather than reusing an existing one.


    A deprecated endpoint says so in its own responses, not only in a changelog:
    `Deprecation` (RFC 9745) carries the date the deprecation took effect,
    `Sunset` (RFC 8594) the date the endpoint stops responding, and a `Link`
    header with `rel="deprecation"` points at the replacement. There is a
    minimum of six months between the two dates for any generally available
    endpoint. Nothing is deprecated today.


    ## Rate limits


    Every authenticated response carries `X-RateLimit-Limit` and
    `X-RateLimit-Remaining`, so a client can self-throttle from the response it
    already has. Scrape endpoints (`/v1/monitor/*` except
    `/v1/monitor/google/goto`) also send the `X-Concurrency-*` headers once a
    request passes validation, and the `X-Credits-*` headers on a `200`. Every
    response carries `X-Request-ID` and `X-Latency-Ms`.


    A `429` has one of three codes: `RATE_LIMIT_EXCEEDED` (one-second window,
    clears almost immediately), `CONCURRENCY_LIMIT_EXCEEDED` (scrape endpoints;
    clears when your in-flight jobs finish) or `QUEUE_LIMIT_EXCEEDED` (async
    submission; clears as queued tasks start processing). None carries
    `Retry-After`, and the IETF `RateLimit-*` header names are not sent.


    ## Errors


    Every 4xx and 5xx response uses the `Error` envelope: `{ "success": false,
    "error": { "code", "message", "details", "timestamp" } }`. `error` is always
    an object. Branch on `error.code`, a stable machine-readable identifier;
    `message` is for a human reading a log, and `details` appears only when
    there is extra context. A `503` (`SERVICE_UNAVAILABLE`) is temporary: retry
    after the number of seconds in its `Retry-After` header.
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  version: 1.0.0
  contact:
    name: cloro support
    email: support@cloro.dev
  termsOfService: https://cloro.dev/terms/
servers:
  - url: https://api.cloro.dev
    description: Production server
security:
  - bearerAuth: []
paths:
  /v1/monitor/bing/aimode:
    post:
      summary: Monitor Bing AI Mode Responses
      description: >-
        Extract the answer, sources and citation pills from Bing AI Mode
        (bing.com/copilotsearch) for a prompt, in the country you select.
      operationId: monitorBingAiMode
      requestBody:
        description: Request parameters for monitoring Bing AI Mode responses
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BingAiModeMonitorRequest'
        required: true
      responses:
        '200':
          description: successful Bing AI Mode monitoring response
          headers:
            X-Concurrency-Limit:
              description: Maximum number of concurrent requests allowed
              schema:
                type: integer
                example: 10
            X-Concurrency-Current:
              description: Current number of concurrent requests
              schema:
                type: integer
                example: 3
            X-Concurrency-Remaining:
              description: Number of remaining concurrent slots available
              schema:
                type: integer
                example: 7
            X-Credits-Remaining:
              description: Number of credits remaining in user account
              schema:
                type: integer
                example: 4
            X-Credits-Charged:
              description: Number of credits charged for this request
              schema:
                type: integer
                example: 6
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-Request-ID:
              $ref: '#/components/headers/XRequestId'
            X-Latency-Ms:
              $ref: '#/components/headers/XLatencyMs'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BingAiModeMonitorResponse'
        '400':
          description: Bad Request - Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '401':
          description: Unauthorized - Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationError'
        '403':
          description: Forbidden - Insufficient credits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '429':
          description: Too Many Requests
          headers:
            X-Concurrency-Limit:
              description: Maximum number of concurrent requests allowed
              schema:
                type: integer
                example: 10
            X-Concurrency-Current:
              description: Current number of concurrent requests
              schema:
                type: integer
                example: 11
            X-Concurrency-Remaining:
              description: Number of remaining concurrent slots available
              schema:
                type: integer
                example: 0
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-Request-ID:
              $ref: '#/components/headers/XRequestId'
            X-Latency-Ms:
              $ref: '#/components/headers/XLatencyMs'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConcurrentLimitError'
        '499':
          description: Client Closed Request - Request was canceled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CanceledError'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
components:
  schemas:
    BingAiModeMonitorRequest:
      required:
        - prompt
        - country
      type: object
      properties:
        prompt:
          description: >-
            The prompt to send to Bing AI Mode. Bing puts the prompt in the page
            URL, so the limit is 3,500 characters after URL encoding. A letter,
            digit or space counts as 1, most punctuation as 3, an accented or
            Cyrillic letter as 6, and a Chinese, Japanese or Korean character as
            9. Thus a CJK prompt can have a maximum of 388 characters. A longer
            prompt returns a 400 error: "Prompt is too long (max 3,500
            characters, fewer for non-Latin scripts)".
          type: string
          minLength: 1
          maxLength: 3500
          example: What are the best running shoes for beginners?
        country:
          $ref: '#/components/schemas/CountryCode'
          description: >-
            Country/region code for localized response, using ISO 3166-1 alpha-2
            country codes. Bing AI Mode accepts all countries except BY, CN, IR,
            RU, SY and VE. `GET /v1/countries?model=bing_aimode` returns the
            list.
        state:
          $ref: '#/components/schemas/StateParameter'
        include:
          description: Optional flags for including additional response formats
          type: object
          properties:
            html:
              description: Include a URL to the full HTML of the page that Bing rendered
              type: boolean
              default: false
              example: true
            markdown:
              description: >-
                Include the answer formatted in Markdown in the result.
                `result.markdown` is returned only when this is `true`.
              type: boolean
              default: false
              example: true
          default:
            html: false
            markdown: false
          additionalProperties: false
      additionalProperties: false
    BingAiModeMonitorResponse:
      required:
        - success
        - result
      type: object
      properties:
        success:
          type: boolean
          example: true
        result:
          description: Bing AI Mode response data
          type: object
          required:
            - text
            - sources
            - citationPills
          properties:
            text:
              type: string
              description: Bing AI Mode's answer as plain text, without citation chips
              example: For beginners, choose a neutral, well-cushioned road shoe...
            sources:
              type: array
              description: >-
                Sources for the answer: first the pages Bing read, then any
                other page that a citation chip links. Empty when the answer has
                no sources.
              items:
                type: object
                required:
                  - position
                  - label
                  - url
                properties:
                  position:
                    type: integer
                    description: 1-based position of the source in this array
                    example: 1
                  label:
                    type: string
                    description: Title of the source page. Can be an empty string.
                    example: Best Running Shoes for Beginners
                  url:
                    type: string
                    description: URL of the source page
                    example: >-
                      https://www.runnersworld.com/gear/a20865766/best-running-shoes-for-beginners/
                  description:
                    type: string
                    description: >-
                      Snippet that Bing shows for the source. Omitted when Bing
                      shows none.
                    example: Our test team picked the best shoes for new runners.
            citationPills:
              type: array
              description: >-
                Inline citation chips in the answer. Each entry is one (chip,
                source) pair: when a chip cites N sources, the array has N
                entries with the same `citationPillId`. Group by
                `citationPillId` to get the chips. Empty when the answer has no
                chips.
              items:
                type: object
                required:
                  - position
                  - label
                  - url
                  - domain
                  - citationPillId
                properties:
                  position:
                    type: integer
                    description: >-
                      1-based position of this source in the sibling
                      `result.sources` array.
                    example: 1
                  label:
                    type: string
                    description: >-
                      Title of the cited source, the same as its `label` in
                      `result.sources`. Can be an empty string.
                    example: Best Running Shoes for Beginners
                  url:
                    type: string
                    description: Direct URL of the cited source.
                    example: >-
                      https://www.runnersworld.com/gear/a20865766/best-running-shoes-for-beginners/
                  domain:
                    type: string
                    description: Host extracted from `url`, for grouping and display.
                    example: runnersworld.com
                  citationPillId:
                    type: integer
                    description: 1-based ordinal that all entries from the same chip share.
                    example: 1
            markdown:
              type: string
              description: >-
                The answer formatted in Markdown, with citations as links
                (included when include.markdown is true)
              example: For beginners, choose a **neutral, well-cushioned** road shoe...
            html:
              type: string
              format: uri
              description: >-
                A URL to the full HTML of the page that Bing rendered (included
                when include.html is true).
              example: >-
                https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html
    ValidationError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: VALIDATION_ERROR
            message:
              type: string
              example: Request validation failed
            details:
              type: array
              description: >-
                One entry per invalid field. Sent on request-body validation
                errors.
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: prompt
                  message:
                    type: string
                    example: Prompt cannot be empty
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    AuthenticationError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - MISSING_API_KEY
                - INVALID_API_KEY_FORMAT
                - INVALID_OR_EXPIRED_API_KEY
              example: MISSING_API_KEY
            message:
              type: string
              example: Missing or invalid API key
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    ForbiddenError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - INSUFFICIENT_CREDITS
              example: INSUFFICIENT_CREDITS
            message:
              type: string
              example: Insufficient credits
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    ConcurrentLimitError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: CONCURRENCY_LIMIT_EXCEEDED
            message:
              type: string
              example: Concurrency limit exceeded
            details:
              type: object
              properties:
                limit:
                  type: number
                  example: 10
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    CanceledError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: REQUEST_CANCELED
            message:
              type: string
              example: Request was canceled by client
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    InternalError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: INTERNAL_SERVER_ERROR
            message:
              type: string
              description: >-
                For example `Maximum retries exceeded` when every attempt
                failed, or `Internal server error` for an unexpected failure.
              example: Maximum retries exceeded
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    CountryCode:
      description: ISO 3166-1 alpha-2 country code.
      type: string
      enum:
        - AD
        - AE
        - AF
        - AG
        - AI
        - AL
        - AM
        - AO
        - AQ
        - AR
        - AS
        - AT
        - AU
        - AW
        - AX
        - AZ
        - BA
        - BB
        - BD
        - BE
        - BF
        - BG
        - BH
        - BI
        - BJ
        - BL
        - BM
        - BN
        - BO
        - BQ
        - BR
        - BS
        - BT
        - BV
        - BW
        - BY
        - BZ
        - CA
        - CC
        - CD
        - CF
        - CG
        - CH
        - CI
        - CK
        - CL
        - CM
        - CN
        - CO
        - CR
        - CU
        - CV
        - CW
        - CX
        - CY
        - CZ
        - DE
        - DJ
        - DK
        - DM
        - DO
        - DZ
        - EC
        - EE
        - EG
        - EH
        - ER
        - ES
        - ET
        - FI
        - FJ
        - FK
        - FM
        - FO
        - FR
        - GA
        - GB
        - GD
        - GE
        - GF
        - GG
        - GH
        - GI
        - GL
        - GM
        - GN
        - GP
        - GQ
        - GR
        - GS
        - GT
        - GU
        - GW
        - GY
        - HK
        - HM
        - HN
        - HR
        - HT
        - HU
        - ID
        - IE
        - IL
        - IM
        - IN
        - IO
        - IQ
        - IR
        - IS
        - IT
        - JE
        - JM
        - JO
        - JP
        - KE
        - KG
        - KH
        - KI
        - KM
        - KN
        - KP
        - KR
        - KW
        - KY
        - KZ
        - LA
        - LB
        - LC
        - LI
        - LK
        - LR
        - LS
        - LT
        - LU
        - LV
        - LY
        - MA
        - MC
        - MD
        - ME
        - MF
        - MG
        - MH
        - MK
        - ML
        - MM
        - MN
        - MO
        - MP
        - MQ
        - MR
        - MS
        - MT
        - MU
        - MV
        - MW
        - MX
        - MY
        - MZ
        - NA
        - NC
        - NE
        - NF
        - NG
        - NI
        - NL
        - 'NO'
        - NP
        - NR
        - NU
        - NZ
        - OM
        - PA
        - PE
        - PF
        - PG
        - PH
        - PK
        - PL
        - PM
        - PN
        - PR
        - PS
        - PT
        - PW
        - PY
        - QA
        - RE
        - RO
        - RS
        - RU
        - RW
        - SA
        - SB
        - SC
        - SD
        - SE
        - SG
        - SH
        - SI
        - SJ
        - SK
        - SL
        - SM
        - SN
        - SO
        - SR
        - SS
        - ST
        - SV
        - SX
        - SY
        - SZ
        - TC
        - TD
        - TF
        - TG
        - TH
        - TJ
        - TK
        - TL
        - TM
        - TN
        - TO
        - TR
        - TT
        - TV
        - TW
        - TZ
        - UA
        - UG
        - UM
        - US
        - UY
        - UZ
        - VA
        - VC
        - VE
        - VG
        - VI
        - VN
        - VU
        - WF
        - WS
        - XK
        - YE
        - YT
        - ZA
        - ZM
        - ZW
      example: US
    StateParameter:
      description: >-
        State code for sub-country geo-targeting (e.g., "CA"). Only valid with
        country "US". Paid add-on: +2 credits, on top of the base cost and any
        other add-on ([pricing](/guides/providers#state-level-targeting)).
      type: string
      enum:
        - AL
        - AK
        - AZ
        - AR
        - CA
        - CO
        - CT
        - DE
        - DC
        - FL
        - GA
        - HI
        - ID
        - IL
        - IN
        - IA
        - KS
        - KY
        - LA
        - ME
        - MD
        - MA
        - MI
        - MN
        - MS
        - MO
        - MT
        - NE
        - NV
        - NH
        - NJ
        - NM
        - NY
        - NC
        - ND
        - OH
        - OK
        - OR
        - PA
        - RI
        - SC
        - SD
        - TN
        - TX
        - UT
        - VT
        - VA
        - WA
        - WV
        - WI
        - WY
      example: CA
      minLength: 2
      maxLength: 2
      pattern: ^[A-Z]{2}$
  headers:
    XRateLimitLimit:
      description: Requests allowed in the current window.
      schema:
        type: integer
        example: 1000
    XRateLimitRemaining:
      description: Requests left in the current window.
      schema:
        type: integer
        example: 997
    XRequestId:
      description: Unique ID for this request. Support uses it to find your request.
      schema:
        type: string
        format: uuid
        example: b0864943-5d45-4796-bc64-f052661256f0
    XLatencyMs:
      description: >-
        Milliseconds the API spent on the request, from arrival to the start of
        the response. Excludes network transit.
      schema:
        type: integer
        example: 3420
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        cloro API key as a bearer token. One key grants every endpoint in this
        spec; per-key scopes are not available, so a client cannot request a
        narrower permission. Keys are created and revoked in the
        [dashboard](https://dashboard.cloro.dev/api-keys).

````

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