[{"data":1,"prerenderedAt":1262},["ShallowReactive",2],{"docs-\u002Fgetting-started":3},{"id":4,"title":5,"body":6,"description":1255,"extension":1256,"meta":1257,"navigation":474,"path":1258,"seo":1259,"stem":1260,"__hash__":1261},"docs\u002Fdocs\u002Fgetting-started.md","Getting Started",{"type":7,"value":8,"toc":1228},"minimark",[9,13,17,20,25,36,38,42,51,54,235,238,248,250,254,257,262,267,270,273,289,292,296,299,302,308,310,324,327,329,333,337,349,355,358,362,365,367,371,374,378,386,409,419,423,426,442,446,562,566,649,653,734,738,829,833,910,914,1027,1031,1042,1056,1067,1069,1073,1080,1084,1094,1116,1123,1125,1129,1224],[10,11,5],"h1",{"id":12},"getting-started",[14,15,16],"p",{},"Cachely takes about 5 minutes to set up. Create a project, connect your CMS, and choose your integration path — the full API proxy for cached API responses and automatic asset URL rewriting, or the lighter asset-only path for media delivery without touching your API calls.",[18,19],"hr",{},[21,22,24],"h2",{"id":23},"_1-create-an-account","1. Create an account",[14,26,27,28,35],{},"Sign up at ",[29,30,34],"a",{"href":31,"rel":32},"https:\u002F\u002Faccounts.cachely.io\u002Fsign-up",[33],"nofollow","accounts.cachely.io\u002Fsign-up",". You can start with the free plan — no credit card required.",[18,37],{},[21,39,41],{"id":40},"_2-create-your-project","2. Create your project",[14,43,44,45,50],{},"After signing in, go to your ",[29,46,49],{"href":47,"rel":48},"https:\u002F\u002Fapp.cachely.io\u002Ftenants",[33],"dashboard"," and create a new project.",[14,52,53],{},"You'll need to provide:",[55,56,57,70],"table",{},[58,59,60],"thead",{},[61,62,63,67],"tr",{},[64,65,66],"th",{},"Field",[64,68,69],{},"Description",[71,72,73,93,129,143,153,166,179,192,205,215,225],"tbody",{},[61,74,75,82],{},[76,77,78],"td",{},[79,80,81],"strong",{},"Slug",[76,83,84,85,89,90],{},"A URL-friendly name for your project (e.g. ",[86,87,88],"code",{},"my-project","). This becomes your edge domain: ",[86,91,92],{},"my-project.cmsassets.com",[61,94,95,100],{},[76,96,97],{},[79,98,99],{},"CMS",[76,101,102,103,106,107,106,110,106,113,106,116,106,119,106,122,125,126],{},"Select your CMS type — ",[86,104,105],{},"Prismic",", ",[86,108,109],{},"Contentful",[86,111,112],{},"Sanity",[86,114,115],{},"Shopify",[86,117,118],{},"Cloudinary",[86,120,121],{},"Imgix",[86,123,124],{},"Storyblok",", or ",[86,127,128],{},"Generic Origin",[61,130,131,136],{},[76,132,133],{},[79,134,135],{},"Repository name",[76,137,138,139,142],{},"For Prismic: your repository name (e.g. ",[86,140,141],{},"my-repo",")",[61,144,145,150],{},[76,146,147],{},[79,148,149],{},"Space ID",[76,151,152],{},"For Contentful: your space ID",[61,154,155,160],{},[76,156,157],{},[79,158,159],{},"Project ID",[76,161,162,163,142],{},"For Sanity: your project ID (e.g. ",[86,164,165],{},"z5k7abcd",[61,167,168,173],{},[76,169,170],{},[79,171,172],{},"Store domain",[76,174,175,176,142],{},"For Shopify: your store domain (e.g. ",[86,177,178],{},"your-store.myshopify.com",[61,180,181,186],{},[76,182,183],{},[79,184,185],{},"Cloud name",[76,187,188,189,142],{},"For Cloudinary: your cloud name (e.g. ",[86,190,191],{},"my-cloud",[61,193,194,199],{},[76,195,196],{},[79,197,198],{},"Imgix domain",[76,200,201,202,142],{},"For Imgix: your source domain (e.g. ",[86,203,204],{},"my-source.imgix.net",[61,206,207,212],{},[76,208,209],{},[79,210,211],{},"Storyblok space ID",[76,213,214],{},"For Storyblok: your numeric space ID",[61,216,217,222],{},[76,218,219],{},[79,220,221],{},"Origin URL",[76,223,224],{},"For Generic Origin: full HTTPS origin URL",[61,226,227,232],{},[76,228,229],{},[79,230,231],{},"Website domain",[76,233,234],{},"The domain of your frontend (used for Referer headers and origin requests when needed)",[14,236,237],{},"Once created, your edge domain is live:",[239,240,245],"pre",{"className":241,"code":243,"language":244},[242],"language-text","https:\u002F\u002Fyour-project.cmsassets.com\n","text",[86,246,243],{"__ignoreMap":247},"",[18,249],{},[21,251,253],{"id":252},"_3-choose-your-setup-path","3. Choose your setup path",[14,255,256],{},"Both setup paths use the same edge domain:",[239,258,260],{"className":259,"code":243,"language":244},[242],[86,261,243],{"__ignoreMap":247},[263,264,266],"h3",{"id":265},"option-a-api-asset-proxy-recommended","Option A: API + asset proxy (recommended)",[14,268,269],{},"The recommended path for most teams. Route read-only CMS API requests through your project's edge domain and let Cachely handle credentials, caching, and asset URL rewriting automatically.",[14,271,272],{},"Choose this path when you want:",[274,275,276,280,283,286],"ul",{},[277,278,279],"li",{},"server-side token injection for CMS API calls",[277,281,282],{},"cached API responses at the edge",[277,284,285],{},"automatic asset URL rewriting in JSON responses",[277,287,288],{},"one tenant domain for both API and asset traffic",[14,290,291],{},"Use this path when you want the proxy to handle the full CMS delivery layer instead of only patching asset URLs later in the app.",[263,293,295],{"id":294},"option-b-asset-proxy-only","Option B: Asset proxy only",[14,297,298],{},"This is the lighter alternative. Keep your existing CMS API calls unchanged and route only assets through the tenant domain.",[14,300,301],{},"Example:",[239,303,306],{"className":304,"code":305,"language":244,"meta":247},[242],"Assets: https:\u002F\u002Fyour-project.cmsassets.com\u002Fpath\u002Fto\u002Fimage.jpg\n",[86,307,305],{"__ignoreMap":247},[14,309,272],{},[274,311,312,315,318,321],{},[277,313,314],{},"edge caching for media",[277,316,317],{},"lower CMS bandwidth usage",[277,319,320],{},"minimal implementation changes",[277,322,323],{},"a simple rollout with the CLI, transformer, SDK, or a small URL rewrite step",[14,325,326],{},"You can add the API proxy later without changing anything about your project setup.",[18,328],{},[21,330,332],{"id":331},"_4-activate-the-integration-path-you-chose","4. Activate the integration path you chose",[263,334,336],{"id":335},"for-the-full-api-asset-proxy-package","For the full API + asset proxy package",[14,338,339,340,344,345,348],{},"Use the ",[29,341,343],{"href":342},"\u002Fdocs\u002Fcore","Cachely SDK"," or your project's ",[79,346,347],{},"API Proxy"," settings to route read-only CMS requests through:",[239,350,353],{"className":351,"code":352,"language":244,"meta":247},[242],"https:\u002F\u002Fyour-project.cmsassets.com\u002F~api\u002F...\n",[86,354,352],{"__ignoreMap":247},[14,356,357],{},"That gives you server-side token injection, edge caching, and proxy-ready asset URLs in API responses.",[263,359,361],{"id":360},"for-asset-proxy-only","For asset proxy only",[14,363,364],{},"Use the response transformer or CLI to rewrite asset URLs in your app responses.",[18,366],{},[21,368,370],{"id":369},"_5-install-the-response-transformer","5. Install the response transformer",[14,372,373],{},"The response transformer rewrites CMS asset URLs in your API responses so they point to your Cachely proxy instead of the origin CDN.",[263,375,377],{"id":376},"option-a-use-the-cli-agent-recommended","Option A: Use the CLI agent (recommended)",[14,379,380,381,385],{},"The fastest way is to use the ",[29,382,384],{"href":383},"\u002Fdocs\u002Fagent","CLI Agent",". From your project root:",[239,387,391],{"className":388,"code":389,"language":390,"meta":247,"style":247},"language-bash shiki shiki-themes github-dark","npx @synchronized-studio\u002Fcmsassets-agent init\n","bash",[86,392,393],{"__ignoreMap":247},[394,395,398,402,406],"span",{"class":396,"line":397},"line",1,[394,399,401],{"class":400},"svObZ","npx",[394,403,405],{"class":404},"sU2Wk"," @synchronized-studio\u002Fcmsassets-agent",[394,407,408],{"class":404}," init\n",[14,410,411,412,415,416,418],{},"The agent will detect your framework and CMS, install the transformer, and patch your source files automatically. You can pass ",[86,413,414],{},"--slug your-project-slug"," so it uses your Cachely URL. See ",[29,417,384],{"href":383}," for all options and re-run instructions.",[263,420,422],{"id":421},"option-b-manual-installation","Option B: Manual installation",[14,424,425],{},"If you prefer to integrate by hand, install the package and wrap your fetch calls as below.",[239,427,429],{"className":388,"code":428,"language":390,"meta":247,"style":247},"npm install @synchronized-studio\u002Fresponse-transformer\n",[86,430,431],{"__ignoreMap":247},[394,432,433,436,439],{"class":396,"line":397},[394,434,435],{"class":400},"npm",[394,437,438],{"class":404}," install",[394,440,441],{"class":404}," @synchronized-studio\u002Fresponse-transformer\n",[263,443,445],{"id":444},"prismic-example","Prismic example",[239,447,451],{"className":448,"code":449,"language":450,"meta":247,"style":247},"language-typescript shiki shiki-themes github-dark","import { transformPrismicAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\n\u002F\u002F After fetching data from Prismic\nconst data = await prismicClient.getAllByType(\"page\")\n\nconst transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n","typescript",[86,452,453,469,476,483,514,519,535,547,556],{"__ignoreMap":247},[394,454,455,459,463,466],{"class":396,"line":397},[394,456,458],{"class":457},"snl16","import",[394,460,462],{"class":461},"s95oV"," { transformPrismicAssetUrls } ",[394,464,465],{"class":457},"from",[394,467,468],{"class":404}," \"@synchronized-studio\u002Fresponse-transformer\"\n",[394,470,472],{"class":396,"line":471},2,[394,473,475],{"emptyLinePlaceholder":474},true,"\n",[394,477,479],{"class":396,"line":478},3,[394,480,482],{"class":481},"sAwPA","\u002F\u002F After fetching data from Prismic\n",[394,484,486,489,493,496,499,502,505,508,511],{"class":396,"line":485},4,[394,487,488],{"class":457},"const",[394,490,492],{"class":491},"sDLfK"," data",[394,494,495],{"class":457}," =",[394,497,498],{"class":457}," await",[394,500,501],{"class":461}," prismicClient.",[394,503,504],{"class":400},"getAllByType",[394,506,507],{"class":461},"(",[394,509,510],{"class":404},"\"page\"",[394,512,513],{"class":461},")\n",[394,515,517],{"class":396,"line":516},5,[394,518,475],{"emptyLinePlaceholder":474},[394,520,522,524,527,529,532],{"class":396,"line":521},6,[394,523,488],{"class":457},[394,525,526],{"class":491}," transformed",[394,528,495],{"class":457},[394,530,531],{"class":400}," transformPrismicAssetUrls",[394,533,534],{"class":461},"(data, {\n",[394,536,538,541,544],{"class":396,"line":537},7,[394,539,540],{"class":461},"  repository: ",[394,542,543],{"class":404},"\"your-repo\"",[394,545,546],{"class":461},",\n",[394,548,550,553],{"class":396,"line":549},8,[394,551,552],{"class":461},"  cmsAssetsUrl: ",[394,554,555],{"class":404},"\"https:\u002F\u002Fyour-project.cmsassets.com\"\n",[394,557,559],{"class":396,"line":558},9,[394,560,561],{"class":461},"})\n",[263,563,565],{"id":564},"contentful-example","Contentful example",[239,567,569],{"className":448,"code":568,"language":450,"meta":247,"style":247},"import { transformContentfulAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\n\u002F\u002F After fetching data from Contentful\nconst entries = await contentfulClient.getEntries()\n\nconst transformed = transformContentfulAssetUrls(entries, {\n  spaceId: \"your-space-id\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n",[86,570,571,582,586,591,611,615,629,639,645],{"__ignoreMap":247},[394,572,573,575,578,580],{"class":396,"line":397},[394,574,458],{"class":457},[394,576,577],{"class":461}," { transformContentfulAssetUrls } ",[394,579,465],{"class":457},[394,581,468],{"class":404},[394,583,584],{"class":396,"line":471},[394,585,475],{"emptyLinePlaceholder":474},[394,587,588],{"class":396,"line":478},[394,589,590],{"class":481},"\u002F\u002F After fetching data from Contentful\n",[394,592,593,595,598,600,602,605,608],{"class":396,"line":485},[394,594,488],{"class":457},[394,596,597],{"class":491}," entries",[394,599,495],{"class":457},[394,601,498],{"class":457},[394,603,604],{"class":461}," contentfulClient.",[394,606,607],{"class":400},"getEntries",[394,609,610],{"class":461},"()\n",[394,612,613],{"class":396,"line":516},[394,614,475],{"emptyLinePlaceholder":474},[394,616,617,619,621,623,626],{"class":396,"line":521},[394,618,488],{"class":457},[394,620,526],{"class":491},[394,622,495],{"class":457},[394,624,625],{"class":400}," transformContentfulAssetUrls",[394,627,628],{"class":461},"(entries, {\n",[394,630,631,634,637],{"class":396,"line":537},[394,632,633],{"class":461},"  spaceId: ",[394,635,636],{"class":404},"\"your-space-id\"",[394,638,546],{"class":461},[394,640,641,643],{"class":396,"line":549},[394,642,552],{"class":461},[394,644,555],{"class":404},[394,646,647],{"class":396,"line":558},[394,648,561],{"class":461},[263,650,652],{"id":651},"shopify-example","Shopify example",[239,654,656],{"className":448,"code":655,"language":450,"meta":247,"style":247},"import { transformShopifyAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\n\u002F\u002F After fetching data from Shopify Storefront API\nconst data = await shopifyClient.request(productsQuery)\n\nconst transformed = transformShopifyAssetUrls(data, {\n  storeDomain: \"your-store.myshopify.com\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n",[86,657,658,669,673,678,697,701,714,724,730],{"__ignoreMap":247},[394,659,660,662,665,667],{"class":396,"line":397},[394,661,458],{"class":457},[394,663,664],{"class":461}," { transformShopifyAssetUrls } ",[394,666,465],{"class":457},[394,668,468],{"class":404},[394,670,671],{"class":396,"line":471},[394,672,475],{"emptyLinePlaceholder":474},[394,674,675],{"class":396,"line":478},[394,676,677],{"class":481},"\u002F\u002F After fetching data from Shopify Storefront API\n",[394,679,680,682,684,686,688,691,694],{"class":396,"line":485},[394,681,488],{"class":457},[394,683,492],{"class":491},[394,685,495],{"class":457},[394,687,498],{"class":457},[394,689,690],{"class":461}," shopifyClient.",[394,692,693],{"class":400},"request",[394,695,696],{"class":461},"(productsQuery)\n",[394,698,699],{"class":396,"line":516},[394,700,475],{"emptyLinePlaceholder":474},[394,702,703,705,707,709,712],{"class":396,"line":521},[394,704,488],{"class":457},[394,706,526],{"class":491},[394,708,495],{"class":457},[394,710,711],{"class":400}," transformShopifyAssetUrls",[394,713,534],{"class":461},[394,715,716,719,722],{"class":396,"line":537},[394,717,718],{"class":461},"  storeDomain: ",[394,720,721],{"class":404},"\"your-store.myshopify.com\"",[394,723,546],{"class":461},[394,725,726,728],{"class":396,"line":549},[394,727,552],{"class":461},[394,729,555],{"class":404},[394,731,732],{"class":396,"line":558},[394,733,561],{"class":461},[263,735,737],{"id":736},"cloudinary-example","Cloudinary example",[239,739,741],{"className":448,"code":740,"language":450,"meta":247,"style":247},"import { transformCloudinaryAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\n\u002F\u002F After fetching data from Cloudinary\nconst data = await cloudinaryClient.search.expression(\"folder:products\").execute()\n\nconst transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n",[86,742,743,754,758,763,792,796,809,819,825],{"__ignoreMap":247},[394,744,745,747,750,752],{"class":396,"line":397},[394,746,458],{"class":457},[394,748,749],{"class":461}," { transformCloudinaryAssetUrls } ",[394,751,465],{"class":457},[394,753,468],{"class":404},[394,755,756],{"class":396,"line":471},[394,757,475],{"emptyLinePlaceholder":474},[394,759,760],{"class":396,"line":478},[394,761,762],{"class":481},"\u002F\u002F After fetching data from Cloudinary\n",[394,764,765,767,769,771,773,776,779,781,784,787,790],{"class":396,"line":485},[394,766,488],{"class":457},[394,768,492],{"class":491},[394,770,495],{"class":457},[394,772,498],{"class":457},[394,774,775],{"class":461}," cloudinaryClient.search.",[394,777,778],{"class":400},"expression",[394,780,507],{"class":461},[394,782,783],{"class":404},"\"folder:products\"",[394,785,786],{"class":461},").",[394,788,789],{"class":400},"execute",[394,791,610],{"class":461},[394,793,794],{"class":396,"line":516},[394,795,475],{"emptyLinePlaceholder":474},[394,797,798,800,802,804,807],{"class":396,"line":521},[394,799,488],{"class":457},[394,801,526],{"class":491},[394,803,495],{"class":457},[394,805,806],{"class":400}," transformCloudinaryAssetUrls",[394,808,534],{"class":461},[394,810,811,814,817],{"class":396,"line":537},[394,812,813],{"class":461},"  cloudName: ",[394,815,816],{"class":404},"\"my-cloud\"",[394,818,546],{"class":461},[394,820,821,823],{"class":396,"line":549},[394,822,552],{"class":461},[394,824,555],{"class":404},[394,826,827],{"class":396,"line":558},[394,828,561],{"class":461},[263,830,832],{"id":831},"imgix-example","Imgix example",[239,834,836],{"className":448,"code":835,"language":450,"meta":247,"style":247},"import { transformImgixAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\n\u002F\u002F After fetching data from your CMS that uses Imgix URLs\nconst data = await fetchCmsData()\n\nconst transformed = transformImgixAssetUrls(data, {\n  imgixDomain: \"my-source.imgix.net\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n",[86,837,838,849,853,858,873,877,890,900,906],{"__ignoreMap":247},[394,839,840,842,845,847],{"class":396,"line":397},[394,841,458],{"class":457},[394,843,844],{"class":461}," { transformImgixAssetUrls } ",[394,846,465],{"class":457},[394,848,468],{"class":404},[394,850,851],{"class":396,"line":471},[394,852,475],{"emptyLinePlaceholder":474},[394,854,855],{"class":396,"line":478},[394,856,857],{"class":481},"\u002F\u002F After fetching data from your CMS that uses Imgix URLs\n",[394,859,860,862,864,866,868,871],{"class":396,"line":485},[394,861,488],{"class":457},[394,863,492],{"class":491},[394,865,495],{"class":457},[394,867,498],{"class":457},[394,869,870],{"class":400}," fetchCmsData",[394,872,610],{"class":461},[394,874,875],{"class":396,"line":516},[394,876,475],{"emptyLinePlaceholder":474},[394,878,879,881,883,885,888],{"class":396,"line":521},[394,880,488],{"class":457},[394,882,526],{"class":491},[394,884,495],{"class":457},[394,886,887],{"class":400}," transformImgixAssetUrls",[394,889,534],{"class":461},[394,891,892,895,898],{"class":396,"line":537},[394,893,894],{"class":461},"  imgixDomain: ",[394,896,897],{"class":404},"\"my-source.imgix.net\"",[394,899,546],{"class":461},[394,901,902,904],{"class":396,"line":549},[394,903,552],{"class":461},[394,905,555],{"class":404},[394,907,908],{"class":396,"line":558},[394,909,561],{"class":461},[263,911,913],{"id":912},"storyblok-example","Storyblok example",[239,915,917],{"className":448,"code":916,"language":450,"meta":247,"style":247},"import { transformCmsAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nconst response = await fetch(`https:\u002F\u002Fapi.storyblok.com\u002Fv2\u002Fcdn\u002Fstories?token=${token}`)\nconst data = await response.json()\n\nconst transformed = transformCmsAssetUrls(data, {\n  cms: \"storyblok\",\n  identifier: \"123456\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-project.cmsassets.com\"\n})\n",[86,918,919,930,934,961,979,983,996,1006,1016,1022],{"__ignoreMap":247},[394,920,921,923,926,928],{"class":396,"line":397},[394,922,458],{"class":457},[394,924,925],{"class":461}," { transformCmsAssetUrls } ",[394,927,465],{"class":457},[394,929,468],{"class":404},[394,931,932],{"class":396,"line":471},[394,933,475],{"emptyLinePlaceholder":474},[394,935,936,938,941,943,945,948,950,953,956,959],{"class":396,"line":478},[394,937,488],{"class":457},[394,939,940],{"class":491}," response",[394,942,495],{"class":457},[394,944,498],{"class":457},[394,946,947],{"class":400}," fetch",[394,949,507],{"class":461},[394,951,952],{"class":404},"`https:\u002F\u002Fapi.storyblok.com\u002Fv2\u002Fcdn\u002Fstories?token=${",[394,954,955],{"class":461},"token",[394,957,958],{"class":404},"}`",[394,960,513],{"class":461},[394,962,963,965,967,969,971,974,977],{"class":396,"line":485},[394,964,488],{"class":457},[394,966,492],{"class":491},[394,968,495],{"class":457},[394,970,498],{"class":457},[394,972,973],{"class":461}," response.",[394,975,976],{"class":400},"json",[394,978,610],{"class":461},[394,980,981],{"class":396,"line":516},[394,982,475],{"emptyLinePlaceholder":474},[394,984,985,987,989,991,994],{"class":396,"line":521},[394,986,488],{"class":457},[394,988,526],{"class":491},[394,990,495],{"class":457},[394,992,993],{"class":400}," transformCmsAssetUrls",[394,995,534],{"class":461},[394,997,998,1001,1004],{"class":396,"line":537},[394,999,1000],{"class":461},"  cms: ",[394,1002,1003],{"class":404},"\"storyblok\"",[394,1005,546],{"class":461},[394,1007,1008,1011,1014],{"class":396,"line":549},[394,1009,1010],{"class":461},"  identifier: ",[394,1012,1013],{"class":404},"\"123456\"",[394,1015,546],{"class":461},[394,1017,1018,1020],{"class":396,"line":558},[394,1019,552],{"class":461},[394,1021,555],{"class":404},[394,1023,1025],{"class":396,"line":1024},10,[394,1026,561],{"class":461},[263,1028,1030],{"id":1029},"environment-variable","Environment variable",[14,1032,1033,1034,1037,1038,1041],{},"Instead of passing ",[86,1035,1036],{},"cmsAssetsUrl"," directly, you can set the ",[86,1039,1040],{},"CMS_ASSETS_URL"," environment variable:",[239,1043,1045],{"className":388,"code":1044,"language":390,"meta":247,"style":247},"CMS_ASSETS_URL=https:\u002F\u002Fyour-project.cmsassets.com\n",[86,1046,1047],{"__ignoreMap":247},[394,1048,1049,1051,1054],{"class":396,"line":397},[394,1050,1040],{"class":461},[394,1052,1053],{"class":457},"=",[394,1055,243],{"class":404},[14,1057,1058,1059,1062,1063,1066],{},"The transformer will read this automatically. In production, ",[86,1060,1061],{},"http:\u002F\u002F"," URLs are automatically upgraded to ",[86,1064,1065],{},"https:\u002F\u002F",".",[18,1068],{},[21,1070,1072],{"id":1071},"_6-deploy","6. Deploy",[14,1074,1075,1076,1079],{},"That's it. Once deployed, your full setup runs through one edge domain. With the API proxy enabled, read-only CMS requests flow through ",[86,1077,1078],{},"https:\u002F\u002Fyour-project.cmsassets.com\u002F~api\u002F...",", and parsed API responses already contain proxy-ready asset URLs. If you chose the lighter path, asset URLs still route through Cachely on their own.",[263,1081,1083],{"id":1082},"verify-its-working","Verify it's working",[14,1085,1086,1087,1090,1091,1093],{},"If you enabled the API proxy, test one ",[86,1088,1089],{},"GET"," request through ",[86,1092,1078],{}," and check:",[274,1095,1096,1107,1113],{},[277,1097,1098,106,1101,125,1104],{},[86,1099,1100],{},"X-Cache: HIT",[86,1102,1103],{},"MISS",[86,1105,1106],{},"BYPASS",[277,1108,1109,1112],{},[86,1110,1111],{},"X-Parsed: true"," when URL rewriting is enabled",[277,1114,1115],{},"proxy URLs in the JSON body instead of raw CMS asset origins",[14,1117,1118,1119,1122],{},"Then inspect any image element or asset URL in the app. It should point to ",[86,1120,1121],{},"your-project.cmsassets.com"," instead of the raw CMS CDN.",[18,1124],{},[21,1126,1128],{"id":1127},"next-steps","Next steps",[274,1130,1131,1136,1143,1154,1161,1168,1175,1182,1189,1196,1203,1210,1217],{},[277,1132,1133,1135],{},[29,1134,384],{"href":383}," — Use one command to patch existing or new projects",[277,1137,1138,1142],{},[29,1139,1141],{"href":1140},"\u002Fdocs\u002Fapi-proxy-overview","API Proxy Overview"," — Understand when to use asset proxy vs API proxy",[277,1144,1145,1149,1150,1153],{},[29,1146,1148],{"href":1147},"\u002Fdocs\u002Fconfiguring-api-proxy","Configuring API Proxy"," — Set up ",[86,1151,1152],{},"\u002F~api",", caching, and token injection",[277,1155,1156,1160],{},[29,1157,1159],{"href":1158},"\u002Fdocs\u002Fhow-it-works","How It Works"," — Understand the full request flow",[277,1162,1163,1167],{},[29,1164,1166],{"href":1165},"\u002Fdocs\u002Fprismic","Prismic Integration"," — Deep dive into Prismic-specific setup",[277,1169,1170,1174],{},[29,1171,1173],{"href":1172},"\u002Fdocs\u002Fcontentful","Contentful Integration"," — Deep dive into Contentful-specific setup",[277,1176,1177,1181],{},[29,1178,1180],{"href":1179},"\u002Fdocs\u002Fsanity","Sanity Integration"," — Deep dive into Sanity-specific setup",[277,1183,1184,1188],{},[29,1185,1187],{"href":1186},"\u002Fdocs\u002Fshopify","Shopify Integration"," — Deep dive into Shopify-specific setup",[277,1190,1191,1195],{},[29,1192,1194],{"href":1193},"\u002Fdocs\u002Fcloudinary","Cloudinary Integration"," — Deep dive into Cloudinary-specific setup",[277,1197,1198,1202],{},[29,1199,1201],{"href":1200},"\u002Fdocs\u002Fimgix","Imgix Integration"," — Deep dive into Imgix-specific setup",[277,1204,1205,1209],{},[29,1206,1208],{"href":1207},"\u002Fdocs\u002Fstoryblok","Storyblok Integration"," — Deep dive into Storyblok-specific setup",[277,1211,1212,1216],{},[29,1213,1215],{"href":1214},"\u002Fdocs\u002Fapi","Admin API"," — Reference for tenant, API proxy, and cache endpoints",[277,1218,1219,1223],{},[29,1220,1222],{"href":1221},"\u002Fdocs\u002Flimits","Limits & Usage"," — Learn about bandwidth tracking",[1225,1226,1227],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":247,"searchDepth":471,"depth":471,"links":1229},[1230,1231,1232,1236,1240,1251,1254],{"id":23,"depth":471,"text":24},{"id":40,"depth":471,"text":41},{"id":252,"depth":471,"text":253,"children":1233},[1234,1235],{"id":265,"depth":478,"text":266},{"id":294,"depth":478,"text":295},{"id":331,"depth":471,"text":332,"children":1237},[1238,1239],{"id":335,"depth":478,"text":336},{"id":360,"depth":478,"text":361},{"id":369,"depth":471,"text":370,"children":1241},[1242,1243,1244,1245,1246,1247,1248,1249,1250],{"id":376,"depth":478,"text":377},{"id":421,"depth":478,"text":422},{"id":444,"depth":478,"text":445},{"id":564,"depth":478,"text":565},{"id":651,"depth":478,"text":652},{"id":736,"depth":478,"text":737},{"id":831,"depth":478,"text":832},{"id":912,"depth":478,"text":913},{"id":1029,"depth":478,"text":1030},{"id":1071,"depth":471,"text":1072,"children":1252},[1253],{"id":1082,"depth":478,"text":1083},{"id":1127,"depth":471,"text":1128},"Get Cachely up and running in about 5 minutes. Create your first project, connect your CMS, and start serving cached content from the edge.","md",{},"\u002Fdocs\u002Fgetting-started",{"title":5,"description":1255},"docs\u002Fgetting-started","EF475YlNVjY38GUf-T_dBNxIwbDgqHST9U9ijpyyFx8",1777579477588]