The Translator Profile eXchange format (TPX) is a proposed standard for the exchange of profile data for translators and interpreters.
In practice, translators will be able to create TPX resumes/CVs and send these to language service providers (LSPs) in lieu of, or in addition to, their regular resumes/CVs.
The proposed standard contains a unique TPX identifier that will make it possible to obtain up-to-date profile data from TPX-registered translators from time to time, in a standardized or even automated manner. It will make sense for information such as availability to be updated regularly in one place by a translator, and then passed automatically using TPX standard tagging to all interested clients.
The current version of TPX is an early draft being evaluated and improved by the TPX working group.
By providing a standardized way of presenting the services, skills, experience, rates and other information in a translator's profile or CV, TPX will make the process of locating and qualifying language professionals more efficient for LSPs. It will also make the process of marketing oneself, and keeping information such as availability up to date among existing clients, easier for language professionals.
TPX will make it possible for LSPs to request and share translator data in a standardized way. This will enable companies to effectively connect their vendor management systems together, transferring vendor data from one system to another using automated tools.
Because of the standardized format, it will be possible for LSPs to process applications more efficiently than they can now. Automated tools will be able to extract, display and search whatever data is of particular interest or need to a given company. A peripheral benefit of having a standard set of fields is that completeness of data will be encouraged.
One possible application in which the TPX standard would be useful is in checking on the current availability of known translators. Many translators maintain their availability data at ProZ.com now, but can not be expected to maintain availability data with all the customers for whom they work. A TPX standard will define a way for LSPs to query ProZ.com's servers to check the availability of known translators when new projects arise.
Another possible application in which TPX would be useful is from within desktop tools such as project management software. A project manager working from within one of these tools could ask for a list of translators working in a certain pair and field. The software could query ProZ.com's servers for a list of appropriate professionals.
ProZ.com provides TPX service APIs which allow authorized parties to find translators and retrieve their profile information in TPX format (in accordance with the profile owners' privacy preferences).
To use the API, you must first sign up for an API key. Please contact ProZ.com for information about how to do this.
Users will be limited to a reasonable number of API requests per day (this limit has not yet been determined).
The TPX service can be accessed via simple REST-style HTTP requests.
All TPX service APIs are accessed at URLs in the following format: http://www.proz.com/tpxsoa/{api}/{method}?{parameters}
Parameters common to all TPX APIs:
Each request will return an HTTP Response code to indicate the status of the request, in addition to any data that it returns.
When errors can be determined, the results you receive will contain a structure with type = error. After receiving the request, you should first check the HTTP status code. Anything other than 200 OK indicates that an error could be present and should be acted upon.
Example:
{ "type": "error", "msg": "The requested user could not be found" }
Retrieve the details for a given profile.
URL: profile/details
HTTP Method(s): GET
Parameters (in addition to the common API parameters):
See below for a sample JSON response.
URL: profile/search
HTTP Method(s): GET
Parameters (in addition to the common API parameters):
Sorting
The search results returned from this API method will be sorted based on a custom algorithm that takes into account any certifications that each translator has undertaken, as well as positive or negative feedback from previous translation projects. This algorithm is optimized regularly to ensure that we return the best quality results.
The response will be an array of TPX profile structures. The format of each profile entry is identical to the one returned by the profile/details method.
URL: profile/sendmsg
HTTP Method(s): POST
Example URL: http://www.proz.com/tpxsoa/profile/sendmsg?format=json&api_key={your-api-key}
POST body:
uuids=67384b02-6279-4ace-ac8c-4ce6b5291f27,84469b91-660d-4486-af72-f76afe65bdf6&sender_name=Bob&sender_email=bob@example.org&subject=Hello+there!&body=I+need+a+translator+asap
Parameters (in addition to the common API parameters):
Example response:
{ "results": [ { "uuid": "invalid-uuid", "success": 0, "status": "error", "msg": "No profile was found with that UUID." }, { "uuid": "67384b02-6279-4ace-ac8c-4ce6b5291f27", "success": 1, "status": "sent", "msg": "Message sent." }, { "uuid": "84469b91-660d-4486-af72-f76afe65bdf6", "success": 1, "status": "queued", "msg": "Message processed for staff review." }, { "uuid": "32a9a4d0-cb6e-463f-a0ab-63d0a0418bc7", "success": 1, "status": "sent", "msg": "Message sent." } ] }
Lookup the possible values for the data points that can be queried through this system.
URL: data/list-languages
HTTP Method(s): GET
Example URL: http://www.proz.com/tpxsoa/data/list-languages?format=json&api_key={your-api-key}
See below for a sample JSON response.
URL: data/list-subject-areas
HTTP Method(s): GET
Example URL: http://www.proz.com/tpxsoa/data/list-subject-areas?format=json&api_key={your-api-key}
See below for a sample JSON response.
URL: data/list-services
HTTP Method(s): GET
Example URL: http://www.proz.com/tpxsoa/data/list-services?format=json&api_key={your-api-key}
Sample response:
[ { "id":1, "name":"Translation" }, { "id":2, "name":"Interpreting" }, { "id":3, "name":"Editing\/proofreading" }, { "id":4, "name":"Website localization" }, { "id":5, "name":"Software localization" }, { "id":6, "name":"Voiceover (dubbing)" }, { "id":7, "name":"Subtitling" }, { "id":14, "name":"Post-editing" }, { "id":15, "name":"Transcription" }, { "id":8, "name":"Training" }, { "id":9, "name":"Desktop publishing" }, { "id":10, "name":"Project management" }, { "id":11, "name":"Vendor management" }, { "id":12, "name":"Sales" }, { "id":13, "name":"Operations management" } ]
A PHP client library is available to interact with the TPX service. The library consists of a collection of classes that act as a easy to use wrapper on top of the actual service. The library was created to work with a recent installation of Zend Framework.
It consists of two PHP classes that acts as easy to use wrappers on top of the HTTP-based service, and a few exception classes used internally to flag invalid requests and other error conditions. Usage example:
<?php $api_key = '{your-api-key}'; $tpxid = '67384b02-6279-4ace-ac8c-4ce6b5291f27'; try { $client = Proz_Service_Client::factory(Proz_Service_Client::CLIENT_TYPE_JSON, $api_key); $results = $client->getDetails($tpxid); } catch (Exception $e) { // process the exception here... }
The PHP client library is available for download. This is alpha software that is being made available to help the integration of third party services.
TPX follows relevant standards when available. It uses various ISO standards for date/time, language codes, and country codes. See the References section for more details.
TPX files are intended to be created automatically by export routines and processed automatically by import routines.
TPX data is always in Unicode, encoded as UTF-8.
A TPX data structure may be formatted as JSON or XML. In either case, it will have the same structure and element names.
See the sample data structures below for examples.
{ "tpxid": "67384b02-6279-4ace-ac8c-4ce6b5291f27", "name": { "firstname": "William", "surname": "Prude", "site_name": "William Prude" }, "tagline": "Best translation services around!", "profile_url": "http://www.proz.com/profile/41429", "address": { "postalcode": "01460", "country": "us" }, "contact": { "email": "[email protected]", "phone": "978-486-9704", "url": [ "http://BizQuarters.com" ] }, "rates": [ { "languagepair": { "source": "chv", "target": ".fs" }, "minrateperword": "0.910", "targetrateperword": "0.930", "minrateperhour": "56.330", "targetrateperhour": "11.950", "currency": "usd" }, { "languagepair": { "source": "cor", "target": "lol" }, "minrateperword": "0.240", "targetrateperword": "0.390", "minrateperhour": "29.850", "targetrateperhour": "24.240", "currency": "usd" } ], "languages": { "languagepair": [ { "source": "chv", "target": ".fs", "servicesoffered": [ { "id": 1, "name": "Translation" }, { "id": 2, "name": "Checking/editing" } ] }, { "source": "cor", "target": "lol", "servicesoffered": [ { "id": 1, "name": "Translation" }, { "id": 2, "name": "Checking/editing" } ] } ] }, "equipment": { "translationsoftware": [ { "id": 1, "title": "Cool Gadget Ultra v1" }, { "id": 2, "title": "Powerpoint" } ] }, "subjectareas": [ { "id": 20, "name": "Cinema, Film, TV, Drama", "experiencelevel": "specialty" }, { "id": 25, "name": "Computers: Systems, Networks", "experiencelevel": "specialty" }, { "id": 40, "name": "Engineering (general)", "experiencelevel": "interest" }, { "id": 48, "name": "Finance (general)", "experiencelevel": "specialty" }, { "id": 52, "name": "Forestry / Wood / Timber", "experiencelevel": "interest" }, { "id": 62, "name": "Government / Politics", "experiencelevel": "working" }, { "id": 70, "name": "International Org/Dev/Coop", "experiencelevel": "interest" }, { "id": 71, "name": "Internet, e-Commerce", "experiencelevel": "interest" }, { "id": 77, "name": "Law (general)", "experiencelevel": "interest" }, { "id": 89, "name": "Mathematics & Statistics", "experiencelevel": "interest" }, { "id": 91, "name": "Media / Multimedia", "experiencelevel": "interest" }, { "id": 92, "name": "Medical: Pharmaceuticals", "experiencelevel": "specialty" }, { "id": 99, "name": "Mining & Minerals / Gems", "experiencelevel": "interest" }, { "id": 122, "name": "Real Estate", "experiencelevel": "interest" }, { "id": 136, "name": "Law: Taxation & Customs", "experiencelevel": "interest" }, { "id": 139, "name": "Tourism & Travel", "experiencelevel": "interest" } ], "translationexperience": { "yearsexperience": 48, "yearstarted": 1954 } }
<?xml version="1.0"?> <TPX> <profile> <tpxid>67384b02-6279-4ace-ac8c-4ce6b5291f27</tpxid> <name> <firstname>William</firstname> <surname>Prude</surname> <site_name>William Prude</site_name> </name> <tagline>Best translation services around!</tagline> <profile_url>http://www.proz.com/profile/41429</profile_url> <address> <postalcode>01460</postalcode> <country>us</country> </address> <contact> <email>[email protected]</email> <phone>978-486-9704</phone> <urls> <url>http://BizQuarters.com</url> <url>http://www.proz.com/profile/41429</url> </urls> </contact> <rates> <rate> <languagepair> <source>chv</source> <target>.fs</target> </languagepair> <minrateperword>0.910</minrateperword> <targetrateperword>0.930</targetrateperword> <minrateperhour>56.330</minrateperhour> <targetrateperhour>11.950</targetrateperhour> <currency>usd</currency> </rate> <rate> <languagepair> <source>cor</source> <target>lol</target> </languagepair> <minrateperword>0.240</minrateperword> <targetrateperword>0.390</targetrateperword> <minrateperhour>29.850</minrateperhour> <targetrateperhour>24.240</targetrateperhour> <currency>usd</currency> </rate> </rates> <languages> <languagepair> <source>chv</source> <target>.fs</target> <servicesoffered> <service> <id>1</id> <name>Translation</name> </service> <service> <id>2</id> <name>Checking/editing</name> </service> </servicesoffered> </languagepair> <languagepair> <source>cor</source> <target>lol</target> <servicesoffered> <service> <id>1</id> <name>Translation</name> </service> <service> <id>2</id> <name>Checking/editing</name> </service> </servicesoffered> </languagepair> </languages> <equipment> <translationsoftware> <application> <id>1</id> <title>Cool Gadget Ultra v1</title> </application> <application> <id>2</id> <title>Powerpoint</title> </application> </translationsoftware> </equipment> <subjectareas> <industry> <id>20</id> <name>Cinema, Film, TV, Drama</name> <experiencelevel>specialty</experiencelevel> </industry> <industry> <id>25</id> <name>Computers: Systems, Networks</name> <experiencelevel>specialty</experiencelevel> </industry> <industry> <id>40</id> <name>Engineering (general)</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>48</id> <name>Finance (general)</name> <experiencelevel>specialty</experiencelevel> </industry> <industry> <id>52</id> <name>Forestry / Wood / Timber</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>62</id> <name>Government / Politics</name> <experiencelevel>working</experiencelevel> </industry> <industry> <id>70</id> <name>International Org/Dev/Coop</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>71</id> <name>Internet, e-Commerce</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>77</id> <name>Law (general)</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>89</id> <name>Mathematics & Statistics</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>91</id> <name>Media / Multimedia</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>92</id> <name>Medical: Pharmaceuticals</name> <experiencelevel>specialty</experiencelevel> </industry> <industry> <id>99</id> <name>Mining & Minerals / Gems</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>122</id> <name>Real Estate</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>136</id> <name>Law: Taxation & Customs</name> <experiencelevel>interest</experiencelevel> </industry> <industry> <id>139</id> <name>Tourism & Travel</name> <experiencelevel>interest</experiencelevel> </industry> </subjectareas> <translationexperience> <yearsexperience>48</yearsexperience> <yearstarted>1954</yearstarted> </translationexperience> </profile> </TPX>
[ { "code": "abk", "name": "Abkhazian" }, { "code": "ace", "name": "Achinese" }, { "code": "ach", "name": "Acoli" }, { "code": "ada", "name": "Adangme" } // more here ... ]
{ "broad": [ { "id": "1", "title": "Tech/Engineering" }, { "id": "2", "title": "Art/Literary" }, { "id": "3", "title": "Medical" } // more here... ], "specific": [ { "id": "1", "title": "Accounting" }, { "id": "2", "title": "Advertising / Public Relations" }, { "id": "10", "title": "Aerospace / Aviation / Space" } // more here... ] }