x
🚀 Upgrade for $1.29/month. Cancel anytime.
Get Limited Offer

Create questions & flashcards
with 1 API call

Easy To Integrate

Our API is a simple HTTP interface with various options:

Example file: glycolysis-notes.docx

... aldolase is a cytoplasmic enzyme that is required for both gluconeogenesis and glycolysis. During gluconeogenesis, aldolase converts glyceraldehyde-3-phosphate to fructose 1,6-bisphosphate. However during glycolysis, fructose 1,6-bisphosphate is converted to dihydroxyacetone phosphate by an independent catalytic subunit ...

👇
👉

JSON response

						
{
  "response": [
  {
	"key_word": "Aldolase",
	"key_word_definition": "An enzyme of the lyase class that catalyzes the cleavage of fructose 1,6-biphosphate to form dihydroxyacetone phosphate and glyceraldehyde 3-phosphate.",
	"frequency": "2"
  },
	"key_word": "Dihydroxyacetone Phosphate",
	"key_word_definition": "An important intermediate in lipid biosynthesis and in glycolysis.",
	"frequency": "1"
  },
  {
	"key_word": "Glycolysis",
	"key_word_definition": "A metabolic process that converts glucose into two molecules of pyruvic acid through a series of enzymatic reactions.",
	"frequency": "2"
  },
  // Example response truncated
  ]
}

Sample Code

Environment
Code
# valid file extensions: pdf, ppt, pptx, doc, docx, jpg, png
# valid output formats: 'format=flashcards' or 'format=mcq'
$ curl -H 'X-API-Key: INSERT_YOUR_API_KEY_HERE' \ -F 'document_file=@/path/to/file.pdf' \ -F 'format=flashcards' \ -f https://theexaminers.co.uk/api/v1.0/
// Requires "request" to be installed (see https://www.npmjs.com/package/request)
				var request = require('request');
				var fs = require('fs');

				request.post({
				  url: 'https://theexaminers.co.uk/api/v1.0/',
				  formData: {
					file: fs.createReadStream('/path/to/file.pdf'),
					format: 'flashcards',
				  },
				  headers: {
					'X-Api-Key': 'INSERT_YOUR_API_KEY_HERE'
				  },
				  encoding: null
				}, function(error, response, body) {
				  if(error) return console.error('Request failed:', error);
				  if(response.statusCode != 200) return console.error('Error:', response.statusCode, body.toString('utf8'));
				  fs.writeFileSync("response.json", body);
				});
				
# Requires "requests" to be installed (see python-requests.org)
				import requests

				response = requests.post(
					'https://theexaminers.co.uk/api/v1.0/',
					files={'file': open('/path/to/file.pdf', 'rb')},
					data={'format': 'flashcards'},
					headers={'X-Api-Key': 'INSERT_YOUR_API_KEY_HERE'},
				)
				if response.status_code == requests.codes.ok:
					with open('response.json', 'wb') as out:
						out.write(response.content)
				else:
					print("Error:", response.status_code, response.text)
				
// Requires "guzzle" to be installed (see guzzlephp.org)

				$client = new GuzzleHttp\Client();
				$res = $client->post('https://theexaminers.co.uk/api/v1.0/', [
					'multipart' => [
						[
							'name'     => 'file',
							'contents' => fopen('/path/to/file.pdf', 'r')
						],
						[
							'name'     => 'format',
							'contents' => 'flashcards'
						]
					],
					'headers' => [
						'X-Api-Key' => 'INSERT_YOUR_API_KEY_HERE'
					]
				]);

				$fp = fopen("response.json", "wb");
				fwrite($fp, $res->getBody());
				fclose($fp);
				
// Requires "Apache HttpComponents" to be installed (see hc.apache.org)

				Response response = Request.Post("https://theexaminers.co.uk/api/v1.0/")
					.addHeader("X-Api-Key", "INSERT_YOUR_API_KEY_HERE")
					.body(
						MultipartEntityBuilder.create()
						.addBinaryBody("file", new File("/path/to/file.pdf"))
						.addTextBody("format", "flashcards")
						.build()
					).execute();
				response.saveContent(new File("response.json"));
				
// Requires AFNetworking to be installed (see https://github.com/AFNetworking/AFNetworking)

				NSURL *fileUrl = [NSBundle.mainBundle URLForResource:@"file" withExtension:@"pdf"];
				NSData *data = [NSData dataWithContentsOfURL:fileUrl];
				if (!data) {
					return;
				}

				AFHTTPSessionManager *manager =
				[[AFHTTPSessionManager alloc] initWithSessionConfiguration:
				 NSURLSessionConfiguration.defaultSessionConfiguration];

				manager.responseSerializer = [AFImageResponseSerializer serializer];
				[manager.requestSerializer setValue:@"INSERT_YOUR_API_KEY_HERE"
								 forHTTPHeaderField:@"X-Api-Key"];

				NSURLSessionDataTask *dataTask = [manager
												  POST:@"https://theexaminers.co.uk/api/v1.0/"
												  parameters:nil
												  constructingBodyWithBlock:^(id  _Nonnull formData) {
													  [formData appendPartWithFileData:data
																				  name:@"file"
																			  fileName:@"file.pdf"
																			  mimeType:@"image/jpeg"];
												  }
												  progress:nil
												  success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
													  if ([responseObject isKindOfClass:UIImage.class] == false) {
														  return;
													  }

													  self.imageView.image = responseObject;
												  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
													  // Handle error here
												  }];

				[dataTask resume];
				
// Requires Alamofire to be installed (see https://github.com/Alamofire/Alamofire)

				guard let fileUrl = Bundle.main.url(forResource: "file", withExtension: "jpg"),
					let data = try? Data(contentsOf: fileUrl) else { return }

				Alamofire
					.upload(
						multipartFormData: { builder in
							builder.append(
								data,
								withName: "file",
								fileName: "file.pdf",
							)
						},
						to: URL(string: "https://theexaminers.co.uk/api/v1.0/")!,
						headers: [
							"X-Api-Key": "INSERT_YOUR_API_KEY_HERE"
						]
					) { result in
						switch result {
						case .success(let JSON):
							print("print the JSON response");
							}
						case .failure:
							return
						}
					}
using (var client = new HttpClient())
				using (var formData = new MultipartFormDataContent())
				{
					formData.Headers.Add("X-Api-Key", "INSERT_YOUR_API_KEY_HERE");
					formData.Add(new ByteArrayContent(File.ReadAllBytes("/path/to/file.pdf")), "image_file", "file.pdf");
					formData.Add(new StringContent("flashcards"), "format");
					var response = client.PostAsync("https://theexaminers.co.uk/api/v1.0/", formData).Result;

					if(response.IsSuccessStatusCode) {
						FileStream fileStream = new FileStream("response.json", FileMode.Create, FileAccess.Write, FileShare.None);
						response.Content.CopyToAsync(fileStream).ContinueWith((copyTask) =>{ fileStream.Close(); });
					} else {
						Console.WriteLine("Error: " + response.Content.ReadAsStringAsync().Result);
					}
				}
				

Output Formats

You can request one of two formats via the format parameter:

Response output Format parameter Features
Flashcards flashcards Identifies all keywords
Returns relational keywords & definitions
Returns up to 200 keywords per document
Multiple Choice Questions mcq Identifies all keywords
Returns up to 10 related questions, each with 1 correct answer & 4 related distractors
Also returns question acronym expansions

Subjects Covered

allerology, anatomy, biology, biotechnology, biochemistry, bioinformatics, biolinguistics, biomechanics, biophysics, botany, cardiology, cell biology, clinical chemistry, developmental biology, ecology, endocrinology, evolutionary biology, genetics, hematology, histology, immunology, infectious disease, microbiology, molecular biology, nephrology, neuroscience, neurology, oncology, pathology, pathophysiology, pharmacology, physiology, plant biology, plant biochemistry, population biology, respiratory medicine, rheumatology, structural biology, synthetic biology, systems biology, virology, zoology

API Changelog

Most recent API updates: