IdukkiIdukki
Developers

API reference

The REST and GraphQL API, route by route

The same API the Idukki dashboard, Shopify app and storefront widget use, at api.idukki.io. This index is generated from the OpenAPI spec the API serves about itself; the Swagger UI with request and response schemas is one link away.

Base URL, auth and response shape

Productionhttps://api.idukki.io
Developmenthttps://dev-api.idukki.io
Interactive docshttps://api.idukki.io/docs (Swagger UI) and https://api.idukki.io/docs/openapi.json (the spec)
Widget data hosthttps://widget-api.idukki.io (CloudFront in front of the widget routes; same handlers)

Routes marked session sit behind the userAuth authorizer: send the JWT from POST /login as a bearer token. It carries the user and business, and every session route is scoped to that business. Per-business API keys are created and rotated through the GraphQL apiKeys mutations. Routes marked public need no token and are either called by a platform (webhooks, OAuth callbacks), by the widget, or are read-only feeds keyed by your public business GUID (bguid).

Every REST responsejson
// 200
{ "status": true, "result": { … } }

// 4xx / 5xx
{ "status": false, "message": "anchorId is required" }

Operational errors are typed: 400 bad request, 401 unauthorised, 403 forbidden, 404 not found, 409 conflict, 422 validation. Anything else is a 500 with a correlation id in the logs.

Three calls to start with

Public, no tokenbash
# Product-tagged posts for email (Klaviyo data feed)
curl "https://api.idukki.io/webfeed/YOUR_BGUID?limit=12"

# Aggregate rating for one product (null ratingValue when nothing is rated)
curl "https://api.idukki.io/webfeed/YOUR_BGUID/rating?productId=SHOPIFY_PRODUCT_ID"

# Agent-readable feed: products + rights-cleared UGC + reviews
curl "https://api.idukki.io/agent-feed/YOUR_BGUID?limit=50&ugc=6"
With a sessionbash
TOKEN=$(curl -s -X POST https://api.idukki.io/login \
  -H 'content-type: application/json' \
  -d '{"email":"you@example.com","password":"…"}' | jq -r .result.token)

curl "https://api.idukki.io/gallery-layouts" -H "authorization: Bearer $TOKEN"

Routes

Grouped by what you would use them for. Tags are the serverless function domains; the summary column is whatever the spec carries for the route, so a bare domain name means nobody has written a per-route summary yet.

Widget data

What the storefront runtime calls. GET /widget/api/{bguid}/{id} is the cached, public payload for one widget; it embeds a cache object and answers If-None-Match with 304. The Q&A routes power the on-widget chat.

MethodPathAuthSummary
GET/widget/{id}publicWidget Gallery Api
GET/widget/api/{bguid}/{id}publicWidget Gallery Api
POST/widget/aven/{businessId}/chatpublicAven Chat
ANY/widget/cache/{proxy+}sessionWidget Gallery Api
GET/widget/invalidatesessionWidget Gallery Api
POST/widget/qna/{anchorType}/{anchorId}/chatpublicQna Api
GET/widget/qna/{anchorType}/{anchorId}/suggestionspublicQna Api
POST/widget/qna/eventpublicQna Api

Feeds for email, agents and structured data

Public, read-only, rights-aware. The webfeed is Klaviyo-compatible (only product-tagged posts; productId scopes it to one product). The agent feed exposes products, UGC and reviews as JSON, schema.org JSON-LD and an llms.txt, plus a read-only MCP server.

MethodPathAuthSummary
GET/agent-feed/{bguid}publicAgentfeed Api
ANY/agent-feed/{bguid}/{proxy+}publicAgentfeed Api
POST/mcppublicMcp Server Api
GET/webfeed/{bguid}publicWebfeed Api
GET/webfeed/{bguid}/ratingpublicWebfeed Api
GET/webfeed/send-emailsessionWebfeed Api

The rating endpoint returns ratingValue: null when nothing is rated; omit AggregateRating rather than pad it.

Analytics ingest and reporting

The two public POST routes are the widget’s sinks. Everything else reads aggregated results for the dashboard and needs a session.

MethodPathAuthSummary
GET/analytics/cart/sessionAnalytics Api
POST/analytics/chatsessionChat Assistant Rest
POST/analytics/clickspublicAnalytics Api
GET/analytics/conversion/{entity}sessionAnalytics Api
GET/analytics/detailed/{type}sessionAnalytics Api
GET/analytics/detailed/{type}/{id}sessionAnalytics Api
GET/analytics/helpful-countspublicAnalytics Api
GET/analytics/helpful/{id}publicAnalytics Api
GET/analytics/interaction/{entity}sessionAnalytics Api
GET/analytics/logLogsToDBpublicAnalytics Api
POST/analytics/post-analyticspublicAnalytics Api
GET/analytics/post-analytics/{postId}/countsessionAnalytics Api
GET/analytics/postssessionAnalytics Api
GET/analytics/productssessionAnalytics Api
GET/analytics/realtimesessionAnalytics Api
POST/analytics/result/postsessionAnalytics Api
POST/analytics/result/v2sessionAnalytics Api
GET/analytics/taggedsessionAnalytics Api

Posts, collections and albums

Curation. Post actions, product tagging, thumbnails, blocking, media resync, album feeds, gallery layout CRUD and the AI tagging settings.

MethodPathAuthSummary
GET/aitag/postssessionAitag Api
GET/aitag/settingssessionAitag Api
PUT/aitag/settingssessionAitag Api
POST/collection/album/remove/{id}sessionGallery Layouts Api
GET/collection/campaign/{bguid}publicCollection Api
POST/collection/submitpublicCollection Api
GET/gallery-layout/{gallery_layout_id}sessionGallery Layouts Api
GET/gallery-layoutssessionGallery Layouts Api
POST/gallery-layoutssessionGallery Layouts Api
POST/gallery-layouts/{gallery_layout_id}sessionGallery Layouts Api
DELETE/gallery-layouts/{gallery_layout_id}sessionGallery Layouts Api
GET/gallery-layouts/aliaspublicGallery Layouts Api
GET/gallery-layouts/alias/{id}sessionGallery Layouts Api
GET/gallery-layouts/manaulalbumsessionGallery Layouts Api
ANY/imported/{proxy+}sessionImport Api
ANY/instant-ugc/{proxy+}sessionInstant Ugc Api
POST/post/action/{type}sessionPost Api
GET/post/ai-datapublicPost Api
GET/post/blocksessionPost Api
POST/post/blocksessionPost Api
DELETE/post/blocksessionPost Api
POST/post/edit/{postId}sessionPost Api
GET/post/existing-collectionsessionPost Api
GET/post/image/{guid}/{count}publicPost Api
GET/post/move-to-topsessionPost Api
POST/post/preview-urlsessionPost Api
POST/post/resync/{postId}sessionPost Api
POST/post/resync/bulksessionPost Api
GET/post/resync/status/{postId}sessionPost Api
POST/post/tag/{type}/{postId}sessionPost Api
POST/post/thumbnailsessionPost Api
POST/post/updatepublicPost Api
ANY/post/votepublicPost Api
ANY/post/vote/{proxy+}publicPost Api
GET/report-mediasessionReport Media Api
POST/report-mediapublicReport Media Api
DELETE/ugc/account/delete/{app}sessionUgc Api
GET/ugc/account/getsessionUgc Api
POST/ugc/account/integrate/{app}sessionUgc Api
GET/ugc/account/redirectUrl/{app}sessionUgc Api
PATCH/ugc/account/update/{id}sessionUgc Api
POST/ugc/albumssessionAlbum Api
POST/ugc/albums/feedsessionAlbum Api
DELETE/ugc/albums/feedsessionAlbum Api
GET/ugc/pages/{app}sessionUgc Api
DELETE/ugc/revoke/{app}sessionUgc Api

Rights

Generate a rights request, record a manual decision, read status per post. The /public/ugc-rights/{id} pair is the consent form a creator sees; the other /public/* routes are the guest gallery, proposals, widget preview and file upload.

MethodPathAuthSummary
POST/public/feedbackpublicFeedback Api
POST/public/gallery-layouts/guestpublicGallery Layouts Api
GET/public/proposal/{slug}publicProposal Api
POST/public/proposal/{slug}/eventpublicProposal Api
GET/public/ugc-rights/{id}publicRights Management Api
POST/public/ugc-rights/{id}publicRights Management Api
POST/public/uploadfiles/{businessId}publicFiles Api
POST/public/widget-previewpublicMisc Routes Api
GET/ugc-rights/{postId}sessionRights Management Api
POST/ugc-rights/generate-request/{app}sessionRights Management Api
POST/ugc-rights/internal/extendpublicRights Management Api
GET/ugc-rights/listsessionRights Management Api
POST/ugc-rights/manual/{action}sessionRights Management Api

Products and catalogue sync

Catalogue in, tagged UGC out. Shopify, Squarespace and Meta Commerce sync through the same product queue; the OAuth callbacks are public because the platform calls them.

MethodPathAuthSummary
GET/categorysessionProducts Api
POST/get-productspublicProducts Api
GET/product/presignedsessionProducts Api
GET/product/removesessionProducts Api
GET/product/s3-triggersessionProducts Api
GET/product-integration/accessTokenpublicProduct Integration Api
POST/product-integration/integrate-tokenpublicProduct Integration Api
GET/product-integration/meta/accessTokenpublicProduct Integration Api
POST/product-integration/meta/product-syncsessionProduct Integration Api
POST/product-integration/product-syncsessionProduct Integration Api
GET/product-integration/squarespace/accessTokenpublicProduct Integration Api
POST/product-integration/squarespace/product-syncsessionProduct Integration Api
GET/productspublicProducts Api
POST/productssessionProducts Api
POST/products/generate-modelsessionProducts Api
GET/products/model-statussessionProducts Api
GET/products/pidpublicProducts Api
POST/products/syncpublicProducts Api

Shopify

Webhooks Shopify calls (orders, uninstall, GDPR topics) and the reads the Shopify app uses.

MethodPathAuthSummary
GET/shopify/detail/theme-pagesessionShopify Api
GET/shopify/email-configsessionShopify Api
POST/shopify/order-detailpublicShopify Api
POST/shopify/order-statssessionShopify Api
GET/shopify/order/detail/{id}publicShopify Api
POST/shopify/save/email-configsessionShopify Api
POST/shopify/webhook/getcustomerdatapublicShopify Api
POST/shopify/webhook/orderpublicShopify Api
POST/shopify/webhook/removecustomerdatapublicShopify Api
POST/shopify/webhook/shopdatapublicShopify Api
POST/shopify/webhook/uninstallpublicShopify Api

Business, users and billing

Account, team, media upload, profanity list, Stripe portal and checkout, plan catalogue, the per-business config store and smart links.

MethodPathAuthSummary
POST/{platform}/registerpublicUser Api
POST/loginpublicUser Login
GET/businesssessionBusiness Api
PUT/businesssessionBusiness Api
GET/business/active-subscriptionpublicBusiness Api
GET/business/bguid-by-idpublicBusiness Api
GET/business/campaignEntriesCountpublicBusiness Api
GET/business/dormancy-confirmpublicBusiness Api
POST/business/dormancy-confirmpublicBusiness Api
GET/business/get-selectedsessionBusiness Api
GET/business/getfilessessionFiles Api
GET/business/getMediasessionBusiness Api
POST/business/invite-usersessionBusiness Api
GET/business/list-userssessionBusiness Api
POST/business/profanity/addsessionBusiness Api
GET/business/profanity/listsessionBusiness Api
DELETE/business/profanity/remove/{id}sessionBusiness Api
GET/business/recentApprovedMediapublicBusiness Api
DELETE/business/remove-user/{id}sessionBusiness Api
POST/business/set-selectedsessionBusiness Api
GET/business/subscriptionpublicBusiness Api
POST/business/update-media-statussessionBusiness Api
POST/business/uploadfilessessionFiles Api
POST/business/uploadMediapublicBusiness Api
POST/business/uploadMediaByBusinesssessionBusiness Api
POST/business/uploadMediaFromChannelpublicBusiness Api
POST/business/uploadStoreLogosessionBusiness Api
POST/business/widget-upload-successpublicBusiness Api
GET/l/{code}publicSmartlinks Api
GET/payment/checkoutsessionPayment Api
GET/payment/invoicessessionPayment Api
GET/payment/portalsessionPayment Api
POST/payment/webhookpublicPayment Api
ANY/smartlinkssessionSmartlinks Api
GET/subscription/getAllPlanspublicPlans And Subscription Api
PUT/user/{id}sessionUser Api
POST/user/forget-passwordpublicUser Api
POST/user/leadpublicUser Api
GET/user/mesessionUser Api
POST/user/reset-passwordpublicUser Api
POST/user/send-verification-emailpublicUser Api
POST/user/update-passwordsessionUser Api
POST/user/verify-tokenpublicUser Api
GET/wildcardpublicWildcard Api
POST/wildcardsessionWildcard Api

Social account lookups

Validate a handle, search a hashtag or page, fetch one post by URL. Used by the dashboard when connecting a source.

MethodPathAuthSummary
GET/social/{platform}/search/{type}publicSocial Media Account Api
GET/social/facebook/post-by-urlsessionSocial Media Account Api
GET/social/facebook/resolve-groupsessionSocial Media Account Api
GET/social/facebook/resolve-pagesessionSocial Media Account Api
GET/social/facebook/search-pagesessionSocial Media Account Api
GET/social/google/business-searchsessionSocial Media Account Api
GET/social/instagram/search-hashtagsessionSocial Media Account Api
GET/social/instagram/search-usersessionSocial Media Account Api
GET/social/linkedin/validatesessionSocial Media Account Api
GET/social/threads/validatesessionSocial Media Account Api
GET/social/tiktok/challengesessionSocial Media Account Api
GET/social/tiktok/usersessionSocial Media Account Api
GET/social/twitter/validatesessionSocial Media Account Api
GET/social/youtube/channelsessionSocial Media Account Api
POST/v2/socialpublicSocial Media Account Api
ANY/v2/social/{proxy+}publicSocial Media Account Api
POST/v2/social/detailspublicSocial Media Account Api

Shopper interactions

Public write surfaces: wishlist saves, campaign entries, the AI Readiness scan behind /tools/ai-readiness and its lead capture.

MethodPathAuthSummary
POST/aeo-leadpublicAgentfeed Api
POST/aeo-scanpublicAgentfeed Api
POST/campaignpublicCampaign Api
POST/website-leadpublicCrm Api
ANY/wishlistpublicWishlist Api

GraphQL

One endpoint, POST /graphql, serves every internal dashboard operation. The per-domain /graphql/* entries are documentation sections in the spec, not separate URLs. GraphQL-only domains: API keys, orders, customers, labels, notifications, announcements, brand kit, communication templates, links, product-sync jobs, Amazon exports.

MethodPathAuthSummary
GET/graphqlsessionGraph Ql
POST/graphqlsessionGraph Ql
POST/graphql/announcementssessionAnnouncement Operations (GraphQL)
POST/graphql/apikeyssessionAPI Keys Operations (GraphQL)
POST/graphql/brandkitsessionBrandKit Operations (GraphQL)
POST/graphql/customerssessionCustomer Operations (GraphQL)
POST/graphql/labelssessionLabel Operations (GraphQL)
POST/graphql/linkssessionLink Operations (GraphQL)
POST/graphql/notificationssessionIn-App Notification Operations (GraphQL)
POST/graphql/orderssessionOrder Operations (GraphQL)

Not yet grouped

Routes the spec added since this page’s groups were written.

MethodPathAuthSummary
GET/business/qna/product-questionssessionProduct-wise Q&A questions
GET/business/qna/usagesessionQ&A usage by business

Not listed: 38 operations under internal tags (admin proxy, cron triggers, health probes, SSO, email service, Stripe and Resend receivers). They are in the spec but are not a surface to build on.

Checked against: idukki-serverless-api/openapi/openapi.generated.json, idukki-serverless-api/src/functions/docs/README.md, idukki-serverless-api/src/functions/*/README.md. Something here that the product does not do? Tell us and it gets fixed in the doc or the code.

We use cookies

We use essential cookies to run this site and optional analytics cookies to understand how it’s used. You can change your choice anytime in our privacy policy.