Endpoints · My designs
POST/v1/projects/{project}/copy
A copy of a design, with its pictures: Make a copy, Order again.
What it does
A new design with the same pages and pictures, the customer's own; the original is untouched (an ordered one stays as printed). Open it with POST /v1/sessions design and the same customer_ref.
Send the key: Authorization: Bearer sk_test_… or sk_live_…. Any method but POST answers 405 method_not_allowed: “POST /v1/projects/{project}/copy.”
curl -X POST "https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638/copy" \
-H "Authorization: Bearer $PRINTWISP_KEY" \
-H "Content-Type: application/json" \
-d '{"customer_ref":"wp-user-12"}'
# 201
{
"project": {
"id": "dsn_0e4b7c2d9a1f5386",
"name": "Our Story",
"cover": "https://printwisp.com/v1/preview?design=dsn_5c2a9e01b7d4f638&sig=3e1f…&v=1761300720",
"product": { "code": "petite", "name": "The Petite" },
"size": { "code": "petite-8x6", "name": "8×6 in Landscape" },
"pages": 20,
"updated_at": "2026-10-24T06:32:00+00:00",
"status": "in_progress",
"order_ref": null,
"link": null,
"joined": null,
"note": null
}
}<?php
$ch = curl_init('https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638/copy');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['customer_ref' => 'wp-user-12']),
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('PRINTWISP_KEY'), 'Content-Type: application/json'],
]);
$answer = json_decode(curl_exec($ch), true);// Node (your server). The key never reaches a browser.
const r = await fetch('https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638/copy', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.PRINTWISP_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ customer_ref: 'wp-user-12' }),
});
const answer = await r.json();import os, requests
r = requests.post(
"https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638/copy",
json={ "customer_ref": "wp-user-12" },
headers={"Authorization": f"Bearer {os.environ['PRINTWISP_KEY']}"},
)
answer = r.json()Parameters
| Parameter | Type | Description |
|---|---|---|
project required | string | The design's id (dsn_…) from the list. |
customer_ref required | string | Your signed-in customer. |
name | string ≤ 120 | A name for the copy (default: the same name). |
Response
201 application/json. The copy, as the list shows it.
{
"project": {
"id": "dsn_0e4b7c2d9a1f5386",
"name": "Our Story",
"cover": "https://printwisp.com/v1/preview?design=dsn_5c2a9e01b7d4f638&sig=3e1f…&v=1761300720",
"product": { "code": "petite", "name": "The Petite" },
"size": { "code": "petite-8x6", "name": "8×6 in Landscape" },
"pages": 20,
"updated_at": "2026-10-24T06:32:00+00:00",
"status": "in_progress",
"order_ref": null,
"link": null,
"joined": null,
"note": null
}
}Errors
| HTTP | error | message |
|---|---|---|
| 401 | unauthorized | Send Authorization: Bearer <secret key>. Keys are made in PrintWisp, on your store's Overview → API keys. |
| 404 | project_not_found | No design with that id for this customer. |
| 405 | method_not_allowed | POST /v1/projects/{project}/copy. |
| 422 | invalid_request | Say whose designs with customer_ref: your signed-in customer's id, as you send it to POST /v1/sessions. |