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

# Preview GTM Enrichment

> Plans enrichment and verification without calling providers or spending credits.



## OpenAPI

````yaml /api-reference/openapi.json post /wrapped/credits/locus-gtm/enrich/preview
openapi: 3.1.0
info:
  title: Locus Pro API
  description: >-
    Access paid tools, manage prepaid balances, and build usage billing. Send
    money as exact decimal strings and reuse Idempotency-Key on retries.
    Management routes require a scoped server key or authorized dashboard
    session. Sensitive workspace changes require an owner or admin with recent
    MFA or passkey verification, except where an operation documents a stricter
    boundary. Interactive agents use MCP OAuth; unattended agents use scoped
    Agent Connections. Browser widgets use end-user tokens.
  version: 0.7.0
servers:
  - url: https://api.paywithlocus.com/api
    description: Production
  - url: https://api.stage.paywithlocus.com/api
    description: Stage — evaluation and integration testing
security:
  - secretKey: []
tags:
  - name: Authentication
    description: Email-verified self-serve account creation and dashboard identity
  - name: Tenants
    description: Tenant profile, keys, and settings (dashboard session or secret key)
  - name: Workspace members
    description: Invite-only human workspace membership and role administration
  - name: Catalog
    description: Enable/disable APIs and set markups
  - name: Custom APIs
    description: Feature-gated enterprise BYOK providers and schema-backed custom actions
  - name: End users
    description: End-user accounts, tokens, and allocations
  - name: Top-ups
    description: Locus-hosted checkout top-ups and quotes
  - name: Ledger
    description: Burn/top-up history and earnings
  - name: Webhooks
    description: Signed events, delivery inspection, and replay
  - name: Burn
    description: Metered pay-per-use calls
  - name: MCP
    description: Stateless Streamable HTTP transport and MCP tool-result contracts
  - name: Okibi Identity
    description: >-
      Feature-gated Okibi identity verification and scoped native CLI credential
      bootstrap
  - name: Widget
    description: End-user JWT surface; a matching publishable key is optional
  - name: Agent-native onboarding
    description: >-
      Self-registration, human Stripe funding handoff, and restricted account
      setup for headless agents
  - name: Hosted Workflows
    description: >-
      Tenant-private TypeScript Workflow definitions, immutable versions,
      bounded runs, artifacts, and recovery
  - name: Agent connections
    description: Scoped, expiring, revocable credentials for agent execution
  - name: Recipes
    description: >-
      Search, research, extraction, enrichment, and travel outcomes across
      providers
paths:
  /wrapped/credits/locus-gtm/enrich/preview:
    post:
      tags:
        - Recipes
      summary: Preview GTM Enrichment
      description: >-
        Plans enrichment and verification without calling providers or spending
        credits.
      parameters:
        - $ref: '#/components/parameters/SessionBindingHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocusGtmEnrichmentRequest'
      responses:
        '200':
          description: Enrichment plan and estimate
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          description: Insufficient credits
        '403':
          description: Recipe, provider, or account access denied
        '409':
          description: Idempotency conflict or credit ceiling exceeded
      security:
        - secretKey: []
        - endUserToken: []
        - agentConnection: []
components:
  parameters:
    SessionBindingHeader:
      name: X-Locus-Session-Id
      in: header
      required: false
      schema:
        type: string
        minLength: 16
        maxLength: 128
        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{15,127}$
      description: >-
        Required only when the end-user JWT carries sid. Send the original
        high-entropy session value; sid is its SHA-256 fingerprint. Ignored for
        secret-key authentication.
  schemas:
    LocusGtmEnrichmentRequest:
      type: object
      properties:
        entity:
          type: object
          properties:
            kind:
              type: string
              enum:
                - person
                - company
            identifiers:
              type: object
              description: >-
                Person records require email, LinkedIn URL, provider ID, or a
                name plus company identifier. A phone may accompany another seed
                but is not supported alone. Company records require a domain,
                name, LinkedIn URL, or provider ID.
              properties:
                fullName:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                firstName:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                lastName:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                email:
                  type: string
                  format: email
                  minLength: 1
                  maxLength: 320
                phone:
                  type: string
                  minLength: 7
                  maxLength: 40
                  pattern: \S
                  description: >-
                    Optional contact value. It may accompany another supported
                    person seed but cannot be the sole enrichment identifier.
                linkedinUrl:
                  type: string
                  format: uri
                  minLength: 1
                  maxLength: 2000
                companyName:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                companyDomain:
                  type: string
                  minLength: 3
                  maxLength: 253
                  pattern: \S
                companyLinkedinUrl:
                  type: string
                  format: uri
                  minLength: 1
                  maxLength: 2000
                companyId:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                personId:
                  type: string
                  minLength: 1
                  maxLength: 500
                  pattern: \S
                ipAddress:
                  type: string
                  minLength: 3
                  maxLength: 64
                  pattern: \S
              additionalProperties: false
          required:
            - kind
            - identifiers
          additionalProperties: false
          oneOf:
            - properties:
                kind:
                  const: person
                identifiers:
                  anyOf:
                    - required:
                        - email
                    - required:
                        - linkedinUrl
                    - required:
                        - personId
                    - allOf:
                        - anyOf:
                            - required:
                                - fullName
                            - required:
                                - firstName
                                - lastName
                        - anyOf:
                            - required:
                                - companyDomain
                            - required:
                                - companyName
                            - required:
                                - companyLinkedinUrl
            - properties:
                kind:
                  const: company
                identifiers:
                  anyOf:
                    - required:
                        - companyDomain
                    - required:
                        - companyName
                    - required:
                        - companyLinkedinUrl
                    - required:
                        - companyId
        requestedFields:
          type: array
          uniqueItems: true
          items:
            type: string
            enum:
              - person.fullName
              - person.firstName
              - person.lastName
              - person.jobTitle
              - person.location
              - person.linkedinUrl
              - person.workEmail
              - person.personalEmail
              - person.mobilePhone
              - company.name
              - company.domain
              - company.website
              - company.linkedinUrl
              - company.description
              - company.industry
              - company.employeeCount
              - company.employeeRange
              - company.revenueRange
              - company.headquarters
              - company.phone
              - company.technologies
              - company.funding
              - company.hiring
        profile:
          type: string
          enum:
            - person_core
            - person_contact
            - company_core
            - company_intelligence
            - full
        objective:
          type: string
          enum:
            - highest_coverage
          default: highest_coverage
        providers:
          type: array
          uniqueItems: true
          items:
            type: string
        maxCredits:
          oneOf:
            - type: string
              pattern: ^\d+(?:\.\d{1,6})?$
            - type: number
              exclusiveMinimum: 0
          description: >-
            Aggregate provider-and-verification ceiling in workspace credits.
            Required for direct and hosted Workflow execution; set it equal to
            the Workflow call maxChargeCredits unless the Workflow call
            intentionally allows a tighter cap.
        contactVerification:
          type: string
          enum:
            - required
            - none
          default: required
          description: >-
            Require deliverability checks for discovered emails and validity,
            reachability, and available ownership evidence for discovered
            phones.
        externalUserId:
          type: string
        attribution:
          type: object
          additionalProperties: true
      required:
        - entity
        - maxCredits
      additionalProperties: false
  responses:
    BadRequest:
      description: >-
        The request is malformed or fails local validation before any provider
        or payment action.
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      description: Tenant secret key (lcr_…). Server-side only.
    endUserToken:
      type: http
      scheme: bearer
      description: >-
        60-3600 second end-user JWT minted via /credits/end-users/{id}/token. If
        the JWT has sid, send the original session value in X-Locus-Session-Id;
        sid contains only its SHA-256 fingerprint. Bearer tokens are replayable
        until expiry; use short TTLs, optional session binding, and
        Idempotency-Key on operations.
    agentConnection:
      type: http
      scheme: bearer
      description: >-
        Scoped lcac_ credential. Tenant-managed Agent Connections authorize only
        their bound MCP and wrapped execution surfaces. A bootstrap connection
        for a self-registered agent additionally authorizes the explicit
        /credits/agent/* self-service routes for its own account; neither form
        authorizes general tenant management.

````