Below is an end-to-end example of submitting a ExtractText request using C# programming language:

// Simple program to make and process the results of an ExtractText request to the LEADTOOLS CloudServices.
// In order to run this program, the following changes will need to be added:
//	1) Place your Application ID in the AppId variable in the InitClient method.
//	2) Place your Application Password in the Password variable in the InitClient method.
// The program will perform the following operations in order:
//	1)Perform an ExtractText request to the LEADTOOLS CloudServices.  A successfully made request will return a unique identifier.
//	2)We will then query the services using the GUID -- if the file is finished processing, the body will contain all the
//	  request data.
//	3)We will take the json data that was returned, parse it, and display all the information that was returned.
// This programs makes use of the following NuGet Packages:
//  1) Newtonsoft.Json

using System;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;
using Newtonsoft.Json.Linq;

namespace Azure_Code_Snippets.Tutorial_Code
	class CloudServices_Text
		private string hostedServicesUrl = "";
		public async Task ExtractText()
			var client = InitClient();

			//The first page in the file to mark for processing
			int firstPage = 1;

			//Sending a value of -1 will indicate to the service that all pages in the file should be processed.
			int lastPage = -1;

			// If using URL to the file
			string fileURL = "";
			string recognitionUrl = string.Format("Recognition/ExtractText?firstPage={0}&lastPage={1}&fileurl={2}", firstPage, lastPage, fileURL);
			var result = await client.PostAsync(recognitionUrl, null);

			//If uploading a file as multi-part content:
			HttpContent byteContent = new ByteArrayContent(File.ReadAllBytes(@@"path/to/file"));
			byteContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
				Name = "attachment",
				FileName = "file-name"
			var formData = new MultipartFormDataContent();
			formData.Add(byteContent, "formFieldName");

			string recognitionUrl = string.Format("Recognition/ExtractText?firstPage={0}&lastPage={1}", firstPage, lastPage);
			var result = await client.PostAsync(recognitionUrl, formData);

			if (result.StatusCode == HttpStatusCode.OK)
				//Unique ID returned by the services
				string id = await result.Content.ReadAsStringAsync();
				Console.WriteLine("Unique ID returned by the services: " + id);
				await Query(id, client);
				Console.WriteLine("Request failed with the following response: " + result.StatusCode);

		private async Task Query(string id, HttpClient client)
			string queryUrl = string.Format("Query?id={0}", id.ToString());
			var result = await client.PostAsync(queryUrl, null);
			var returnedContent = await result.Content.ReadAsStringAsync();
			var returnedData = JObject.Parse(returnedContent);
			int fileStatus = (int)returnedData.SelectToken("FileStatus");
			if ( fileStatus == 100 || fileStatus == 123)
				//The file is still being processed -- we will sleep the current thread for 5 seconds before trying again.
				await Task.Delay(5000);
				await Query(id, client);

			Console.WriteLine("File has finished processing with return code: " + returnedData.SelectToken("FileStatus"));
			if ((int)returnedData.SelectToken("FileStatus") != 200)


		private void ParseJson(string json)
			JArray requestArray = JArray.Parse(json);
			foreach (var requestReturn in requestArray)
				Console.WriteLine("Service Type: " + requestReturn.SelectToken("ServiceType"));
				Console.WriteLine("Returned Data:" + requestReturn.SelectToken("data"));

		private HttpClient InitClient()
			string AppId = "Replace with Application ID";
			string Password = "Replace with Application Password";

			HttpClient client = new HttpClient();
			client.BaseAddress = new Uri(hostedServicesUrl);
			client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

			string authData = string.Format("{0}:{1}", AppId, Password);
			string authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));
			client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);

			return client;

Note: This example uses the following additional third-party libraries: Newtonsoft.Json.