- Credential
- An API key in
x-api-key - Scopes
assets:read
Parameters
idpath · stringrequired
Request
GET /api/v1/assets/{id}
curl "https://portal.printedsimply.com/api/v1/assets/ast_bptSUfSLn2FInuMnC5S4fVD1" \
-H "x-api-key: ps_test_YOUR_KEY"Response 200
Asset detail
data
idstringrequiredast_….POST /v1/orderaccepts this directly as an item'sprint_file, in place of a URL.filenamestringrequiredurlstringrequiredPublicly reachable URL for the stored bytes.
content_typestringrequiredOne of
image/pngimage/jpegimage/svg+xmlapplication/pdfsize_bytesintegerrequiredsourcestringrequiredWhere the bytes came from:
upload(sent through POST /v1/assets or the dashboard),mockup(a render from POST /v1/mockups/generate),listing(the photograph a checkout link gets on its first publish),design(artwork a design run generated),carryover(a listing image a listing import fetched and rehosted),manifest(a production batch's manifest),fixup(a copy of your artwork with its bleed, margin or outline fixed by POST /v1/artwork/validate with auto_fix). A fact, not a filter: every asset surface lists, exports and deletes a render exactly as an upload, and there is no?source=on the list. Files stored before the field existed were classified from their filenames and readuploadwhere nothing said otherwise.One of
uploadmockuplistingdesigncarryovermanifestfixupcreated_atstring (date-time)required
meta
pageintegertotalintegerlimitintegerThe page size actually applied, which is not necessarily the one asked for — the operation's own ceiling wins.
pagesintegertotaloverlimit, rounded up.next_cursorstring | nullOn a cursor-paged operation: send this back as
cursorfor the next page. Null on the last page. Absent on operations that do not page by cursor.has_morebooleanOn a list operation whose
metaisListMeta: whether another page follows this one.
{
"status": "success",
"data": {
"id": "ast_bptSUfSLn2FInuMnC5S4fVD1",
"filename": "logo.png",
"url": "https://assets.example.com/assets/1792076423000-a8e85f4abc4c-logo.png",
"content_type": "image/png",
"size_bytes": 70,
"source": "upload",
"created_at": "2026-10-15T15:00:23.000Z"
},
"request_id": "4e3753e1-48dd-4313-bfd8-48e4af4e116a"
}Errors
Missing, invalid or expired API key:
missing_api_key(none sent),invalid_api_key(unknown or revoked),key_expired(past the expiry set when it was created; create a new key).404Resource not found
Rate limit exceeded. Two windows can produce this status and
error.codesays which:rate_limit_exceededfor the per-minute sliding window,daily_quota_exceededfor the plan's daily quota. Both carryRetry-After; the daily one also carriesX-Daily-LimitandX-Daily-Remaining. The per-minute limits are plan-based — see Rate Limits above, or call GET /v1/me for this credential's own figures.