[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"\u002Fdocs\u002Fquickstart":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":741,"_id":742,"_source":743,"_file":744,"_stem":745,"_extension":746},"\u002Fdocs\u002Fquickstart","docs",false,"","Quickstart","Get a project reporting deploys to i3deploy in a few minutes: sign up, create an API key, wire up\none service, and push your first deploy event from CI.",{"type":11,"children":12,"toc":729},"root",[13,21,26,33,62,68,99,128,134,139,165,170,176,189,202,230,327,332,365,394,435,456,540,574,585,590,680,692,698,723],{"type":14,"tag":15,"props":16,"children":18},"element","h1",{"id":17},"quickstart",[19],{"type":20,"value":8},"text",{"type":14,"tag":22,"props":23,"children":24},"p",{},[25],{"type":20,"value":9},{"type":14,"tag":27,"props":28,"children":30},"h2",{"id":29},"_1-sign-up",[31],{"type":20,"value":32},"1. Sign up",{"type":14,"tag":22,"props":34,"children":35},{},[36,38,52,54,60],{"type":20,"value":37},"Go to ",{"type":14,"tag":39,"props":40,"children":44},"a",{"href":41,"rel":42},"https:\u002F\u002Fapp.i3deploy.com\u002Fonboarding",[43],"nofollow",[45],{"type":14,"tag":46,"props":47,"children":49},"code",{"className":48},[],[50],{"type":20,"value":51},"app.i3deploy.com\u002Fonboarding",{"type":20,"value":53}," and create your\norganization. The free plan covers ",{"type":14,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":20,"value":59},"1 project forever",{"type":20,"value":61}," — no credit card required.",{"type":14,"tag":27,"props":63,"children":65},{"id":64},"_2-create-an-api-key",[66],{"type":20,"value":67},"2. Create an API key",{"type":14,"tag":22,"props":69,"children":70},{},[71,73,83,85,91,93,97],{"type":20,"value":72},"Once you're in, open the ",{"type":14,"tag":39,"props":74,"children":77},{"href":75,"rel":76},"https:\u002F\u002Fapp.i3deploy.com",[43],[78],{"type":14,"tag":55,"props":79,"children":80},{},[81],{"type":20,"value":82},"API Keys",{"type":20,"value":84}," page (",{"type":14,"tag":46,"props":86,"children":88},{"className":87},[],[89],{"type":20,"value":90},"app.i3deploy.com",{"type":20,"value":92}," →\nyour org → ",{"type":14,"tag":55,"props":94,"children":95},{},[96],{"type":20,"value":82},{"type":20,"value":98}," in the sidebar) and create a key.",{"type":14,"tag":100,"props":101,"children":102},"ul",{},[103,116],{"type":14,"tag":104,"props":105,"children":106},"li",{},[107,109,114],{"type":20,"value":108},"The key is ",{"type":14,"tag":55,"props":110,"children":111},{},[112],{"type":20,"value":113},"shown once",{"type":20,"value":115}," — copy it somewhere safe before you navigate away.",{"type":14,"tag":104,"props":117,"children":118},{},[119,121,126],{"type":20,"value":120},"Keys are ",{"type":14,"tag":55,"props":122,"children":123},{},[124],{"type":20,"value":125},"org-scoped",{"type":20,"value":127},": the same key can report deploys for any project or service in your\norganization, so one key per CI system is usually enough.",{"type":14,"tag":27,"props":129,"children":131},{"id":130},"_3-create-a-project-and-a-service",[132],{"type":20,"value":133},"3. Create a project and a service",{"type":14,"tag":22,"props":135,"children":136},{},[137],{"type":20,"value":138},"Do this from the onboarding wizard, or later from the app UI:",{"type":14,"tag":100,"props":140,"children":141},{},[142,154],{"type":14,"tag":104,"props":143,"children":144},{},[145,147,152],{"type":20,"value":146},"A ",{"type":14,"tag":55,"props":148,"children":149},{},[150],{"type":20,"value":151},"project",{"type":20,"value":153}," groups the services you ship together (e.g. \"Marketing site\").",{"type":14,"tag":104,"props":155,"children":156},{},[157,158,163],{"type":20,"value":146},{"type":14,"tag":55,"props":159,"children":160},{},[161],{"type":20,"value":162},"service",{"type":20,"value":164}," is the deployable unit a deploy event targets (e.g. \"web\", \"api\", \"worker\").",{"type":14,"tag":22,"props":166,"children":167},{},[168],{"type":20,"value":169},"Every deploy you report needs a project and service to already exist.",{"type":14,"tag":27,"props":171,"children":173},{"id":172},"_4-track-your-first-deploy-from-ci",[174],{"type":20,"value":175},"4. Track your first deploy from CI",{"type":14,"tag":22,"props":177,"children":178},{},[179,181,187],{"type":20,"value":180},"There are two ways to report a deploy: the vendored shell script (recommended — it handles\nstart\u002Ffinish and exit codes for you), or a raw ",{"type":14,"tag":46,"props":182,"children":184},{"className":183},[],[185],{"type":20,"value":186},"curl",{"type":20,"value":188}," call if you'd rather not vendor anything.",{"type":14,"tag":190,"props":191,"children":193},"h3",{"id":192},"option-a-i3deploysh",[194,196],{"type":20,"value":195},"Option A: ",{"type":14,"tag":46,"props":197,"children":199},{"className":198},[],[200],{"type":20,"value":201},"i3deploy.sh",{"type":14,"tag":22,"props":203,"children":204},{},[205,207,212,214,220,222,228],{"type":20,"value":206},"Vendor ",{"type":14,"tag":46,"props":208,"children":210},{"className":209},[],[211],{"type":20,"value":201},{"type":20,"value":213}," into your repo (e.g. under ",{"type":14,"tag":46,"props":215,"children":217},{"className":216},[],[218],{"type":20,"value":219},"i3version\u002F",{"type":20,"value":221},") alongside a small config file at\n",{"type":14,"tag":46,"props":223,"children":225},{"className":224},[],[226],{"type":20,"value":227},"i3version\u002Fdeploy.json",{"type":20,"value":229},":",{"type":14,"tag":231,"props":232,"children":236},"pre",{"className":233,"code":234,"language":235,"meta":7,"style":7},"language-json shiki shiki-themes github-dark","{\n  \"base_url\": \"https:\u002F\u002Fbackend.i3deploy.com\",\n  \"service\": \"web\",\n  \"env\": \"production\"\n}\n","json",[237],{"type":14,"tag":46,"props":238,"children":239},{"__ignoreMap":7},[240,252,278,300,318],{"type":14,"tag":241,"props":242,"children":245},"span",{"class":243,"line":244},"line",1,[246],{"type":14,"tag":241,"props":247,"children":249},{"style":248},"--shiki-default:#E1E4E8",[250],{"type":20,"value":251},"{\n",{"type":14,"tag":241,"props":253,"children":255},{"class":243,"line":254},2,[256,262,267,273],{"type":14,"tag":241,"props":257,"children":259},{"style":258},"--shiki-default:#79B8FF",[260],{"type":20,"value":261},"  \"base_url\"",{"type":14,"tag":241,"props":263,"children":264},{"style":248},[265],{"type":20,"value":266},": ",{"type":14,"tag":241,"props":268,"children":270},{"style":269},"--shiki-default:#9ECBFF",[271],{"type":20,"value":272},"\"https:\u002F\u002Fbackend.i3deploy.com\"",{"type":14,"tag":241,"props":274,"children":275},{"style":248},[276],{"type":20,"value":277},",\n",{"type":14,"tag":241,"props":279,"children":281},{"class":243,"line":280},3,[282,287,291,296],{"type":14,"tag":241,"props":283,"children":284},{"style":258},[285],{"type":20,"value":286},"  \"service\"",{"type":14,"tag":241,"props":288,"children":289},{"style":248},[290],{"type":20,"value":266},{"type":14,"tag":241,"props":292,"children":293},{"style":269},[294],{"type":20,"value":295},"\"web\"",{"type":14,"tag":241,"props":297,"children":298},{"style":248},[299],{"type":20,"value":277},{"type":14,"tag":241,"props":301,"children":303},{"class":243,"line":302},4,[304,309,313],{"type":14,"tag":241,"props":305,"children":306},{"style":258},[307],{"type":20,"value":308},"  \"env\"",{"type":14,"tag":241,"props":310,"children":311},{"style":248},[312],{"type":20,"value":266},{"type":14,"tag":241,"props":314,"children":315},{"style":269},[316],{"type":20,"value":317},"\"production\"\n",{"type":14,"tag":241,"props":319,"children":321},{"class":243,"line":320},5,[322],{"type":14,"tag":241,"props":323,"children":324},{"style":248},[325],{"type":20,"value":326},"}\n",{"type":14,"tag":22,"props":328,"children":329},{},[330],{"type":20,"value":331},"Set your API key as an environment variable in CI:",{"type":14,"tag":231,"props":333,"children":337},{"className":334,"code":335,"language":336,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","export I3DEPLOY_API_KEY=\"\u003Cyour-i3deploy-api-key>\"\n","bash",[338],{"type":14,"tag":46,"props":339,"children":340},{"__ignoreMap":7},[341],{"type":14,"tag":241,"props":342,"children":343},{"class":243,"line":244},[344,350,355,360],{"type":14,"tag":241,"props":345,"children":347},{"style":346},"--shiki-default:#F97583",[348],{"type":20,"value":349},"export",{"type":14,"tag":241,"props":351,"children":352},{"style":248},[353],{"type":20,"value":354}," I3DEPLOY_API_KEY",{"type":14,"tag":241,"props":356,"children":357},{"style":346},[358],{"type":20,"value":359},"=",{"type":14,"tag":241,"props":361,"children":362},{"style":269},[363],{"type":20,"value":364},"\"\u003Cyour-i3deploy-api-key>\"\n",{"type":14,"tag":22,"props":366,"children":367},{},[368,370,376,378,384,386,392],{"type":20,"value":369},"Then either wrap your deploy command with ",{"type":14,"tag":46,"props":371,"children":373},{"className":372},[],[374],{"type":20,"value":375},"run",{"type":20,"value":377}," — it opens the deploy, runs your command, and\ncloses it as ",{"type":14,"tag":46,"props":379,"children":381},{"className":380},[],[382],{"type":20,"value":383},"finished",{"type":20,"value":385}," or ",{"type":14,"tag":46,"props":387,"children":389},{"className":388},[],[390],{"type":20,"value":391},"failed",{"type":20,"value":393}," based on the exit code:",{"type":14,"tag":231,"props":395,"children":397},{"className":334,"code":396,"language":336,"meta":7,"style":7},".\u002Fi3deploy.sh run --dir .\u002Fi3version -- .\u002Fdeploy-my-service.sh\n",[398],{"type":14,"tag":46,"props":399,"children":400},{"__ignoreMap":7},[401],{"type":14,"tag":241,"props":402,"children":403},{"class":243,"line":244},[404,410,415,420,425,430],{"type":14,"tag":241,"props":405,"children":407},{"style":406},"--shiki-default:#B392F0",[408],{"type":20,"value":409},".\u002Fi3deploy.sh",{"type":14,"tag":241,"props":411,"children":412},{"style":269},[413],{"type":20,"value":414}," run",{"type":14,"tag":241,"props":416,"children":417},{"style":258},[418],{"type":20,"value":419}," --dir",{"type":14,"tag":241,"props":421,"children":422},{"style":269},[423],{"type":20,"value":424}," .\u002Fi3version",{"type":14,"tag":241,"props":426,"children":427},{"style":258},[428],{"type":20,"value":429}," --",{"type":14,"tag":241,"props":431,"children":432},{"style":269},[433],{"type":20,"value":434}," .\u002Fdeploy-my-service.sh\n",{"type":14,"tag":22,"props":436,"children":437},{},[438,440,446,448,454],{"type":20,"value":439},"or call ",{"type":14,"tag":46,"props":441,"children":443},{"className":442},[],[444],{"type":20,"value":445},"start",{"type":20,"value":447}," and ",{"type":14,"tag":46,"props":449,"children":451},{"className":450},[],[452],{"type":20,"value":453},"finish",{"type":20,"value":455}," yourself if you need more control (e.g. to bracket a multi-step\ndeploy pipeline):",{"type":14,"tag":231,"props":457,"children":459},{"className":334,"code":458,"language":336,"meta":7,"style":7},".\u002Fi3deploy.sh start --dir .\u002Fi3version --env production\n# ... your deploy steps ...\n.\u002Fi3deploy.sh finish --dir .\u002Fi3version --status finished\n# on failure: .\u002Fi3deploy.sh finish --dir .\u002Fi3version --status failed --error \"build step 3 failed\"\n",[460],{"type":14,"tag":46,"props":461,"children":462},{"__ignoreMap":7},[463,493,502,532],{"type":14,"tag":241,"props":464,"children":465},{"class":243,"line":244},[466,470,475,479,483,488],{"type":14,"tag":241,"props":467,"children":468},{"style":406},[469],{"type":20,"value":409},{"type":14,"tag":241,"props":471,"children":472},{"style":269},[473],{"type":20,"value":474}," start",{"type":14,"tag":241,"props":476,"children":477},{"style":258},[478],{"type":20,"value":419},{"type":14,"tag":241,"props":480,"children":481},{"style":269},[482],{"type":20,"value":424},{"type":14,"tag":241,"props":484,"children":485},{"style":258},[486],{"type":20,"value":487}," --env",{"type":14,"tag":241,"props":489,"children":490},{"style":269},[491],{"type":20,"value":492}," production\n",{"type":14,"tag":241,"props":494,"children":495},{"class":243,"line":254},[496],{"type":14,"tag":241,"props":497,"children":499},{"style":498},"--shiki-default:#6A737D",[500],{"type":20,"value":501},"# ... your deploy steps ...\n",{"type":14,"tag":241,"props":503,"children":504},{"class":243,"line":280},[505,509,514,518,522,527],{"type":14,"tag":241,"props":506,"children":507},{"style":406},[508],{"type":20,"value":409},{"type":14,"tag":241,"props":510,"children":511},{"style":269},[512],{"type":20,"value":513}," finish",{"type":14,"tag":241,"props":515,"children":516},{"style":258},[517],{"type":20,"value":419},{"type":14,"tag":241,"props":519,"children":520},{"style":269},[521],{"type":20,"value":424},{"type":14,"tag":241,"props":523,"children":524},{"style":258},[525],{"type":20,"value":526}," --status",{"type":14,"tag":241,"props":528,"children":529},{"style":269},[530],{"type":20,"value":531}," finished\n",{"type":14,"tag":241,"props":533,"children":534},{"class":243,"line":302},[535],{"type":14,"tag":241,"props":536,"children":537},{"style":498},[538],{"type":20,"value":539},"# on failure: .\u002Fi3deploy.sh finish --dir .\u002Fi3version --status failed --error \"build step 3 failed\"\n",{"type":14,"tag":22,"props":541,"children":542},{},[543,549,550,556,558,564,566,572],{"type":14,"tag":46,"props":544,"children":546},{"className":545},[],[547],{"type":20,"value":548},"version",{"type":20,"value":447},{"type":14,"tag":46,"props":551,"children":553},{"className":552},[],[554],{"type":20,"value":555},"commit_sha",{"type":20,"value":557}," are read from git automatically (",{"type":14,"tag":46,"props":559,"children":561},{"className":560},[],[562],{"type":20,"value":563},"git describe --tags --always",{"type":20,"value":565}," and\n",{"type":14,"tag":46,"props":567,"children":569},{"className":568},[],[570],{"type":20,"value":571},"git rev-parse HEAD",{"type":20,"value":573},"), so there's nothing else to configure for a typical CI job.",{"type":14,"tag":190,"props":575,"children":577},{"id":576},"option-b-raw-curl",[578,580],{"type":20,"value":579},"Option B: raw ",{"type":14,"tag":46,"props":581,"children":583},{"className":582},[],[584],{"type":20,"value":186},{"type":14,"tag":22,"props":586,"children":587},{},[588],{"type":20,"value":589},"If you don't want to vendor a script, call the API directly:",{"type":14,"tag":231,"props":591,"children":593},{"className":334,"code":592,"language":336,"meta":7,"style":7},"curl -X POST https:\u002F\u002Fbackend.i3deploy.com\u002Fv1\u002Fdeploys \\\n  -H \"Authorization: Bearer $I3DEPLOY_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"service\":\"web\",\"env\":\"production\",\"version\":\"1.4.2\",\"commit_sha\":\"abc123\"}'\n",[594],{"type":14,"tag":46,"props":595,"children":596},{"__ignoreMap":7},[597,624,651,667],{"type":14,"tag":241,"props":598,"children":599},{"class":243,"line":244},[600,604,609,614,619],{"type":14,"tag":241,"props":601,"children":602},{"style":406},[603],{"type":20,"value":186},{"type":14,"tag":241,"props":605,"children":606},{"style":258},[607],{"type":20,"value":608}," -X",{"type":14,"tag":241,"props":610,"children":611},{"style":269},[612],{"type":20,"value":613}," POST",{"type":14,"tag":241,"props":615,"children":616},{"style":269},[617],{"type":20,"value":618}," https:\u002F\u002Fbackend.i3deploy.com\u002Fv1\u002Fdeploys",{"type":14,"tag":241,"props":620,"children":621},{"style":258},[622],{"type":20,"value":623}," \\\n",{"type":14,"tag":241,"props":625,"children":626},{"class":243,"line":254},[627,632,637,642,647],{"type":14,"tag":241,"props":628,"children":629},{"style":258},[630],{"type":20,"value":631},"  -H",{"type":14,"tag":241,"props":633,"children":634},{"style":269},[635],{"type":20,"value":636}," \"Authorization: Bearer ",{"type":14,"tag":241,"props":638,"children":639},{"style":248},[640],{"type":20,"value":641},"$I3DEPLOY_API_KEY",{"type":14,"tag":241,"props":643,"children":644},{"style":269},[645],{"type":20,"value":646},"\"",{"type":14,"tag":241,"props":648,"children":649},{"style":258},[650],{"type":20,"value":623},{"type":14,"tag":241,"props":652,"children":653},{"class":243,"line":280},[654,658,663],{"type":14,"tag":241,"props":655,"children":656},{"style":258},[657],{"type":20,"value":631},{"type":14,"tag":241,"props":659,"children":660},{"style":269},[661],{"type":20,"value":662}," \"Content-Type: application\u002Fjson\"",{"type":14,"tag":241,"props":664,"children":665},{"style":258},[666],{"type":20,"value":623},{"type":14,"tag":241,"props":668,"children":669},{"class":243,"line":302},[670,675],{"type":14,"tag":241,"props":671,"children":672},{"style":258},[673],{"type":20,"value":674},"  -d",{"type":14,"tag":241,"props":676,"children":677},{"style":269},[678],{"type":20,"value":679}," '{\"service\":\"web\",\"env\":\"production\",\"version\":\"1.4.2\",\"commit_sha\":\"abc123\"}'\n",{"type":14,"tag":22,"props":681,"children":682},{},[683,685,690],{"type":20,"value":684},"Either way, i3deploy is designed to be tolerant of a broken integration: a failed or missing\ndeploy call ",{"type":14,"tag":55,"props":686,"children":687},{},[688],{"type":20,"value":689},"never fails your build",{"type":20,"value":691}," — at worst you lose a data point, not a deploy.",{"type":14,"tag":27,"props":693,"children":695},{"id":694},"next",[696],{"type":20,"value":697},"Next",{"type":14,"tag":100,"props":699,"children":700},{},[701,712],{"type":14,"tag":104,"props":702,"children":703},{},[704,710],{"type":14,"tag":39,"props":705,"children":707},{"href":706},"\u002Fdocs\u002Fmcp-connector",[708],{"type":20,"value":709},"MCP connector",{"type":20,"value":711}," — ask Claude what's running in production, or have it cut\na release for you.",{"type":14,"tag":104,"props":713,"children":714},{},[715,721],{"type":14,"tag":39,"props":716,"children":718},{"href":717},"\u002Fdocs\u002Freleases",[719],{"type":20,"value":720},"Cutting releases",{"type":20,"value":722}," — record what changed, not just that something deployed.",{"type":14,"tag":724,"props":725,"children":726},"style",{},[727],{"type":20,"value":728},"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);}",{"title":7,"searchDepth":254,"depth":254,"links":730},[731,732,733,734,740],{"id":29,"depth":254,"text":32},{"id":64,"depth":254,"text":67},{"id":130,"depth":254,"text":133},{"id":172,"depth":254,"text":175,"children":735},[736,738],{"id":192,"depth":280,"text":737},"Option A: i3deploy.sh",{"id":576,"depth":280,"text":739},"Option B: raw curl",{"id":694,"depth":254,"text":697},"markdown","content:docs:quickstart.md","content","docs\u002Fquickstart.md","docs\u002Fquickstart","md",1784716250634]