# Copy an existing Product Plan

Create a new Product Plan as a copy of an existing ACTIVE Product Plan accessible to the user. The new Product Plan inherits country prices, durations, and other fields from the source. The caller chooses a subset of features and automationDirectories — both must be subsets of the source's. The new Product Plan is created in ACTIVE status. Child Sales Partners are allowed to copy their own Product Plans. If the target Sales Partner has no active default Product Plan, the copy is automatically set as the default.

Endpoint: POST /product-plans/copy
Version: 20260701
Security: X-API-KEY, Authorization

## Request fields (application/json):

  - `productPlanId` (integer, required)
    Id of the existing ACTIVE Product Plan to copy from

  - `name` (string, required)
    Name of the new Product Plan

  - `description` (string)
    Description of the new Product Plan

  - `features` (array)
    Features for the new Product Plan. Must be a non-empty subset of the source Product Plan features.

  - `automationDirectories` (array)
    Automation directories for the new Product Plan. Must be a non-empty subset of the source Product Plan automationDirectories.

  - `salesPartnerId` (integer)
    Optional. Sales Partner id to own the new Product Plan. Defaults to the calling user's Sales Partner. If provided,
                                 must be the caller's Sales Partner or one of its child Sales Partners.

## Response 200 fields (*/*):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `warnings` (array)
    (optional) Holds further warnings

  - `response` (object, required)
    The actual response object of the response

  - `response.productPlanResponse` (object)
    Product Plan Response Model

  - `response.productPlanResponse.id` (integer)
    The uberall unique id

  - `response.productPlanResponse.name` (string)
    The name of the product plan

  - `response.productPlanResponse.salesPartnerId` (integer)
    Sales Partner of the Product Plan

  - `response.productPlanResponse.features` (array)
    List of features supported by this plan

  - `response.productPlanResponse.updatedDirectories` (array)
    List of directories supported by this plan

  - `response.productPlanResponse.countryPrice` (array)
    Prices per location for each supported country

  - `response.productPlanResponse.countryPrice.country` (string, required)
    Country
    Enum: "AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "UK", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"

  - `response.productPlanResponse.countryPrice.price` (integer, required)
    Price for the specific Country

  - `response.productPlanResponse.countryPrice.marketDevelopmentFunds` (integer)
    Market Development Funds (MDF)

  - `response.productPlanResponse.countryPrice.priceSetup` (integer)
    Setup fee

  - `response.productPlanResponse.currency` (string)
    The abbreviation of the currency the product plan is charged in.

  - `response.productPlanResponse.defaultPlan` (boolean)
    True, if this is the default ProductPlan. A new created business will get this product plan, if not declared differently.

  - `response.productPlanResponse.identifier` (string)
    The Product Plan identifier based on your internal identification system

  - `response.productPlanResponse.description` (string)
    Description of the plan

  - `response.productPlanResponse.dateCreated` (string)
    The date and time the Product Plan was created in our database

  - `response.productPlanResponse.lastUpdated` (string)
    The date and time the Product Plan was last updated

  - `response.productPlanResponse.duration` (integer)
    Duration of the Product Plan in months

  - `response.productPlanResponse.initialDuration` (integer)
    Initial Duration

  - `response.productPlanResponse.billingPeriod` (integer)
    Cadency with which an invoice is generated for this Product Plan

  - `response.productPlanResponse.initialBillingPeriod` (integer)
    Initial Billing Period

  - `response.productPlanResponse.defaultPrice` (integer)
    Define a global price for the Product Plan that gets applied for all countries

  - `response.productPlanResponse.defaultOriginalPrice` (integer)
    Default Original Price in cent

  - `response.productPlanResponse.defaultPriceSetup` (integer)
    Set-up price per location in cent

  - `response.productPlanResponse.defaultMarketDevelopmentFunds` (integer)
    Default Market Development Funds

  - `response.productPlanResponse.status` (string)
    One among PENDING_APPROVAL, ACTIVE, INACTIVE
    Enum: "ACTIVE", "INACTIVE", "PENDING_APPROVAL", "DELETED"

## Response 400 fields (application/json):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `errorCode` (string)
    Enum: "NORMALIZATION_FAILED", "DATA_CORRUPTED", "INVALID_INPUT", "NOT_SYNCABLE", "PAYMENT_FAILED", "FREE_TIER_REACHED", "LIMIT_REACHED", "INACTIVE", "UNKNOWN", "IDENTIFIER_NOT_UNIQUE", "ACCOUNT_WAITING_FOR_AUTO_PAGE_SELECT", "NO_ACCOUNT_CONNECTED", "NO_PAGE_SELECTED", "PAGE_NOT_CREATED", "PAGE_IN_REVIEW", "PAGE_CLAIMED_BY_OTHERS", "OVERLAPPING_SOCIALPOST", "TOO_MANY_REPLIES", "REPLY_TOO_LONG", "DEPRECATED"

  - `response` (object)
    (optional) The actual response object of the response

## Response 401 fields (application/json):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `errorCode` (string)
    Enum: "NORMALIZATION_FAILED", "DATA_CORRUPTED", "INVALID_INPUT", "NOT_SYNCABLE", "PAYMENT_FAILED", "FREE_TIER_REACHED", "LIMIT_REACHED", "INACTIVE", "UNKNOWN", "IDENTIFIER_NOT_UNIQUE", "ACCOUNT_WAITING_FOR_AUTO_PAGE_SELECT", "NO_ACCOUNT_CONNECTED", "NO_PAGE_SELECTED", "PAGE_NOT_CREATED", "PAGE_IN_REVIEW", "PAGE_CLAIMED_BY_OTHERS", "OVERLAPPING_SOCIALPOST", "TOO_MANY_REPLIES", "REPLY_TOO_LONG", "DEPRECATED"

  - `response` (object)
    (optional) The actual response object of the response

## Response 403 fields (application/json):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `errorCode` (string)
    Enum: "NORMALIZATION_FAILED", "DATA_CORRUPTED", "INVALID_INPUT", "NOT_SYNCABLE", "PAYMENT_FAILED", "FREE_TIER_REACHED", "LIMIT_REACHED", "INACTIVE", "UNKNOWN", "IDENTIFIER_NOT_UNIQUE", "ACCOUNT_WAITING_FOR_AUTO_PAGE_SELECT", "NO_ACCOUNT_CONNECTED", "NO_PAGE_SELECTED", "PAGE_NOT_CREATED", "PAGE_IN_REVIEW", "PAGE_CLAIMED_BY_OTHERS", "OVERLAPPING_SOCIALPOST", "TOO_MANY_REPLIES", "REPLY_TOO_LONG", "DEPRECATED"

  - `response` (object)
    (optional) The actual response object of the response

## Response 404 fields (application/json):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `errorCode` (string)
    Enum: "NORMALIZATION_FAILED", "DATA_CORRUPTED", "INVALID_INPUT", "NOT_SYNCABLE", "PAYMENT_FAILED", "FREE_TIER_REACHED", "LIMIT_REACHED", "INACTIVE", "UNKNOWN", "IDENTIFIER_NOT_UNIQUE", "ACCOUNT_WAITING_FOR_AUTO_PAGE_SELECT", "NO_ACCOUNT_CONNECTED", "NO_PAGE_SELECTED", "PAGE_NOT_CREATED", "PAGE_IN_REVIEW", "PAGE_CLAIMED_BY_OTHERS", "OVERLAPPING_SOCIALPOST", "TOO_MANY_REPLIES", "REPLY_TOO_LONG", "DEPRECATED"

  - `response` (object)
    (optional) The actual response object of the response

## Response 409 fields (application/json):

  - `status` (string, required)
    Enum: "SUCCESS", "PENDING", "QUOTA_LIMIT_EXCEED", "NOT_AUTHORIZED", "FORBIDDEN", "BAD_ACCESS_TOKEN", "BAD_PRIVATE_KEY", "BAD_PUBLIC_KEY", "MISSING_PARAMETER", "INVALID_PARAMETER", "WRONG_PARAMETER_TYPE", "CONFLICT", "RESOURCE_LOCKED", "SERVER_ERROR", "ERROR", "NOT_FOUND", "BAD_REQUEST", "USER_ERROR", "PARTIAL_ERROR", "SERVICE_TEMPORARILY_UNAVAILABLE"

  - `message` (string)
    (optional) Holds further information about the response

  - `errorCode` (string)
    Enum: "NORMALIZATION_FAILED", "DATA_CORRUPTED", "INVALID_INPUT", "NOT_SYNCABLE", "PAYMENT_FAILED", "FREE_TIER_REACHED", "LIMIT_REACHED", "INACTIVE", "UNKNOWN", "IDENTIFIER_NOT_UNIQUE", "ACCOUNT_WAITING_FOR_AUTO_PAGE_SELECT", "NO_ACCOUNT_CONNECTED", "NO_PAGE_SELECTED", "PAGE_NOT_CREATED", "PAGE_IN_REVIEW", "PAGE_CLAIMED_BY_OTHERS", "OVERLAPPING_SOCIALPOST", "TOO_MANY_REPLIES", "REPLY_TOO_LONG", "DEPRECATED"

  - `response` (object)
    (optional) The actual response object of the response

