GET/v1/projects
A signed-in customer's designs: what "My designs" lists.
What it does
Every design listed for customer_ref, newest change first: the ones it made (in the key's store), and the ones that joined it by proof (joined: "email", POST /v1/customers/claim). Each with its picture (cover, a signed address), name, product and size, pages, updated_at and status: in_progress, in_cart (handed to a cart, not ordered) or ordered with order_ref. link says when its private link was emailed (to a masked address) and whether the one reminder is still to go. note: "saved_by_email" is set on the first list after a design joined, so you can tag it once ("saved by email before you signed in"). Never a deleted design, never a merchant's Design. A guest's designs are never listed under an account just because they signed in on the same browser.
Send the key: Authorization: Bearer sk_test_… or sk_live_…. Any method but GET answers 405 method_not_allowed: “GET /v1/projects lists; change one at /v1/projects/{project}.”
curl "https://printwisp.com/v1/projects?customer_ref=wp-user-12" \
-H "Authorization: Bearer $PRINTWISP_KEY"
# 200
{
"customer_ref": "wp-user-12",
"projects": [
{
"id": "dsn_5c2a9e01b7d4f638",
"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": { "emailed_at": "2026-10-24T06:32:00+00:00", "to": "s…h.t@gmail.com", "reminder": false },
"joined": "email",
"note": "saved_by_email"
}
]
}<?php
$ch = curl_init('https://printwisp.com/v1/projects?customer_ref=wp-user-12');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
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?customer_ref=wp-user-12', {
headers: { Authorization: 'Bearer ' + process.env.PRINTWISP_KEY },
});
const answer = await r.json();import os, requests
r = requests.get(
"https://printwisp.com/v1/projects?customer_ref=wp-user-12",
headers={"Authorization": f"Bearer {os.environ['PRINTWISP_KEY']}"},
)
answer = r.json()Parameters
| Parameter | Type | Description |
|---|---|---|
customer_ref required | string ≤ 190 | Your signed-in customer, as you send it to POST /v1/sessions (wp-user-12, shopify-customer-6061…, your own id). |
Response
200 application/json. The list.
{
"customer_ref": "wp-user-12",
"projects": [
{
"id": "dsn_5c2a9e01b7d4f638",
"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": { "emailed_at": "2026-10-24T06:32:00+00:00", "to": "s…h.t@gmail.com", "reminder": false },
"joined": "email",
"note": "saved_by_email"
}
]
}Errors
| HTTP | error | message |
|---|---|---|
| 401 | unauthorized | Send Authorization: Bearer <secret key>. Keys are made in PrintWisp, on your store's Overview → API keys. |
| 405 | method_not_allowed | GET /v1/projects lists; change one at /v1/projects/{project}. |
| 422 | invalid_request | Say whose designs with customer_ref: your signed-in customer's id, as you send it to POST /v1/sessions. |