Docs
Endpoints · My designs

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

ParameterTypeDescription
customer_ref requiredstring ≤ 190Your 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

HTTPerrormessage
401unauthorizedSend Authorization: Bearer <secret key>. Keys are made in PrintWisp, on your store's Overview → API keys.
405method_not_allowedGET /v1/projects lists; change one at /v1/projects/{project}.
422invalid_requestSay whose designs with customer_ref: your signed-in customer's id, as you send it to POST /v1/sessions.
{
  "error": "invalid_request",
  "message": "Say whose designs with customer_ref: your signed-in customer's id, as you send it to POST /v1/sessions."
}

← Every routeQuickstart →