---
title: "Auth Google Link"
method: POST
path: "/api/auth/google/link"
---

# Auth Google Link

`POST /api/auth/google/link`

## Request

- Base URL: `https://api.animgen.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.animgen.com/api/auth/google/link`
- Auth: none declared

## Request body

- GoogleAuthRequest
  - `credential` string, required
  - `legalAcceptance` LegalAcceptanceChoice
    - `accepted` boolean, required
    - `termsVersion` string, required
    - `privacyVersion` string, required
    - `locale` 'en' | 'zh' | 'ja' | 'ko' | 'zh-Hant' | 'de', required
  - `researchConsent` ResearchConsentChoice
    - `optIn` boolean, required
    - `version` string, required
    - `locale` 'en' | 'zh' | 'ja' | 'ko' | 'zh-Hant' | 'de', required
  - `attribution` RegistrationAttribution: Privacy-safe, allowlisted web acquisition context for a new account.
    - `acquisition` AcquisitionContext
      - `version` 1, required
      - `first` AcquisitionTouch, required: Bounded campaign labels and host/path only; never raw click IDs or URLs.
        - `source` string, required
        - `channel` 'organic_search' | 'paid_search' | 'paid_social' | 'paid_other' | 'social' | 'email' | 'ai' | 'referral' | 'campaign' | 'direct_unknown' | 'internal' | 'payment_return' | 'auth_return', required
        - `referrer_host` string
        - `landing_path` string, required
        - `captured_at` string, required
        - `evidence` 'utm' | 'click_id' | 'referrer' | 'none', required
        - `click_platform` 'google' | 'microsoft' | 'meta' | 'tiktok' | 'linkedin' | 'none', required
        - `utm_source` string, nullable
        - `utm_medium` string, nullable
        - `utm_campaign` string, nullable
        - `utm_content` string, nullable
        - `utm_term` string, nullable
      - `session` AcquisitionTouch, required: Bounded campaign labels and host/path only; never raw click IDs or URLs.
        - `source` string, required
        - `channel` 'organic_search' | 'paid_search' | 'paid_social' | 'paid_other' | 'social' | 'email' | 'ai' | 'referral' | 'campaign' | 'direct_unknown' | 'internal' | 'payment_return' | 'auth_return', required
        - `referrer_host` string
        - `landing_path` string, required
        - `captured_at` string, required
        - `evidence` 'utm' | 'click_id' | 'referrer' | 'none', required
        - `click_platform` 'google' | 'microsoft' | 'meta' | 'tiktok' | 'linkedin' | 'none', required
        - `utm_source` string, nullable
        - `utm_medium` string, nullable
        - `utm_campaign` string, nullable
        - `utm_content` string, nullable
        - `utm_term` string, nullable
      - `last_non_direct` AcquisitionTouch: Bounded campaign labels and host/path only; never raw click IDs or URLs.
        - `source` string, required
        - `channel` 'organic_search' | 'paid_search' | 'paid_social' | 'paid_other' | 'social' | 'email' | 'ai' | 'referral' | 'campaign' | 'direct_unknown' | 'internal' | 'payment_return' | 'auth_return', required
        - `referrer_host` string
        - `landing_path` string, required
        - `captured_at` string, required
        - `evidence` 'utm' | 'click_id' | 'referrer' | 'none', required
        - `click_platform` 'google' | 'microsoft' | 'meta' | 'tiktok' | 'linkedin' | 'none', required
        - `utm_source` string, nullable
        - `utm_medium` string, nullable
        - `utm_campaign` string, nullable
        - `utm_content` string, nullable
        - `utm_term` string, nullable
    - `source_surface` 'public_marketing' | 'documentation' | 'app_entry', required
    - `acquisition_channel` 'organic_search' | 'paid_search' | 'email' | 'social' | 'referral' | 'internal' | 'direct' | 'unknown', required
    - `acquisition_surface` 'web_citation' | 'web_search' | 'web_campaign' | 'web_referral' | 'direct' | 'internal' | 'unknown', required
    - `ai_referrer` 'chatgpt' | 'claude' | 'perplexity' | 'gemini' | 'copilot' | 'yandex_alice' | 'other_ai' | 'none', required
    - `is_organic_search` boolean, required
    - `landing_path` string, required
    - `landing_referrer_host` string
    - `captured_at` string, required
    - `cta_placement` string, nullable
    - `cta_intent` 'signup' | 'start_generation', nullable
    - `destination` string, nullable
  - `turnstileToken` string, nullable
  - `analyticsAnonymousId` string, uuid, nullable

## Response `200`

Successful Response

- GoogleAuthOut
  - `id` string, uuid, required
  - `email` string, required
  - `emailVerified` boolean
  - `isInternalUser` boolean
  - `welcomeCreditStatus` 'pending' | 'granted' | 'withheld' | 'not_applicable'
  - `emailVerificationRetryAfterSeconds` integer
  - `researchConsentRecorded` boolean, nullable
  - `isNewUser` boolean

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/animgen/apis/aianimgenbackend.md) · [All operations](https://skmtc.dev/animgen/apis/aianimgenbackend/llms.txt) · [OpenAPI document](https://skmtc.dev/animgen/apis/aianimgenbackend/revisions/ac3744fbb14e?raw)
