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

# Create a keyword research job

> Create a new keyword research job. Requires authentication.
Debits one run (credit) upfront and enforces domain limit.
Triggers the pipeline (personas → seed keywords → enrichment → expansion → clustering).




## OpenAPI

````yaml openapi.json post /api/v1/jobs
openapi: 3.1.0
info:
  title: SuprKeywords API
  version: 0.1.0
  description: >-
    API for keyword research jobs: create jobs, list results, fetch personas,
    keywords, clusters, and export CSV. Programmatic access is authenticated
    with API keys (Authorization: Bearer <key>). The dashboard uses session
    cookies when using the web app in a browser.
  contact:
    name: SuprKeywords Support
    url: https://www.suprkeywords.com
    email: support@suprkeywords.com
servers:
  - url: https://www.suprkeywords.com
    description: Production
  - url: http://localhost:4605
    description: Local (for testing against a local API)
security:
  - bearerAuth: []
  - SessionAuth: []
tags: []
paths:
  /api/v1/jobs:
    post:
      tags:
        - Jobs
      summary: Create a keyword research job
      description: >
        Create a new keyword research job. Requires authentication.

        Debits one run (credit) upfront and enforces domain limit.

        Triggers the pipeline (personas → seed keywords → enrichment → expansion
        → clustering).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - primaryDomain
                - languageCode
                - locationCode
              properties:
                primaryDomain:
                  type: string
                  description: Primary domain to analyze (e.g. example.com)
                  example: example.com
                competitorDomains:
                  type: array
                  items:
                    type: string
                  maxItems: 10
                  description: Optional competitor domains
                  example:
                    - competitor.com
                languageCode:
                  type: string
                  description: Language code (e.g. en)
                locationCode:
                  type: integer
                  description: Location code (e.g. 2840 for United States)
      responses:
        '201':
          description: Job created; pipeline started
          content:
            application/json:
              schema:
                type: object
                properties:
                  job:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      status:
                        type: string
                      createdAt:
                        type: string
                        format: date-time
        '400':
          description: Validation error (invalid body)
        '401':
          description: Unauthorized (not signed in)
        '402':
          description: Insufficient runs to create a job
        '403':
          description: Domain limit reached
        '404':
          description: User not found
        '500':
          description: Internal server error
      security:
        - bearerAuth: []
        - SessionAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        API key for programmatic access. Create keys in Settings (Agency plan).
        Send as Authorization: Bearer <your-api-key> or X-API-KEY:
        <your-api-key>. Unauthenticated requests return 401.
    SessionAuth:
      type: apiKey
      in: cookie
      name: __session
      description: >-
        Session cookie when using the dashboard in a browser. For scripts and
        server-to-server calls, use BearerAuth (API key) instead. Demo job
        access is allowed for GET job and sub-resources when applicable.

````