Реализация функций на C#

								using System;
								using System.Collections.Generic;
								using System.IO;
								using System.Linq;
								using System.Net;
								using System.Text;
								using System.Web.Script.Serialization;

								public class PSCWebApi
								{
									private const string BaseUrl = "https://pscw.autoxp.ru/api.aspx";
									private string _sessionToken;
									private readonly string _licenseKey;
									private readonly string _syncCode;

									public PSCWebApi(string licenseKey, string syncCode)
									{
										_licenseKey = licenseKey;
										_syncCode = syncCode;
									}
									#region Core Methods

									private string GetRequest(Dictionary<string, string> parameters)
									{
										var queryString = string.Join("&", 
											parameters.Select(kvp => $"{kvp.Key}={WebUtility.UrlEncode(kvp.Value)}"));
										var request = WebRequest.Create($"{BaseUrl}?{queryString}");
										request.Method = "GET";
										using (var response = request.GetResponse())
										using (var reader = new StreamReader(response.GetResponseStream()))
										{
											return reader.ReadToEnd();
										}
									}

									private string PostRequest(Dictionary<string, string> parameters)
									{
										var request = WebRequest.Create(BaseUrl);
										request.Method = "POST";
										request.ContentType = "application/x-www-form-urlencoded";
										var postData = string.Join("&", 
											parameters.Select(kvp => $"{kvp.Key}={WebUtility.UrlEncode(kvp.Value)}"));
										var byteArray = Encoding.UTF8.GetBytes(postData);
										using (var dataStream = request.GetRequestStream())
										{
											dataStream.Write(byteArray, 0, byteArray.Length);
										}
										using (var response = request.GetResponse())
										using (var reader = new StreamReader(response.GetResponseStream()))
										{
											return reader.ReadToEnd();
										}
									}

									private string UploadFile(string url, Dictionary<string, string> parameters, string filePath)
									{
										var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
										var request = WebRequest.Create(url);
										request.Method = "POST";
										request.ContentType = "multipart/form-data; boundary=" + boundary;
										using (var requestStream = request.GetRequestStream())
										using (var writer = new StreamWriter(requestStream))
										{
											// Add parameters
											foreach (var param in parameters)
											{
												writer.WriteLine("--{0}", boundary);
												writer.WriteLine("Content-Disposition: form-data; name=\"{0}\"", param.Key);
												writer.WriteLine();
												writer.WriteLine(param.Value);
											}
											// Add file
											var fileName = Path.GetFileName(filePath);
											writer.WriteLine("--{0}", boundary);
											writer.WriteLine("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"", fileName);
											writer.WriteLine("Content-Type: application/octet-stream");
											writer.WriteLine();
											writer.Flush();
											using (var fileStream = File.OpenRead(filePath))
											{
												fileStream.CopyTo(requestStream);
											}
											writer.WriteLine();
											writer.WriteLine("--{0}--", boundary);
											writer.Flush();
										}
										using (var response = request.GetResponse())
										using (var reader = new StreamReader(response.GetResponseStream()))
										{
											return reader.ReadToEnd();
										}
									}
									#endregion
									#region API Methods

									// Авторизация в системе
									public bool Login()
									{
										var parameters = new Dictionary<string, string>
										{
											{"keynumber", _licenseKey},
											{"codesync", _syncCode}
										};
										var response = GetRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
										var serializer = new JavaScriptSerializer();
										var result = serializer.Deserialize<Dictionary<string, string>>(response);
										_sessionToken = result["ses"];
										return !string.IsNullOrEmpty(_sessionToken);
									}

									// Получение списка документов
									public Dictionary<string, object> GetDocumentsList(string fields = "", int count = 200)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"task", "listofdocs"}
										};
										if (!string.IsNullOrEmpty(fields)) parameters.Add("fields", fields);
										if (count != 200) parameters.Add("countofdocs", count.ToString());
										var response = PostRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
										var serializer = new JavaScriptSerializer();
										return serializer.Deserialize<Dictionary<string, object>>(response);
									}

									// Создание нового документа
									public string CreateDocument(string templateCode)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"bnk", templateCode}
										};
										var response = GetRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
										var serializer = new JavaScriptSerializer();
										var result = serializer.Deserialize<Dictionary<string, string>>(response);
										return result["doc"];
									}

									// Получение значения поля документа
									public string GetFieldValue(string documentId, string fieldName)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"doc", documentId},
											{"frmfield", fieldName}
										};
										var response = GetRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
										var serializer = new JavaScriptSerializer();
										var result = serializer.Deserialize<Dictionary<string, string>>(response);
										return result["val"];
									}

									// Установка значения поля документа
									public void SetFieldValue(string documentId, string fieldName, string value)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"doc", documentId},
											{"frmfield", fieldName},
											{"val", value ?? "null"}
										};
										var response = PostRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
									}

									// Добавление изображения в документ
									public void AddImage(string documentId, string galleryId, string imagePath, 
										string comment = null, string geoLat = null, string geoLon = null)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"doc", documentId},
											{"task", "addimage"},
											{"gallery", galleryId}
										};
										if (!string.IsNullOrEmpty(comment)) parameters.Add("comment", comment);
										if (!string.IsNullOrEmpty(geoLat)) parameters.Add("geoposlat", geoLat);
										if (!string.IsNullOrEmpty(geoLon)) parameters.Add("geoposlon", geoLon);
										var response = UploadFile(BaseUrl, parameters, imagePath);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
									}

									// Получение статуса документа
									public string GetDocumentStatus(string documentId)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"doc", documentId},
											{"task", "getdocstatus"}
										};
										var response = GetRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
										var serializer = new JavaScriptSerializer();
										var result = serializer.Deserialize<Dictionary<string, string>>(response);
										return result["docstatus"];
									}

									// Установка статуса документа
									public void SetDocumentStatus(string documentId, string status)
									{
										var parameters = new Dictionary<string, string>
										{
											{"ses", _sessionToken},
											{"doc", documentId},
											{"task", "setdocstatus"},
											{"val", status}
										};
										var response = GetRequest(parameters);
										if (response.StartsWith("!"))
										{
											throw new Exception(response);
										}
									}
									#endregion
								}
							

Пример использования

								var api = new PSCWebApi("ВАШ_LICENSE_KEY", "ВАШ_SYNC_CODE");

								// Авторизация
								if (api.Login())
								{
									// Создание документа ОСАГО
									var docId = api.CreateDocument("AST00100");
									
									// Установка значений полей
									api.SetFieldValue(docId, "model", "TOYOTA Corolla");
									api.SetFieldValue(docId, "vin", "NMTBB01190R111111");
									
									// Добавление изображения
									api.AddImage(
										docId, 
										"imgBROWSE", 
										@"C:\photos\car_front.jpg", 
										"Фото спереди", 
										"55.7558", 
										"37.6173");
									
									// Установка статуса
									api.SetDocumentStatus(docId, "Готов");
								}