This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Annotate variants with ensembl rest api

I have a variant file (.vcf.gz), and I want to annotate this file using the Ensembl Rest API, particularly the Vep Rest API. I am new to this variant annotation; however, I have seen a couple of codes from the Ensembl page on how to do this, but I do not know where to input my data (sample.vcf.gz):

  import requests, sys

    server = "https://rest.ensembl.org"
    ext = "/vep/human/hgvs/9:g.22125504G>C?"

    r = requests.get(server+ext, headers={ "Content-Type" : "application/json"})

    if not r.ok:
      r.raise_for_status()
      sys.exit()

    decoded = r.json()
    print(repr(decoded))

I did try my hands on some codes as well but I always get this error message: Error: Failed to retrieve data from Ensembl REST API. Status code: 500.

    def annotate_variants_with_ensembl_rest_api(input_vcf, output_tsv):
    # Ensembl REST API URL for VEP
    server = "https://rest.ensembl.org/vep/human/hgvs"

    # Load compressed VCF file
    with gzip.open(input_vcf, 'rt') as vcf_file:
        vcf_content = vcf_file.read()

    # Define headers for the HTTP request
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    # Define data for the HTTP POST request
    data = {
        'hgvs_notations': vcf_content,
        'assembly_name': 'GRCh38',
        'plugin': ['human']
    }

    # Make an HTTP POST request to Ensembl REST API
    response = requests.post(server, headers=headers, json=data)

Any help will be much appreciated!

ensembl

1 answer

Hi andrewsf.adu,

From the script you shared, it seems that you have used the VEP endpoint that requires HGVS formatted variants as input:

ext = "/vep/human/hgvs/9:g.22125504G>C?"

However, it seems that your input is in VCF format. You'll need to parse your VCF file to ensure your input data matches the required

Also, when specifying the extension for the POST endpoint, you don't need to include any data as you have done if your example:

/vep/human/hgvs

You can check the example request in the documentation page for each endpoint to see the formatting and required parameters for each VEP endpoint. E.g: https://rest.ensembl.org/documentation/info/vep_hgvs_post

We have a freely available online course for using the Ensembl REST API: https://www.ebi.ac.uk/training/online/courses/ensembl-rest-api/take-the-course/

Module 6 covers POST queries although the other modules also include examples of using the VEP endpoints.

Log in to answer this question.