API Examples

See API Reference for a listing of all available APIs. This section has the setup common to all the API examples. See Authentication for more information on the authentication header. All examples use the third-party python library requests.

import requests

BASE_URL = "http://example.xyz"
USERNAME = "ionadmin"
API_KEY = "efb7a14021732d773a4258b69d9452042a31a6b6"

Fetching all Chips

Using the Chip Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}
object_list = []

next_url = "/rundb/api/v1/chip/"
while next_url:
    response = requests.get(BASE_URL + next_url, headers=headers, params={})
    response.raise_for_status()
    response_data = response.json()

    object_list += response_data["objects"]
    next_url = response_data["meta"]["next"] or None

print object_list
[...]

Adding Filters

Using the Chip Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}
object_list = []

next_url = "/rundb/api/v1/chip/"
while next_url:
    response = requests.get(BASE_URL + next_url, headers=headers, params={"name__startswith": "31"})
    response.raise_for_status()
    response_data = response.json()

    object_list += response_data["objects"]
    next_url = response_data["meta"]["next"] or None

for chip in object_list[0:3]:
    print chip["name"]
314
316
318

Completed Runs and Reports

Using the Composite Experiment Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}
object_list = []

next_url = "/rundb/api/v1/compositeexperiment/"
while next_url:
    response = requests.get(BASE_URL + next_url, headers=headers)
    response.raise_for_status()
    response_data = response.json()

    object_list += response_data["objects"]
    next_url = response_data["meta"]["next"] or None

for experiment in object_list[0:3]:
    print experiment["displayName"]
    for report in experiment["results"]:
        print "    " + report["resultsName"] + " " + report["status"]
S5-530 cfDNA
    Reanalyze Completed
    S5-530_cfDNA Completed
    Auto_S5-530_cfDNA_89 Completed
S5-540 AmpliSeqExome
    S5-540_AmpliSeqExome Importing Failed
    Auto_S5-540_AmpliSeqExome_90 Completed
S5-540 WholeTranscriptomeRNA
    Auto_S5-540_WholeTranscriptomeRNA_91 Importing Failed

Fetching a Report

Using the Results Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}

report_response = requests.get(BASE_URL + "/rundb/api/v1/results/3/", headers=headers)
report_response.raise_for_status()
report_response_data = report_response.json()

print report_response_data["resultsName"]

for plugin_name, plugin_status in report_response_data["pluginState"].items():
    print "    " + plugin_name, plugin_status

lib_metrics_response = requests.get(BASE_URL + report_response_data["libmetrics"][0], headers=headers)
lib_metrics_response.raise_for_status()
lib_metrics_response_data = lib_metrics_response.json()

print "%.1f million reads" % (lib_metrics_response_data["totalNumReads"]/1000000.0)
Auto_S5-540_WholeTranscriptomeRNA_91
    DataExport Completed
    ERCC_Analysis Completed
    sampleID Error
    coverageAnalysis Error
    AssemblerSPAdes Started
    FilterDuplicates Completed
    RunTransfer Completed
94.0 million reads

Planning a Non-barcoded Run

Using the Planned Experiment Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}
plan_json = {
    "library": "hg19",
    "planName": "DOCS_my_plan",
    "sample": "my_sample",
    "chipType": "520",
    "sequencekitname": "Ion S5 Sequencing Kit",
    "librarykitname": "Ion Xpress Plus Fragment Library Kit",
    "templatingKitName": "Ion 520/530 Kit-OT2"
}
response = requests.post(BASE_URL + "/rundb/api/v1/plannedexperiment/", headers=headers, json=plan_json)
response.raise_for_status()
print response.status_code
201

Planning a Barcoded Run

Using the Planned Experiment Resource API.

headers = {"Authorization": "ApiKey " + USERNAME + ":" + API_KEY}
plan_json = {
    "library": "hg19",
    "planName": "DOCS_my_plan",
    "sample": "my_sample",
    "chipType": "520",
    "sequencekitname": "Ion S5 Sequencing Kit",
    "librarykitname": "Ion Xpress Plus Fragment Library Kit",
    "templatingKitName": "Ion 520/530 Kit-OT2",
    "barcodeId": "IonXpress",
    "barcodedSamples": {
        'demo sample 1': {
            'barcodeSampleInfo': {
                'IonXpress_003': {
                    'description': 'description here',
                    'hotSpotRegionBedFile': '',
                    'nucleotideType': 'DNA',
                    'reference': 'hg19',
                    'targetRegionBedFile': ''
                }
            },
            'barcodes': ['IonXpress_003']
        },
        'demo sample 2': {
            'barcodeSampleInfo': {
                'IonXpress_004': {
                    'description': 'description here',
                    'hotSpotRegionBedFile': '',
                    'nucleotideType': 'DNA',
                    'reference': 'hg19',
                    'targetRegionBedFile': ''
                }
            },
            'barcodes': ['IonXpress_004']
        }
    }
}
response = requests.post(BASE_URL + "/rundb/api/v1/plannedexperiment/", headers=headers, json=plan_json)
response.raise_for_status()
print response.status_code
201