FactIQ Auth API

Authenticate with Google OAuth and manage access/refresh tokens.

GitHub OpenAPI

Operations 18

POST /auth/google Authenticate With Google #
POST /auth/email/signup Signup With Email #
POST /auth/email/login Login With Email #
POST /auth/password/reset/request Request Password Reset #
POST /auth/password/reset/confirm Confirm Password Reset #
POST /auth/email/verify/request Request Email Verification #
POST /auth/email/verify/confirm Confirm Email Verification #
GET /auth/me Get Profile #
GET /auth/api-key Api Key Info #
POST /auth/api-key Create Api Key #
POST /auth/refresh Refresh Tokens #
POST /auth/passkeys/register/options Passkey Register Options #
POST /auth/passkeys/register/verify Passkey Register Verify #
POST /auth/passkeys/authenticate/options Passkey Authenticate Options #
POST /auth/passkeys/authenticate/verify Passkey Authenticate Verify #
GET /auth/passkeys List Passkeys #
PATCH /auth/passkeys/{passkey_id} Update Passkey #
DELETE /auth/passkeys/{passkey_id} Remove Passkey #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/factiq-com:factiq-com-auth-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

factiq-com-auth-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FactIQ Auth API
  description: Programmatic access to curated economic time series data sourced from the BLS, Census, BEA, and OEWS pipelines. Endpoints cover direct series lookups, authentication, and MCP-based data tools for analysis.
  contact:
    name: FactIQ
    url: https://www.factiq.com/contact
  version: 1.0.0
tags:
- name: Auth
  description: Authenticate with Google OAuth and manage access/refresh tokens.
paths:
  /auth/google:
    post:
      tags:
      - Auth
      summary: Authenticate With Google
      description: Authenticate the user using a Google ID token, creating a local account if needed.
      operationId: authenticate_with_google_auth_google_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GoogleAuthRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/email/signup:
    post:
      tags:
      - Auth
      summary: Signup With Email
      description: Create a user account with email/password credentials.
      operationId: signup_with_email_auth_email_signup_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailSignupRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/email/login:
    post:
      tags:
      - Auth
      summary: Login With Email
      description: Authenticate a user with email/password credentials.
      operationId: login_with_email_auth_email_login_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailLoginRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/password/reset/request:
    post:
      tags:
      - Auth
      summary: Request Password Reset
      description: Send a password reset email for the requested account.
      operationId: request_password_reset_auth_password_reset_request_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordResetResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/password/reset/confirm:
    post:
      tags:
      - Auth
      summary: Confirm Password Reset
      description: Reset the user's password using a valid reset token.
      operationId: confirm_password_reset_auth_password_reset_confirm_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetConfirmRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordResetResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/email/verify/request:
    post:
      tags:
      - Auth
      summary: Request Email Verification
      description: Send (or resend) a verification email for the given address.
      operationId: request_email_verification_auth_email_verify_request_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailVerificationRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailVerificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/email/verify/confirm:
    post:
      tags:
      - Auth
      summary: Confirm Email Verification
      description: Mark the email associated with the token as verified.
      operationId: confirm_email_verification_auth_email_verify_confirm_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailVerificationConfirmRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailVerificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/me:
    get:
      tags:
      - Auth
      summary: Get Profile
      description: Return the current user's profile, usage snapshot and connected assistants.
      operationId: get_profile_auth_me_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserProfile'
      security:
      - HTTPBearer: []
  /auth/api-key:
    get:
      tags:
      - Auth
      summary: Api Key Info
      description: Display metadata for the user's API key (the key itself is never returned).
      operationId: api_key_info_auth_api_key_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKeyInfo'
      security:
      - HTTPBearer: []
    post:
      tags:
      - Auth
      summary: Create Api Key
      description: 'Generate the user''s API key. Returns the plaintext key exactly once.


        If a key already exists, requires `regenerate: true` — regenerating

        invalidates the previous key immediately.'
      operationId: create_api_key_auth_api_key_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiKeyCreateRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKeyCreateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
  /auth/refresh:
    post:
      tags:
      - Auth
      summary: Refresh Tokens
      description: Exchange a refresh token for a new access token.
      operationId: refresh_tokens_auth_refresh_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefreshTokenRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/passkeys/register/options:
    post:
      tags:
      - Auth
      summary: Passkey Register Options
      description: Return PublicKeyCredentialCreationOptions for passkey registration.
      operationId: passkey_register_options_auth_passkeys_register_options_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
      - HTTPBearer: []
  /auth/passkeys/register/verify:
    post:
      tags:
      - Auth
      summary: Passkey Register Verify
      description: Verify and store a new passkey credential.
      operationId: passkey_register_verify_auth_passkeys_register_verify_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasskeyRegistrationVerifyRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasskeyInfo'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
  /auth/passkeys/authenticate/options:
    post:
      tags:
      - Auth
      summary: Passkey Authenticate Options
      description: Return PublicKeyCredentialRequestOptions for passkey authentication.
      operationId: passkey_authenticate_options_auth_passkeys_authenticate_options_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasskeyAuthenticationOptionsRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasskeyAuthenticationOptionsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/passkeys/authenticate/verify:
    post:
      tags:
      - Auth
      summary: Passkey Authenticate Verify
      description: Verify a passkey assertion and return tokens.
      operationId: passkey_authenticate_verify_auth_passkeys_authenticate_verify_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasskeyAuthenticationVerifyRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /auth/passkeys:
    get:
      tags:
      - Auth
      summary: List Passkeys
      description: List all passkeys for the current user.
      operationId: list_passkeys_auth_passkeys_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasskeyListResponse'
      security:
      - HTTPBearer: []
  /auth/passkeys/{passkey_id}:
    patch:
      tags:
      - Auth
      summary: Update Passkey
      description: Rename a passkey.
      operationId: update_passkey_auth_passkeys__passkey_id__patch
      security:
      - HTTPBearer: []
      parameters:
      - name: passkey_id
        in: path
        required: true
        schema:
          type: integer
          title: Passkey Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasskeyUpdateRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasskeyInfo'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
      - Auth
      summary: Remove Passkey
      description: Delete a passkey.
      operationId: remove_passkey_auth_passkeys__passkey_id__delete
      security:
      - HTTPBearer: []
      parameters:
      - name: passkey_id
        in: path
        required: true
        schema:
          type: integer
          title: Passkey Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ApiKeyCreateResponse:
      properties:
        api_key:
          type: string
          title: Api Key
        prefix:
          type: string
          title: Prefix
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
      - api_key
      - prefix
      - created_at
      title: ApiKeyCreateResponse
    PasskeyInfo:
      properties:
        id:
          type: integer
          title: Id
        device_name:
          type: string
          title: Device Name
        created_at:
          type: string
          format: date-time
          title: Created At
        last_used_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Last Used At
        backed_up:
          type: boolean
          title: Backed Up
        transports:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Transports
      type: object
      required:
      - id
      - device_name
      - created_at
      - last_used_at
      - backed_up
      - transports
      title: PasskeyInfo
    UsageQuota:
      properties:
        usage_month:
          type: string
          format: date
          title: Usage Month
        request_count:
          type: integer
          title: Request Count
        request_limit:
          type: integer
          title: Request Limit
      type: object
      required:
      - usage_month
      - request_count
      - request_limit
      title: UsageQuota
    EmailVerificationRequest:
      properties:
        email:
          type: string
          title: Email
      type: object
      required:
      - email
      title: EmailVerificationRequest
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    PasswordResetConfirmRequest:
      properties:
        token:
          type: string
          title: Token
        new_password:
          type: string
          title: New Password
      type: object
      required:
      - token
      - new_password
      title: PasswordResetConfirmRequest
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    PasswordResetResponse:
      properties:
        status:
          type: string
          title: Status
      type: object
      required:
      - status
      title: PasswordResetResponse
    ApiKeyCreateRequest:
      properties:
        regenerate:
          type: boolean
          title: Regenerate
          default: false
      type: object
      title: ApiKeyCreateRequest
    PasskeyRegistrationVerifyRequest:
      properties:
        credential:
          type: string
          title: Credential
        device_name:
          type: string
          title: Device Name
          default: Passkey
      type: object
      required:
      - credential
      title: PasskeyRegistrationVerifyRequest
    RefreshTokenRequest:
      properties:
        refresh_token:
          type: string
          title: Refresh Token
      type: object
      required:
      - refresh_token
      title: RefreshTokenRequest
    EmailVerificationConfirmRequest:
      properties:
        token:
          type: string
          title: Token
      type: object
      required:
      - token
      title: EmailVerificationConfirmRequest
    User:
      properties:
        id:
          type: integer
          title: Id
        email:
          type: string
          title: Email
        full_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Full Name
        picture_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Picture Url
        plan_type:
          type: string
          title: Plan Type
        personal_plan_type:
          anyOf:
          - type: string
          - type: 'null'
          title: Personal Plan Type
        plan_expires_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Plan Expires At
        personal_plan_expires_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Personal Plan Expires At
        entitlement_source:
          type: string
          title: Entitlement Source
          default: personal
        workspace_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Workspace Id
        email_verified:
          type: boolean
          title: Email Verified
          default: false
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Created At
        blocked_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Blocked At
      type: object
      required:
      - id
      - email
      - plan_type
      title: User
    PasskeyUpdateRequest:
      properties:
        device_name:
          type: string
          title: Device Name
      type: object
      required:
      - device_name
      title: PasskeyUpdateRequest
    PasskeyListResponse:
      properties:
        passkeys:
          items:
            $ref: '#/components/schemas/PasskeyInfo'
          type: array
          title: Passkeys
      type: object
      required:
      - passkeys
      title: PasskeyListResponse
    GoogleAuthRequest:
      properties:
        id_token:
          type: string
          title: Id Token
          description: Google ID token obtained from the client-side OAuth flow.
      type: object
      required:
      - id_token
      title: GoogleAuthRequest
    PasskeyAuthenticationOptionsResponse:
      properties:
        options:
          additionalProperties: true
          type: object
          title: Options
        session_id:
          type: string
          title: Session Id
      type: object
      required:
      - options
      - session_id
      title: PasskeyAuthenticationOptionsResponse
    ApiKeyInfo:
      properties:
        has_key:
          type: boolean
          title: Has Key
        prefix:
          anyOf:
          - type: string
          - type: 'null'
          title: Prefix
        created_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Created At
      type: object
      required:
      - has_key
      title: ApiKeyInfo
    McpConnection:
      properties:
        client:
          type: string
          title: Client
        connected_at:
          type: string
          format: date-time
          title: Connected At
        last_connected_at:
          type: string
          format: date-time
          title: Last Connected At
      type: object
      required:
      - client
      - connected_at
      - last_connected_at
      title: McpConnection
      description: 'One AI assistant the user has connected to FactIQ.


        client is the assistant''s display name ("Claude", "Claude Code", "Codex",

        "ChatGPT", or "API key" for raw fiq_ keys). connected_at is the first time

        it connected; last_connected_at the most recent sign-in from it.'
    EmailSignupRequest:
      properties:
        email:
          type: string
          title: Email
        password:
          type: string
          title: Password
        full_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Full Name
      type: object
      required:
      - email
      - password
      title: EmailSignupRequest
    EmailLoginRequest:
      properties:
        email:
          type: string
          title: Email
        password:
          type: string
          title: Password
      type: object
      required:
      - email
      - password
      title: EmailLoginRequest
    TokenResponse:
      properties:
        access_token:
          type: string
          title: Access Token
        token_type:
          type: string
          title: Token Type
          default: bearer
        refresh_token:
          anyOf:
          - type: string
          - type: 'null'
          title: Refresh Token
        user:
          $ref: '#/components/schemas/User'
        monthly_usage:
          anyOf:
          - $ref: '#/components/schemas/UsageQuota'
          - type: 'null'
        api_key:
          anyOf:
          - type: string
          - type: 'null'
          title: Api Key
      type: object
      required:
      - access_token
      - user
      title: TokenResponse
    UserProfile:
      properties:
        user:
          $ref: '#/components/schemas/User'
        monthly_usage:
          anyOf:
          - $ref: '#/components/schemas/UsageQuota'
          - type: 'null'
        is_admin:
          type: boolean
          title: Is Admin
          default: false
        mcp_connections:
          items:
            $ref: '#/components/schemas/McpConnection'
          type: array
          title: Mcp Connections
      type: object
      required:
      - user
      title: UserProfile
    PasskeyAuthenticationOptionsRequest:
      properties:
        email:
          anyOf:
          - type: string
          - type: 'null'
          title: Email
      type: object
      title: PasskeyAuthenticationOptionsRequest
    PasskeyAuthenticationVerifyRequest:
      properties:
        credential:
          type: string
          title: Credential
        session_id:
          type: string
          title: Session Id
      type: object
      required:
      - credential
      - session_id
      title: PasskeyAuthenticationVerifyRequest
    PasswordResetRequest:
      properties:
        email:
          type: string
          title: Email
      type: object
      required:
      - email
      title: PasswordResetRequest
    EmailVerificationResponse:
      properties:
        status:
          type: string
          title: Status
      type: object
      required:
      - status
      title: EmailVerificationResponse
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer