Docs
Endpoints · My designs

PATCH/v1/projects/{project}

Rename a design.

What it does

Up to 120 characters. An ordered design keeps the name it was ordered with.

Send the key: Authorization: Bearer sk_test_… or sk_live_….

PATCH /v1/projects/{project}Copy
curl -X PATCH "https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638" \
  -H "Authorization: Bearer $PRINTWISP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer_ref":"wp-user-12","name":"Our Story, 2026"}'

# 200
{
  "project": {
    "id": "dsn_5c2a9e01b7d4f638",
    "name": "Our Story, 2026",
    "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": { "emailed_at": "2026-10-24T06:32:00+00:00", "to": "s…h.t@gmail.com", "reminder": false },
    "joined": null,
    "note": null
  }
}
<?php
$ch = curl_init('https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_POSTFIELDS     => json_encode(['customer_ref' => 'wp-user-12', 'name' => 'Our Story, 2026']),
    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', {
  method: 'PATCH',
  headers: { Authorization: 'Bearer ' + process.env.PRINTWISP_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({ customer_ref: 'wp-user-12', name: 'Our Story, 2026' }),
});
const answer = await r.json();
import os, requests

r = requests.patch(
    "https://printwisp.com/v1/projects/dsn_5c2a9e01b7d4f638",
    json={ "customer_ref": "wp-user-12", "name": "Our Story, 2026" },
    headers={"Authorization": f"Bearer {os.environ['PRINTWISP_KEY']}"},
)
answer = r.json()

Parameters

ParameterTypeDescription
project requiredstringThe design's id (dsn_…) from the list.
customer_ref requiredstringYour signed-in customer.
name requiredstring ≤ 120The new name.

Response

200 application/json. Renamed: the design as the list shows it.

{
  "project": {
    "id": "dsn_5c2a9e01b7d4f638",
    "name": "Our Story, 2026",
    "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": { "emailed_at": "2026-10-24T06:32:00+00:00", "to": "s…h.t@gmail.com", "reminder": false },
    "joined": null,
    "note": null
  }
}

Errors

HTTPerrormessage
401unauthorizedSend Authorization: Bearer <secret key>. Keys are made in PrintWisp, on your store's Overview → API keys.
404project_not_foundNo design with that id for this customer.
409project_orderedAn ordered design keeps the name it was ordered with.
422invalid_requestGive the design a name.
422invalid_requestA design's name is up to 120 characters.
{ "error": "invalid_request", "message": "Give the design a name." }

← Every routeQuickstart →