list_my_orders
Newest account-owned work records, including enquiries; limit 1–50, default 25. coverage says whether the bounded window is complete.
Customer service
From sending your artwork to collecting your print, find the next step or get in touch with our Sun Valley shop.
Already talking to us? Reply to your order email to keep your question and order together.
Using an AI assistant? Connect with MCP & APISign in to view online orders linked to your account. If you ordered by email, by phone or in person, reply to your order email or contact the shop with your order number and the email address you used. If an order is missing from your account, we can help you find it.
Production starts immediately after payment. Rush: 1–2 business days, selected by default. Express: 5 business days. Standard: 10 business days. Check the tier on your order or quote. A payment confirmation does not mean the order is ready for pickup. Contact us with your order number for an update. Delivery dates are estimates.
Use the artwork upload link we sent you, or open a linked online order in your account to add files. Use the accepted formats and size limits shown on the upload form. If you need to replace a file, tell us which version to use before approving the proof. Missing your upload link? Reply to your order email or contact the shop.
You can request a digital proof. When you receive a proof link, open it and check the spelling, dimensions, layout and colors. Use that page to approve the proof or request changes. Production begins after approval, and errors in an approved file remain your responsibility. For critical color, ask about a hard proof; screen colors are not an exact match to print.
For an online purchase, pay at checkout. If the shop sent you an invoice or payment link, use that specific link to review the amount and pay through Stripe. Available payment methods appear at checkout. If the link is missing or the amount looks different from your agreed quote, contact us before paying.
Check the inbox and spam folder for the email address used on the order. If you still need help, send the order number, payment date and amount so we can check the payment. Do not email card numbers or security codes. You can also ask us for a copy of an invoice or receipt.
Wait for confirmation that your order is ready before visiting. Pickup at 8511 Lankershim Blvd, Sun Valley, CA 91352 is free. Have your order number available when you collect it. Our shop hours are listed below in Pacific time; call if you need to confirm your pickup arrangements.
Pickup at our Sun Valley shop is always free. Delivery costs at least $50; higher calculated charges apply. Legacy delivery thresholds and promotion codes do not change that charge. We calculate the available delivery charge at checkout from your ZIP and the items in the order. Oversized items and freight may require a separate delivery quote — call (818) 806-9006 or request a quote at angelsprint.com/contact. The $50 minimum is not a fixed freight quote.
Use the shipping information sent with your order. If you have not received a tracking link or need help with a delayed delivery, reply to your order email with your order number. For large signs or other items arranged for local delivery, contact the shop to check the agreed delivery details.
Contact us promptly with your order number and the exact change or cancellation you want to request. We will check the current production status and discuss what is still possible. Sending a request does not confirm that an order has been changed or stopped; wait for the shop to confirm.
Send the order number and the new address or pickup request as soon as possible. We need to check whether the order has already been dispatched and whether the change affects delivery arrangements or cost. Wait for confirmation before relying on the new details.
Contact us within 7 days with your order number, a description of the issue and clear photos. For delivery damage, include photos of the packaging as well as the affected items. Under our Terms of Service, we will reprint or refund orders with a production defect or shipping damage at our discretion.
Custom-printed products are not returnable. Slight variation in color, trim and material is normal, and colors on a screen are not an exact match to printed output. If you think there is a production problem, send photos and explain what differs from the approved artwork so we can review it under our Terms of Service.
API & MCP
Orders are never charged automatically. An agent can only prepare a draft; a human operator must open the approval link, review the cart and pay via Stripe Checkout.
Client configuration
{
"mcpServers": {
"angels-print": {
"type": "http",
"url": "https://angelsprint.com/api/mcp"
}
}
}CLI connection
claude mcp add --transport http angels-print https://angelsprint.com/api/mcp
claude mcp get angels-print1. Initialize
curl -sS https://angelsprint.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-print-agent","version":"1.0"}}}'2. Confirm initialization
curl -sS https://angelsprint.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-06-18' \
--data '{"jsonrpc":"2.0","method":"notifications/initialized"}'3. List tools
curl -sS https://angelsprint.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-06-18' \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'4. Call a tool
curl -sS https://angelsprint.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-06-18' \
--data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_quote","arguments":{"slug":"classic-business-cards-160","quantity":500,"fulfillment":"pickup"}}}'1. Search the catalogue
curl -sS 'https://angelsprint.com/api/agent/products?q=business+cards&limit=3'2. Read product options
curl -sS 'https://angelsprint.com/api/agent/products/classic-business-cards-160'3. Request an exact quote
curl -sS https://angelsprint.com/api/agent/quote \
-H 'Content-Type: application/json' \
--data '{"slug":"classic-business-cards-160","quantity":500,"fulfillment":"pickup"}' \
> quote.json4. Prepare a draft
# Requires curl + jq. Review quote.json first.
# Replace the example email with the customer's authorized address.
jq -n --arg itemId "$(jq -er '.itemId' quote.json)" \
'{items:[{itemId:$itemId,qty:1}],
fulfillment:"pickup",
operator:{email:"customer@example.com",name:"Customer name"},
agent:"My print assistant",
note:"Confirm the required date with the customer"}' > draft-request.json
curl -sS https://angelsprint.com/api/agent/orders \
-H 'Content-Type: application/json' \
--data-binary @draft-request.json > draft.json
# Share this privately with the customer; the API does not email it.
jq -r '.approval_url' draft.json5. Check the draft
# draft.json is private. Do not commit it or put it in public logs.
draft_id="$(jq -er '.draft_id' draft.json)"
curl -sS "https://angelsprint.com/api/agent/orders/$draft_id"Example agent brief
Help me order printing from Angels Print. Read https://angelsprint.com/api/agent/guide.
Connect to https://angelsprint.com/api/mcp, or use https://angelsprint.com/api/agent/openapi.json.
Ask for the product, dimensions, quantity, artwork, required date and pickup or delivery ZIP.
Read the product's actual options, get a quote and show chosen, adjustments, shippingStatus and total.
With my permission, create one draft using the returned itemId and my email, then give me approval_url privately. I will review and pay.
Keep payment, artwork validation, proof approval, production and delivery as separate facts. Never call a missing tool or invent a status.
For the stages outside this API, use the supported account and order-specific links described in the guide.Every price is recomputed on the server from the product configuration — at quote, at draft, and again before checkout. A price sent by a client is ignored. An itemId preserves selections, not a locked price; a changed catalogue can require a new quote and draft.
Rate limits are best effort per server instance, not a guaranteed global quota. Send individual JSON-RPC messages in separate POST requests; batching is an optional server extension.
| MCP tool | REST endpoint | Use | Requests / min / IP |
|---|---|---|---|
| search_products | GET/api/agent/products | Search or list the catalogue. Every word must match; returns slugs, entry prices and the category counts. | 120 |
| get_product | GET/api/agent/products/{slug} | One product's whole option surface: stocks and finishes with price deltas, the quantity ladder, turnaround speeds, size limits. | 120 |
| get_quote | POST/api/agent/quote | Exact price for one configured product, plus an itemId that pins those selections for the order. | 60 |
| create_order | POST/api/agent/orders | Prepare a draft and get the approval link for the human operator. Charges nothing and writes no order. | 6 |
| check_order | GET/api/agent/orders/{draft_id} | Check draft validity and payment: awaiting_approval, paid or expired. No proof, production, shipment or delivery tracking. | 60 |
Authenticated customer account
Read your linked work and ask the factual support agent about payment, artwork, proof and recorded progress. Your account identity is checked on every request.
Open my work & supportNewest account-owned work records, including enquiries; limit 1–50, default 25. coverage says whether the bounded window is complete.
Independent money, latest proof, artwork and recorded lifecycle facts; next action with honest unknown/unimplemented states.
Customer-supplied file metadata only. No download URL, upload capability or byte/preflight validation.
Latest 50 allowlisted recorded lifecycle events for this work, with coverage. Not the full CRM inbox.
This work's private factual-agent conversation; limit 1–50. Email and general account messages remain separate.
Save question (1–2000 characters) and deterministic answer from verified records. Required clientRequestId UUID: reuse on retry; different content with the same key returns409. Does not execute custom requests or send external messages.
Use Authorization: Bearer <current Supabase customer access token>. The server verifies the user on every request, including MCP initialize/tools/list. The shop account uses its verified same-origin session. A draft ID, proof token, email address or service-role key is not customer authentication. No delegated grants or OAuth connector are issued by this endpoint.
Only jobs explicitly linked through orders.user_id or, for jobs without an order, crm_customers.user_id are accessible. Conflicting account links are denied. No email matching. Unlinked guest purchases are not automatically visible.
Do not paste access tokens into prompts, URLs, support questions, source control or shared logs. Supply them through your client's protected Authorization header; reconnect after expiry using your trusted account integration. This guide does not expose or mint tokens.
Private MCP connection
{
"url": "https://angelsprint.com/api/agent/work/mcp",
"transport": "HTTP JSON-RPC POST",
"header": "Authorization: Bearer <customer access token from your trusted session integration>"
}Discover my work
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "list_my_orders",
"arguments": {
"limit": 10
}
}
}Scoped factual question (replace placeholders)
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "ask_work_question",
"arguments": {
"workId": "job:<UUID returned by list_my_orders>",
"question": "What is the recorded status and next step?",
"clientRequestId": "<new UUID; preserve for retries>"
}
}
}One message per POST, up to 8 KB. Best-effort limits per server instance: 60 requests and 10 questions per minute per account. Retry a question with its original clientRequestId.
Your AI assistant · Customer
Collect the product or intended use, finished dimensions, quantity, material/finish, artwork versions, required date and pickup or delivery ZIP. An event date is a requirement, not a confirmed delivery promise.
search_products → get_product → get_quote
Read the actual quantity ladder, size limits, options and turnaround names. API dimensions are inches; prices are USD. quantity is pieces per print run; packages on a quote and qty on an order line mean repeated identical runs.
artwork[] references · Upload link · Account
A draft can reference up to 10 HTTPS artwork URLs (480 characters each). The API records references; it does not retrieve, inspect or certify their contents. The separate authenticated private-work API can read customer file metadata; it returns no file bytes or download capability.
create_order → approval_url → Customer
Create the draft with an itemId per line, operator.email, fulfillment and any delivery ZIP. Save draft_id and expires_at privately. The signed draft normally expires after 7 days; signing prevents editing but does not encrypt its customer information.
check_order · Customer receipt
The public status tool reports awaiting_approval, paid or expired. Payment is separate from a proof decision and from physical production. A paid response confirms the payment lookup, not that a parcel is moving.
Artwork review · Order-specific proof link · Customer
Receiving a file checks neither print readiness nor customer approval. The shop's file review and the customer's visual approval are separate. A proof link lets the customer inspect the presented version and approve it or request changes.
Linked account order · Order email
A quote's production-day estimate is not machine telemetry. The current public agent API does not expose printing, cutting, finishing, quality checks, packaging or a production-completion event.
Ready notice · Delivery information · Customer
For pickup, use the shop address and hours after readiness is confirmed. For delivery, use the shipping information actually supplied. The MCP payment-status endpoint does not return carrier tracking or proof of delivery.
Replace the examples with URLs authorized by the customer. These references do not download files or validate their contents.
Artwork JSON
{
"artwork": [
{
"name": "front-v3.pdf",
"url": "https://files.example.com/front-v3.pdf"
},
{
"name": "back-v3.pdf",
"url": "https://files.example.com/back-v3.pdf"
}
]
}No paid result was found by the current draft lookup.
Next: Check payment_lookup first. When lookup is available, give the customer the existing approval_url; do not infer refusal or failed payment.
A successful Stripe payment was found for the draft.
Next: Use order_url where returned. Continue artwork/proof and fulfillment follow-up; paid does not mean produced or delivered.
The draft lifetime ended and no paid result was returned.
Next: If payment may already have occurred, reconcile the receipt before issuing another payment request. The expired response does not reliably distinguish an unavailable payment lookup.
The API could not verify payment at this time.
Next: Treat payment as unknown, back off and reconcile it. Do not ask the customer to pay a second time merely because lookup failed.
Shipping has a defined mode or computed amount for the quoted configuration.
Next: Show the returned shippingMessage and total. These are pricing states, not delivery-progress states.
Delivery cannot be priced without the destination ZIP.
Next: Supply the ZIP or let the customer enter it on the approval page; null shipping is not free shipping.
The requested delivery needs a separate quote or is unavailable in that configuration.
Next: Use the returned explanation, discuss a supported alternative such as pickup, or request a delivery quote.
Wait about a minute, then retry with backoff. REST returns HTTP 429; MCP can return isError: true inside a successful HTTP response.
Get a fresh quote and show the new result to the customer before preparing a replacement draft.
Read get_product again and use its actual choices and turnaround name. Show quantity adjustments to the customer.
Preserve the complete returned reference. Check which code was returned; an expired draft is a separate status. Do not guess or repair a signed token.
Do not invent a quote or treat this as customer approval. Retry later or use the documented customer support channels.
Use an HTTPS URL within 480 characters. A valid reference is not proof that the file was downloaded or passed preflight.
Correct the request or reduce it. Send artwork references, never file bytes or base64 data in a draft.
Retain the last confirmed result, retry with backoff and check state before repeating an action. A tool error is not a completed order.
Yes. A compatible client calls the hosted MCP server or REST endpoints; it does not need the shop's private source code. Read tools/list or OpenAPI for the actual schemas. The JSON service guide makes the complete workflow available to your application.
Choose a remote HTTP/Streamable HTTP connection to https://angelsprint.com/api/mcp. No API key is required for the public tools. The configuration example is for clients supporting an HTTP mcpServers entry; other applications use their own connector UI. For Claude Code, use the shown command or a project .mcp.json. Do not assume every desktop client's configuration format is identical.
Send initialize, accept the returned protocol version, then send notifications/initialized and tools/list. Send individual JSON-RPC messages over POST with Accept: application/json, text/event-stream and the negotiated MCP-Protocol-Version. This server replies with JSON and currently issues no session ID. GET is a discovery description, not an SSE event stream; resources/list and prompts/list return empty lists. A tool result can contain structuredContent or JSON text in content; check isError before using it.
Public tools remain unauthenticated catalogue/draft operations. The separate private-work MCP supports authenticated, order-scoped factual questions and persisted answers; it does not execute custom changes or contact staff. The website's Clip assistant helps select and price products and can collect a new quote request. Existing-order conversations can use Messages in the signed-in account, or reply to the order email at hello@angelsprint.com. The private-work conversation is separate from email and general account messages; Clip is not the authenticated order-status agent.
The private-work MCP can list metadata for customer-supplied files on explicitly account-linked work. It cannot download file bytes, issue upload capabilities or submit a proof decision. Use only order-specific links or the customer's own account with their permission. Ask for a missing link rather than guessing a token. The customer approves the actual proof version through the supplied page.
No. Upload controls enforce transport requirements such as type and size. They do not verify finished dimensions, resolution, bleed, fonts, color or cut paths. File preflight and proof approval are separate steps; full automated preflight is not exposed by the current public agent API.
Send the actual order reference if available, the email used to order, a short question, the relevant file version and any supporting photos. Reply in the existing order thread or use authenticated account messages. Keep signed drafts, artwork/proof tokens and customer files private. Never send card numbers or security codes.
The current public interface stops at draft preparation and payment lookup. The journey continues through file review, customer proof approval, recorded production updates and pickup or delivery information. The private-work API adds authenticated recorded facts and scoped factual conversation. Autonomous file validation, production control and confirmed delivery still require additional integrations and verified execution; those capabilities are not implied by this guide.
Coming to pick up? Confirm your order is ready before you travel.
Include your order number, the email used to order and what you need help with. Photos are useful when a file or finished print needs a closer look.