Questions

API change history

The “Register of Questions” tool, contains information on requests to EFSA on food and feed safety issues within its remit.

The “Question” entity provides information on the status of activities through the risk assessment process and normally results in a publication, check Risk Assessment for more information. This API allows to retrieve relevant data and overall status of EFSA Questions. The service comes with an advanced filtering feature to retrieve the questions of interest, details are provided in the API page. Check the Register of Questions tool and its help section, for further information about questions.

This API allows to retrieve the list of adopted questions.

getQuestions

The service allows to retrieve EFSA public Questions data by filtering in AND or OR combination on a set of specific criteria. Below the list of fields that can be used in the search (containing illustrative values):

"questionNumber" : [ "EFSA-Q-2008-028" ],
"mandateNumber" : [ "M-2008-0028" ],
"outputNumber" : [ "ON-2425" ],
"unit" : [ "GMO" ], (1)  
"foodSectorArea" : [ "AMR" ], (2) 
"questionType" : [ "Public consultation" ], (3) 
"applicationNumber" : [ "FAD-2012-0018" ],
"subject" : [ "Multi-country outbreak of Salmonella Enteritidis" ],
"applicant" : [ "EFSA" ], (4)
"petitioner" : [ "EFSA" ],
"status" : [ "UNDERCONSIDERATION" ], (5) 
"publicConsultationStatus" : [ "CLOSED" ], (6) 
"activity" : [ "Activity 3 Data Collection" ], (7)
"acceptanceFrom" : "2015-10-13T09:54:56.046",
"acceptanceTo" : "2015-10-13T09:54:56.047",
"adoptionFrom" : "2015-10-13T09:54:56.047",
"adoptionTo" : "2015-10-13T09:54:56.047",
"receptionFrom" : "2015-10-13T09:54:56.048",
"receptionTo" : "2015-10-13T09:54:56.048",
"lastUpdateFrom" : "2015-10-13T09:54:56.048",
"lastUpdateTo" : "2015-10-13T09:54:56.048"
"outputType" : ["Opinion"], (8)
"deadline" : "12", (9)
"typeOfDeadline" : [ "LEGAL" ], (10)    
"mandateType" : [ "EXTERNAL" ], (11)
"publishingDateFrom" : "2016-04-01T00:00:00",
"publishingDateTo" : "2016-04-01T00:00:00",
"mandateAcceptanceDateFrom" : "2016-04-01T00:00:00",
"mandateAcceptanceDateTo" : "2016-04-01T00:00:00",
"mandateRequestor" : [ "MEMBERSTATE" ] (12)

(1) NOTASSIGNED,AFSCO,ALPHA,AMU,APDESK,BIOCONTAM,DATA,FIP,GMO,NUTRI,PRAS,SCER
(2) FIP - Other areas,AFSCO - Other areas,ALPHA - Other areas,AMR,AMU - Other areas,BIOCONTAM - Other areas,Contaminants in food and feed,DATA - Other areas,EFSA Guidance documents,Feed additives - applications,Feed additives - guidances,Food allergens,Food for specific groups,Foodborne outbreaks,GMOs applications for renewal under Reg. 1829/2003 / Commission Implementing Regulation (EU) No 503/2013,GMOs applications under Reg. 1829/2003 / Commission Implementing Regulation (EU) No 503/2013,Health claims Art. 19,Molecular methods,NUTRI - Other areas,Other areas - customer oriented approach,Other substances Reg. 1925/2006,Pesticides - Other areas,Pesticides EFSA Guidance Documents,Pesticides MRL Review (Reg.396/2005 - Art. 12),Pesticides peer review - amendment approval conditions,Pesticides peer review - basic substances,Pesticides peer review - renewal of approval,Pesticides peer review - review of approval,Pesticides PPR Panel,SCER - other areas,Vectorborne diseases,Dietary reference values,RA methodology,Plant Health,Pesticides peer review - re-submission,Pesticides peer review - confirmatory data,Pesticides peer review - included active substances (green track),Pesticides peer review - renewal Annex I inclusion,Pesticides peer review - new active substances,Pesticide MRL,Other substances,Other areas,Nutrient sources,GMO generic,Foodborne zoonosis,Food Hygiene,Food and feed terminology,Feed additives - others,Emerging risks,Data collection and analysis,Pesticides MRL Request (Reg. 396/2005 - Art. 43),Pesticides MRL Monitoring (Reg. 396/2005 - Art. 31),Pesticides MRL Review (Reg. 396/2005 - Art. 12.2),Pesticides MRL Review (Reg. 396/2005 - Art. 12.1),Pesticides MRL Application (Reg. 396/2005 - Art. 10),Processing aids,Food manufacturing processes,Waste management,Upper Levels Vitamins and Minerals,TSE,Smoke Flavouring,Scientific cooperation,Pesticides,Health claims other,Health claims Art. 13/5,Health claims Art. 14,Health claims Art. 13/2,Novel Foods,Micro-organisms,Maximum Residue Limits,Food and feed consumption,Food contact materials,Food Allergy,Food additives,Flavourings,Feed additives - applications linked to 1831/2003,Feed additives - applications under 1831/2003,Enzymes,Dietetic products,GMO notification under Directive (EC) 2001/18/EC (GMO),GMOs applications for renewal under Reg. 1829/2003,GMOs applications under Reg. 1829/2003,Contaminants in Food,Contaminants in Feed,Animal welfare,Animal Diseases,Animal By-Products
(3) Assistance,Procurement,Art 29 \u2013 Scientific opinion,Application,Art 31 \u2013 Scientific and technical assistance,Art 33 \u2013 Data collection,Art 32 \u2013 Scientific studies,Art 34 \u2013 Emerging risks,Art 35 \u2013 Rapid Alert,Art 36 \u2013 Scientific co-operation,Advice,Advisory forum request,Public consultation
(4) EFSA,EP,DG_DEV,DG_ENV,DG_RTD,DG_SANCO,MS_AU,MS_BE,MS_BU,MS_CY,MS_CZ,MS_DK,MS_ET,MS_FN,MS_FR,MS_DE,MS_GR,MS_HU,MS_IL,MS_IT,MS_LT,MS_LH,MS_LX,MS_MA,MS_PL,MS_PO,MS_RO,MS_SL,MS_SV,MS_ES,MS_SW,MS_NL,MS_UK 
(5) INCOMPLETE,UNDERCONSIDERATION,WAITING,NOTACCEPTED,INPROGRESS,DATAREQUESTED,FINISHED,WITHDRAWN,DELETED
(6) UPCOMING,CLOSED,ACTIVE
(7) Activity 1 Provision of Scientific Opinions,Activity 2 Evaluation of Product,Activity 3 Data Collection
(8) Opinion,Guidance,Statement,Scientific Report of EFSA,Reasoned Opinion,Conclusion on Pesticides Peer Review,Guidance of EFSA,Statement Of EFSA,Other outputs,Internal Report,Technical report,Event Report,External Scientific Report
(9) A number from 1 to 12 (to retrieve questions whose deadline is within the specified amount of months)
(10) LEGAL,NEGOTIATED,CLOCKSTOPPED,MISSING_DEADLINE 
(11) INTERNAL,EXTERNAL,SELF_TASK
(12) CHAIR_OF_PANEL,OTHERS,PARLIAMENT,COMMISSION,MEMBERSTATE

Please note:

  • The above listed fields are not mandatory for the query execution, i.e. you can send a request with empty OrFIlter and AndFilter

  • The request is case sensitive, i.e. if you use "UNIT" instead of "unit" as a filter, the field will be ignored

  • The values of the filter fields are case sensitive, i.e. if you search for "questionType" : "PUBLIC consultation" instead of "Public consultation" you will not find the questions matching the desired question type

  • You can use % wildcard, for example you can type "activity" : "Activity 3%" instead of "activity" : "Activity 3 Data Collection"

  • Do not use unneeded blank spaces neither in the filter fields nor in the values (for example "applicant " : " EFSA"). They could make the filter ignored or cause a validation error

  • Use 'true' value for "paginated" parameter; if "paginated" is set to false, the request will not be processed. "pageSize" can not be higher than 100

  • AND and OR filter shall be used separately. Usage of AND and OR filter is exemplified below

{ "paginated" : true, "pageSize" : 10, "pageNum" : 1,
"OrFilter" : { "unit" : "ALPHA", "status" : "INPROGRESS" } }

it returns all questions belonging to APLHA unit plus all questions in status INPROGRESS (even if they belong to other units)

{ "paginated" : true, "pageSize" : 10, "pageNum" : 1,
"AndFilter" : { "unit" : "ALPHA", "status" : "INPROGRESS" } }

it returns only questions belonging to APLHA unit in status INPROGRESS

Try it

Request

Request URL

Request headers

  • (optional)
    string
    Media type of the body sent to the API.
  • string
    Subscription key which provides access to this API. Found in your Profile.

Request body

{
  "paginated" : true,
  "pageSize" : 1,
  "pageNum" : 1,  
  "AndFilter" : {
   "questionNumber" : ["EFSA-Q-2015-00815"]
  }
}

Responses

200 OK

Representations

X-oracle-dms-ecid: gr8rN1B0000000000
X-oracle-dms-rid: 0:1
Proxy-agent: Oracle-Traffic-Director/12.2.1.2.0
Date: Mon, 14 May 2018 15:36:10 GMT
Via: 1.1 otd_opc-config_iam2soadev-jcs-lb-1
Content-Length: 1981
Content-Type: application/json; charset=utf-8

{
  "resultCode": 0,
  "resultDescription": "OK",
  "totalItems": 1,
  "questions": {
    "size": 1,
    "question": [{
      "questionNumber": "EFSA-Q-2015-00815",
      "mandateNumber": "M-2014-0264",
      "outputNumber": "ON-4722",
      "unit": "PRAS",
      "panel": "N/A",
      "foodSectorArea": "Pesticides peer review - renewal of approval",
      "questionType": "Application",
      "subject": "Request for an EFSA peer review (EFSA Conclusion) on the active substance oxasulfuron according to Article 13 of Regulation (EU) No 844/2012.",
      "applicant": "DG_SANCO",
      "petitioner": "TSGE on behalf of AgroChem Maks d.o.o.",
      "status": "FINISHED",
      "activity": "Activity 2 Evaluation of Product",
      "acceptanceDate": "2016-01-28T23:00:00+00:00",
      "adoptionDate": "2017-01-29T23:00:00+00:00",
      "receptionDate": "2013-12-05T23:00:00+00:00",
      "lastUpdate": "2017-06-14T13:27:08.318+00:00",
      "substanceListSize": 1,
      "substanceList": {
        "terms": [{
          "name": "Oxasulfuron",
          "code": "RF-0321-001-PPP"
        }]
      },
      "outputType": "Supporting publications - Technical report",
      "outputSubtype": "Adm guidance",
      "deadline": "2017-01-29T23:00:00+00:00",
      "typeOfDeadline": "LEGAL",
      "subarea": "Application - Pesticides peer review - renewal of approval",
      "acceptanceState": "ACCEPTED",
      "adoptionState": "ADOPTED",
      "publishingDate": "2017-03-12T23:00:00+00:00",
      "comment": "test comment",
      "clockstopDate": "2017-03-12T23:00:00+00:00",
      "mandateType": "EXTERNAL",
      "mandateReceptionDate": "2014-07-16T22:00:00+00:00",
      "mandateAcceptanceDate": "2014-09-16T22:00:00+00:00",
      "mandateAcceptanceState": "ACCEPTED",
      "mandateRequestor": "COMMISSION",
      "EFSAJournalNumber": "EFSA Journal 2017;15(3):4722",
      "digitalObjectIdentifier": "doi:10.2903/j.efsa.2017.4722"
    }]
  }
}

Code samples

@ECHO OFF

curl -v -X POST "https://openscaie-dev.azure-api.net/api/questions/"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: {subscription key}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");

            var uri = "https://openscaie-dev.azure-api.net/api/questions/?" + queryString;

            HttpResponseMessage response;

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes("{body}");

            using (var content = new ByteArrayContent(byteData))
            {
               content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
               response = await client.PostAsync(uri, content);
            }

        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://openscaie-dev.azure-api.net/api/questions/");


            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader("Content-Type", "application/json");
            request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://openscaie-dev.azure-api.net/api/questions/?" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Content-Type","application/json");
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
            },
            type: "POST",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://openscaie-dev.azure-api.net/api/questions/";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"POST"];
    // Request headers
    [_request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://openscaie-dev.azure-api.net/api/questions/');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Content-Type' => 'application/json',
    'Ocp-Apim-Subscription-Key' => '{subscription key}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_POST);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('openscaie-dev.azure-api.net')
    conn.request("POST", "/api/questions/?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('openscaie-dev.azure-api.net')
    conn.request("POST", "/api/questions/?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://openscaie-dev.azure-api.net/api/questions/')


request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
request['Content-Type'] = 'application/json'
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body