[{"data":1,"prerenderedAt":2453},["ShallowReactive",2],{"node-red-\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql":3},{"id":4,"title":5,"body":6,"description":2446,"extension":2447,"meta":2448,"navigation":2198,"path":2449,"seo":2450,"stem":2451,"__hash__":2452},"nodeRed\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql.md","Integrating GraphQL APIs in Node-RED",{"type":7,"value":8,"toc":2417},"minimark",[9,17,21,26,29,35,60,64,67,72,118,132,136,139,144,195,198,203,297,300,304,307,312,395,400,403,606,609,613,616,620,623,663,668,698,703,707,710,715,770,775,805,808,811,925,929,936,941,945,997,1001,1008,1076,1079,1082,1183,1186,1282,1286,1293,1298,1302,1361,1378,1383,1596,1600,1665,1674,1678,1784,1788,1840,1843,1950,1954,1995,2000,2003,2079,2083,2087,2090,2148,2152,2155,2256,2269,2273,2276,2392,2401,2405,2408,2413],[10,11,13],"h1",{"id":12},"",[14,15],"binding",{"value":16},"meta.title",[18,19,20],"p",{},"GraphQL is transforming the way APIs are designed. Unlike traditional REST APIs, which often require multiple requests to different endpoints, GraphQL provides a single, flexible endpoint that allows you to fetch exactly the data you need—nothing more, nothing less. In this article, you will learn how to integrate GraphQL with Node-RED and build APIs that efficiently serve your application's data requirements.",[22,23,25],"h2",{"id":24},"getting-started","Getting Started",[18,27,28],{},"First, you'll need to install the GraphQL package for Node-RED. This adds the essential nodes for working with GraphQL endpoints.",[18,30,31],{},[32,33,34],"strong",{},"Installation Steps:",[36,37,38,45,52],"ol",{},[39,40,41,42],"li",{},"Open Node-RED and navigate to ",[32,43,44],{},"Menu → Manage palette",[39,46,47,48,51],{},"Go to the ",[32,49,50],{},"Install"," tab",[39,53,54,55,59],{},"Search for ",[56,57,58],"code",{},"node-red-contrib-graphql"," and install it",[22,61,63],{"id":62},"setting-up-your-graphql-connection","Setting Up Your GraphQL Connection",[18,65,66],{},"Once installed, you'll configure your first GraphQL endpoint. This is where you define how Node-RED connects to your GraphQL server.",[18,68,69],{},[32,70,71],{},"Configuration Process:",[36,73,74,81,84,91],{},[39,75,76,77,80],{},"Drag a ",[56,78,79],{},"graphql"," node onto your canvas",[39,82,83],{},"Double-click to open the configuration panel",[39,85,86,87,90],{},"Click the pencil icon next to ",[32,88,89],{},"Endpoint"," to create a new configuration",[39,92,93,94],{},"Fill in these essential settings:\n",[95,96,97,103,112],"ul",{},[39,98,99,102],{},[32,100,101],{},"Name",": Use a descriptive name like \"User Management API\" or \"Countries Database\"",[39,104,105,107,108,111],{},[32,106,89],{},": Your GraphQL server URL (e.g., ",[56,109,110],{},"https:\u002F\u002Fapi.example.com\u002Fgraphql",")",[39,113,114,117],{},[32,115,116],{},"Token",": Add authentication if required (Bearer tokens are the most common)",[18,119,120],{},[121,122,123,124,131],"em",{},"Important: For sensitive credentials such as tokens, use environment variables to prevent them from being exposed when sharing flows. Learn more about using environment variables in Node-RED ",[125,126,130],"a",{"href":127,"rel":128},"https:\u002F\u002Fflowfuse.com\u002Fblog\u002F2023\u002F01\u002Fenvironment-variables-in-node-red\u002F",[129],"nofollow","here",".",[22,133,135],{"id":134},"understanding-graphql-query-structure","Understanding GraphQL Query Structure",[18,137,138],{},"GraphQL queries are intuitive once you understand the basic pattern. You're essentially describing the shape of the data you want to receive.",[18,140,141],{},[32,142,143],{},"Basic Query Example:",[145,146,149],"pre",{"className":147,"code":148,"language":79,"meta":12,"style":12},"language-graphql shiki shiki-themes github-light github-dark","query {\n  countries {\n    code\n    name\n    capital\n  }\n}\n",[56,150,151,159,165,171,177,183,189],{"__ignoreMap":12},[152,153,156],"span",{"class":154,"line":155},"line",1,[152,157,158],{},"query {\n",[152,160,162],{"class":154,"line":161},2,[152,163,164],{},"  countries {\n",[152,166,168],{"class":154,"line":167},3,[152,169,170],{},"    code\n",[152,172,174],{"class":154,"line":173},4,[152,175,176],{},"    name\n",[152,178,180],{"class":154,"line":179},5,[152,181,182],{},"    capital\n",[152,184,186],{"class":154,"line":185},6,[152,187,188],{},"  }\n",[152,190,192],{"class":154,"line":191},7,[152,193,194],{},"}\n",[18,196,197],{},"This query says: \"Get me a list of countries, but only return the code, name, and capital for each one.\" The server won't send population, area, or any other fields—just what you requested.",[18,199,200],{},[32,201,202],{},"Response Structure:",[145,204,208],{"className":205,"code":206,"language":207,"meta":12,"style":12},"language-json shiki shiki-themes github-light github-dark","{\n  \"data\": {\n    \"countries\": [\n      {\n        \"code\": \"US\",\n        \"name\": \"United States\",\n        \"capital\": \"Washington D.C.\"\n      }\n    ]\n  }\n}\n","json",[56,209,210,216,225,233,238,253,265,275,281,287,292],{"__ignoreMap":12},[152,211,212],{"class":154,"line":155},[152,213,215],{"class":214},"sVt8B","{\n",[152,217,218,222],{"class":154,"line":161},[152,219,221],{"class":220},"sj4cs","  \"data\"",[152,223,224],{"class":214},": {\n",[152,226,227,230],{"class":154,"line":167},[152,228,229],{"class":220},"    \"countries\"",[152,231,232],{"class":214},": [\n",[152,234,235],{"class":154,"line":173},[152,236,237],{"class":214},"      {\n",[152,239,240,243,246,250],{"class":154,"line":179},[152,241,242],{"class":220},"        \"code\"",[152,244,245],{"class":214},": ",[152,247,249],{"class":248},"sZZnC","\"US\"",[152,251,252],{"class":214},",\n",[152,254,255,258,260,263],{"class":154,"line":185},[152,256,257],{"class":220},"        \"name\"",[152,259,245],{"class":214},[152,261,262],{"class":248},"\"United States\"",[152,264,252],{"class":214},[152,266,267,270,272],{"class":154,"line":191},[152,268,269],{"class":220},"        \"capital\"",[152,271,245],{"class":214},[152,273,274],{"class":248},"\"Washington D.C.\"\n",[152,276,278],{"class":154,"line":277},8,[152,279,280],{"class":214},"      }\n",[152,282,284],{"class":154,"line":283},9,[152,285,286],{"class":214},"    ]\n",[152,288,290],{"class":154,"line":289},10,[152,291,188],{"class":214},[152,293,295],{"class":154,"line":294},11,[152,296,194],{"class":214},[18,298,299],{},"Notice how the response mirrors your query structure—this consistency makes GraphQL predictable and easy to work with.",[22,301,303],{"id":302},"building-your-first-query-flow","Building Your First Query Flow",[18,305,306],{},"Let's create a practical example using a public GraphQL API to fetch country information, which is perfect for learning the basics without needing authentication.",[18,308,309],{},[32,310,311],{},"Step-by-Step Flow Creation:",[36,313,314,321,330,372,381,386],{},[39,315,316,317,320],{},"Drag an ",[32,318,319],{},"Inject"," node onto the canvas to trigger the query.",[39,322,76,323,326,327,131],{},[32,324,325],{},"GraphQL"," node onto the canvas and configure it with the endpoint ",[56,328,329],{},"https:\u002F\u002Fcountries.trevorblades.com",[39,331,332,333],{},"Use the following query in the GraphQL node:",[145,334,336],{"className":147,"code":335,"language":79,"meta":12,"style":12},"query GetCountries {\n  countries {\n    code\n    name\n    capital\n    currency\n  }\n}\n",[56,337,338,343,347,351,355,359,364,368],{"__ignoreMap":12},[152,339,340],{"class":154,"line":155},[152,341,342],{},"query GetCountries {\n",[152,344,345],{"class":154,"line":161},[152,346,164],{},[152,348,349],{"class":154,"line":167},[152,350,170],{},[152,352,353],{"class":154,"line":173},[152,354,176],{},[152,356,357],{"class":154,"line":179},[152,358,182],{},[152,360,361],{"class":154,"line":185},[152,362,363],{},"    currency\n",[152,365,366],{"class":154,"line":191},[152,367,188],{},[152,369,370],{"class":154,"line":277},[152,371,194],{},[39,373,76,374,377,378,131],{},[32,375,376],{},"Debug"," node onto the canvas and set it to display ",[56,379,380],{},"msg.payload",[39,382,383],{},[32,384,385],{},"Connect the Inject node to the GraphQL node, and then connect the GraphQL node to the Debug node.",[39,387,388,389,391,392,394],{},"Deploy the flow and click the ",[32,390,319],{}," button. Check the ",[32,393,376],{}," panel for the output.",[396,397,399],"h3",{"id":398},"what-to-expect-in-debug-output","What to Expect in Debug Output",[18,401,402],{},"The debug panel will display an array of country objects. Here's a trimmed example of what you should see:",[145,404,406],{"className":205,"code":405,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"countries\": [\n      {\n        \"code\": \"AD\",\n        \"name\": \"Andorra\",\n        \"capital\": \"Andorra la Vella\",\n        \"currency\": \"EUR\"\n      },\n      {\n        \"code\": \"AE\",\n        \"name\": \"United Arab Emirates\",\n        \"capital\": \"Abu Dhabi\",\n        \"currency\": \"AED\"\n      },\n      {\n        \"code\": \"US\",\n        \"name\": \"United States\",\n        \"capital\": \"Washington D.C.\",\n        \"currency\": \"USD,USN,USS\"\n      }\n      \u002F\u002F ... more countries\n    ]\n  }\n}\n",[56,407,408,412,418,424,428,439,450,461,471,476,480,491,503,515,525,530,535,546,557,569,579,584,591,596,601],{"__ignoreMap":12},[152,409,410],{"class":154,"line":155},[152,411,215],{"class":214},[152,413,414,416],{"class":154,"line":161},[152,415,221],{"class":220},[152,417,224],{"class":214},[152,419,420,422],{"class":154,"line":167},[152,421,229],{"class":220},[152,423,232],{"class":214},[152,425,426],{"class":154,"line":173},[152,427,237],{"class":214},[152,429,430,432,434,437],{"class":154,"line":179},[152,431,242],{"class":220},[152,433,245],{"class":214},[152,435,436],{"class":248},"\"AD\"",[152,438,252],{"class":214},[152,440,441,443,445,448],{"class":154,"line":185},[152,442,257],{"class":220},[152,444,245],{"class":214},[152,446,447],{"class":248},"\"Andorra\"",[152,449,252],{"class":214},[152,451,452,454,456,459],{"class":154,"line":191},[152,453,269],{"class":220},[152,455,245],{"class":214},[152,457,458],{"class":248},"\"Andorra la Vella\"",[152,460,252],{"class":214},[152,462,463,466,468],{"class":154,"line":277},[152,464,465],{"class":220},"        \"currency\"",[152,467,245],{"class":214},[152,469,470],{"class":248},"\"EUR\"\n",[152,472,473],{"class":154,"line":283},[152,474,475],{"class":214},"      },\n",[152,477,478],{"class":154,"line":289},[152,479,237],{"class":214},[152,481,482,484,486,489],{"class":154,"line":294},[152,483,242],{"class":220},[152,485,245],{"class":214},[152,487,488],{"class":248},"\"AE\"",[152,490,252],{"class":214},[152,492,494,496,498,501],{"class":154,"line":493},12,[152,495,257],{"class":220},[152,497,245],{"class":214},[152,499,500],{"class":248},"\"United Arab Emirates\"",[152,502,252],{"class":214},[152,504,506,508,510,513],{"class":154,"line":505},13,[152,507,269],{"class":220},[152,509,245],{"class":214},[152,511,512],{"class":248},"\"Abu Dhabi\"",[152,514,252],{"class":214},[152,516,518,520,522],{"class":154,"line":517},14,[152,519,465],{"class":220},[152,521,245],{"class":214},[152,523,524],{"class":248},"\"AED\"\n",[152,526,528],{"class":154,"line":527},15,[152,529,475],{"class":214},[152,531,533],{"class":154,"line":532},16,[152,534,237],{"class":214},[152,536,538,540,542,544],{"class":154,"line":537},17,[152,539,242],{"class":220},[152,541,245],{"class":214},[152,543,249],{"class":248},[152,545,252],{"class":214},[152,547,549,551,553,555],{"class":154,"line":548},18,[152,550,257],{"class":220},[152,552,245],{"class":214},[152,554,262],{"class":248},[152,556,252],{"class":214},[152,558,560,562,564,567],{"class":154,"line":559},19,[152,561,269],{"class":220},[152,563,245],{"class":214},[152,565,566],{"class":248},"\"Washington D.C.\"",[152,568,252],{"class":214},[152,570,572,574,576],{"class":154,"line":571},20,[152,573,465],{"class":220},[152,575,245],{"class":214},[152,577,578],{"class":248},"\"USD,USN,USS\"\n",[152,580,582],{"class":154,"line":581},21,[152,583,280],{"class":214},[152,585,587],{"class":154,"line":586},22,[152,588,590],{"class":589},"sJ8bj","      \u002F\u002F ... more countries\n",[152,592,594],{"class":154,"line":593},23,[152,595,286],{"class":214},[152,597,599],{"class":154,"line":598},24,[152,600,188],{"class":214},[152,602,604],{"class":154,"line":603},25,[152,605,194],{"class":214},[18,607,608],{},"Each country object contains exactly the fields you requested. This demonstrates GraphQL's precision in data fetching.",[22,610,612],{"id":611},"working-with-dynamic-data","Working with Dynamic Data",[18,614,615],{},"Before writing dynamic queries, note that the GraphQL node has a Syntax setting. You can select GraphQL (default) for standard queries and mutations, or Plain to send raw GraphQL payloads. This is useful for advanced or dynamic queries.",[396,617,619],{"id":618},"method-1-mustache-templates-simple-approach","Method 1: Mustache Templates (Simple Approach)",[18,621,622],{},"For straightforward use cases, you can inject data directly into your queries using Mustache syntax:",[145,624,626],{"className":147,"code":625,"language":79,"meta":12,"style":12},"query GetSpecificCountry($countryCode: ID!) {\n  country(code: $countryCode) {\n    name\n    capital\n    currency\n    emoji\n  }\n}\n",[56,627,628,633,638,642,646,650,655,659],{"__ignoreMap":12},[152,629,630],{"class":154,"line":155},[152,631,632],{},"query GetSpecificCountry($countryCode: ID!) {\n",[152,634,635],{"class":154,"line":161},[152,636,637],{},"  country(code: $countryCode) {\n",[152,639,640],{"class":154,"line":167},[152,641,176],{},[152,643,644],{"class":154,"line":173},[152,645,182],{},[152,647,648],{"class":154,"line":179},[152,649,363],{},[152,651,652],{"class":154,"line":185},[152,653,654],{},"    emoji\n",[152,656,657],{"class":154,"line":191},[152,658,188],{},[152,660,661],{"class":154,"line":277},[152,662,194],{},[18,664,665],{},[32,666,667],{},"Set up your input message in function node:",[145,669,673],{"className":670,"code":671,"language":672,"meta":12,"style":12},"language-javascript shiki shiki-themes github-light github-dark","msg.countryCode = \"FR\";\nreturn msg; \n","javascript",[56,674,675,690],{"__ignoreMap":12},[152,676,677,680,684,687],{"class":154,"line":155},[152,678,679],{"class":214},"msg.countryCode ",[152,681,683],{"class":682},"szBVR","=",[152,685,686],{"class":248}," \"FR\"",[152,688,689],{"class":214},";\n",[152,691,692,695],{"class":154,"line":161},[152,693,694],{"class":682},"return",[152,696,697],{"class":214}," msg;\n",[18,699,700],{},[121,701,702],{},"When to use: Simple queries with one or two variables that don't need type checking.",[396,704,706],{"id":705},"method-2-graphql-variables","Method 2: GraphQL Variables",[18,708,709],{},"For production applications, GraphQL variables provide better security and maintainability:",[18,711,712],{},[32,713,714],{},"Query with Variables:",[145,716,718],{"className":147,"code":717,"language":79,"meta":12,"style":12},"query GetCountry($code: ID!) {\n  country(code: $code) {\n    name\n    capital\n    currency\n    languages {\n      name\n      native\n    }\n  }\n}\n",[56,719,720,725,730,734,738,742,747,752,757,762,766],{"__ignoreMap":12},[152,721,722],{"class":154,"line":155},[152,723,724],{},"query GetCountry($code: ID!) {\n",[152,726,727],{"class":154,"line":161},[152,728,729],{},"  country(code: $code) {\n",[152,731,732],{"class":154,"line":167},[152,733,176],{},[152,735,736],{"class":154,"line":173},[152,737,182],{},[152,739,740],{"class":154,"line":179},[152,741,363],{},[152,743,744],{"class":154,"line":185},[152,745,746],{},"    languages {\n",[152,748,749],{"class":154,"line":191},[152,750,751],{},"      name\n",[152,753,754],{"class":154,"line":277},[152,755,756],{},"      native\n",[152,758,759],{"class":154,"line":283},[152,760,761],{},"    }\n",[152,763,764],{"class":154,"line":289},[152,765,188],{},[152,767,768],{"class":154,"line":294},[152,769,194],{},[18,771,772],{},[32,773,774],{},"Variables Setup:",[145,776,778],{"className":670,"code":777,"language":672,"meta":12,"style":12},"msg.variables = {\n  \"code\": \"JP\"\n};\n",[56,779,780,790,800],{"__ignoreMap":12},[152,781,782,785,787],{"class":154,"line":155},[152,783,784],{"class":214},"msg.variables ",[152,786,683],{"class":682},[152,788,789],{"class":214}," {\n",[152,791,792,795,797],{"class":154,"line":161},[152,793,794],{"class":248},"  \"code\"",[152,796,245],{"class":214},[152,798,799],{"class":248},"\"JP\"\n",[152,801,802],{"class":154,"line":167},[152,803,804],{"class":214},"};\n",[396,806,399],{"id":807},"what-to-expect-in-debug-output-1",[18,809,810],{},"When querying a single country with variables, you'll see:",[145,812,814],{"className":205,"code":813,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"country\": {\n      \"name\": \"Japan\",\n      \"capital\": \"Tokyo\",\n      \"currency\": \"JPY\",\n      \"languages\": [\n        {\n          \"name\": \"Japanese\",\n          \"native\": \"日本語\"\n        }\n      ]\n    }\n  }\n}\n",[56,815,816,820,826,833,845,857,869,876,881,893,903,908,913,917,921],{"__ignoreMap":12},[152,817,818],{"class":154,"line":155},[152,819,215],{"class":214},[152,821,822,824],{"class":154,"line":161},[152,823,221],{"class":220},[152,825,224],{"class":214},[152,827,828,831],{"class":154,"line":167},[152,829,830],{"class":220},"    \"country\"",[152,832,224],{"class":214},[152,834,835,838,840,843],{"class":154,"line":173},[152,836,837],{"class":220},"      \"name\"",[152,839,245],{"class":214},[152,841,842],{"class":248},"\"Japan\"",[152,844,252],{"class":214},[152,846,847,850,852,855],{"class":154,"line":179},[152,848,849],{"class":220},"      \"capital\"",[152,851,245],{"class":214},[152,853,854],{"class":248},"\"Tokyo\"",[152,856,252],{"class":214},[152,858,859,862,864,867],{"class":154,"line":185},[152,860,861],{"class":220},"      \"currency\"",[152,863,245],{"class":214},[152,865,866],{"class":248},"\"JPY\"",[152,868,252],{"class":214},[152,870,871,874],{"class":154,"line":191},[152,872,873],{"class":220},"      \"languages\"",[152,875,232],{"class":214},[152,877,878],{"class":154,"line":277},[152,879,880],{"class":214},"        {\n",[152,882,883,886,888,891],{"class":154,"line":283},[152,884,885],{"class":220},"          \"name\"",[152,887,245],{"class":214},[152,889,890],{"class":248},"\"Japanese\"",[152,892,252],{"class":214},[152,894,895,898,900],{"class":154,"line":289},[152,896,897],{"class":220},"          \"native\"",[152,899,245],{"class":214},[152,901,902],{"class":248},"\"日本語\"\n",[152,904,905],{"class":154,"line":294},[152,906,907],{"class":214},"        }\n",[152,909,910],{"class":154,"line":493},[152,911,912],{"class":214},"      ]\n",[152,914,915],{"class":154,"line":505},[152,916,761],{"class":214},[152,918,919],{"class":154,"line":517},[152,920,188],{"class":214},[152,922,923],{"class":154,"line":527},[152,924,194],{"class":214},[22,926,928],{"id":927},"modifying-data-with-mutations","Modifying Data with Mutations",[18,930,931,932,935],{},"While queries retrieve data, mutations allow you to ",[32,933,934],{},"create, update, or delete data","—similar to POST, PUT, and DELETE operations in REST APIs.",[18,937,938],{},[121,939,940],{},"Note: The Countries demo API is read-only and does not include mutations. The examples below use a fictional device schema to illustrate how mutations work in Node-RED.",[396,942,944],{"id":943},"basic-mutation-structure","Basic Mutation Structure",[145,946,948],{"className":147,"code":947,"language":79,"meta":12,"style":12},"mutation CreateNewDevice($input: DeviceInput!) {\n  createDevice(input: $input) {\n    id\n    name\n    model\n    location\n    createdAt\n    success\n  }\n}\n",[56,949,950,955,960,965,969,974,979,984,989,993],{"__ignoreMap":12},[152,951,952],{"class":154,"line":155},[152,953,954],{},"mutation CreateNewDevice($input: DeviceInput!) {\n",[152,956,957],{"class":154,"line":161},[152,958,959],{},"  createDevice(input: $input) {\n",[152,961,962],{"class":154,"line":167},[152,963,964],{},"    id\n",[152,966,967],{"class":154,"line":173},[152,968,176],{},[152,970,971],{"class":154,"line":179},[152,972,973],{},"    model\n",[152,975,976],{"class":154,"line":185},[152,977,978],{},"    location\n",[152,980,981],{"class":154,"line":191},[152,982,983],{},"    createdAt\n",[152,985,986],{"class":154,"line":277},[152,987,988],{},"    success\n",[152,990,991],{"class":154,"line":283},[152,992,188],{},[152,994,995],{"class":154,"line":289},[152,996,194],{},[396,998,1000],{"id":999},"setting-up-variables-in-node-red","Setting Up Variables in Node-RED",[18,1002,1003,1004,1007],{},"Use ",[56,1005,1006],{},"msg.variables"," to pass dynamic input to your mutation:",[145,1009,1011],{"className":670,"code":1010,"language":672,"meta":12,"style":12},"msg.variables = {\n  \"input\": {\n    \"name\": \"Raspberry Pi 4A\",\n    \"model\": \"Raspberry Pi 4\",\n    \"location\": \"Factory Floor 1\"\n  }\n};\nreturn msg;\n",[56,1012,1013,1021,1028,1040,1052,1062,1066,1070],{"__ignoreMap":12},[152,1014,1015,1017,1019],{"class":154,"line":155},[152,1016,784],{"class":214},[152,1018,683],{"class":682},[152,1020,789],{"class":214},[152,1022,1023,1026],{"class":154,"line":161},[152,1024,1025],{"class":248},"  \"input\"",[152,1027,224],{"class":214},[152,1029,1030,1033,1035,1038],{"class":154,"line":167},[152,1031,1032],{"class":248},"    \"name\"",[152,1034,245],{"class":214},[152,1036,1037],{"class":248},"\"Raspberry Pi 4A\"",[152,1039,252],{"class":214},[152,1041,1042,1045,1047,1050],{"class":154,"line":173},[152,1043,1044],{"class":248},"    \"model\"",[152,1046,245],{"class":214},[152,1048,1049],{"class":248},"\"Raspberry Pi 4\"",[152,1051,252],{"class":214},[152,1053,1054,1057,1059],{"class":154,"line":179},[152,1055,1056],{"class":248},"    \"location\"",[152,1058,245],{"class":214},[152,1060,1061],{"class":248},"\"Factory Floor 1\"\n",[152,1063,1064],{"class":154,"line":185},[152,1065,188],{"class":214},[152,1067,1068],{"class":154,"line":191},[152,1069,804],{"class":214},[152,1071,1072,1074],{"class":154,"line":277},[152,1073,694],{"class":682},[152,1075,697],{"class":214},[396,1077,399],{"id":1078},"what-to-expect-in-debug-output-2",[18,1080,1081],{},"When a device is successfully created, you'll see:",[145,1083,1085],{"className":205,"code":1084,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"createDevice\": {\n      \"id\": \"7\",\n      \"name\": \"Raspberry Pi 4A\",\n      \"model\": \"Raspberry Pi 4\",\n      \"location\": \"Factory Floor 1\",\n      \"createdAt\": \"2024-03-21T12:30:45.123Z\",\n      \"success\": true\n    }\n  }\n}\n",[56,1086,1087,1091,1097,1104,1116,1126,1137,1149,1161,1171,1175,1179],{"__ignoreMap":12},[152,1088,1089],{"class":154,"line":155},[152,1090,215],{"class":214},[152,1092,1093,1095],{"class":154,"line":161},[152,1094,221],{"class":220},[152,1096,224],{"class":214},[152,1098,1099,1102],{"class":154,"line":167},[152,1100,1101],{"class":220},"    \"createDevice\"",[152,1103,224],{"class":214},[152,1105,1106,1109,1111,1114],{"class":154,"line":173},[152,1107,1108],{"class":220},"      \"id\"",[152,1110,245],{"class":214},[152,1112,1113],{"class":248},"\"7\"",[152,1115,252],{"class":214},[152,1117,1118,1120,1122,1124],{"class":154,"line":179},[152,1119,837],{"class":220},[152,1121,245],{"class":214},[152,1123,1037],{"class":248},[152,1125,252],{"class":214},[152,1127,1128,1131,1133,1135],{"class":154,"line":185},[152,1129,1130],{"class":220},"      \"model\"",[152,1132,245],{"class":214},[152,1134,1049],{"class":248},[152,1136,252],{"class":214},[152,1138,1139,1142,1144,1147],{"class":154,"line":191},[152,1140,1141],{"class":220},"      \"location\"",[152,1143,245],{"class":214},[152,1145,1146],{"class":248},"\"Factory Floor 1\"",[152,1148,252],{"class":214},[152,1150,1151,1154,1156,1159],{"class":154,"line":277},[152,1152,1153],{"class":220},"      \"createdAt\"",[152,1155,245],{"class":214},[152,1157,1158],{"class":248},"\"2024-03-21T12:30:45.123Z\"",[152,1160,252],{"class":214},[152,1162,1163,1166,1168],{"class":154,"line":283},[152,1164,1165],{"class":220},"      \"success\"",[152,1167,245],{"class":214},[152,1169,1170],{"class":220},"true\n",[152,1172,1173],{"class":154,"line":289},[152,1174,761],{"class":214},[152,1176,1177],{"class":154,"line":294},[152,1178,188],{"class":214},[152,1180,1181],{"class":154,"line":493},[152,1182,194],{"class":214},[18,1184,1185],{},"If validation fails, the error structure helps you identify the issue:",[145,1187,1189],{"className":205,"code":1188,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"createDevice\": {\n      \"id\": null,\n      \"success\": false,\n      \"errors\": [\n        {\n          \"field\": \"name\",\n          \"message\": \"Name is required\"\n        }\n      ]\n    }\n  }\n}\n",[56,1190,1191,1195,1201,1207,1218,1229,1236,1240,1252,1262,1266,1270,1274,1278],{"__ignoreMap":12},[152,1192,1193],{"class":154,"line":155},[152,1194,215],{"class":214},[152,1196,1197,1199],{"class":154,"line":161},[152,1198,221],{"class":220},[152,1200,224],{"class":214},[152,1202,1203,1205],{"class":154,"line":167},[152,1204,1101],{"class":220},[152,1206,224],{"class":214},[152,1208,1209,1211,1213,1216],{"class":154,"line":173},[152,1210,1108],{"class":220},[152,1212,245],{"class":214},[152,1214,1215],{"class":220},"null",[152,1217,252],{"class":214},[152,1219,1220,1222,1224,1227],{"class":154,"line":179},[152,1221,1165],{"class":220},[152,1223,245],{"class":214},[152,1225,1226],{"class":220},"false",[152,1228,252],{"class":214},[152,1230,1231,1234],{"class":154,"line":185},[152,1232,1233],{"class":220},"      \"errors\"",[152,1235,232],{"class":214},[152,1237,1238],{"class":154,"line":191},[152,1239,880],{"class":214},[152,1241,1242,1245,1247,1250],{"class":154,"line":277},[152,1243,1244],{"class":220},"          \"field\"",[152,1246,245],{"class":214},[152,1248,1249],{"class":248},"\"name\"",[152,1251,252],{"class":214},[152,1253,1254,1257,1259],{"class":154,"line":283},[152,1255,1256],{"class":220},"          \"message\"",[152,1258,245],{"class":214},[152,1260,1261],{"class":248},"\"Name is required\"\n",[152,1263,1264],{"class":154,"line":289},[152,1265,907],{"class":214},[152,1267,1268],{"class":154,"line":294},[152,1269,912],{"class":214},[152,1271,1272],{"class":154,"line":493},[152,1273,761],{"class":214},[152,1275,1276],{"class":154,"line":505},[152,1277,188],{"class":214},[152,1279,1280],{"class":154,"line":517},[152,1281,194],{"class":214},[22,1283,1285],{"id":1284},"example-complete-device-management-system","Example: Complete Device Management System",[18,1287,1288,1289,1292],{},"Here's how you might structure a comprehensive ",[32,1290,1291],{},"device management"," in GraphQL:",[18,1294,1295],{},[121,1296,1297],{},"Note: The Device examples are illustrative. The specific types and fields such as DeviceInput, updateDevice, and deactivateDevice must exist in the target GraphQL schema, which can vary depending on the API you are working with.",[396,1299,1301],{"id":1300},"fetching-devices-with-pagination","Fetching Devices with Pagination",[145,1303,1305],{"className":147,"code":1304,"language":79,"meta":12,"style":12},"query GetDevicesPaginated($limit: Int = 10, $offset: Int = 0, $searchTerm: String) {\n  devices(limit: $limit, offset: $offset, search: $searchTerm) {\n    id\n    name\n    type\n    location\n    lastSeenStatus\n    createdAt\n    lastSeenAt\n  }\n  deviceCount(search: $searchTerm)\n}\n",[56,1306,1307,1312,1317,1321,1325,1330,1334,1339,1343,1348,1352,1357],{"__ignoreMap":12},[152,1308,1309],{"class":154,"line":155},[152,1310,1311],{},"query GetDevicesPaginated($limit: Int = 10, $offset: Int = 0, $searchTerm: String) {\n",[152,1313,1314],{"class":154,"line":161},[152,1315,1316],{},"  devices(limit: $limit, offset: $offset, search: $searchTerm) {\n",[152,1318,1319],{"class":154,"line":167},[152,1320,964],{},[152,1322,1323],{"class":154,"line":173},[152,1324,176],{},[152,1326,1327],{"class":154,"line":179},[152,1328,1329],{},"    type\n",[152,1331,1332],{"class":154,"line":185},[152,1333,978],{},[152,1335,1336],{"class":154,"line":191},[152,1337,1338],{},"    lastSeenStatus\n",[152,1340,1341],{"class":154,"line":277},[152,1342,983],{},[152,1344,1345],{"class":154,"line":283},[152,1346,1347],{},"    lastSeenAt\n",[152,1349,1350],{"class":154,"line":289},[152,1351,188],{},[152,1353,1354],{"class":154,"line":294},[152,1355,1356],{},"  deviceCount(search: $searchTerm)\n",[152,1358,1359],{"class":154,"line":493},[152,1360,194],{},[18,1362,1363],{},[121,1364,1365,1366,1369,1370,1373,1374,1377],{},"This query supports pagination and search, useful when managing large fleets of devices. Note that some GraphQL APIs use ",[32,1367,1368],{},"cursor-based pagination"," instead of ",[56,1371,1372],{},"limit"," and ",[56,1375,1376],{},"offset",", so you may need to adapt your query accordingly.",[1379,1380,1382],"h4",{"id":1381},"expected-output","Expected Output",[145,1384,1386],{"className":205,"code":1385,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"devices\": [\n      {\n        \"id\": \"1\",\n        \"name\": \"Raspberry Pi 4A\",\n        \"type\": \"Sensor\",\n        \"location\": \"Factory Floor 1\",\n        \"lastSeenStatus\": \"Online\",\n        \"createdAt\": \"2024-01-15T10:30:00Z\",\n        \"lastSeenAt\": \"2024-03-20T14:22:00Z\"\n      },\n      {\n        \"id\": \"2\",\n        \"name\": \"Temperature Monitor A1\",\n        \"type\": \"Sensor\",\n        \"location\": \"Warehouse Section B\",\n        \"lastSeenStatus\": \"Online\",\n        \"createdAt\": \"2024-02-10T08:15:00Z\",\n        \"lastSeenAt\": \"2024-03-21T09:10:00Z\"\n      }\n    ],\n    \"deviceCount\": 6\n  }\n}\n",[56,1387,1388,1392,1398,1405,1409,1421,1431,1443,1454,1466,1478,1488,1492,1496,1507,1518,1528,1539,1549,1560,1569,1573,1578,1588,1592],{"__ignoreMap":12},[152,1389,1390],{"class":154,"line":155},[152,1391,215],{"class":214},[152,1393,1394,1396],{"class":154,"line":161},[152,1395,221],{"class":220},[152,1397,224],{"class":214},[152,1399,1400,1403],{"class":154,"line":167},[152,1401,1402],{"class":220},"    \"devices\"",[152,1404,232],{"class":214},[152,1406,1407],{"class":154,"line":173},[152,1408,237],{"class":214},[152,1410,1411,1414,1416,1419],{"class":154,"line":179},[152,1412,1413],{"class":220},"        \"id\"",[152,1415,245],{"class":214},[152,1417,1418],{"class":248},"\"1\"",[152,1420,252],{"class":214},[152,1422,1423,1425,1427,1429],{"class":154,"line":185},[152,1424,257],{"class":220},[152,1426,245],{"class":214},[152,1428,1037],{"class":248},[152,1430,252],{"class":214},[152,1432,1433,1436,1438,1441],{"class":154,"line":191},[152,1434,1435],{"class":220},"        \"type\"",[152,1437,245],{"class":214},[152,1439,1440],{"class":248},"\"Sensor\"",[152,1442,252],{"class":214},[152,1444,1445,1448,1450,1452],{"class":154,"line":277},[152,1446,1447],{"class":220},"        \"location\"",[152,1449,245],{"class":214},[152,1451,1146],{"class":248},[152,1453,252],{"class":214},[152,1455,1456,1459,1461,1464],{"class":154,"line":283},[152,1457,1458],{"class":220},"        \"lastSeenStatus\"",[152,1460,245],{"class":214},[152,1462,1463],{"class":248},"\"Online\"",[152,1465,252],{"class":214},[152,1467,1468,1471,1473,1476],{"class":154,"line":289},[152,1469,1470],{"class":220},"        \"createdAt\"",[152,1472,245],{"class":214},[152,1474,1475],{"class":248},"\"2024-01-15T10:30:00Z\"",[152,1477,252],{"class":214},[152,1479,1480,1483,1485],{"class":154,"line":294},[152,1481,1482],{"class":220},"        \"lastSeenAt\"",[152,1484,245],{"class":214},[152,1486,1487],{"class":248},"\"2024-03-20T14:22:00Z\"\n",[152,1489,1490],{"class":154,"line":493},[152,1491,475],{"class":214},[152,1493,1494],{"class":154,"line":505},[152,1495,237],{"class":214},[152,1497,1498,1500,1502,1505],{"class":154,"line":517},[152,1499,1413],{"class":220},[152,1501,245],{"class":214},[152,1503,1504],{"class":248},"\"2\"",[152,1506,252],{"class":214},[152,1508,1509,1511,1513,1516],{"class":154,"line":527},[152,1510,257],{"class":220},[152,1512,245],{"class":214},[152,1514,1515],{"class":248},"\"Temperature Monitor A1\"",[152,1517,252],{"class":214},[152,1519,1520,1522,1524,1526],{"class":154,"line":532},[152,1521,1435],{"class":220},[152,1523,245],{"class":214},[152,1525,1440],{"class":248},[152,1527,252],{"class":214},[152,1529,1530,1532,1534,1537],{"class":154,"line":537},[152,1531,1447],{"class":220},[152,1533,245],{"class":214},[152,1535,1536],{"class":248},"\"Warehouse Section B\"",[152,1538,252],{"class":214},[152,1540,1541,1543,1545,1547],{"class":154,"line":548},[152,1542,1458],{"class":220},[152,1544,245],{"class":214},[152,1546,1463],{"class":248},[152,1548,252],{"class":214},[152,1550,1551,1553,1555,1558],{"class":154,"line":559},[152,1552,1470],{"class":220},[152,1554,245],{"class":214},[152,1556,1557],{"class":248},"\"2024-02-10T08:15:00Z\"",[152,1559,252],{"class":214},[152,1561,1562,1564,1566],{"class":154,"line":571},[152,1563,1482],{"class":220},[152,1565,245],{"class":214},[152,1567,1568],{"class":248},"\"2024-03-21T09:10:00Z\"\n",[152,1570,1571],{"class":154,"line":581},[152,1572,280],{"class":214},[152,1574,1575],{"class":154,"line":586},[152,1576,1577],{"class":214},"    ],\n",[152,1579,1580,1583,1585],{"class":154,"line":593},[152,1581,1582],{"class":220},"    \"deviceCount\"",[152,1584,245],{"class":214},[152,1586,1587],{"class":220},"6\n",[152,1589,1590],{"class":154,"line":598},[152,1591,188],{"class":214},[152,1593,1594],{"class":154,"line":603},[152,1595,194],{"class":214},[396,1597,1599],{"id":1598},"creating-new-devices","Creating New Devices",[145,1601,1603],{"className":147,"code":1602,"language":79,"meta":12,"style":12},"mutation CreateDevice($input: DeviceInput!) {\n  createDevice(input: $input) {\n    id\n    name\n    type\n    location\n    createdAt\n    success\n    errors {\n      field\n      message\n    }\n  }\n}\n",[56,1604,1605,1610,1614,1618,1622,1626,1630,1634,1638,1643,1648,1653,1657,1661],{"__ignoreMap":12},[152,1606,1607],{"class":154,"line":155},[152,1608,1609],{},"mutation CreateDevice($input: DeviceInput!) {\n",[152,1611,1612],{"class":154,"line":161},[152,1613,959],{},[152,1615,1616],{"class":154,"line":167},[152,1617,964],{},[152,1619,1620],{"class":154,"line":173},[152,1621,176],{},[152,1623,1624],{"class":154,"line":179},[152,1625,1329],{},[152,1627,1628],{"class":154,"line":185},[152,1629,978],{},[152,1631,1632],{"class":154,"line":191},[152,1633,983],{},[152,1635,1636],{"class":154,"line":277},[152,1637,988],{},[152,1639,1640],{"class":154,"line":283},[152,1641,1642],{},"    errors {\n",[152,1644,1645],{"class":154,"line":289},[152,1646,1647],{},"      field\n",[152,1649,1650],{"class":154,"line":294},[152,1651,1652],{},"      message\n",[152,1654,1655],{"class":154,"line":493},[152,1656,761],{},[152,1658,1659],{"class":154,"line":505},[152,1660,188],{},[152,1662,1663],{"class":154,"line":517},[152,1664,194],{},[18,1666,1667],{},[121,1668,1669,1670,1673],{},"Always return ",[56,1671,1672],{},"success"," and any validation errors to confirm the device was created properly.",[1379,1675,1677],{"id":1676},"expected-output-success","Expected Output (Success)",[145,1679,1681],{"className":205,"code":1680,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"createDevice\": {\n      \"id\": \"7\",\n      \"name\": \"Smart Thermostat\",\n      \"type\": \"Controller\",\n      \"location\": \"Office Area\",\n      \"createdAt\": \"2024-03-21T12:30:00Z\",\n      \"success\": true,\n      \"errors\": []\n    }\n  }\n}\n",[56,1682,1683,1687,1693,1699,1709,1720,1732,1743,1754,1765,1772,1776,1780],{"__ignoreMap":12},[152,1684,1685],{"class":154,"line":155},[152,1686,215],{"class":214},[152,1688,1689,1691],{"class":154,"line":161},[152,1690,221],{"class":220},[152,1692,224],{"class":214},[152,1694,1695,1697],{"class":154,"line":167},[152,1696,1101],{"class":220},[152,1698,224],{"class":214},[152,1700,1701,1703,1705,1707],{"class":154,"line":173},[152,1702,1108],{"class":220},[152,1704,245],{"class":214},[152,1706,1113],{"class":248},[152,1708,252],{"class":214},[152,1710,1711,1713,1715,1718],{"class":154,"line":179},[152,1712,837],{"class":220},[152,1714,245],{"class":214},[152,1716,1717],{"class":248},"\"Smart Thermostat\"",[152,1719,252],{"class":214},[152,1721,1722,1725,1727,1730],{"class":154,"line":185},[152,1723,1724],{"class":220},"      \"type\"",[152,1726,245],{"class":214},[152,1728,1729],{"class":248},"\"Controller\"",[152,1731,252],{"class":214},[152,1733,1734,1736,1738,1741],{"class":154,"line":191},[152,1735,1141],{"class":220},[152,1737,245],{"class":214},[152,1739,1740],{"class":248},"\"Office Area\"",[152,1742,252],{"class":214},[152,1744,1745,1747,1749,1752],{"class":154,"line":277},[152,1746,1153],{"class":220},[152,1748,245],{"class":214},[152,1750,1751],{"class":248},"\"2024-03-21T12:30:00Z\"",[152,1753,252],{"class":214},[152,1755,1756,1758,1760,1763],{"class":154,"line":283},[152,1757,1165],{"class":220},[152,1759,245],{"class":214},[152,1761,1762],{"class":220},"true",[152,1764,252],{"class":214},[152,1766,1767,1769],{"class":154,"line":289},[152,1768,1233],{"class":220},[152,1770,1771],{"class":214},": []\n",[152,1773,1774],{"class":154,"line":294},[152,1775,761],{"class":214},[152,1777,1778],{"class":154,"line":493},[152,1779,188],{"class":214},[152,1781,1782],{"class":154,"line":505},[152,1783,194],{"class":214},[396,1785,1787],{"id":1786},"updating-existing-devices","Updating Existing Devices",[145,1789,1791],{"className":147,"code":1790,"language":79,"meta":12,"style":12},"mutation UpdateDevice($id: ID!, $input: DeviceUpdateInput!) {\n  updateDevice(id: $id, input: $input) {\n    id\n    name\n    type\n    location\n    lastSeenStatus\n    updatedAt\n    success\n  }\n}\n",[56,1792,1793,1798,1803,1807,1811,1815,1819,1823,1828,1832,1836],{"__ignoreMap":12},[152,1794,1795],{"class":154,"line":155},[152,1796,1797],{},"mutation UpdateDevice($id: ID!, $input: DeviceUpdateInput!) {\n",[152,1799,1800],{"class":154,"line":161},[152,1801,1802],{},"  updateDevice(id: $id, input: $input) {\n",[152,1804,1805],{"class":154,"line":167},[152,1806,964],{},[152,1808,1809],{"class":154,"line":173},[152,1810,176],{},[152,1812,1813],{"class":154,"line":179},[152,1814,1329],{},[152,1816,1817],{"class":154,"line":185},[152,1818,978],{},[152,1820,1821],{"class":154,"line":191},[152,1822,1338],{},[152,1824,1825],{"class":154,"line":277},[152,1826,1827],{},"    updatedAt\n",[152,1829,1830],{"class":154,"line":283},[152,1831,988],{},[152,1833,1834],{"class":154,"line":289},[152,1835,188],{},[152,1837,1838],{"class":154,"line":294},[152,1839,194],{},[1379,1841,1382],{"id":1842},"expected-output-1",[145,1844,1846],{"className":205,"code":1845,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"updateDevice\": {\n      \"id\": \"1\",\n      \"name\": \"Raspberry Pi 4A\",\n      \"type\": \"Sensor\",\n      \"location\": \"Factory Floor 3\",\n      \"lastSeenStatus\": \"Maintenance\",\n      \"updatedAt\": \"2024-03-21T13:45:00Z\",\n      \"success\": true\n    }\n  }\n}\n",[56,1847,1848,1852,1858,1865,1875,1885,1895,1906,1918,1930,1938,1942,1946],{"__ignoreMap":12},[152,1849,1850],{"class":154,"line":155},[152,1851,215],{"class":214},[152,1853,1854,1856],{"class":154,"line":161},[152,1855,221],{"class":220},[152,1857,224],{"class":214},[152,1859,1860,1863],{"class":154,"line":167},[152,1861,1862],{"class":220},"    \"updateDevice\"",[152,1864,224],{"class":214},[152,1866,1867,1869,1871,1873],{"class":154,"line":173},[152,1868,1108],{"class":220},[152,1870,245],{"class":214},[152,1872,1418],{"class":248},[152,1874,252],{"class":214},[152,1876,1877,1879,1881,1883],{"class":154,"line":179},[152,1878,837],{"class":220},[152,1880,245],{"class":214},[152,1882,1037],{"class":248},[152,1884,252],{"class":214},[152,1886,1887,1889,1891,1893],{"class":154,"line":185},[152,1888,1724],{"class":220},[152,1890,245],{"class":214},[152,1892,1440],{"class":248},[152,1894,252],{"class":214},[152,1896,1897,1899,1901,1904],{"class":154,"line":191},[152,1898,1141],{"class":220},[152,1900,245],{"class":214},[152,1902,1903],{"class":248},"\"Factory Floor 3\"",[152,1905,252],{"class":214},[152,1907,1908,1911,1913,1916],{"class":154,"line":277},[152,1909,1910],{"class":220},"      \"lastSeenStatus\"",[152,1912,245],{"class":214},[152,1914,1915],{"class":248},"\"Maintenance\"",[152,1917,252],{"class":214},[152,1919,1920,1923,1925,1928],{"class":154,"line":283},[152,1921,1922],{"class":220},"      \"updatedAt\"",[152,1924,245],{"class":214},[152,1926,1927],{"class":248},"\"2024-03-21T13:45:00Z\"",[152,1929,252],{"class":214},[152,1931,1932,1934,1936],{"class":154,"line":289},[152,1933,1165],{"class":220},[152,1935,245],{"class":214},[152,1937,1170],{"class":220},[152,1939,1940],{"class":154,"line":294},[152,1941,761],{"class":214},[152,1943,1944],{"class":154,"line":493},[152,1945,188],{"class":214},[152,1947,1948],{"class":154,"line":505},[152,1949,194],{"class":214},[396,1951,1953],{"id":1952},"deleting-devices-soft-delete","Deleting Devices (Soft Delete)",[145,1955,1957],{"className":147,"code":1956,"language":79,"meta":12,"style":12},"mutation DeactivateDevice($id: ID!) {\n  deactivateDevice(id: $id) {\n    id\n    isActive\n    deactivatedAt\n    success\n  }\n}\n",[56,1958,1959,1964,1969,1973,1978,1983,1987,1991],{"__ignoreMap":12},[152,1960,1961],{"class":154,"line":155},[152,1962,1963],{},"mutation DeactivateDevice($id: ID!) {\n",[152,1965,1966],{"class":154,"line":161},[152,1967,1968],{},"  deactivateDevice(id: $id) {\n",[152,1970,1971],{"class":154,"line":167},[152,1972,964],{},[152,1974,1975],{"class":154,"line":173},[152,1976,1977],{},"    isActive\n",[152,1979,1980],{"class":154,"line":179},[152,1981,1982],{},"    deactivatedAt\n",[152,1984,1985],{"class":154,"line":185},[152,1986,988],{},[152,1988,1989],{"class":154,"line":191},[152,1990,188],{},[152,1992,1993],{"class":154,"line":277},[152,1994,194],{},[18,1996,1997],{},[121,1998,1999],{},"Soft deletes allow you to retain historical device data for audits and compliance.",[1379,2001,1382],{"id":2002},"expected-output-2",[145,2004,2006],{"className":205,"code":2005,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"deactivateDevice\": {\n      \"id\": \"4\",\n      \"isActive\": false,\n      \"deactivatedAt\": \"2024-03-21T14:00:00Z\",\n      \"success\": true\n    }\n  }\n}\n",[56,2007,2008,2012,2018,2025,2036,2047,2059,2067,2071,2075],{"__ignoreMap":12},[152,2009,2010],{"class":154,"line":155},[152,2011,215],{"class":214},[152,2013,2014,2016],{"class":154,"line":161},[152,2015,221],{"class":220},[152,2017,224],{"class":214},[152,2019,2020,2023],{"class":154,"line":167},[152,2021,2022],{"class":220},"    \"deactivateDevice\"",[152,2024,224],{"class":214},[152,2026,2027,2029,2031,2034],{"class":154,"line":173},[152,2028,1108],{"class":220},[152,2030,245],{"class":214},[152,2032,2033],{"class":248},"\"4\"",[152,2035,252],{"class":214},[152,2037,2038,2041,2043,2045],{"class":154,"line":179},[152,2039,2040],{"class":220},"      \"isActive\"",[152,2042,245],{"class":214},[152,2044,1226],{"class":220},[152,2046,252],{"class":214},[152,2048,2049,2052,2054,2057],{"class":154,"line":185},[152,2050,2051],{"class":220},"      \"deactivatedAt\"",[152,2053,245],{"class":214},[152,2055,2056],{"class":248},"\"2024-03-21T14:00:00Z\"",[152,2058,252],{"class":214},[152,2060,2061,2063,2065],{"class":154,"line":191},[152,2062,1165],{"class":220},[152,2064,245],{"class":214},[152,2066,1170],{"class":220},[152,2068,2069],{"class":154,"line":277},[152,2070,761],{"class":214},[152,2072,2073],{"class":154,"line":283},[152,2074,188],{"class":214},[152,2076,2077],{"class":154,"line":289},[152,2078,194],{"class":214},[22,2080,2082],{"id":2081},"advanced-techniques","Advanced Techniques",[396,2084,2086],{"id":2085},"custom-headers-for-authentication-and-metadata","Custom Headers for Authentication and Metadata",[18,2088,2089],{},"Some GraphQL APIs require additional headers for authentication or client identification. You can add them in the message object before sending the request:",[145,2091,2093],{"className":670,"code":2092,"language":672,"meta":12,"style":12},"msg.customHeaders = {\n  \"Authorization\": \"Bearer xyz\",\n  \"X-API-Version\": \"v2\",\n  \"X-Client-ID\": \"node-red-integration\"\n};\nreturn msg;\n",[56,2094,2095,2104,2116,2128,2138,2142],{"__ignoreMap":12},[152,2096,2097,2100,2102],{"class":154,"line":155},[152,2098,2099],{"class":214},"msg.customHeaders ",[152,2101,683],{"class":682},[152,2103,789],{"class":214},[152,2105,2106,2109,2111,2114],{"class":154,"line":161},[152,2107,2108],{"class":248},"  \"Authorization\"",[152,2110,245],{"class":214},[152,2112,2113],{"class":248},"\"Bearer xyz\"",[152,2115,252],{"class":214},[152,2117,2118,2121,2123,2126],{"class":154,"line":167},[152,2119,2120],{"class":248},"  \"X-API-Version\"",[152,2122,245],{"class":214},[152,2124,2125],{"class":248},"\"v2\"",[152,2127,252],{"class":214},[152,2129,2130,2133,2135],{"class":154,"line":173},[152,2131,2132],{"class":248},"  \"X-Client-ID\"",[152,2134,245],{"class":214},[152,2136,2137],{"class":248},"\"node-red-integration\"\n",[152,2139,2140],{"class":154,"line":179},[152,2141,804],{"class":214},[152,2143,2144,2146],{"class":154,"line":185},[152,2145,694],{"class":682},[152,2147,697],{"class":214},[396,2149,2151],{"id":2150},"using-fragments-for-code-reusability","Using Fragments for Code Reusability",[18,2153,2154],{},"When queries start to grow, you'll often find yourself requesting the same fields across multiple operations. Fragments let you define those fields once and reuse them, keeping queries clean and consistent.",[145,2156,2158],{"className":147,"code":2157,"language":79,"meta":12,"style":12},"fragment DeviceBasicInfo on Device {\n  id\n  name\n  type\n  location\n  createdAt\n}\n\nfragment DeviceOperationalInfo on Device {\n  ...DeviceBasicInfo\n  lastSeenStatus\n  lastSeenAt\n  maintenanceDue\n}\n\nquery GetDeviceProfile($deviceId: ID!) {\n  device(id: $deviceId) {\n    ...DeviceOperationalInfo\n  }\n}\n",[56,2159,2160,2165,2170,2175,2180,2185,2190,2194,2200,2205,2210,2215,2220,2225,2229,2233,2238,2243,2248,2252],{"__ignoreMap":12},[152,2161,2162],{"class":154,"line":155},[152,2163,2164],{},"fragment DeviceBasicInfo on Device {\n",[152,2166,2167],{"class":154,"line":161},[152,2168,2169],{},"  id\n",[152,2171,2172],{"class":154,"line":167},[152,2173,2174],{},"  name\n",[152,2176,2177],{"class":154,"line":173},[152,2178,2179],{},"  type\n",[152,2181,2182],{"class":154,"line":179},[152,2183,2184],{},"  location\n",[152,2186,2187],{"class":154,"line":185},[152,2188,2189],{},"  createdAt\n",[152,2191,2192],{"class":154,"line":191},[152,2193,194],{},[152,2195,2196],{"class":154,"line":277},[152,2197,2199],{"emptyLinePlaceholder":2198},true,"\n",[152,2201,2202],{"class":154,"line":283},[152,2203,2204],{},"fragment DeviceOperationalInfo on Device {\n",[152,2206,2207],{"class":154,"line":289},[152,2208,2209],{},"  ...DeviceBasicInfo\n",[152,2211,2212],{"class":154,"line":294},[152,2213,2214],{},"  lastSeenStatus\n",[152,2216,2217],{"class":154,"line":493},[152,2218,2219],{},"  lastSeenAt\n",[152,2221,2222],{"class":154,"line":505},[152,2223,2224],{},"  maintenanceDue\n",[152,2226,2227],{"class":154,"line":517},[152,2228,194],{},[152,2230,2231],{"class":154,"line":527},[152,2232,2199],{"emptyLinePlaceholder":2198},[152,2234,2235],{"class":154,"line":532},[152,2236,2237],{},"query GetDeviceProfile($deviceId: ID!) {\n",[152,2239,2240],{"class":154,"line":537},[152,2241,2242],{},"  device(id: $deviceId) {\n",[152,2244,2245],{"class":154,"line":548},[152,2246,2247],{},"    ...DeviceOperationalInfo\n",[152,2249,2250],{"class":154,"line":559},[152,2251,188],{},[152,2253,2254],{"class":154,"line":571},[152,2255,194],{},[18,2257,2258],{},[121,2259,2260,2261,2264,2265,2268],{},"Here, ",[56,2262,2263],{},"DeviceBasicInfo"," is reused inside ",[56,2266,2267],{},"DeviceOperationalInfo",", so you can easily expand or maintain your schema without duplicating fields.",[1379,2270,2272],{"id":2271},"expected-output-with-fragments","Expected Output with Fragments",[18,2274,2275],{},"The output includes all fields from both fragments combined:",[145,2277,2279],{"className":205,"code":2278,"language":207,"meta":12,"style":12},"{\n  \"data\": {\n    \"device\": {\n      \"id\": \"1\",\n      \"name\": \"Raspberry Pi 4A\",\n      \"type\": \"Sensor\",\n      \"location\": \"Factory Floor 1\",\n      \"createdAt\": \"2024-01-15T10:30:00Z\",\n      \"lastSeenStatus\": \"Online\",\n      \"lastSeenAt\": \"2024-03-20T14:22:00Z\",\n      \"maintenanceDue\": \"2024-06-15T00:00:00Z\"\n    }\n  }\n}\n",[56,2280,2281,2285,2291,2298,2308,2318,2328,2338,2348,2358,2370,2380,2384,2388],{"__ignoreMap":12},[152,2282,2283],{"class":154,"line":155},[152,2284,215],{"class":214},[152,2286,2287,2289],{"class":154,"line":161},[152,2288,221],{"class":220},[152,2290,224],{"class":214},[152,2292,2293,2296],{"class":154,"line":167},[152,2294,2295],{"class":220},"    \"device\"",[152,2297,224],{"class":214},[152,2299,2300,2302,2304,2306],{"class":154,"line":173},[152,2301,1108],{"class":220},[152,2303,245],{"class":214},[152,2305,1418],{"class":248},[152,2307,252],{"class":214},[152,2309,2310,2312,2314,2316],{"class":154,"line":179},[152,2311,837],{"class":220},[152,2313,245],{"class":214},[152,2315,1037],{"class":248},[152,2317,252],{"class":214},[152,2319,2320,2322,2324,2326],{"class":154,"line":185},[152,2321,1724],{"class":220},[152,2323,245],{"class":214},[152,2325,1440],{"class":248},[152,2327,252],{"class":214},[152,2329,2330,2332,2334,2336],{"class":154,"line":191},[152,2331,1141],{"class":220},[152,2333,245],{"class":214},[152,2335,1146],{"class":248},[152,2337,252],{"class":214},[152,2339,2340,2342,2344,2346],{"class":154,"line":277},[152,2341,1153],{"class":220},[152,2343,245],{"class":214},[152,2345,1475],{"class":248},[152,2347,252],{"class":214},[152,2349,2350,2352,2354,2356],{"class":154,"line":283},[152,2351,1910],{"class":220},[152,2353,245],{"class":214},[152,2355,1463],{"class":248},[152,2357,252],{"class":214},[152,2359,2360,2363,2365,2368],{"class":154,"line":289},[152,2361,2362],{"class":220},"      \"lastSeenAt\"",[152,2364,245],{"class":214},[152,2366,2367],{"class":248},"\"2024-03-20T14:22:00Z\"",[152,2369,252],{"class":214},[152,2371,2372,2375,2377],{"class":154,"line":294},[152,2373,2374],{"class":220},"      \"maintenanceDue\"",[152,2376,245],{"class":214},[152,2378,2379],{"class":248},"\"2024-06-15T00:00:00Z\"\n",[152,2381,2382],{"class":154,"line":493},[152,2383,761],{"class":214},[152,2385,2386],{"class":154,"line":505},[152,2387,188],{"class":214},[152,2389,2390],{"class":154,"line":517},[152,2391,194],{"class":214},[18,2393,2394,2395,2397,2398,2400],{},"Notice how the response includes all fields from ",[56,2396,2263],{}," (id, name, type, location, createdAt) plus the additional fields from ",[56,2399,2267],{}," (lastSeenStatus, lastSeenAt, maintenanceDue). This demonstrates how fragments compose together to build the complete response.",[22,2402,2404],{"id":2403},"complete-example-flow","Complete Example Flow",[18,2406,2407],{},"The following example flow demonstrates creating, reading, updating, and deleting data using GraphQL, including performing queries with fragments for reusable field selections. This flow and the GraphQL node are for demonstration purposes only and do not include a demo API.",[2409,2410],"render-flow",{":height":2411,"flow":2412},"200","W3siaWQiOiI3Y2IxODM0OWNmYjdmMDE0IiwidHlwZSI6ImdyYXBocWwiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkdldCBTaW5nbGUgRGV2aWNlIEJ5IElEIiwiZ3JhcGhxbCI6ImZkMTYzYTMyNWFhMjFjZGIiLCJmb3JtYXQiOiJ0ZXh0IiwidGVtcGxhdGUiOiJxdWVyeSBHZXREZXZpY2UoJGlkOiBJRCEpIHtcbiAgZGV2aWNlKGlkOiAkaWQpIHtcbiAgICBpZFxuICAgIG5hbWVcbiAgICB0eXBlXG4gICAgbW9kZWxcbiAgICBsb2NhdGlvblxuICAgIGxhc3RTZWVuU3RhdHVzXG4gICAgbWFpbnRlbmFuY2VEdWVcbiAgfVxufSIsInN5bnRheCI6Im11c3RhY2hlIiwidG9rZW4iOiIiLCJzaG93RGVidWciOmZhbHNlLCJ4Ijo0OTAsInkiOjI0MCwid2lyZXMiOltbIjE1MTVjYmFkOTgzNTVjNWYiXSxbIjBjNDA2OGJkMTgyMTkyM2IiXV19LHsiaWQiOiI2YWMzYjYyNWI3ZTZlOTU0IiwidHlwZSI6ImluamVjdCIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJ2YXJpYWJsZXMiLCJ2Ijoie1wiaWRcIjpcIjFcIn0iLCJ2dCI6Impzb24ifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwieCI6MjcwLCJ5IjoyNDAsIndpcmVzIjpbWyI3Y2IxODM0OWNmYjdmMDE0Il1dfSx7ImlkIjoiNjZkMDE3YjE0ZWQ4YzYwZCIsInR5cGUiOiJncmFwaHFsIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJHZXQgRGV2aWNlcyIsImdyYXBocWwiOiJmZDE2M2EzMjVhYTIxY2RiIiwiZm9ybWF0IjoidGV4dCIsInRlbXBsYXRlIjoicXVlcnkgR2V0RGV2aWNlcyB7XG4gIGRldmljZXMge1xuICAgIGlkXG4gICAgbmFtZVxuICAgIHR5cGVcbiAgICBsb2NhdGlvblxuICAgIGxhc3RTZWVuU3RhdHVzXG4gICAgY3JlYXRlZEF0XG4gIH1cbn0iLCJzeW50YXgiOiJtdXN0YWNoZSIsInRva2VuIjoiIiwic2hvd0RlYnVnIjpmYWxzZSwieCI6NDUwLCJ5IjoxNDAsIndpcmVzIjpbWyJmZGNjMTVmNjg4NzJiNGQwIl0sWyJiZWI2M2FiZDkyZjE1NWNlIl1dfSx7ImlkIjoiNTcyYWE5ZTY1OWY1ZTI3ZSIsInR5cGUiOiJpbmplY3QiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IiIsInByb3BzIjpbXSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoyNzAsInkiOjE0MCwid2lyZXMiOltbIjY2ZDAxN2IxNGVkOGM2MGQiXV19LHsiaWQiOiI2ZDRmOWEyY2IxNTlkOGU1IiwidHlwZSI6ImdyYXBocWwiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkNyZWF0ZSBEZXZpY2UiLCJncmFwaHFsIjoiZmQxNjNhMzI1YWEyMWNkYiIsImZvcm1hdCI6InRleHQiLCJ0ZW1wbGF0ZSI6Im11dGF0aW9uIENyZWF0ZURldmljZSgkaW5wdXQ6IERldmljZUlucHV0ISkge1xuICBjcmVhdGVEZXZpY2UoaW5wdXQ6ICRpbnB1dCkge1xuICAgIGlkXG4gICAgbmFtZVxuICAgIHR5cGVcbiAgICBtb2RlbFxuICAgIGxvY2F0aW9uXG4gICAgY3JlYXRlZEF0XG4gICAgc3VjY2Vzc1xuICAgIGVycm9ycyB7XG4gICAgICBmaWVsZFxuICAgICAgbWVzc2FnZVxuICAgIH1cbiAgfVxufSIsInN5bnRheCI6Im11c3RhY2hlIiwidG9rZW4iOiIiLCJzaG93RGVidWciOmZhbHNlLCJ4Ijo0NjAsInkiOjM0MCwid2lyZXMiOltbImY1NTI3ZTE3OWUxYzg5MTEiXSxbIjlmYzcwZThmODcxNWY5OTQiXV19LHsiaWQiOiJlMGI4OWJmMGE0N2RiYWUzIiwidHlwZSI6ImluamVjdCIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJ2YXJpYWJsZXMiLCJ2Ijoie1wiaW5wdXRcIjp7XCJuYW1lXCI6XCJTbWFydCBUaGVybW9zdGF0XCIsXCJ0eXBlXCI6XCJDb250cm9sbGVyXCIsXCJtb2RlbFwiOlwiTmVzdCBWM1wiLFwibG9jYXRpb25cIjpcIk9mZmljZSBBcmVhXCJ9fSIsInZ0IjoianNvbiJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoyNzAsInkiOjM0MCwid2lyZXMiOltbIjZkNGY5YTJjYjE1OWQ4ZTUiXV19LHsiaWQiOiJmZGNjMTVmNjg4NzJiNGQwIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5IjoxMjAsIndpcmVzIjpbXX0seyJpZCI6ImJlYjYzYWJkOTJmMTU1Y2UiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkVycm9yIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6MTYwLCJ3aXJlcyI6W119LHsiaWQiOiIxNTE1Y2JhZDk4MzU1YzVmIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5IjoyMjAsIndpcmVzIjpbXX0seyJpZCI6IjBjNDA2OGJkMTgyMTkyM2IiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkVycm9yIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6MjYwLCJ3aXJlcyI6W119LHsiaWQiOiJmNTUyN2UxNzllMWM4OTExIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5IjozMjAsIndpcmVzIjpbXX0seyJpZCI6IjlmYzcwZThmODcxNWY5OTQiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkVycm9yIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6MzYwLCJ3aXJlcyI6W119LHsiaWQiOiJlMGQyNzM5YzU1Mzg2NjQ0IiwidHlwZSI6ImdyYXBocWwiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkNyZWF0ZSBEZXZpY2UiLCJncmFwaHFsIjoiZmQxNjNhMzI1YWEyMWNkYiIsImZvcm1hdCI6InRleHQiLCJ0ZW1wbGF0ZSI6Im11dGF0aW9uIENyZWF0ZURldmljZSgkaW5wdXQ6IERldmljZUlucHV0ISkge1xuICBjcmVhdGVEZXZpY2UoaW5wdXQ6ICRpbnB1dCkge1xuICAgIGlkXG4gICAgbmFtZVxuICAgIHR5cGVcbiAgICBtb2RlbFxuICAgIGxvY2F0aW9uXG4gICAgY3JlYXRlZEF0XG4gICAgc3VjY2Vzc1xuICAgIGVycm9ycyB7XG4gICAgICBmaWVsZFxuICAgICAgbWVzc2FnZVxuICAgIH1cbiAgfVxufSIsInN5bnRheCI6Im11c3RhY2hlIiwidG9rZW4iOiIiLCJzaG93RGVidWciOmZhbHNlLCJ4Ijo0NjAsInkiOjQ0MCwid2lyZXMiOltbImY1YzJlMDM0NmI0OTc5YWEiXSxbIjU5N2JhYzQ5OTM4Y2Q3YmMiXV19LHsiaWQiOiJiNDU0MjJjOGJmZmFhNTJkIiwidHlwZSI6ImluamVjdCIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJ2YXJpYWJsZXMiLCJ2Ijoie1wiaW5wdXRcIjp7XCJuYW1lXCI6XCJTbWFydCBUaGVybW9zdGF0XCIsXCJ0eXBlXCI6XCJDb250cm9sbGVyXCIsXCJtb2RlbFwiOlwiTmVzdCBWM1wiLFwibG9jYXRpb25cIjpcIk9mZmljZSBBcmVhXCJ9fSIsInZ0IjoianNvbiJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoyNzAsInkiOjQ0MCwid2lyZXMiOltbImUwZDI3MzljNTUzODY2NDQiXV19LHsiaWQiOiJmNWMyZTAzNDZiNDk3OWFhIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5Ijo0MjAsIndpcmVzIjpbXX0seyJpZCI6IjU5N2JhYzQ5OTM4Y2Q3YmMiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkVycm9yIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6NDYwLCJ3aXJlcyI6W119LHsiaWQiOiJkYWUxOGMxMThiNWE3ZDI1IiwidHlwZSI6ImdyYXBocWwiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IlVwZGF0ZSBEZXZpY2UiLCJncmFwaHFsIjoiZmQxNjNhMzI1YWEyMWNkYiIsImZvcm1hdCI6InRleHQiLCJ0ZW1wbGF0ZSI6Im11dGF0aW9uIFVwZGF0ZURldmljZSgkaWQ6IElEISwgJGlucHV0OiBEZXZpY2VVcGRhdGVJbnB1dCEpIHtcbiAgdXBkYXRlRGV2aWNlKGlkOiAkaWQsIGlucHV0OiAkaW5wdXQpIHtcbiAgICBpZFxuICAgIG5hbWVcbiAgICBsb2NhdGlvblxuICAgIGxhc3RTZWVuU3RhdHVzXG4gICAgdXBkYXRlZEF0XG4gICAgc3VjY2Vzc1xuICB9XG59Iiwic3ludGF4IjoibXVzdGFjaGUiLCJ0b2tlbiI6IiIsInNob3dEZWJ1ZyI6ZmFsc2UsIngiOjQ2MCwieSI6NTQwLCJ3aXJlcyI6W1siODM3MmM1M2ZkMzc0Y2EwYyJdLFsiODFlZTI3ZDVkMDAyY2RmNyJdXX0seyJpZCI6IjA2ZTcxNTQ3NmQ0YTA1YTEiLCJ0eXBlIjoiaW5qZWN0IiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiIiLCJwcm9wcyI6W3sicCI6InZhcmlhYmxlcyIsInYiOiJ7ICAgXCJpZFwiOiBcIjFcIiwgICBcImlucHV0XCI6IHsgICAgIFwibG9jYXRpb25cIjogXCJGYWN0b3J5IEZsb29yIDNcIiwgICAgIFwibGFzdFNlZW5TdGF0dXNcIjogXCJNYWludGVuYW5jZVwiICAgfSB9IiwidnQiOiJqc29uIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsIngiOjI3MCwieSI6NTQwLCJ3aXJlcyI6W1siZGFlMThjMTE4YjVhN2QyNSJdXX0seyJpZCI6IjgzNzJjNTNmZDM3NGNhMGMiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IlJlc3VsdCIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo2OTAsInkiOjUyMCwid2lyZXMiOltdfSx7ImlkIjoiODFlZTI3ZDVkMDAyY2RmNyIsInR5cGUiOiJkZWJ1ZyIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiRXJyb3IiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5Ijo1NjAsIndpcmVzIjpbXX0seyJpZCI6ImI1OTQ3NjIyMWUxMzU1NzkiLCJ0eXBlIjoiZ3JhcGhxbCIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiRGVhY3RpdmF0ZSBEZXZpY2UiLCJncmFwaHFsIjoiZmQxNjNhMzI1YWEyMWNkYiIsImZvcm1hdCI6InRleHQiLCJ0ZW1wbGF0ZSI6Im11dGF0aW9uIERlYWN0aXZhdGVEZXZpY2UoJGlkOiBJRCEpIHtcbiAgZGVhY3RpdmF0ZURldmljZShpZDogJGlkKSB7XG4gICAgaWRcbiAgICBpc0FjdGl2ZVxuICAgIGRlYWN0aXZhdGVkQXRcbiAgICBzdWNjZXNzXG4gIH1cbn0iLCJzeW50YXgiOiJtdXN0YWNoZSIsInRva2VuIjoiIiwic2hvd0RlYnVnIjpmYWxzZSwieCI6NDcwLCJ5Ijo2NDAsIndpcmVzIjpbWyJiYzBiNTA2N2M5YjY0YjRhIl0sWyI5YmNkNzhjNDRiMmQzMDRhIl1dfSx7ImlkIjoiMmY0NWJhNjQxZWE4ZDI3MiIsInR5cGUiOiJpbmplY3QiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IiIsInByb3BzIjpbeyJwIjoidmFyaWFibGVzIiwidiI6InsgICBcImlkXCI6IFwiNFwiIH0iLCJ2dCI6Impzb24ifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwieCI6MjcwLCJ5Ijo2NDAsIndpcmVzIjpbWyJiNTk0NzYyMjFlMTM1NTc5Il1dfSx7ImlkIjoiYmMwYjUwNjdjOWI2NGI0YSIsInR5cGUiOiJkZWJ1ZyIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6NjIwLCJ3aXJlcyI6W119LHsiaWQiOiI5YmNkNzhjNDRiMmQzMDRhIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJFcnJvciIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo2OTAsInkiOjY2MCwid2lyZXMiOltdfSx7ImlkIjoiN2Q3ZTY2ODlmMGM0MmZhYyIsInR5cGUiOiJncmFwaHFsIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJmcmFnbWVudCIsImdyYXBocWwiOiJmZDE2M2EzMjVhYTIxY2RiIiwiZm9ybWF0IjoidGV4dCIsInRlbXBsYXRlIjoiZnJhZ21lbnQgRGV2aWNlQmFzaWNJbmZvIG9uIERldmljZSB7XG4gIGlkXG4gIG5hbWVcbiAgdHlwZVxuICBsb2NhdGlvblxuICBjcmVhdGVkQXRcbn1cblxuZnJhZ21lbnQgRGV2aWNlT3BlcmF0aW9uYWxJbmZvIG9uIERldmljZSB7XG4gIC4uLkRldmljZUJhc2ljSW5mb1xuICBsYXN0U2VlblN0YXR1c1xuICBsYXN0U2VlbkF0XG4gIG1haW50ZW5hbmNlRHVlXG59XG5cbnF1ZXJ5IEdldERldmljZVByb2ZpbGUoJGRldmljZUlkOiBJRCEpIHtcbiAgZGV2aWNlKGlkOiAkZGV2aWNlSWQpIHtcbiAgICAuLi5EZXZpY2VPcGVyYXRpb25hbEluZm9cbiAgfVxufSIsInN5bnRheCI6Im11c3RhY2hlIiwidG9rZW4iOiIiLCJzaG93RGVidWciOmZhbHNlLCJ4Ijo0NDAsInkiOjc0MCwid2lyZXMiOltbImU4MTgwNjBjMDAwODc5MzAiXSxbIjYyMWI3MzIyNDU2NzFmMmYiXV19LHsiaWQiOiJhYzM3Yjc1NDBlNTM2MjU1IiwidHlwZSI6ImluamVjdCIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJ2YXJpYWJsZXMiLCJ2IjoieyAgIFwiZGV2aWNlSWRcIjogXCI0XCIgfSIsInZ0IjoianNvbiJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoyNzAsInkiOjc0MCwid2lyZXMiOltbIjdkN2U2Njg5ZjBjNDJmYWMiXV19LHsiaWQiOiJlODE4MDYwYzAwMDg3OTMwIiwidHlwZSI6ImRlYnVnIiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5Ijo3MjAsIndpcmVzIjpbXX0seyJpZCI6IjYyMWI3MzIyNDU2NzFmMmYiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IkVycm9yIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjY5MCwieSI6NzYwLCJ3aXJlcyI6W119LHsiaWQiOiJmOTliYWE2OTkxOGQyYTlhIiwidHlwZSI6ImdyYXBocWwiLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IlBhZ2luYXRpb24iLCJncmFwaHFsIjoiZmQxNjNhMzI1YWEyMWNkYiIsImZvcm1hdCI6InRleHQiLCJ0ZW1wbGF0ZSI6InF1ZXJ5IEdldERldmljZXNQYWdpbmF0ZWQoJGxpbWl0OiBJbnQgPSAxMCwgJG9mZnNldDogSW50ID0gMCwgJHNlYXJjaFRlcm06IFN0cmluZykge1xuICBkZXZpY2VzKGxpbWl0OiAkbGltaXQsIG9mZnNldDogJG9mZnNldCwgc2VhcmNoOiAkc2VhcmNoVGVybSkge1xuICAgIGlkXG4gICAgbmFtZVxuICAgIHR5cGVcbiAgICBsb2NhdGlvblxuICAgIGxhc3RTZWVuU3RhdHVzXG4gICAgY3JlYXRlZEF0XG4gICAgbGFzdFNlZW5BdFxuICB9XG4gIGRldmljZUNvdW50KHNlYXJjaDogJHNlYXJjaFRlcm0pXG59Iiwic3ludGF4IjoibXVzdGFjaGUiLCJ0b2tlbiI6IiIsInNob3dEZWJ1ZyI6ZmFsc2UsIngiOjQ1MCwieSI6ODQwLCJ3aXJlcyI6W1siMzY4ZmJkM2Q0Zjc1NmI2YSJdLFsiY2MxZWY5ZDg4MTA2NTA4MiJdXX0seyJpZCI6IjUwOWFmMTc3YzQ4MGVkMDMiLCJ0eXBlIjoiaW5qZWN0IiwieiI6Ijk4YTYwYjZkZDA4OTZlNDciLCJnIjoiOWEwYzI4OTAyOTg5YjczOSIsIm5hbWUiOiIiLCJwcm9wcyI6W3sicCI6InZhcmlhYmxlcyIsInYiOiJ7ICAgXCJkZXZpY2VJZFwiOiBcIjRcIiB9IiwidnQiOiJqc29uIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsIngiOjI3MCwieSI6ODQwLCJ3aXJlcyI6W1siZjk5YmFhNjk5MThkMmE5YSJdXX0seyJpZCI6IjM2OGZiZDNkNGY3NTZiNmEiLCJ0eXBlIjoiZGVidWciLCJ6IjoiOThhNjBiNmRkMDg5NmU0NyIsImciOiI5YTBjMjg5MDI5ODliNzM5IiwibmFtZSI6IlJlc3VsdCIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo2OTAsInkiOjgyMCwid2lyZXMiOltdfSx7ImlkIjoiY2MxZWY5ZDg4MTA2NTA4MiIsInR5cGUiOiJkZWJ1ZyIsInoiOiI5OGE2MGI2ZGQwODk2ZTQ3IiwiZyI6IjlhMGMyODkwMjk4OWI3MzkiLCJuYW1lIjoiRXJyb3IiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NjkwLCJ5Ijo4NjAsIndpcmVzIjpbXX0seyJpZCI6ImZkMTYzYTMyNWFhMjFjZGIiLCJ0eXBlIjoiZ3JhcGhxbC1zZXJ2ZXIiLCJuYW1lIjoiIiwiZW5kcG9pbnQiOiJub25lIiwidG9rZW4iOiIifSx7ImlkIjoiNTc0NTA0Mzk2ODgxYWE4NSIsInR5cGUiOiJnbG9iYWwtY29uZmlnIiwiZW52IjpbXSwibW9kdWxlcyI6eyJub2RlLXJlZC1jb250cmliLWdyYXBocWwiOiIyLjIuMCJ9fV0=",[2414,2415,2416],"style",{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":12,"searchDepth":161,"depth":161,"links":2418},[2419,2420,2421,2422,2425,2430,2435,2441,2445],{"id":24,"depth":161,"text":25},{"id":62,"depth":161,"text":63},{"id":134,"depth":161,"text":135},{"id":302,"depth":161,"text":303,"children":2423},[2424],{"id":398,"depth":167,"text":399},{"id":611,"depth":161,"text":612,"children":2426},[2427,2428,2429],{"id":618,"depth":167,"text":619},{"id":705,"depth":167,"text":706},{"id":807,"depth":167,"text":399},{"id":927,"depth":161,"text":928,"children":2431},[2432,2433,2434],{"id":943,"depth":167,"text":944},{"id":999,"depth":167,"text":1000},{"id":1078,"depth":167,"text":399},{"id":1284,"depth":161,"text":1285,"children":2436},[2437,2438,2439,2440],{"id":1300,"depth":167,"text":1301},{"id":1598,"depth":167,"text":1599},{"id":1786,"depth":167,"text":1787},{"id":1952,"depth":167,"text":1953},{"id":2081,"depth":161,"text":2082,"children":2442},[2443,2444],{"id":2085,"depth":167,"text":2086},{"id":2150,"depth":167,"text":2151},{"id":2403,"depth":161,"text":2404},"Learn how to integrate GraphQL APIs in Node-RED. This guide covers setting up endpoints, executing queries, handling variables, and using mutations for dynamic data.","md",{},"\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql",{"title":5,"description":2446},"node-red\u002Fintegration-technologies\u002Fgraphql","ckAxuaruaqYSAd8EYm-Qf-8skUfreTIVPgzFsgKvqq8",1780070557519]