Good ideas deserve to exist. Meet Tangibl.Early access · Ordering opening soon
tangibl.
BUILD WITH TANGIBL

Made for agents.
Grounded in the real world.

Assistants use the same REST API as the Tangibl connector in Muse: list products, save a customer’s image as a draft, show a preview on the actual product, and start a Stripe checkout.

The connector is built and tested with Muse. Other assistants can use it if they support OAuth 2.0 connectors with our REST API. Ordering is in early access and opening soon.

One service. Two ways in.

The website and the connector share the same customer, draft and order records. Five 8×10 products: photo print, matte poster, framed print, canvas gallery wrap and metal print, one image each. listProducts returns each product’s artwork rules and live price. Every preview is drawn from the exact file that gets printed.

Connection

The API is described by an OpenAPI document at /api/v1/openapi. Customers set up the connector from /connect; /connect/usage explains day-to-day use. Connector configuration:

provider: tangibl
api_hosts: gettangibl.com
auth_scheme: oauth2_code
issuer_domain: gettangibl.com
authorization_url: https://gettangibl.com/oauth/authorize
token_url: https://gettangibl.com/oauth/token
registration_url: https://gettangibl.com/oauth/register
revoke_url: https://gettangibl.com/oauth/revoke
token_endpoint_auth_method: none
scopes: drafts

/api/mcp is not an MCP server; it answers with a pointer to this REST API.

Accounts & permissions

Customers sign in to Tangibl with Google and approve the connection. They can disconnect it from My Tangibl at any time.

  • Customer identity comes from the access token, never from an agent-supplied customer ID.
  • Every draft and order is checked against the signed-in owner.
  • Supplier credentials, payment secrets and print files stay server-side.
  • Disconnecting stops future access; it does not cancel paid orders.

Operations

OperationRequestPurpose
listProductsGET /api/v1/productsProducts, artwork rules and generation hints
uploadDraftPOST /api/v1/uploadsmultipart/form-data: file (JPEG/PNG), product_id, name, optional occasion and note; header Idempotency-Key (new UUID); optional ?parent_id=
uploadCanvasPrintFilePOST /api/v1/canvas/uploadsmultipart/form-data: file (3300×3900), product_id=canvas-print, name, optional occasion and note; header Idempotency-Key
listMyDraftsGET /api/v1/draftsRecent drafts with their names, occasions and notes
reviseDraftProductPOST /api/v1/draftsapplication/json: {"parent_id", "product_id", optional "name", "occasion", "note"}; header Idempotency-Key. Same artwork, another product; not for new images
getDraftGET /api/v1/drafts/{id}One draft
deleteDraftDELETE /api/v1/drafts/{id}Permanently delete a creation (not possible once it has an order). Only when the customer clearly asks, after confirming which one
updateDraftDetailsPATCH /api/v1/drafts/{id}application/json: any of {"name", "occasion", "note"}; empty string clears
getDraftPreviewGET /api/v1/drafts/{id}/previewArtwork image (JPEG)
getDraftProofGET /api/v1/drafts/{id}/proofPreview status
getDraftProofImageGET /api/v1/drafts/{id}/proof/imageProduct preview image (JPEG)
requestSupplierMockupPOST /api/v1/drafts/{id}/supplier-mockupRetry a failed canvas or poster preview
startCheckoutPOST /api/v1/drafts/{id}/checkoutapplication/json: optional {"quantity"} (1–5); header Idempotency-Key (new UUID per order). Returns total and a Stripe checkout_url
listMyOrdersGET /api/v1/ordersRecent orders and their status
getOrderGET /api/v1/orders/{id}One order: payment status, total, tracking; report_problem_url (paid orders) is where the customer reports a misprint with photos
sendFeedbackPOST /api/feedbackapplication/json: {"message", "topic", "agent_name", "context"}

Write operations take an Idempotency-Key. Prices come from the server; an agent cannot set a total or mark an order as paid.

Orders

  1. The customer saves an image as a draft and sees the product preview.
  2. startCheckout returns the total and a Stripe checkout link. The customer pays on Stripe’s page, never in the chat.
  3. After payment, the order goes to our print partner and its status appears in My Tangibl and through listMyOrders.

Prices include free US shipping. Made to order, so no change-of-mind returns; misprints are reprinted.

Integration questions →