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

# Resolve a Google redirect link

> Ask Google Search and AI Mode for raw /goto redirect links with include.googleGoto, and resolve one to its destination URL.

Google serves many result links as `/goto?url=<token>` redirects, where the token is encrypted on Google's side. cloro resolves them for you, so `link` and the other URL fields hold real destinations.

Set `include.googleGoto: true` on a [Google Search](/docs/api-reference/endpoint/monitor-google) or [AI Mode](/docs/api-reference/endpoint/monitor-aimode) request to get the redirect links instead, as absolute `https://www.google.com/goto?url=<token>` URLs. Use it when you run your own redirect resolution. The flag costs no extra credits.

<CodeGroup>
  ```json Request theme={null}
  {
    "query": "best seo tools",
    "gl": "PT",
    "hl": "pt",
    "include": {
      "googleGoto": true
    }
  }
  ```

  ```json Response theme={null}
  {
    "position": 1,
    "title": "24 best SEO tools I'm using in 2026 (free + paid)",
    "link": "https://www.google.com/goto?url=CAESaAHrOzAVev0pi_wnTxm1qpiZTmMyAllabLr1or10ZCfvJKPkFqExEIHEAXuQnnehHEAZpxrNEFuDMonO8o90rlyWkWC8xN5NiVm7zj9JUmedJUe_ZXVVrJ1rr520I5PZ5XAZpQplL4bp",
    "displayedLink": "https://www.marketermilk.com› ...",
    "snippet": "24 best SEO tools I've personally tested in 2026 · 1. Google Search Console · 2. Google Autocomplete · 3. Surfer · 4. Gumloop · 5. Ahrefs · 6.",
    "page": 1
  }
  ```
</CodeGroup>

On Google Search the flag covers organic results on every page, local-pack websites, AI Overview sources and citation pills, related links, and People Also Ask AI Overview sources. On AI Mode it covers `result.sources`, `result.citationPills`, and the markdown. Plaintext `/url?q=` links carry their destination in the URL itself and are still unwrapped for you.

## Resolve a link

`POST /v1/monitor/google/goto` takes one redirect link and returns where it points.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.cloro.dev/v1/monitor/google/goto" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://www.google.com/goto?url=CAESaQHrOzAVqzmLoOGwx_6OnzSPRKSyqmXD3yEDa0VIkUCfa5RKEaB9eIJOYz_M1y_VwKrr5jrSlrFlZlBUbe9DQXMPRUiSOrjBMQ78vpRZtXEhawDDabM58DDRHnv2f-XOQAWw-nwkup9ptQ"
    }'
  ```

  ```json Response theme={null}
  {
    "url": "https://www.youtube.com/watch?v=pma08NXw8Ts&t=541"
  }
  ```
</CodeGroup>

The endpoint charges no credits and uses no concurrency slot, but it counts against your [rate limit](/docs/guides/concurrency#rate-limits-vs-concurrency-limits). One link per request, and Google gets 10 seconds to answer before the call fails with a `502`.


## OpenAPI

````yaml api-reference/openapi.json POST /v1/monitor/google/goto
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 to any of
    250 countries.


    ## Authentication


    Send your API key as `Authorization: Bearer <key>`. Keys are self-serve from
    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 recognise. 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 response carries its own limit state, so a client can self-throttle
    from the response it already has: `X-RateLimit-Limit` and
    `X-RateLimit-Remaining`, alongside the concurrency and credit headers. The
    rate-limit window is one second, so a `429` from it clears almost
    immediately; a `429` from the concurrency limit clears when your in-flight
    jobs finish. Neither carries `Retry-After`, and the IETF `RateLimit-*`
    header names are not sent.


    ## Errors


    Every 4xx and 5xx response uses the `Error` envelope: `{ "error": { "code",
    "message", "details", "timestamp" } }`. `code` is a stable machine-readable
    identifier and is what a client should branch on; `message` is for a human
    reading a log.
  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/google/goto:
    post:
      summary: Resolve a Google redirect link
      description: >-
        Resolve one Google redirect link to its destination URL. Send a link
        that a Google or AI Mode response returned while `include.googleGoto`
        was set, and the response gives you the URL it points to.


        Charges no credits, does not use a concurrency slot, and counts against
        the per-second rate limit like any other call. Each request resolves one
        link, and Google gets at most 10 seconds to answer.
      operationId: resolveGoogleGoto
      requestBody:
        description: The Google redirect link to resolve
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GoogleGotoRequest'
        required: true
      responses:
        '200':
          description: The destination the redirect link points to
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GoogleGotoResponse'
        '400':
          description: >-
            Bad Request - The url is missing, malformed, or is not a google.com
            /goto or /url link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationError'
        '429':
          description: Too Many Requests
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '502':
          description: >-
            Bad Gateway - Google did not answer with a redirect, or the request
            to Google failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalServiceError'
components:
  schemas:
    GoogleGotoRequest:
      required:
        - url
      type: object
      properties:
        url:
          description: >-
            The Google redirect link to resolve, as an absolute URL. Must be a
            `google.com` or `www.google.com` link with a `/goto` or `/url` path
            — the form the Google and AI Mode endpoints return when
            `include.googleGoto` is set.
          type: string
          format: uri
          example: >-
            https://www.google.com/goto?url=CAESaQHrOzAVqzmLoOGwx_6OnzSPRKSyqmXD3yEDa0VIkUCfa5RKEaB9eIJOYz_M1y_VwKrr5jrSlrFlZlBUbe9DQXMPRUiSOrjBMQ78vpRZtXEhawDDabM58DDRHnv2f-XOQAWw-nwkup9ptQ
      additionalProperties: false
    GoogleGotoResponse:
      required:
        - url
      type: object
      properties:
        url:
          description: The destination the redirect link points to
          type: string
          format: uri
          example: https://www.youtube.com/watch?v=pma08NXw8Ts&t=541
    ValidationError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          example: Request validation failed
        details:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
                example: prompt
              message:
                type: string
                example: Prompt cannot be empty
    AuthenticationError:
      type: object
      properties:
        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'
    RateLimitError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: RATE_LIMIT_EXCEEDED
            message:
              type: string
              example: API key rate limit exceeded
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
    InternalError:
      type: object
      oneOf:
        - properties:
            success:
              type: boolean
              example: false
            error:
              type: string
              example: Maximum retries exceeded
        - properties:
            error:
              type: object
              properties:
                code:
                  type: string
                  example: INTERNAL_SERVER_ERROR
                message:
                  type: string
                  example: Internal server error
                timestamp:
                  type: string
                  format: date-time
                  example: '2025-01-15T12:00:00.000Z'
    ExternalServiceError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: EXTERNAL_SERVICE_ERROR
            message:
              type: string
              example: 'External service error: OpenAI'
            details:
              type: object
              properties:
                service:
                  type: string
                  example: OpenAI
            timestamp:
              type: string
              format: date-time
              example: '2025-01-15T12:00:00.000Z'
  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
  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, rotated, and revoked at
        https://dashboard.cloro.dev/api-keys. Full details, including the
        versioning and deprecation policy, are at https://cloro.dev/auth.md.

````