# Creating Samples and Projects via the API

### Assumptions

The incoming message contains the following:

* Project ID or Name
* Sample ID or Name
* Container ID or Name
* Container type (plate / tube type)
* Container well position (if sample is on a plate) eg G:2
* Sample user-defined fields (UDFs) / custom fields

### Main Logic <a href="#logic" id="logic"></a>

```
Does the project exist?
    if NO: create it
Does the container exist?
    if NO: create it
Create sample
```

### Create a Sample: <a href="#createsample" id="createsample"></a>

**POST** to <https://your\\_server/api/v2/samples>:

```
<?xml version="1.0" encoding="UTF-8"?>
<smp:samplecreation xmlns:smp="http://genologics.com/ri/sample" xmlns:udf="http://genologics.com/ri/userdefined">
    <name>20140909-1</name>
    <project uri="https://your_server/api/v2/projects/ROS210"></project>
    <location>
        <container uri="https://your_server/api/v2/containers/27-195"></container>
        <value>1:1</value>
    </location>
    <udf:field name="Reference Genome">Cane Toad</udf:field>
</smp:samplecreation>
```

We receive something like the following:

```
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<smp:sample uri="https://your_server/api/v2/samples/ROS210A14" limsid="ROS210A14">
    <name>20140909-1</name>
    <date-received>2014-09-10</date-received>
    <project limsid="ROS210" uri="https://your_server/api/v2/projects/ROS210" />
    <submitter uri="https://your_server/api/v2/researchers/1">
        <first-name>System</first-name>
        <last-name>Administrator</last-name>
    </submitter>
    <artifact limsid="ROS210A14PA1" uri="https://your_server/api/v2/artifacts/ROS210A14PA1?state=4262" />
    <udf:field type="String" name="Reference Genome">Cane Toad</udf:field>
</smp:sample>
```

#### Create a Project: <a href="#createproject" id="createproject"></a>

**POST** to <https://your\\_server/api/v2/projects>

```
<?xml version="1.0" encoding="UTF-8"?>
<prj:project xmlns:udf="http://genologics.com/ri/userdefined" xmlns:ri="http://genologics.com/ri" xmlns:file="http://genologics.com/ri/file" xmlns:prj="http://genologics.com/ri/project">
      <name>Week 39</name>
      <open-date>2014-09-10</open-date>
      <researcher uri="https://your_server/api/v2/researchers/1"/>
</prj:project>
```

We receive something like the following:

<pre><code>&#x3C;?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<strong>&#x3C;prj:project uri="https://your_server/api/v2/projects/ADM372" limsid="ADM372">
</strong>    &#x3C;name>Week 39&#x3C;/name>
    &#x3C;open-date>2014-09-10&#x3C;/open-date>
    &#x3C;researcher uri="https://your_server/api/v2/researchers/1" />
&#x3C;/prj:project> 
</code></pre>

#### Create a Container (tube): <a href="#createtube" id="createtube"></a>

**POST** to <https://your\\_server/api/v2/containers>:

```
<?xml version="1.0" encoding="UTF-8"?>
<con:container xmlns:con="http://genologics.com/ri/container">
      <name>Example Container 20140910</name>
      <type uri="https://your_server/api/v2/containertypes/2" name="Tube"/>
</con:container>
```

We receive something like the following:

<pre><code>&#x3C;?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<strong>&#x3C;con:container uri="https://your_server/api/v2/containers/27-1869" limsid="27-1869">
</strong>    &#x3C;name>Example Container 20140910&#x3C;/name>
    &#x3C;type uri="https://your_server/api/v2/containertypes/2" name="Tube" />
    &#x3C;occupied-wells>0&#x3C;/occupied-wells>
    &#x3C;state>Empty&#x3C;/state>
&#x3C;/con:container>
</code></pre>

#### Create a Container (96 well plate): <a href="#createplate" id="createplate"></a>

**POST** to <https://your\\_server/api/v2/containers>:

```
<?xml version="1.0" encoding="UTF-8"?>
<con:container xmlns:con="http://genologics.com/ri/container">
    <name>Example Plate 20140910</name>
    <type uri="https://your_server/api/v2/containertypes/1" name="96 well plate"/>
</con:container> 
```

We receive something like the following:

<pre><code>&#x3C;?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<strong>&#x3C;con:container uri="https://your_server/api/v2/containers/27-1870" limsid="27-1870">
</strong>    &#x3C;name>Example Plate 20140910&#x3C;/name>
    &#x3C;type uri="https://your_server/api/v2/containertypes/1" name="96 well plate" />
    &#x3C;occupied-wells>0&#x3C;/occupied-wells>
    &#x3C;state>Empty&#x3C;/state>
&#x3C;/con:container> 
</code></pre>

#### Create a Sample in the 96 Well Plate Rreated, and the Project Created: <a href="#createsampleinplate" id="createsampleinplate"></a>

**POST** to <https://your\\_server/api/v2/samples>:

<pre><code>&#x3C;?xml version="1.0" encoding="UTF-8"?>
&#x3C;smp:samplecreation xmlns:smp="http://genologics.com/ri/sample" xmlns:udf="http://genologics.com/ri/userdefined">
      &#x3C;name>20140909-1&#x3C;/name>
<strong>      &#x3C;project uri="https://your_server/api/v2/projects/ADM372">&#x3C;/project>
</strong>      &#x3C;location>
<strong>            &#x3C;container uri="https://your_server/api/v2/containers/27-1870">&#x3C;/container>
</strong>            &#x3C;value>G:2&#x3C;/value>
      &#x3C;/location>
      &#x3C;udf:field name="Reference Genome">Cane Toad&#x3C;/udf:field>
&#x3C;/smp:samplecreation>
</code></pre>

We receive something like the following:

<pre><code>&#x3C;?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
&#x3C;smp:sample uri="https://your_server/api/v2/samples/ADM372A2" limsid="ADM372A2">
    &#x3C;name>20140909-1&#x3C;/name>
    &#x3C;date-received>2014-09-10&#x3C;/date-received>
<strong>    &#x3C;project limsid="ADM372" uri="https://your_server/api/v2/projects/ADM372" />
</strong>     &#x3C;submitter uri="https://your_server/api/v2/researchers/1">
        &#x3C;first-name>System&#x3C;/first-name>
        &#x3C;last-name>Administrator&#x3C;/last-name>
    &#x3C;/submitter>
    &#x3C;artifact limsid="ADM372A2PA1" uri="https://your_server/api/v2/artifacts/ADM372A2PA1?state=4264" />
    &#x3C;udf:field type="String" name="Reference Genome">Cane Toad&#x3C;/udf:field>
 &#x3C;/smp:sample>
</code></pre>

#### Confirm the Project Exists <a href="#confirmproject" id="confirmproject"></a>

**GET**: <https://your\\_server/api/v2/projects?name=**Week%2039>\*\*

If the project exists, we receive something like the following:

<pre><code>&#x3C;prj:projects xmlns:prj="http://genologics.com/ri/project">
    &#x3C;project uri="https://your_server/api/v2/projects/ADM372" limsid="ADM372">
<strong>        &#x3C;name>Week 39&#x3C;/name>
</strong>    &#x3C;/project>
&#x3C;/prj:projects>
</code></pre>

If the project does not exist, we receive something like the following:

```
<prj:projects xmlns:prj="http://genologics.com/ri/project"/>
```

#### Confirm the Container Exists <a href="#confirmcontainer" id="confirmcontainer"></a>

**GET:** <https://your\\_server/api/v2/containers?name=**Example%20Container%2020140910>\*\*

If the container exists, we receive something like the following:

<pre><code>&#x3C;con:containers xmlns:con="http://genologics.com/ri/container">
<strong>    &#x3C;container uri="https://your_server/api/v2/containers/27-1869" limsid="27-1869">
</strong><strong>        &#x3C;name>Example Container 20140910&#x3C;/name>
</strong>    &#x3C;/container>
&#x3C;/con:containers>
</code></pre>

If the container does not exist, we receive something like the following:

```
<con:containers xmlns:con="http://genologics.com/ri/container"/>
```
