root/trunk/grails-app/views/api/index.gsp @ 2225

Revision 2225, 21.2 KB (checked in by work@…, 2 years ago)

- changed application wide secret into a user specific api key which is automatically generated when a user is created. The key is available in the user's profile or through the user administration pages

Line 
1<html>
2<head>
3    <meta name="layout" content="main"/>
4    <style type="text/css">
5        .api {
6            margin-top: -40px;
7        }
8
9        .api .header {
10            color: #ffda27;
11            font-size: 24px;
12            height: 40px;
13        }
14
15        .api h1 {
16            background-color: #006DBA;
17            padding-left: 10px;
18            margin-top: 40px;
19            height: 30px;
20            padding-top: 10px;
21            color: #fff;
22            text-shadow: 0 1px 2px rgba(0, 0, 0, 0.68);
23        }
24
25        .api h2 {
26            font-size: 12px;
27            background-color: #d7e6f1;
28            padding-left: 10px;
29            margin-top: 10px;
30            height: 20px;
31            padding-top: 5px;
32            font-weight: bold;
33            color: #006DBA;
34            text-shadow: 0 1px 1px rgba(0, 0, 0, 0.28);
35        }
36
37        .api h3 {
38            font-size: 12px;
39            font-weight: bold;
40            color: #ee7624;
41            text-shadow: 0 1px 1px rgba(0, 0, 0, 0.28);
42        }
43       
44        .api li {
45            margin-left: 30px;
46        }
47    </style>
48</head>
49<body>
50<div class="api">
51<h1 class="header">API specification</h1>
52
53The API allows third party software to interface with GSCF and connected modules.
54
55<h2>prerequisites</h2>
56    <li>a valid username / password with role ROLE_CLIENT (see <a href="#authenticate">authenticate</a>)</li>
57    <li>an api key (used to calculate the validation md5 hash.
58        <sec:ifLoggedIn>
59            Get your api key <g:link controller="userRegistration" action="profile">here</g:link>
60        </sec:ifLoggedIn>
61        <sec:ifNotLoggedIn>
62            Login to get your api key
63        </sec:ifNotLoggedIn>
64    )</li>
65    <li>a deviceID / clientID (look <a href="https://github.com/4np/UIDevice-with-UniqueIdentifier-for-iOS-5" target="_new">here</a> for iOS)</li>
66
67<h2>available API calls</h2>
68    <li><a href="#authenticate">authenticate</a> - set up / synchronize client-server session</li>
69    <li><a href="#getStudies">getStudies</a> - fetch all (readable) studies</li>
70    <li><a href="#getSubjectsForStudy">getSubjectsForStudy</a> - fetch all subjects in a given study</li>
71    <li><a href="#getAssaysForStudy">getAssaysForStudy</a> - fetch all assays in a given study</li>
72    <li><a href="#getSamplesForAssay">getSamplesForAssay</a> - fetch all samples in a given assay</li>
73    <li><a href="#getMeasurementDataForAssay">getMeasurementDataForAssay</a> - fetch all measurement data for a given assay</li>
74
75<h2>SDK packages</h2>
76    <li><a href="https://github.com/4np/gscf4php" target="_new">PHP</a> - Object Oriented SDK for interacting with GSCF</li>
77
78<a name="authenticate"></a>
79<h1>authenticate</h1>
80<h3>url: <g:createLink controller="api" action="authenticate" absolute="true" /></h3>
81<p>
82    Authenticate a client using <a href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_new">HTTP BASIC authentication</a>.
83    This API call is used to:
84    <li>initially set up a client/server session</li>
85    <li>re-synchronise client/server sessions that become out of sync (e.g. <i>sequence</i> differences)</li>
86<p>
87
88<p>
89    After successful authentication, a session token is returned which should the client should store locally. This session token
90    should be used in all subsequent calls to calculate the validation md5 hash.
91</p>
92<p>
93    This call should also be performed whenever a client/server sessions becomes out of sync (e.g. the client's sequence count
94    differs from the server's sequence count) as the server's sequence count will be returned after successfully authenticating.
95    For security reasons this api method is designed to be called only once (or when sessions are out of sync) as HTTP BASIC authentication
96    is not really secure (if someone is able to sniff your traffic, the authentication md5 hash is easily stolen). API calls are
97    validated using the calculated md5 hash.
98</p>
99<p>
100    Every subsequent request the client does, needs to contain the validation MD5 hash, which is a MD5 sum of the concatenation of the device token,
101    the request sequence and the api key (e.g. <i>md5sum( token + sequence + api key )</i> ).<br/>
102    <i>Note that in order to be able to successfully authenticate or use the API in general, the user should have the ROLE_CLIENT assigned!</i>
103
104    <h2>Request parameters</h2>
105    <table>
106        <thead>
107            <th>argument</th>
108            <th>type</th>
109            <th>length</th>
110            <th>description</th>
111            <th>example</th>
112            <th>required</th>
113        </thead>
114        <tr>
115            <td>deviceID</td>
116            <td>string</td>
117            <td>32</td>
118            <td>a unique ID of the client device / application performing the call (<a href="https://github.com/4np/UIDevice-with-UniqueIdentifier-for-iOS-5" target="_new">iOS example</a>)</td>
119            <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
120            <td>yes</td>
121        </tr>
122    </table>
123
124    <h2>Reply parameters</h2>
125    <table>
126        <thead>
127            <th>argument</th>
128            <th>type</th>
129            <th>length</th>
130            <th>description</th>
131            <th>example</th>
132        </thead>
133        <tr>
134            <td>token</td>
135            <td>string</td>
136            <td>36</td>
137            <td>a unique token for setting up a client session</td>
138            <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
139        </tr>
140        <tr>
141            <td>sequence</td>
142            <td>int</td>
143            <td>-</td>
144            <td>the api call count for this session</td>
145            <td>231</td>
146        </tr>
147    </table>
148
149    <h2>example reply</h2>
150    <blockquote>
151        {"token":"78b070a6-e68c-436e-a81b-2db08840e809","sequence":0}
152    </blockquote>
153</p>
154
155<a name="getStudies"></a>
156<h1>getStudies</h1>
157<h3>url: <g:createLink controller="api" action="getStudies" absolute="true" /></h3>
158<p>
159    Returns the studies which are <i>readable</i> and/or <i>writable</i> for the client. If the client should get access to a particular
160    study, the client's username (used to authenticate) should be added as a reader to the study.
161
162    <h2>Request parameters</h2>
163    <table>
164        <thead>
165            <th>argument</th>
166            <th>type</th>
167            <th>length</th>
168            <th>description</th>
169            <th>example</th>
170            <th>required</th>
171        </thead>
172        <tr>
173            <td>deviceID</td>
174            <td>string</td>
175            <td>36 (max)</td>
176            <td>a unique ID of the client device / application performing the call</td>
177            <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
178            <td>yes</td>
179        </tr>
180        <tr>
181            <td>validation</td>
182            <td>string</td>
183            <td>-</td>
184            <td><a href="http://www.miraclesalad.com/webtools/md5.php" target="_new">md5sum</a>( token + sequence + api key )</td>
185            <td>9ae87836d38d4b86be6aeff93f2b049a</td>
186            <td>yes</td>
187        </tr>
188    </table>
189
190    <h2>example reply</h2>
191    <blockquote>
192        {"count":2,"studies":[{"token":"f2e085fb-9138-4ebe-a59f-82f1bdc21d7e","title":"NuGO PPS human study","description":"Human study performed at RRI; centres involved: RRI, IFR, TUM, Maastricht U.","subjects":11,"species":["Homo sapiens"],"assays":["Mass Sequencing module","SAM module for clinical data","Metabolomics module"],"events":1,"uniqueEvents":["start: 3 days, 22 hours, duration: 8 hours"],"samplingEvents":2,"uniqueSamplingEvents":["start: 0 seconds","start: 4 days, 6 hours"],"eventGroups":1,"uniqueEventGroups":["Root group"],"samples":22},{"token":"6b7e85b3-b174-492c-ba27-fbfb71ab9b8b","title":"NuGO PPS3 mouse study leptin module","description":"C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet.","subjects":80,"species":["Mus musculus"],"assays":["SAM module for clinical data","Metabolomics module"],"events":8,"uniqueEvents":["start: 1 hour, duration: 1 week","start: 1 hour, duration: 4 weeks"],"samplingEvents":2,"uniqueSamplingEvents":["start: 1 week, 1 hour"],"eventGroups":8,"uniqueEventGroups":["10% fat + vehicle for 1 week","10% fat + leptin for 1 week","45% fat + vehicle for 1 week","45% fat + leptin for 1 week","10% fat + vehicle for 4 weeks","10% fat + leptin for 4 weeks","45% fat + vehicle for 4 weeks","45% fat + leptin for 4 weeks"],"samples":80}]}
193    </blockquote>
194</p>
195
196<a name="getSubjectsForStudy"></a>
197<h1>getSubjectsForStudy</h1>
198<h3>url: <g:createLink controller="api" action="getSubjectsForStudy" absolute="true" /></h3>
199<p>
200    Returns the subjects for a particular study
201
202    <h2>Request parameters</h2>
203    <table>
204        <thead>
205            <th>argument</th>
206            <th>type</th>
207            <th>length</th>
208            <th>description</th>
209            <th>example</th>
210            <th>required</th>
211        </thead>
212        <tr>
213            <td>deviceID</td>
214            <td>string</td>
215            <td>36 (max)</td>
216            <td>a unique ID of the client device / application performing the call</td>
217            <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
218            <td>yes</td>
219        </tr>
220        <tr>
221            <td>validation</td>
222            <td>string</td>
223            <td>-</td>
224            <td><a href="http://www.miraclesalad.com/webtools/md5.php" target="_new">md5sum</a>( token + sequence + api key )</td>
225            <td>9ae87836d38d4b86be6aeff93f2b049a</td>
226            <td>yes</td>
227        </tr>
228        <tr>
229            <td>studyToken</td>
230            <td>string</td>
231            <td>255</td>
232            <td>study token (see getStudies)</td>
233            <td>b6e0c6f4-d8db-4a43-91fa-a157d2d492f0</td>
234            <td>yes</td>
235        </tr>
236    </table>
237
238    <h2>example reply</h2>
239    <blockquote>
240        {"count":11,"subjects":[{"id":81,"name":"1","species":"Homo sapiens","Gender":"Female","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":82,"name":"2","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":83,"name":"3","species":"Homo sapiens","Gender":"Female","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":84,"name":"4","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":85,"name":"5","species":"Homo sapiens","Gender":"Female","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":86,"name":"6","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":87,"name":"7","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":88,"name":"8","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":89,"name":"9","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":90,"name":"10","species":"Homo sapiens","Gender":"Male","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null},{"id":91,"name":"11","species":"Homo sapiens","Gender":"Female","Age":null,"DOB":null,"Height":null,"Weight":null,"BMI":null,"Race":null,"Waist circumference":null,"Hip circumference":null,"Systolic blood pressure":null,"Diastolic blood pressure":null,"Heart rate":null,"Run-in-food":null}]}
241    </blockquote>
242</p>
243
244<a name="getAssaysForStudy"></a>
245<h1>getAssaysForStudy</h1>
246<h3>url: <g:createLink controller="api" action="getAssaysForStudy" absolute="true" /></h3>
247<p>
248    Returns the assays for a particular study
249
250    <h2>Request parameters</h2>
251    <table>
252        <thead>
253        <th>argument</th>
254        <th>type</th>
255        <th>length</th>
256        <th>description</th>
257        <th>example</th>
258        <th>required</th>
259        </thead>
260        <tr>
261            <td>deviceID</td>
262            <td>string</td>
263            <td>36 (max)</td>
264            <td>a unique ID of the client device / application performing the call</td>
265            <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
266            <td>yes</td>
267        </tr>
268        <tr>
269            <td>validation</td>
270            <td>string</td>
271            <td>-</td>
272            <td><a href="http://www.miraclesalad.com/webtools/md5.php" target="_new">md5sum</a>( token + sequence + api key )</td>
273            <td>9ae87836d38d4b86be6aeff93f2b049a</td>
274            <td>yes</td>
275        </tr>
276        <tr>
277            <td>studyToken</td>
278            <td>string</td>
279            <td>255</td>
280            <td>study token (see getStudies)</td>
281            <td>b6e0c6f4-d8db-4a43-91fa-a157d2d492f0</td>
282            <td>yes</td>
283        </tr>
284    </table>
285
286    <h2>example reply</h2>
287    <blockquote>
288        {"count":6,"assays":[{"token":"253ec24f-9bac-4f2b-b9cf-f84b86376a4e","name":"16S Sequencing assay","module":"Mass Sequencing module","Description":null},{"token":"4df2f49d-1d8c-48bd-8ebd-d267164948ec","name":"18S Sequencing assay","module":"Mass Sequencing module","Description":null},{"token":"828cf2d6-d797-484b-82f9-df9933d76d77","name":"Glucose assay after","module":"SAM module for clinical data","Description":null},{"token":"d68e8fed-41ca-4408-9d8e-f3598eca9183","name":"Glucose assay before","module":"SAM module for clinical data","Description":null},{"token":"32945764-6c5e-497c-8b1e-0d5e0dfa8221","name":"Lipidomics profile after","module":"Metabolomics module","Description":null,"Spectrometry technique":"GC/MS"},{"token":"92f42f77-1c13-4b25-aa57-b444e355fbf4","name":"Lipidomics profile before","module":"Metabolomics module","Description":null,"Spectrometry technique":"GC/MS"}]}
289    </blockquote>
290</p>
291
292<a name="getSamplesForAssay"></a>
293<h1>getSamplesForAssay</h1>
294<h3>url: <g:createLink controller="api" action="getSamplesForAssay" absolute="true" /></h3>
295<p>
296    Returns the samples data for a particular assay
297
298<h2>Request parameters</h2>
299<table>
300    <thead>
301    <th>argument</th>
302    <th>type</th>
303    <th>length</th>
304    <th>description</th>
305    <th>example</th>
306    <th>required</th>
307    </thead>
308    <tr>
309        <td>deviceID</td>
310        <td>string</td>
311        <td>36 (max)</td>
312        <td>a unique ID of the client device / application performing the call</td>
313        <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
314        <td>yes</td>
315    </tr>
316    <tr>
317        <td>validation</td>
318        <td>string</td>
319        <td>-</td>
320        <td><a href="http://www.miraclesalad.com/webtools/md5.php" target="_new">md5sum</a>( token + sequence + api key )</td>
321        <td>9ae87836d38d4b86be6aeff93f2b049a</td>
322        <td>yes</td>
323    </tr>
324    <tr>
325        <td>assayToken</td>
326        <td>string</td>
327        <td>255</td>
328        <td>assay token (see getAssays)</td>
329        <td>b6e0c6f4-d8db-4a43-91fa-a157d2d492f0</td>
330        <td>yes</td>
331    </tr>
332</table>
333
334<h2>example reply</h2>
335<blockquote>
336    {
337    "count":
338    11,
339    "samples":
340    [
341    {
342    "Remarks":
343    null,
344    "Sample measured volume":
345    null,
346    "Text on vial":
347    "T58.66620961739546",
348    "material":
349    "blood plasma",
350    "name":
351    "7_A",
352    "token":
353    "c705668a-81c4-4d80-83df-96bb477aeb0b"
354    },
355    {
356    "Remarks":
357    null,
358    "Sample measured volume":
359    null,
360    "Text on vial":
361    "T39.7483280873287",
362    "material":
363    "blood plasma",
364    "name":
365    "9_A",
366    "token":
367    "d81bdda8-4684-45b9-b254-1ec4756cfc71"
368    },
369    {
370    "Remarks":
371    null,
372    "Sample measured volume":
373    null,
374    "Text on vial":
375    "T43.20628871191769",
376    "material":
377    "blood plasma",
378    "name":
379    "2_A",
380    "token":
381    "2f501b55-ffdd-4bf2-a598-dcf24d3fac63"
382    },
383    {
384    "Remarks":
385    null,
386    "Sample measured volume":
387    null,
388    "Text on vial":
389    "T88.40760089710538",
390    "material":
391    "blood plasma",
392    "name":
393    "8_A",
394    "token":
395    "f908ae2a-3df7-4eb7-be2a-0b8859c20bfc"
396    },
397    {
398    "Remarks":
399    null,
400    "Sample measured volume":
401    null,
402    "Text on vial":
403    "T58.14619508995611",
404    "material":
405    "blood plasma",
406    "name":
407    "11_A",
408    "token":
409    "6763cff4-8113-4614-85b9-ef98fb34beba"
410    },
411    {
412    "Remarks":
413    null,
414    "Sample measured volume":
415    null,
416    "Text on vial":
417    "T71.86067212685215",
418    "material":
419    "blood plasma",
420    "name":
421    "6_A",
422    "token":
423    "5a339aaa-9bb6-4a0a-9ce7-4c42ceaf5771"
424    },
425    {
426    "Remarks":
427    null,
428    "Sample measured volume":
429    null,
430    "Text on vial":
431    "T2.395117860298579",
432    "material":
433    "blood plasma",
434    "name":
435    "3_A",
436    "token":
437    "a9e73abe-aed3-4c43-8fe7-a6b3dfe6e2ed"
438    },
439    {
440    "Remarks":
441    null,
442    "Sample measured volume":
443    null,
444    "Text on vial":
445    "T98.99437236833568",
446    "material":
447    "blood plasma",
448    "name":
449    "10_A",
450    "token":
451    "3e63a493-c69d-4cd4-ba23-eeafe962b17f"
452    },
453    {
454    "Remarks":
455    null,
456    "Sample measured volume":
457    null,
458    "Text on vial":
459    "T25.420102086098005",
460    "material":
461    "blood plasma",
462    "name":
463    "4_A",
464    "token":
465    "34d5611b-7407-489a-b25a-00ad2b0d8789"
466    },
467    {
468    "Remarks":
469    null,
470    "Sample measured volume":
471    null,
472    "Text on vial":
473    "T69.55369597806298",
474    "material":
475    "blood plasma",
476    "name":
477    "1_A",
478    "token":
479    "5c9dce07-ca4d-4bcb-8ac3-c8488bd7247a"
480    },
481    {
482    "Remarks":
483    null,
484    "Sample measured volume":
485    null,
486    "Text on vial":
487    "T50.41146383561054",
488    "material":
489    "blood plasma",
490    "name":
491    "5_A",
492    "token":
493    "21a07d33-6d95-46f9-a80d-cd58d7e140d0"
494    }
495    ]
496    }
497</blockquote>
498</p>
499
500<a name="getMeasurementDataForAssay"></a>
501<h1>getMeasurementDataForAssay</h1>
502<h3>url: <g:createLink controller="api" action="getMeasurementDataForAssay" absolute="true" /></h3>
503<p>
504    Returns the measurement data for a particular assay
505
506<h2>Request parameters</h2>
507<table>
508    <thead>
509    <th>argument</th>
510    <th>type</th>
511    <th>length</th>
512    <th>description</th>
513    <th>example</th>
514    <th>required</th>
515    </thead>
516    <tr>
517        <td>deviceID</td>
518        <td>string</td>
519        <td>36 (max)</td>
520        <td>a unique ID of the client device / application performing the call</td>
521        <td>9ae87836-d38d-4b86-be6a-eff93f2b049a</td>
522        <td>yes</td>
523    </tr>
524    <tr>
525        <td>validation</td>
526        <td>string</td>
527        <td>-</td>
528        <td><a href="http://www.miraclesalad.com/webtools/md5.php" target="_new">md5sum</a>( token + sequence + api key )</td>
529        <td>9ae87836d38d4b86be6aeff93f2b049a</td>
530        <td>yes</td>
531    </tr>
532    <tr>
533        <td>assayToken</td>
534        <td>string</td>
535        <td>255</td>
536        <td>assay token (see getAssays)</td>
537        <td>b6e0c6f4-d8db-4a43-91fa-a157d2d492f0</td>
538        <td>yes</td>
539    </tr>
540</table>
541
542<h2>example reply</h2>
543<blockquote>
544    {
545    "measurements":
546    {
547    "07378e29-3233-4e3f-b4ea-007f9f9b1317":
548    {
549    "Fat Depot":
550    310
551    },
552    "198183b1-d402-4f24-9c5a-396f79bb6a55":
553    {
554    "Fat Depot":
555    1918
556    },
557    "2c719340-eb7f-4a70-8527-c64cc74dc542":
558    {
559    "Fat Depot":
560    1039
561    },
562    "4861fc77-1320-4401-b18a-66b1cd67d2c8":
563    {
564    "Fat Depot":
565    411
566    },
567    "4edff5ad-c3af-41da-8efe-87f5a018912a":
568    {
569    "Fat Depot":
570    368
571    },
572    "6bfe2a0d-3af0-4ed8-8144-56840e934f6e":
573    {
574    "Fat Depot":
575    456
576    },
577    "775666dd-05b1-4f35-ac9c-d36f8257eb1a":
578    {
579    "Fat Depot":
580    2075
581    },
582    "7e9930bc-ec8c-4e74-bd2b-49d6c852eeda":
583    {
584    "Fat Depot":
585    945
586    },
587    "a4d16db8-49f2-4dc2-81bb-910e574c804a":
588    {
589    "Fat Depot":
590    311
591    },
592    "a556b145-dd37-4568-92f1-e3a251653276":
593    {
594    "Fat Depot":
595    1150
596    },
597    "c180d727-8d6c-4673-a5fd-1c28f04b8aaa":
598    {
599    "Fat Depot":
600    347
601    },
602    "e888b1b1-1dc8-45ed-8196-00338fa3b36f":
603    {
604    "Fat Depot":
605    1387
606    },
607    "f7392df1-a754-4957-a1d0-c98bbb91080d":
608    {
609    "Fat Depot":
610    318
611    },
612    "fc755220-b2b4-43ed-adf8-e4323fc62b55":
613    {
614    "Fat Depot":
615    1308
616    }
617    }
618    }
619</blockquote>
620</p>
621
622</div>
623</body>
624</html>
Note: See TracBrowser for help on using the browser.