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

# Duplicate proposal template

> Copies a template with its letters, instructions, answers, pricing and attachments. The copy is visible to admins and named name, or "<name> (Copy)" without one



## OpenAPI

````yaml post /proposal-templates/{id}/duplicate
openapi: 3.0.4
info:
  title: Vollna API
  description: API for managing Upwork profiles, proposals, results, and filters
  version: 1.0.0
servers:
  - url: https://api.vollna.com/v1
security: []
tags:
  - name: Profiles
    description: Manage Upwork profiles
  - name: Proposals
    description: Access and manage Upwork proposals
  - name: Results
    description: View monitoring results and projects
  - name: Filters
    description: Manage monitoring filters
  - name: Auto Bidding
    description: Manage auto bidding jobs and setups
  - name: Account
    description: The token team's account, plan and meters
  - name: Invitations
    description: Upwork invitations
  - name: Projects
    description: Upwork jobs and their competition
  - name: AI Qualifier
    description: A filter's AI qualifier and its verdicts
  - name: Market Insights
    description: Upwork market analytics and saved searches
  - name: Proposal Templates
    description: Proposal templates and their results
paths:
  /proposal-templates/{id}/duplicate:
    post:
      tags:
        - Proposal Templates
      summary: Duplicate proposal template
      description: >-
        Copies a template with its letters, instructions, answers, pricing and
        attachments. The copy is visible to admins and named name, or "<name>
        (Copy)" without one
      parameters:
        - name: id
          in: path
          required: true
          description: Template ID
          schema:
            type: integer
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  maxLength: 255
      responses:
        '201':
          description: Copy created; returns the same shape as GET /proposal-templates/{id}
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ProposalTemplate'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - apiToken: []
components:
  schemas:
    ProposalTemplate:
      type: object
      properties:
        id:
          type: integer
          example: 123
        name:
          type: string
          nullable: true
          example: Web development
        visibility:
          type: string
          enum:
            - shared_view
            - shared_edit
            - shared_admins
          description: Who on the team can see and edit this template
          example: shared_admins
        sender:
          type: object
          description: Who bids with this template
          properties:
            name:
              type: string
              nullable: true
              description: Contractor or freelancer name
              example: John Smith
            type:
              type: string
              enum:
                - agency
                - freelancer
                - manual
              example: agency
            organization:
              type: string
              nullable: true
              description: >-
                Agency name for agency templates, Upwork team name for
                freelancer templates
              example: Acme Agency LLC
        hourly_rate:
          type: object
          properties:
            mode:
              type: string
              enum:
                - fixed
                - smart
                - flexible
              example: smart
            rate:
              type: number
              nullable: true
              description: Base rate; the default rate in flexible mode
              example: 50
            smart_rate_min:
              type: number
              nullable: true
              description: Smart mode only
              example: 25
            smart_rate_max:
              type: number
              nullable: true
              description: Smart mode only
              example: 120
            smart_rate_percent:
              type: integer
              nullable: true
              description: 'Smart mode only: percent of the client''s budget'
              example: 98
            rules_count:
              type: integer
              description: 'Flexible mode: number of budget rules'
              example: 0
            increase_percent:
              type: number
              nullable: true
              description: Scheduled rate increase, percent
              example: null
            increase_frequency:
              type: string
              enum:
                - never
                - every-3-months
                - every-6-months
                - every-12-months
              example: never
            rules:
              type: array
              description: 'Flexible mode: the budget rules'
              items:
                type: object
                properties:
                  from:
                    type: number
                    minimum: 0
                    description: Client budget from
                  to:
                    type: number
                    nullable: true
                    description: Client budget to; null is no upper bound
                  rate_type:
                    type: string
                    enum:
                      - fixed
                      - percent
                  value:
                    type: number
                    description: >-
                      fixed: $3 to $999 an hour. percent: 10 to 150% of the
                      client's rate
                required:
                  - from
                  - rate_type
                  - value
        fixed_price:
          type: object
          properties:
            type:
              type: string
              enum:
                - by-job-terms
                - by-project
              example: by-job-terms
            price:
              type: number
              nullable: true
              description: 'by-project only: the same bid on every fixed-price job'
            min_price:
              type: number
              nullable: true
              description: 'by-job-terms only: minimum bid'
            client_budget_percent:
              type: integer
              nullable: true
              description: 'by-job-terms only: bid as a percent of the client''s budget'
        ai:
          type: object
          properties:
            model:
              type: string
              nullable: true
              description: Selected AI model; null means the default model
              example: gemini-3.6-flash
            instructions:
              type: string
              nullable: true
              description: AI instructions the generator follows
              example: Write like a human
            client_questions:
              type: string
              nullable: true
              description: Prompt for answering client screening questions; null when empty
              example: Answer briefly
            additional_context:
              type: string
              nullable: true
              description: Additional context for generation; null when empty
            template_structure:
              type: boolean
              description: Generated proposals follow the template structure
        filters:
          type: array
          description: Filters this template is assigned to
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        auto_bidding_setups:
          type: array
          description: Auto-bidding setups that bid with this template
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        ab_testing:
          type: boolean
          description: Cover letter variants rotate for A/B testing
        answers:
          type: array
          description: Targeted answers to client screening questions
          items:
            type: object
            properties:
              question:
                type: string
                example: Availability?
              answer:
                type: string
                example: Full time
              match_type:
                type: string
                example: exact
        attachments:
          type: array
          items:
            type: object
            properties:
              uid:
                type: string
                example: 9f1c2ab34de56f7890ab12cd34ef56ab
              name:
                type: string
                example: portfolio.pdf
              mime_type:
                type: string
                example: application/pdf
              size_bytes:
                type: integer
                example: 245760
        cover_letters:
          type: object
          nullable: true
          description: >-
            Cover letter variants by A/B slot; null when template structure is
            disabled and the AI ignores them
          properties:
            variant_a:
              type: string
              nullable: true
              example: Hi, I build web apps with Symfony and React...
            variant_b:
              type: string
              nullable: true
        created_at:
          type: string
          format: date-time
          example: '2026-08-26T10:00:00+00:00'
        updated_at:
          type: string
          format: date-time
          example: '2026-08-26T10:00:00+00:00'
    ServiceError:
      type: object
      properties:
        error:
          type: string
          description: Short error title
          example: Validation failed
        message:
          type: string
          description: What went wrong and what to send instead, written for the user
        fields:
          type: object
          description: >-
            Per-field messages keyed by dot path, when several fields fail at
            once
          additionalProperties:
            type: string
    Error:
      type: object
      properties:
        error:
          type: string
  responses:
    BadRequest:
      description: >-
        Invalid request. message says what to send instead; fields names each
        invalid field
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceError'
    Unauthorized:
      description: Missing or unknown API token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PaymentRequired:
      description: The team's subscription is not active
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The plan has no API access, or the token team may not do this. message
        says why
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceError'
    NotFound:
      description: Not found in the token's team
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceError'
    TooManyRequests:
      description: More than 30 requests a minute. See Rate Limiting
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiToken:
      type: apiKey
      name: X-API-TOKEN
      in: header
      description: API token for authentication

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.