TutuPP
69 MCP tools + full REST API

TutuPP API docs

Use the REST API or MCP protocol to let an AI assistant handle photo printing, document printing, order management and every other operation directly. Supports 21 mainstream AI clients including Claude, Gemini, Codex and Copilot.

Quick start

Integrate in three steps and start using AI for printing right away.

1

Register an account

Visit the TutuPP website and register quickly with a phone verification code.

2

Create an API Key

On the “API keys” page in your account center, create a key with one click and use it right away.

3

Make a request

Call the REST API with your API Key, or configure it in an AI client to use MCP.

Authentication

All API requests authenticate by carrying the API Key in an HTTP header.

Authorization: Bearer tk_YOUR_API_KEY

Base URL

https://tutupp.com

Response format

Content-Type: application/json

MCP endpoint

POST https://tutupp.com/api/mcp
Open platform: after registering, create an API Key with no approval needed and use all API and MCP features immediately.

MCP integration

MCP (Model Context Protocol) is an open protocol from Anthropic that lets AI assistants call external tools directly.

Once configured, you can use natural language to have the AI run the full “upload document → create order → pay with balance” flow.

Protocol info

Endpoint:https://tutupp.com/api/mcp

Protocol:JSON-RPC 2.0 over Streamable HTTP

Methods:initialize · tools/list · tools/call

File upload:Supports the multipart/form-data extension (message part + file parts, zero base64, 100MB+) and standard application/json

Choose your AI client 21

Claude Code — Terminal CLI

Add (Add)

claude mcp add --transport http tutupp https://tutupp.com/api/mcp --header "Authorization: Bearer tk_YOUR_API_KEY"

Add --scope user for global, --scope project for the current project only

Replace key (Replace)

claude mcp remove tutupp && claude mcp add --transport http tutupp ...(new key)

Remove (Remove)

claude mcp remove tutupp

AI conversation example

You: Print report.pdf from my desktop, A4 black & white, and pay with my balance

AI calls automatically:

1. upload_document → Upload the file

2. get_print_prices → Look up A4 B&W pricing

3. create_order → Create the order

4. pay_with_balance → Pay with balance

AI: Done! Order PP2026040612345, A4 B&W ×1, ¥0.50 deducted from your balance.

REST API reference

An API Key can access all the endpoints below, covering every feature in the UI.

Document management

POST /api/documents/upload
GET /api/documents
GET /api/documents/{id}
DELETE /api/documents/{id}

Photo management

POST /api/photos/upload
GET /api/photos/{id}
DELETE /api/photos/{id}
GET /api/photos/{id}/quality-check?size={size}

Orders

POST /api/orders
GET /api/orders
GET /api/orders/{id}
PUT /api/orders/{id}/cancel
GET /api/orders/track/{order_no}
GET /api/orders/{id}/tracking

Payment

POST /api/payment/create
POST /api/payment/balance
GET /api/payment/status/{order_id}

Balance

GET /api/user/balance
POST /api/user/balance/topup
GET /api/user/balance/transactions

Coupons

GET /api/user/coupons
GET /api/user/coupons/available
POST /api/user/coupons/redeem

Shipping addresses

GET /api/addresses
POST /api/addresses
PUT /api/addresses/{id}
DELETE /api/addresses/{id}
POST /api/addresses/parse

Order for others (pre-orders)

GET /api/user/pre-orders
POST /api/user/pre-orders
GET /api/user/pre-orders/{id}
PUT /api/user/pre-orders/{id}
PUT /api/user/pre-orders/{id}/status
POST /api/user/pre-orders/{id}/submissions/{sid}/review
PUT /api/user/pre-orders/{id}/submissions/{sid}/cancel

Pre-order sharing

GET /api/share/{code}
POST /api/share/{code}/submit
GET /api/share/{code}/submissions/{sid}
GET /api/share/{code}/my-submissions

After-sales

GET /api/user/after-sales
POST /api/after-sales

Regions & delivery

GET /api/regions
GET /api/regions/{id}
GET /api/regions/tree
GET /api/regions/coverage
GET /api/regions/{city_id}/city-coverage
GET /api/regions/{id}/express-delivery
GET /api/regions/{id}/pickup-points
GET /api/agents/referral/{code}
GET /api/shipping/config
GET /api/shipping/carriers

Config lookup

GET /api/prices
GET /api/print-options/sizes
GET /api/print-options/paper-types

AI photo restoration

POST /api/photos/{id}/restore
GET /api/restorations/{id}

User info

GET /api/auth/me
PUT /api/auth/me

Print status

GET /api/printer/status
GET /api/print-queue/status
GET /api/orders/auto-print-schedule

API key self-service

GET /api/user/api-keys
POST /api/user/api-keys
DELETE /api/user/api-keys/{id}

System health

GET /api/health

MCP tool list69

All the tools below can be called via the MCP protocol; AI clients discover them automatically once configured.

Document management

upload_document Upload a document (PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX) — one of: file_url / content (base64) / file_path (curl)
list_documents List all documents uploaded by the current user
get_document_info Get document details (page count, file size, etc.)
delete_document Delete a document (only if not linked to an active order)

Photo management

upload_photo Upload a photo (JPG/PNG/WebP/HEIC) — one of: file_url / content (base64) / file_path (curl)
get_photo Get photo details
delete_photo Delete a photo (only if not linked to an active order)
check_photo_quality Check photo print quality at a given size (DPI)

Orders

create_order Create a print order
list_orders List all orders of the current user
get_order_status Query order status and details
cancel_order Cancel an order (only while pending payment)
track_order Look up order info by order number (public)
get_order_tracking Get order shipment tracking info

Payment & balance

create_payment Create third-party payment (returns payment_url, open in browser to pay)
pay_with_balance Pay an order with account balance
get_payment_status Query order payment status
create_topup Create a balance top-up order (returns payment_url)
get_balance Query account balance (total/frozen/available)
get_balance_transactions Query balance transaction records

Coupons

list_coupons List the current user's coupons
get_available_coupons Get available coupons (filter by amount)
redeem_coupon Claim a coupon via redemption code

Shipping addresses

list_addresses List shipping addresses
create_address Add a shipping address
update_address Update a shipping address
delete_address Delete a shipping address
parse_address Smart-parse address text

Order for others (pre-orders)

list_pre_orders List all pre-orders
create_pre_order Create a pre-order (share a link for others to submit)
get_pre_order Get pre-order details (incl. all submissions)
update_pre_order Update pre-order settings
update_pre_order_status Change pre-order status
review_submission Review a pre-order submission
cancel_submission Cancel a submission

Pre-order sharing

get_share_info Get share-link info
submit_share_photos Submit photos to a share link
get_submission_status Query submission status and photo details
list_my_submissions List all submissions under a share link

After-sales

list_after_sales List the current user's after-sales records
create_after_sales Create an after-sales request (refund/reprint/reship)

Regions & delivery

list_regions Query region list
get_region Get region details and sub-regions
get_region_tree Get the full region tree (province → city → district)
get_region_coverage Get agent coverage stats
get_city_coverage Get district coverage within a city
get_agent_by_referral Find agent by referral code
check_express_delivery Check whether same-day delivery is supported
get_shipping_config Get delivery/shipping config (global)
get_shipping_carriers Get carrier list (incl. remote surcharge)
list_pickup_points Query pickup point list

Config & status

get_print_prices Get print prices + volume-discount tiers
get_print_options Get available sizes and paper types
get_printer_status Query printer status
get_queue_status Query print queue status

User info

get_profile Get the current user's profile
update_profile Update user nickname

AI photo restoration

restoration_preview Run an AI restoration preview on a photo
get_restoration Get AI restoration task result

API key self-service

list_api_keys List all API Keys of the current user
create_api_key Create a new API Key (full key shown only once)
revoke_api_key Revoke a specific API Key

System

health_check Check service health (database/payment gateway/version)
get_auto_print_schedule Get auto-print time-window settings

Order reviews

submit_order_review Submit a single order review (3-dimension rating + comment); idempotent via ON CONFLICT; rate-limited 5/h
batch_submit_order_reviews Batch review (max 20 · single transaction · atomic); one-tap 5-star
list_my_order_reviews List my reviews (paginated envelope)
get_order_review Get a single review's details (incl. official reply)
mark_order_review_read Mark official reply as read (CTE prevents replay, reduces nav badge count)

Code examples

A full example of the “look up prices → upload file → create order → pay with balance” flow.

# 查询打印价格
curl https://tutupp.com/api/prices \
  -H "Authorization: Bearer tk_YOUR_API_KEY"

# 上传文档
curl -X POST https://tutupp.com/api/documents/upload \
  -H "Authorization: Bearer tk_YOUR_API_KEY" \
  -F "file=@report.pdf"

# 创建订单
curl -X POST https://tutupp.com/api/orders \
  -H "Authorization: Bearer tk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{
      "document_id": "uuid-here",
      "size": "A4",
      "paper_type": "matte",
      "quantity": 1
    }],
    "delivery_method": "pickup"
  }'

# 余额支付
curl -X POST https://tutupp.com/api/payment/balance \
  -H "Authorization: Bearer tk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"order_id": "uuid-here"}'

Typical workflow

Upload file Look up prices Create order Pay with balance Done

Error handling

The API uses standard HTTP status codes; error responses contain error info in JSON.

// Error response format
{
  "error": "Error description"
}
400
Bad request parameters Missing required fields, invalid format
401
Unauthenticated API Key missing or invalid
403
Forbidden Operation forbidden, insufficient permissions
404
Resource not found Order/document/photo ID does not exist
409
Conflict Photo linked to an order, cannot be deleted
413
File too large Document over 50MB / photo over 120MB
422
Business rule not satisfied Insufficient balance, order not cancellable
429
Too many requests Exceeded API rate limit
500
Internal server error Please retry later or contact support
Rate limiting: only sensitive write operations like login / register / verification codes are protected against attacks; normal usage never triggers it, and thresholds are configurable in the admin console. Responses carry a retry_after_seconds field + a Retry-After header.

Ready to get started?

Register an account, create an API Key, and let AI handle your printing.