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

# Copy flows from another number

> Copies flows from another connection's WhatsApp Business account into the workspace's default account, through Meta's flow migration. Both accounts must belong to the same Meta business. Copies keep their names and status.

**Required scope:** `flows:write`



## OpenAPI

````yaml /api-reference/openapi.json post /v1/flows/copy
openapi: 3.1.0
info:
  title: LazyApp API
  version: v1
  description: >-
    One WhatsApp API for developers, SaaS platforms and businesses.


    Every endpoint is Bearer-authenticated with a LazyApp API key, returns JSON,
    and is scoped to the workspace and mode (`live` or `test`) the key belongs
    to.


    Live keys need the Pro plan. A live key on a workspace below Pro gets `402`
    with `code: plan_limit_reached` on every request. Test keys work on every
    plan, so you can build against the test number before you upgrade.


    LazyApp adds 0% to Meta's message rates. Meta bills each message to the
    business's own Meta payment method; your LazyApp plan is billed separately.
  contact:
    name: LazyApp support
    url: https://lazyapp.in
servers:
  - url: https://lazyapp.in
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Messages
    description: Send and schedule WhatsApp messages.
  - name: Contacts
    description: The people you message, and their identifiers.
  - name: Conversations
    description: Threads and their message history.
  - name: Calls
    description: WhatsApp call history for the workspace.
  - name: Templates
    description: Create, submit and sync message templates.
  - name: Media
    description: Upload, retrieve and delete media.
  - name: Broadcasts
    description: Template sends to many contacts at once.
  - name: Events
    description: Say what happened; LazyApp picks the template.
  - name: Flows
    description: WhatsApp Flows and their responses.
  - name: Webhooks
    description: Register endpoints and inspect deliveries.
  - name: Workflows
    description: Automations and their executions.
  - name: Verify
    description: One-time passcodes over WhatsApp.
  - name: Capabilities
    description: What each connected number supports.
  - name: Catalog
    description: Proxy Meta Commerce catalog products for a connection.
  - name: Platform
    description: Manage customers if you run a platform on LazyApp.
  - name: Meta-compatible proxy
    description: Drop-in endpoints for existing Cloud API integrations.
  - name: Connections
    description: >-
      Your WhatsApp numbers and the account behind them: health, limits,
      registration, display name, blue tick, QR codes, conversation starters,
      opt-in links, business profile and blocked users.
  - name: Billing
    description: >-
      Meta's message rates, which LazyApp passes on with 0% added, and the
      billing facts behind them.
  - name: Analytics
    description: Workspace messaging aggregates.
  - name: Groups
    description: WhatsApp group chats on a connection Meta has enabled.
  - name: Funding
    description: Local funding status and recorded WhatsApp charges.
  - name: Connections
    description: 'WhatsApp connections: block users, business profile, insights.'
  - name: Payments
    description: >-
      WhatsApp payments in India: ask for payment, follow it, update the order
      and refund.
paths:
  /v1/flows/copy:
    post:
      tags:
        - Flows
      summary: Copy flows from another number
      description: >-
        Copies flows from another connection's WhatsApp Business account into
        the workspace's default account, through Meta's flow migration. Both
        accounts must belong to the same Meta business. Copies keep their names
        and status.


        **Required scope:** `flows:write`
      parameters:
        - name: Idempotency-Key
          in: header
          description: >-
            Optional. Makes this write safe to retry: the same key replays the
            first response instead of acting twice.
          schema:
            type: string
            maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - source_connection_uuid
              properties:
                source_connection_uuid:
                  type: string
                  format: uuid
                flow_names:
                  type: array
                  maxItems: 100
                  items:
                    type: string
                    maxLength: 200
                  description: Leave out to copy every flow.
      responses:
        '200':
          description: What was copied.
          content:
            application/json:
              schema:
                type: object
                properties:
                  copied:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        provider_flow_id:
                          type: string
                          nullable: true
                  failed:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        reason:
                          type: string
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          $ref: '#/components/responses/PlanLimitReached'
        '403':
          description: The key lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Source connection not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Same account, too many names, or Meta refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        message:
          type: string
          description: Human-readable description of what went wrong.
        code:
          type: string
          description: >-
            Stable machine-readable reason, when the failure is one a client can
            branch on.
      required:
        - message
  responses:
    PlanLimitReached:
      description: >-
        The workspace's plan does not allow this. A live key on a workspace
        below Pro gets this on every request, because the live API is a Pro
        feature. Upgrade in **Billing** to use live keys. Test keys are never
        limited, on any plan.


        `code` is always `plan_limit_reached`. Show `message` to the person: it
        names the plan to move to.


        Other plan limits use the same code in the console, but the API reports
        them differently today: a broadcast larger than the month's remaining
        Live broadcast sends is refused with `422` and the reason in `message`,
        and connecting a number beyond the plan's number capacity fails
        validation (`422`) on `phone_number_id`.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: >-
                  A sentence you can show to the person. Says which plan to move
                  to.
              code:
                type: string
                enum:
                  - plan_limit_reached
            required:
              - message
              - code
          example:
            message: >-
              The API is on the Pro plan. Upgrade in Billing to use live keys.
              Test keys keep working.
            code: plan_limit_reached
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your API key, e.g. `sk_live_...` or `sk_test_...`.

````

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