Read safely
Search the public catalog, list purchases and owned products, inspect submission readiness, fetch deploy targets, request entitled downloads, and read AVCP/Connect status.
Seller integration reference
Authenticate, discover products, inspect your seller catalog, quote verification prep, run an explicitly confirmed tier, and deliver entitled products without guessing the next request.
Quickstart
txk_… value immediately. Tetrees stores only its digest and cannot show it again.Authorization: Bearer …. Never put it in a query string, source archive, client bundle, screenshot, or support report.permissions array is the source of truth for that token.curl --request GET \
"https://ex.tetrees.ai/api/auth/api-token-status" \
--header "Authorization: Bearer $TETREES_TOKEN" \
--header "Accept: application/json"{
"authenticated": true,
"principal": "api_token",
"accountType": "seller",
"capability": "read_and_confirmed_seller_prep",
"permissions": [
"catalog:read",
"seller_products:read",
"seller_prep:quote",
"seller_prep:confirmed_run",
"seller_report:read"
]
}Search the public catalog, list purchases and owned products, inspect submission readiness, fetch deploy targets, request entitled downloads, and read AVCP/Connect status.
Seller prep may spend points only when tier, current version, exact quoted points, and RUN_SELLER_PREP all match.
Create/revoke tokens, upload/import ZIP code, upload and sanitize preview images, create or edit listings, submit, publish, manage billing, change licenses, and close an account in the signed-in site. Readiness responses provide the exact continuation URL.
A scope-blocked request returns an authenticated 403, not an anonymous 401. This distinction tells you the token worked but the action belongs in the seller console.
Base URL: https://ex.tetrees.ai. All protected requests use a bearer token and JSON unless the endpoint returns a short-lived download URL.
/api/auth/api-token-statusValidate the token and inspect its effective capability.
/api/catalog/productsBrowse the sellable public catalog with filters and pagination.
/api/catalog/products/:slugRead public product detail and authenticated entitlement context.
/api/catalog/smart-searchSearch from a natural-language need. JSON body: { query }, 3–300 characters.
/api/orders/purchasesList purchases available to the token account.
/api/seller/productsList products owned by the authenticated seller.
/api/seller/products/:idRead one owned product, its current version, and lifecycle state.
/api/seller/products/:id/submission-readinessRead the required metadata, immutable code and preview-image checklist plus browser continuation links.
/api/seller/products/:id/prep-quoteReturn the current version, artifact size, and all four size-adjusted prep choices.
/api/seller/products/:id/prepSpend points and run exactly one quoted prep tier. Explicit confirmation is mandatory.
/api/seller/products/:id/reportRead normalized AVCP audition status, failing stages, safe private evidence, fixes and next actions.
/api/seller/connect/statusRead the seller's Stripe Connect readiness without changing it.
/api/install/products/:id/deploy-targetsReturn the target-specific deployment contract.
/api/install/products/:id/downloadIssue a five-minute, entitlement-checked product download URL.
| Parameter | Type | Meaning |
|---|---|---|
q | string | Name, description, or tag text. |
category | string | Primary or secondary category slug. |
type | string | Product type returned by GET /api/catalog/filters. |
language | string | Programming language stack value. |
framework | string | Framework stack value. |
database | string | Database stack value. |
payment_gateway | string | Payment integration value. |
region | korea | Restrict results to Korea-ready products. |
tool | string | Install-tool readiness value. |
license | enum | regular, extended, agency, or enterprise. |
min_price / max_price | number | Inclusive USD price bounds. |
free | boolean | true or 1 restricts results to free products. |
verified / team_reviewed | boolean | Require verification or Tetrees Team review. |
seller | UUID | Restrict results to one seller profile. |
sort | enum | newest, best_selling, top_rated, price_low, or price_high. |
page / page_size | integer | Page starts at 1; page_size is capped at 60. |
curl --get "https://ex.tetrees.ai/api/catalog/products" \
--header "Authorization: Bearer $TETREES_TOKEN" \
--data-urlencode "q=payment integration" \
--data-urlencode "verified=true" \
--data-urlencode "sort=top_rated" \
--data-urlencode "page_size=12"Never reuse a cached price blindly. The quote is size- and version-aware. A version or cost mismatch returns 409 without spending points, and concurrent starts are rejected to prevent double charging.
# 1. Quote the current immutable version and all four tiers.
curl "https://ex.tetrees.ai/api/seller/products/$PRODUCT_ID/prep-quote" \
--header "Authorization: Bearer $TETREES_TOKEN"
# 2. Copy currentVersion and the chosen tier's points from that response.
curl --request POST \
"https://ex.tetrees.ai/api/seller/products/$PRODUCT_ID/prep" \
--header "Authorization: Bearer $TETREES_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"tier": "verified_listing",
"expectedVersion": "1.0.1",
"expectedPoints": 956,
"confirmation": "RUN_SELLER_PREP"
}'tier — required enumexpectedVersion — requiredexpectedPoints — required integerconfirmation — required literalRUN_SELLER_PREPDownload and import the collection. It contains only routes supported by ordinary API tokens.
Open collection variables and place your txk_ value in the Current value for token.
Run List my seller products. Its test script stores the first productId when one is returned.
Set allowPointSpend to RUN_SELLER_PREP only after copying the current quote into expectedVersion and expectedPoints.
400 BAD_REQUESTMalformed parameters, missing confirmation, or an invalid request body.
401 UNAUTHORIZEDThe token is missing, invalid, expired, or revoked. Run the status probe first.
402 INSUFFICIENT_POINTSThe account needs more Tetrees Points before prep can start.
403 API_TOKEN_SCOPE_FORBIDDENAuthentication worked, but the route is intentionally browser-only.
403 FORBIDDENThe account is authenticated but does not own or have access to the resource.
404 NOT_FOUNDThe route or owner-scoped resource was not found.
409 CONFLICTThe version, quote, price, or verification state changed. Quote again before retrying.
410 GONEA short-lived download URL or proxy token expired. Request a fresh download.
429 RATE_LIMITBack off with jitter and retry; do not retry point-spending requests blindly.
500 / 503Transient server failure. Preserve the error body and retry safe GET requests only.
{
"error": {
"code": "API_TOKEN_SCOPE_FORBIDDEN",
"message": "Token authenticated successfully, but this route is outside the token scope."
},
"authentication": {
"authenticated": true,
"principal": "api_token",
"capability": "read_and_confirmed_seller_prep"
}
}The same token can power supported AI IDE workflows through the Tetrees MCP package.