Skip to main content
This section is for Digital Stores: stores you opened as a regular PapelShip storefront (products, cart, checkout, customer panel). If you opened an API-based store to take payments on your own site, see the API-based Store tab instead.
The User API (called Store API in your dashboard) gives your servers the same control you have in the store dashboard: orders, products, stock, customers, support, shipping and webhooks. Base URL: https://app.papelship.com/api/v1
Older integrations that call https://app.papelship.com/api_user/api/v1 keep working. Use /api/v1 for new code.

Authenticate

Create a key in Developers › API keys and send it with your store ID on every request:
GET /me works with any valid key. It returns the store, the key’s permissions and your limits, so use it to test your setup.
Keys act as the store owner. Keep them on your server, never in browser or mobile code.

Permissions

When you create a key, choose Full access, Read only or Custom. With Custom, you pick read or write access per area. Write includes read. GET requests need read access; POST, PATCH, PUT and DELETE need write access. A key without the right permission gets 403 INSUFFICIENT_SCOPE with the missing permission in required_scope. You can also limit a key to this store, a list of IP addresses, or an expiry date.

Responses

Every response is JSON with a success flag.
Success
Error
Branch on code, not on the message. Every response has an X-Request-Id header; include it when you contact support. See Errors for every code.

Conventions

  • Amounts are integers in minor units: price_cents: 2999 is 29.99.
  • Dates are ISO 8601 in UTC.
  • IDs are public IDs: product hash IDs, order IDs like c35ffd-19a1b2c3d4e-8c7a20. Records of other stores return 404.
  • Created records return 201.

Pagination

Lists take limit (1–100, default 25) and offset, and return a pagination object:
Affiliate lists use a cursor instead: pass next_cursor back as cursor.

Safe retries

Send an Idempotency-Key header on create calls (orders, refunds, shipments, products, webhooks and others marked in the reference). If the network fails, retry with the same key and body: you get the first result back instead of a duplicate.
  • Keys are kept for 24 hours.
  • A replayed response has the header Idempotent-Replayed: true.
  • The same key with a different body returns 422 IDEMPOTENCY_KEY_REUSED.

Limits

Over a limit you get 429 with Retry-After. RATE_LIMITED clears within a minute; STORE_API_MONTHLY_QUOTA_EXCEEDED resets on the first day of the next month (UTC). Every request appears in Developers › API requests with its status and duration.

Next steps

Create orders

Take orders from your own site or app and send customers to checkout.

Webhooks

Get notified when orders are paid, cancelled or refunded.