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

# Prepare prompt updates from the training session



## OpenAPI

````yaml /openapi.json post /sequences/{sequence_id}/agent/training/{session_id}/finish/
openapi: 3.1.0
info:
  contact:
    email: support@getoneprofile.ai
    name: Oneprofile Support
  description: >-
    REST API reference for Oneprofile, the GTM data layer for your CRM. Manage
    tables, enrichments, and integrations. Authenticate with an API key to get
    started.
  termsOfService: https://www.getoneprofile.ai/terms
  title: API Reference | Oneprofile
  version: '0.0'
servers:
  - url: https://api.getoneprofile.ai
security: []
tags:
  - description: >-
      The docked AI Assistant: its general chat about the workspace and the
      product, streamed as Server-Sent Events, and the one list of a person's
      threads across every assistant, with pin, rename, delete and the
      search-to-table link.
    name: assistant
  - description: >-
      The messages a person keeps to send the assistant again: the ones the
      workspace saved and the ones that ship with the product, with save,
      rename, edit and delete.
    name: assistant-prompt
  - description: >-
      Granted workspace actions: what the AI Assistant proposed or applied in a
      conversation, the approve and dismiss decisions on each card, the
      workspace's approval threshold and default grants, and the eight verbs.
    name: workspace-actions
  - description: >-
      The Getting started checklist: a workspace's progress through the six
      steps from its first people search to its first launched sequence.
    name: onboarding
  - description: Sender profiles, connected mailboxes, tags, and the Google connect flow.
    name: senders
  - description: The workspace do-not-contact list, enforced before every send.
    name: suppression
  - description: >-
      The workspace's recontact rule: how long before anyone hears from us
      again.
    name: contact_cooldown
  - description: 'Sequence authoring: the graph, the table-backed audience, previews.'
    name: sequences
  - description: >-
      The outbound agent behind a sequence: the voice it writes in, its
      per-message prompts, what it wrote and what people told it.
    name: outbound-agents
  - description: >-
      The LinkedIn channel: connecting an account to a sender, its safety limits
      and history, and the protocol the browser extension speaks.
    name: linkedin
  - description: >-
      The approval queue: everything waiting on a person across every sender and
      channel, and the workspace's manual or automatic modes per channel.
    name: outreach
  - description: 'The unified outreach inbox: threads, replies, labels, events.'
    name: inbox
  - description: 'The AI reply layer: workspace settings, drafts, and approval.'
    name: inbox-ai
  - description: Notification rules, per-user preferences, and the Slack connection.
    name: notifications
  - description: Endpoints for seeing all available integration types.
    name: integration-types
  - description: Endpoints for creating and managing integrations.
    name: integrations
  - description: Endpoints for the generic OAuth install/claim app-listings engine.
    name: app-listings
  - description: Endpoints for creating and managing API keys.
    name: apikey
  - description: >-
      The Model Context Protocol endpoint: use Oneprofile from Claude Code,
      Claude Desktop, Cursor or any other MCP client, with an API key as the
      bearer token.
    name: mcp
  - description: Endpoints for managing billing and subscription information.
    name: billing
  - description: Endpoints for creating and managing tables.
    name: tables
  - description: Endpoints for table columns, formula previews, and on-demand column runs.
    name: table-columns
  - description: Endpoints for table rows and manual cell edits.
    name: table-rows
  - description: Endpoints for observing and cancelling table recompute runs.
    name: table-runs
  - description: >-
      Endpoints for org-shared per-column display preferences: hidden, pinned,
      width, and colour tint.
    name: table-ui-prefs
  - description: >-
      Endpoints for the org-shared names given to the column tint palette: what
      this organisation calls each colour. Org-level, not per-table.
    name: table-column-color-labels
  - description: >-
      Endpoints for the enrichment action catalog, model list, presets, draft
      generation, and saved agents.
    name: table-enrichments
  - description: >-
      Endpoints for teaching a saved agent from example rows: training sessions,
      per-row feedback, and the proposed prompt to approve.
    name: agent-training
  - description: >-
      The durable audit trail of a table's enrichment actions: configured,
      edited, run, cancelled, and settled cost.
    name: table-enrichment-audit-logs
  - description: Endpoints for saving and applying column templates.
    name: table-templates
  - description: Server-sent change feed for a table's grid.
    name: table-events
  - description: 'Endpoints for org-shared saved table views: sort, filters, hidden columns.'
    name: table-views
  - description: >-
      Endpoints for PER-USER table preferences: favourites and recently opened.
      Unlike the rest of the table surface these are personal, so two members of
      one organisation legitimately see different answers.
    name: table-user-prefs
  - description: >-
      Endpoints for building a table from an uploaded CSV: upload and preview
      the inferred columns, commit the reviewed mapping, then poll the row load.
    name: table-imports
  - description: Endpoint for downloading a table's rows as CSV.
    name: table-export
  - description: >-
      Endpoints for the integration a table imports from: attach and preview it,
      promote imported fields into columns, and run the import on demand.
    name: table-sources
  - description: >-
      Endpoints for a table's recurring import cadence: set it, pause it, and
      read the next fire times.
    name: table-schedules
  - description: >-
      Endpoints for pushing a table's rows out to a connected integration: list
      writable destinations, derive their write capabilities, and map export
      columns.
    name: table-writeback
  - description: >-
      Endpoints backing a lookup column's setup: the connections whose records a
      column could read, and the identity fields one record type can be looked
      up by.
    name: table-integration-lookup
  - description: >-
      Endpoints for sourcing leads from the lead database: count and preview
      matches, land them in a table, and keep saved searches. Alongside people
      and company searches, leads can be sourced from buying signals — what a
      company or person just did — with a catalogue endpoint behind the picker
      that builds them.
    name: find-leads
  - description: >-
      Endpoints for discovering a domain's subdomains from public certificate
      logs and landing the results in a table.
    name: find-subdomains
  - description: Endpoints for the credit balance meter and usage reporting.
    name: credits
  - description: >-
      Endpoints for the workspace referral program: the shareable link, the
      friends who joined through it, and claiming a code after signup.
    name: referral
  - description: >-
      Endpoints for the affiliate program's own dashboard: enrolling and
      claiming a code, the summary, stats and activity feed, the commission
      ledger, and identity verification and payouts.
    name: affiliate
  - description: >-
      Endpoints for the design partner program's customer surface: whether this
      workspace is a design partner, the badges its feedback has earned, and
      sending and reading that feedback.
    name: design-partner
  - description: >-
      Endpoints for the org-level AI business context — company description,
      ideal customer profile, buyer personas, interest signals and social proof
      — plus domain-based generation and the reference documents whose summaries
      ride alongside those fields.
    name: ai-context
  - description: >-
      Endpoints for the signed-in user's Google Drive connection: starting and
      finishing the OAuth grant, checking or dropping it, and minting the
      short-lived token the Google Picker needs.
    name: google-drive
paths:
  /sequences/{sequence_id}/agent/training/{session_id}/finish/:
    post:
      tags:
        - sequences
      summary: Prepare prompt updates from the training session
      operationId: finish_sequence_training
      parameters:
        - in: path
          name: sequence_id
          required: true
          schema:
            format: uuid
            title: Sequence Id
            type: string
        - in: path
          name: session_id
          required: true
          schema:
            format: uuid
            title: Session Id
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SequenceTrainingActionSchema'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SequenceTrainingReadSchema'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          description: Sequence, audience contact, or session not found
        '409':
          description: Sequence, agent, or training revision changed
        '422':
          description: Invalid selection, feedback, or training action
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Service unavailable.
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    SequenceTrainingActionSchema:
      properties:
        expected_revision:
          minimum: 1
          title: Expected Revision
          type: integer
      required:
        - expected_revision
      title: SequenceTrainingActionSchema
      type: object
    SequenceTrainingReadSchema:
      properties:
        agent_id:
          format: uuid
          title: Agent Id
          type: string
        applied_version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Applied Version
        base_version:
          title: Base Version
          type: integer
        contacts:
          items:
            $ref: '#/components/schemas/SequenceTrainingContactReadSchema'
          title: Contacts
          type: array
        created_at:
          format: date-time
          title: Created At
          type: string
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        id:
          format: uuid
          title: Id
          type: string
        proposal:
          anyOf:
            - $ref: '#/components/schemas/ContactTrainingProposal'
            - type: 'null'
        revision:
          title: Revision
          type: integer
        status:
          $ref: '#/components/schemas/ContactTrainingStatus'
        steps:
          items:
            $ref: '#/components/schemas/AiStep'
          title: Steps
          type: array
      required:
        - id
        - agent_id
        - status
        - revision
        - base_version
        - contacts
        - proposal
        - error
        - applied_version
        - created_at
      title: SequenceTrainingReadSchema
      type: object
    UnauthorizedResponse:
      properties:
        detail:
          description: The detail of why the request is unauthorized.
          title: Detail
          type: string
      required:
        - detail
      title: UnauthorizedResponse
      type: object
    ForbiddenResponse:
      properties:
        detail:
          description: The detail of why the request is forbidden.
          title: Detail
          type: string
      required:
        - detail
      title: ForbiddenResponse
      type: object
    ServerErrorResponse:
      properties:
        detail:
          description: The detail of why the server returned an error.
          title: Detail
          type: string
      required:
        - detail
      title: ServerErrorResponse
      type: object
    SequenceTrainingContactReadSchema:
      properties:
        context:
          additionalProperties:
            type: string
          title: Context
          type: object
        label:
          title: Label
          type: string
        messages:
          items:
            $ref: '#/components/schemas/SequenceTrainingMessageReadSchema'
          title: Messages
          type: array
        note:
          title: Note
          type: string
        record_id:
          format: uuid
          title: Record Id
          type: string
        verdict:
          anyOf:
            - $ref: '#/components/schemas/ContactReviewVerdict'
            - type: 'null'
      required:
        - record_id
        - label
        - context
        - messages
        - verdict
        - note
      title: SequenceTrainingContactReadSchema
      type: object
    ContactTrainingProposal:
      description: The session's candidate prompt update, kept pending until applied.
      properties:
        changes:
          items:
            $ref: '#/components/schemas/ContactPromptChange'
          title: Changes
          type: array
        summary:
          title: Summary
          type: string
      required:
        - summary
      title: ContactTrainingProposal
      type: object
    ContactTrainingStatus:
      description: A session's phase, also used to resume its review screen.
      enum:
        - running
        - reviewing
        - proposing
        - proposed
        - completed
        - abandoned
      title: ContactTrainingStatus
      type: string
    AiStep:
      additionalProperties: false
      description: >-
        One thing an AI turn did, as the wire spells it.


        Field-for-field identical to
        ``table_live_updates.TableCellActivityStepSchema``

        ON PURPOSE, and the duplication is the design. That schema sits in the
        table

        stratum's kernel, which the lead search, inbox and sequence surfaces
        have no

        business importing; this one sits under every surface equally. Because
        the

        two agree exactly, the frontend's ``TimelineStep`` renders both with no

        conversion and no second component, which is the property worth
        protecting.

        ``test_ai_step_mirrors_the_cell_activity_step`` pins them together.


        Plain strings rather than enums, for the same reason the cell schema
        uses

        them: the vocabulary is open, clients must tolerate tokens they have not

        learned yet, and a new action should never be able to break a running

        dashboard.
      properties:
        action:
          description: >-
            What kind of move this was, e.g. `read_table`, `plan`,
            `write_column`.
          title: Action
          type: string
        detail:
          default: ''
          description: >-
            The step's input: the instruction, the column it read, the query it
            ran.
          title: Detail
          type: string
        duration_ms:
          anyOf:
            - type: integer
            - type: 'null'
          description: Wall clock for the work this step describes, never an estimate.
          title: Duration Ms
        observation:
          default: ''
          description: >-
            One line on what came back. The half that makes a step worth
            reading.
          maxLength: 500
          title: Observation
          type: string
        outcome:
          default: completed
          description: >-
            `completed`, `failed`, `refused` or `stopped`. Clients must tolerate
            new tokens.
          title: Outcome
          type: string
        thought:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The model's stated reasoning for choosing this step. Set by the
            agent loop; the assistant surfaces leave it null, and the renderer
            simply omits the rung.
          title: Thought
      required:
        - action
      title: AiStep
      type: object
    SequenceTrainingMessageReadSchema:
      properties:
        authored:
          title: Authored
          type: boolean
        body:
          anyOf:
            - type: string
            - type: 'null'
          title: Body
        conditional:
          anyOf:
            - type: string
            - type: 'null'
          title: Conditional
        edited_body:
          anyOf:
            - type: string
            - type: 'null'
          title: Edited Body
        edited_subject:
          anyOf:
            - type: string
            - type: 'null'
          title: Edited Subject
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        facts_used:
          items:
            type: string
          title: Facts Used
          type: array
        id:
          format: uuid
          title: Id
          type: string
        kind:
          title: Kind
          type: string
        note:
          title: Note
          type: string
        reasoning:
          anyOf:
            - type: string
            - type: 'null'
          title: Reasoning
        steps:
          items:
            $ref: '#/components/schemas/AiStep'
          title: Steps
          type: array
        subject:
          anyOf:
            - type: string
            - type: 'null'
          title: Subject
        timing:
          title: Timing
          type: string
        title:
          title: Title
          type: string
      required:
        - id
        - title
        - timing
        - kind
        - authored
        - conditional
        - subject
        - body
        - error
        - note
        - edited_subject
        - edited_body
        - reasoning
        - facts_used
        - steps
      title: SequenceTrainingMessageReadSchema
      type: object
    ContactReviewVerdict:
      description: Only an explicit review counts as feedback.
      enum:
        - good
        - bad
        - skipped
      title: ContactReviewVerdict
      type: string
    ContactPromptChange:
      description: A coordinated change to one existing prompt slot.
      properties:
        current:
          title: Current
          type: string
        proposed:
          title: Proposed
          type: string
        rationale:
          title: Rationale
          type: string
        slot_key:
          title: Slot Key
          type: string
      required:
        - slot_key
        - current
        - proposed
        - rationale
      title: ContactPromptChange
      type: object
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-Key
      type: apiKey
    HTTPBearer:
      scheme: bearer
      type: http

````