VismaBouwsoftAPICalls.v1_GET_Employees Method
v1_GET_Employees() as String

This API call is used to get fields of a(n) Employee(s)

HTTP method API version
GET v1

Don’t forget to put the Authorization field in the header

API Path: /Employees/
or
API Path: /Employees/{id}
or
API Path: /Employees/{id}/Wages
or
API Path: /Employees/{id}/image
or
API Path: /Employees/{id}/note_html
or
API Path: /Employees/{id}/note_plain
or
API Path: /Employees/{id}/note_rtf
or
API Path: /Employees/FieldInfo/

You can make this API call:
* without the key field id to get a list of Employees
* with the key field id as the path parameter (the specific id of the Employee you want to get)
* to request the FieldInfo for this call

Fields

The following fields are available:

Field Name Type Name Length Required Writeable Force Write Link
name tpString 150 No Yes No
initials tpString 5 No Yes No
firstname tpString 50 No Yes No
surname tpString 50 No Yes No
username tpString 50 No No No
nr tpLong 0 Yes Yes No
groups tpString 0 No No No
address tpString 63 No Yes No
addressline2 tpString 63 No Yes No
countrycode tpString 2 No Yes No
zipcode tpString 15 No Yes No
city tpString 40 No Yes No
state tpString 40 No Yes No
telephone tpTelefoon 25 No Yes No
fax tpFax 25 No Yes No
gsm tpTelefoon 25 No Yes No
email tpEmail 100 No Yes No
company_id tpLong 0 Yes Yes No CompanyDetails
company_name tpString 250 No No No
function tpString 50 No Yes No
function_localized tpString 50 No No No
date_in_service tpDateNullString 0 No Yes No
date_no_longer_in_service tpDateNullString 0 No Yes No
date_birth tpDateNullString 0 No Yes No
place_birth tpString 50 No No No
language tpString 50 No Yes No
gender tpString 15 No Yes No
civil_status tpString 50 No Yes No
civil_status_localized tpString 50 No No No
bic tpString 35 No Yes No
iban tpString 35 No Yes No
identity_card_nr tpString 50 No Yes No
national_identity_nr tpString 50 No Yes No
social_security_nr tpString 50 No Yes No
partner_name tpString 50 No Yes No
partner_profession tpString 50 No Yes No
partner_date_of_birth tpDateNullString 0 No Yes No
partner_with_disability tpBool 0 No Yes No
partner_fiscally_dependent tpBool 0 No Yes No
children_with_disability tpLong 0 No Yes No
children_fiscally_dependent tpLong 0 No Yes No
people_with_disability tpLong 0 No Yes No
people_fiscally_dependent tpLong 0 No Yes No
healthcare_fund_name tpString 50 No Yes No
healthcare_fund_registration_nr tpString 50 No Yes No
healthcare_fund_address tpString 63 No Yes No
healthcare_fund_addressline2 tpString 63 No Yes No
healthcare_fund_countrycode tpString 2 No Yes No
healthcare_fund_zipcode tpString 15 No Yes No
healthcare_fund_city tpString 40 No Yes No
healthcare_fund_state tpString 40 No No No
general_practitioner tpString 0 No Yes No
telephone_emergency tpTelefoon 0 No Yes No
contract_start tpDateNullString 0 No Yes No
contract_end tpDateNullString 0 No Yes No
contract_independent tpBool 0 No Yes No
contract_type tpString 50 No Yes No
contract_type_localized tpString 50 No No No
classification tpString 50 No Yes No
employment_form tpString 50 No Yes No
employment_form_localized tpString 50 No Yes No
employment_status tpString 50 No Yes No
employment_status_localized tpString 50 No Yes No
personnel_nr tpString 50 No Yes No
dimona_nr tpString 20 No Yes No
drivers_license tpBool 0 No Yes No
drivers_license_expire_date tpDateNullString 0 No Yes No
acknowledgement_nr_gv tpString 50 No Yes No
acknowledgement_nr_tv tpString 50 No Yes No
acknowledgement_nr_va tpString 50 No Yes No
acknowledgement_nr_sv tpString 50 No Yes No
acknowledgement_g1 tpBool 0 No Yes No
acknowledgement_g2 tpBool 0 No Yes No
acknowledgement_l tpBool 0 No Yes No
distance_commute tpDouble 0 No Yes No
active tpBool 0 No No No
ts_lastupdate tpDate 0 No No No

/Employees/

API Path: /Employees/

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees

with the following parameters :

Header Parameters :
ParameterName: Clientnr, ParameterValue: 115
ParameterName: AccessToken, ParameterValue: PrDfWxfDkfzSfOjtAfzRqtrmfOmVfGrmfDbkzrUVOjUGtrtDII

Query Parameters :
ParameterName: limit, ParameterValue: 5
ParameterName: sort, ParameterValue: id

Success gives statuscode 200 And the following result

{ “Content-Range”:“0–4/200”, “Records”: [
  {
    "id": 1,
    "name": "Lutters Carlo.",
    "initials": "Lc",
    "firstname": "Carl",
    "surname": "Lutters",
    "username": "",
    "nr": 0,
    "groups": "Bestuurder",
    "address": "Molenweg 9",
    "addressline2": "",
    "countrycode": "BE",
    "zipcode": "8377",
    "city": "Meetkerke",
    "state": "West-vlaanderen",
    "telephone": "",
    "fax": "",
    "gsm": "",
    "email": "",
    "company_id": 1,
    "company_name": "Bouwsoft",
    "function": "CEO",
    "function_localized": "CEO",
    "date_in_service": "2012–01–01",
    "date_no_longer_in_service": "",
    "date_birth": "",
    "place_birth": "",
    "language": "",
    "gender": "M",
    "civil_status": "Ongehuwd",
    "civil_status_localized": "Unmarried",
    "bic": "",
    "iban": "",
    "identity_card_nr": "",
    "national_identity_nr": "",
    "social_security_nr": "",
    "partner_name": "",
    "partner_profession": "",
    "partner_date_of_birth": "",
    "partner_with_disability": false,
    "partner_fiscally_dependent": false,
    "children_with_disability": 0,
    "children_fiscally_dependent": 0,
    "people_with_disability": 0,
    "people_fiscally_dependent": 0,
    "healthcare_fund_name": "",
    "healthcare_fund_registration_nr": "",
    "healthcare_fund_address": "",
    "healthcare_fund_addressline2": "",
    "healthcare_fund_countrycode": "",
    "healthcare_fund_zipcode": "",
    "healthcare_fund_city": "",
    "healthcare_fund_state": "",
    "general_practitioner": "",
    "telephone_emergency": "",
    "contract_start": "",
    "contract_end": "",
    "contract_independent": false,
    "contract_type": "",
    "contract_type_localized": "",
    "classification": "",
    "employment_form": "",
    "employment_form_localized": "",
    "employment_status": "",
    "employment_status_localized": "",
    "personnel_nr": "",
    "dimona_nr": "",
    "drivers_license": false,
    "drivers_license_expire_date": "",
    "acknowledgement_nr_gv": "",
    "acknowledgement_nr_tv": "",
    "acknowledgement_nr_va": "",
    "acknowledgement_nr_sv": "",
    "acknowledgement_g1": false,
    "acknowledgement_g2": false,
    "acknowledgement_l": false,
    "distance_commute": 0.697912,
    "active": true,
    "ts_lastupdate": "2024–08–14 12:04:21"
  },
  {
    "id": 3,
    "name": "Deblauwe Gino",
    "initials": "Dg",
    "firstname": "Gino",
    "surname": "Deblauwe",
    "username": "SPIKKEL",
    "nr": 1002,
    "groups": "Algemene Bouwwerken, Arbeider",
    "address": "Gruuthof 24",
    "addressline2": "",
    "countrycode": "BE",
    "zipcode": "8490",
    "city": "Varsenare",
    "state": "West-vlaanderen",
    "telephone": "+32 50 45 87 58 ",
    "fax": "",
    "gsm": "+32 475 36 36 36 ",
    "email": "gino@spikesoft.be",
    "company_id": 1,
    "company_name": "Bouwsoft",
    "function": "Bediende",
    "function_localized": "White-collar worker",
    "date_in_service": "2003–01–13",
    "date_no_longer_in_service": "",
    "date_birth": "1994–08–28",
    "place_birth": "d",
    "language": "Nederlands",
    "gender": "M",
    "civil_status": "Samenwonend",
    "civil_status_localized": "Cohabiting",
    "bic": "GKCC BE BB",
    "iban": "BE59775584823226",
    "identity_card_nr": "a",
    "national_identity_nr": "79082821380",
    "social_security_nr": "b",
    "partner_name": "",
    "partner_profession": "",
    "partner_date_of_birth": "",
    "partner_with_disability": false,
    "partner_fiscally_dependent": false,
    "children_with_disability": 0,
    "children_fiscally_dependent": 2,
    "people_with_disability": 0,
    "people_fiscally_dependent": 0,
    "healthcare_fund_name": "",
    "healthcare_fund_registration_nr": "",
    "healthcare_fund_address": "",
    "healthcare_fund_addressline2": "",
    "healthcare_fund_countrycode": "",
    "healthcare_fund_zipcode": "",
    "healthcare_fund_city": "",
    "healthcare_fund_state": "",
    "general_practitioner": "Dr Bertrem",
    "telephone_emergency": "+32 (0) 50 45 45 45",
    "contract_start": "2013–01–01",
    "contract_end": "2013–12–31",
    "contract_independent": false,
    "contract_type": "Onbepaalde duur",
    "contract_type_localized": "Unlimited period",
    "classification": "fqsdf",
    "employment_form": "Voltijds",
    "employment_form_localized": "Full-time",
    "employment_status": "Arbeider",
    "employment_status_localized": "Manual labourer",
    "personnel_nr": "abc",
    "dimona_nr": "",
    "drivers_license": true,
    "drivers_license_expire_date": "2011–04–08",
    "acknowledgement_nr_gv": "",
    "acknowledgement_nr_tv": "",
    "acknowledgement_nr_va": "",
    "acknowledgement_nr_sv": "",
    "acknowledgement_g1": false,
    "acknowledgement_g2": false,
    "acknowledgement_l": false,
    "distance_commute": 9.224,
    "active": true,
    "ts_lastupdate": "2024–08–14 12:04:21"
  }
,

]
}

/Employees/{id}

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/551

with the following parameters :

Header Parameters :
ParameterName: Clientnr, ParameterValue: 115
ParameterName: AccessToken, ParameterValue: OPtfWxfUPbzSfDDAbfzRqtjlfVrGfGDjffPkzjtDjtOGPAPOkG

Success gives statuscode 200 And the following result

{ “Content-Range”:“0–0/1”, “Records”: [
  {
    "id": 551,
    "name": "WnDirk API",
    "initials": "",
    "firstname": "wnDirk",
    "surname": "API",
    "username": "",
    "nr": 2018252,
    "groups": "",
    "address": "matongewijk 17",
    "addressline2": "",
    "countrycode": "BE",
    "zipcode": "1000",
    "city": "Brussel 1",
    "state": "Brussels Hoofdstedelijk Gewest",
    "telephone": "",
    "fax": "",
    "gsm": "",
    "email": "",
    "company_id": 2,
    "company_name": "Groensoft",
    "function": "",
    "function_localized": "",
    "date_in_service": "",
    "date_no_longer_in_service": "",
    "date_birth": "",
    "place_birth": "",
    "language": "Nederlands",
    "gender": "M",
    "civil_status": "",
    "civil_status_localized": "",
    "bic": "",
    "iban": "",
    "identity_card_nr": "",
    "national_identity_nr": "",
    "social_security_nr": "",
    "partner_name": "",
    "partner_profession": "",
    "partner_date_of_birth": "",
    "partner_with_disability": false,
    "partner_fiscally_dependent": false,
    "children_with_disability": 0,
    "children_fiscally_dependent": 0,
    "people_with_disability": 0,
    "people_fiscally_dependent": 0,
    "healthcare_fund_name": "",
    "healthcare_fund_registration_nr": "",
    "healthcare_fund_address": "",
    "healthcare_fund_addressline2": "",
    "healthcare_fund_countrycode": "",
    "healthcare_fund_zipcode": "",
    "healthcare_fund_city": "",
    "healthcare_fund_state": "",
    "general_practitioner": "",
    "telephone_emergency": "",
    "contract_start": "",
    "contract_end": "",
    "contract_independent": false,
    "contract_type": "",
    "contract_type_localized": "",
    "classification": "",
    "employment_form": "",
    "employment_form_localized": "",
    "employment_status": "",
    "employment_status_localized": "",
    "personnel_nr": "",
    "dimona_nr": "",
    "drivers_license": false,
    "drivers_license_expire_date": "",
    "acknowledgement_nr_gv": "",
    "acknowledgement_nr_tv": "",
    "acknowledgement_nr_va": "",
    "acknowledgement_nr_sv": "",
    "acknowledgement_g1": false,
    "acknowledgement_g2": false,
    "acknowledgement_l": false,
    "distance_commute": 0,
    "active": true,
    "ts_lastupdate": "2026–03–24 14:29:13"
  }
]
}

/Employees/{id}/Wages

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/551/Wages

with the following parameters :

Header Parameters :
ParameterName: AccessToken, ParameterValue: rPGfWxfVkGzSfIGUDtzRqkbbfGPkIOAAjVItztOADtrGDfrPPD
ParameterName: Clientnr, ParameterValue: 115

Success gives statuscode 200 And the following result

{ “Content-Range”:“0–0/1”, “Records”: [
  {
    "id": 551,
    "wage_category_id": 0,
    "wage_category_name": "",
    "job_id": 0,
    "job_name": "",
    "task_id": 5,
    "task_code": "Hw",
    "task_name": "Handwerker",
    "task_name_localized": "Labourer",
    "wage_per_hour_on_weekdays": 0.0,
    "wage_overtime_per_hour_on_weekdays": 0.0,
    "wage_overtime_per_hour_on_weekdays_percent": 0,
    "social_charges_on_weekdays": 0,
    "social_charges_overtime_on_weekdays": 0,
    "wage_cost_on_weekdays": 0.0,
    "wage_cost_overtime_on_weekdays": 0.0,
    "wage_per_hour_on_saturdays": 0.0,
    "wage_per_hour_on_saturdays_percent": 0,
    "wage_overtime_per_hour_on_saturdays": 0.0,
    "wage_overtime_per_hour_on_saturdays_percent": 0,
    "social_charges_on_saturdays": 0,
    "social_charges_overtime_on_saturdays": 0,
    "wage_cost_on_saturdays": 0.0,
    "wage_cost_overtime_on_saturdays": 0.0,
    "wage_per_hour_on_sundays": 0.0,
    "wage_per_hour_on_sundays_percent": 0,
    "wage_overtime_per_hour_on_sundays": 0.0,
    "wage_overtime_per_hour_on_sundays_percent": 0,
    "social_charges_on_sundays": 0,
    "social_charges_overtime_on_sundays": 0,
    "wage_cost_on_sundays": 0.0,
    "wage_cost_overtime_on_sundays": 0.0,
    "work_hours_monday": "8:00:00",
    "work_hours_tuesday": "8:00:00",
    "work_hours_wednesday": "8:00:00",
    "work_hours_thursday": "8:00:00",
    "work_hours_friday": "8:00:00",
    "work_hours_saturday": "0:00:00",
    "work_hours_sunday": "0:00:00",
    "work_hours_per_day_average": "8:00:00",
    "leave_hours": 0,
    "leave_days": 0,
    "commission_percent": 0,
    "commission_fixed": 0.0,
    "salary_per_month": 0.0,
    "wage_per_other": 0.0,
    "rate_per_km": 0.0,
    "distance_commute": 0,
    "timetable": "",
    "ts_lastupdate": "2026–03–24 14:29:13"
  }
]
}

/Employees/{id}/image

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/164/image

with the following parameters :

Header Parameters :
ParameterName: AccessToken, ParameterValue: bbGfWxfOPfzSfVUjmtzRqrVffDAOIOftjmrtzPrbPGOGmmjrmD
ParameterName: Clientnr, ParameterValue: 115

Success gives statuscode 200 And the following result

image

/Employees/{id}/note_html

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/164/note_html

with the following parameters :

Header Parameters :
ParameterName: Clientnr, ParameterValue: 115
ParameterName: AccessToken, ParameterValue: VOtfWxfIVIzSfPPfUfzRqjOVfAtbkGAVfIfkzIjmjPIIDDUVAt

Success gives statuscode 200 And the following result

<HTML><BODY> <DIV STYLE="text-align: left;"><SPAN STYLE="font-family: Arial;font-size: 12pt;color: #000000;">I'm an old person. It's the sort of thing that happens when you aren't looking. All the kids these days are writing Slack and Discord bots in JavaScript, and I remember writing my first chatbots in Perl and hooking them into IRC. Fortunately, all the WTFs in my Perl chatbots have been lost to time.<BR> <BR> <B>"P"</B> has a peer who wants to scrape all the image URLs out of a Discord chat channel. Those URLs will be fetched, then passed through an image processing pipeline to organize and catalog frequently used images, regardless of their origin.<BR> <BR> Our intrepid scraper, however, doesn't want to run the risk of trying to request a URL that might be invalid. So they need a way to accurately validate every URL.<BR> <BR> Now, the trick to URLs, and URIs in general, is that they have a grammar that seems simple but is deceptively complex and doesn't lend itself to precise validation via regular expressions. If you were a sane person, you'd generally just ballpark it into the neighborhood and handle exceptions, or maybe <U>copy/paste from StackOverflow</U> and call it a day.<BR> <BR> This developer spent 7 hours developing their own regular expression to validate a URL. They tested it with every URL they could think of, and it passed with 100% accuracy, which sounds like the kind of robust testing we'd expect from the person who wrote this:<BR> <BR> </SPAN><SPAN STYLE="font-family: Arial;font-size: 12pt;color: #008888;">&nbsp;&nbsp;<B></SPAN><SPAN STYLE="font-family: Arial;font-size: 12pt;color: #000000;">const</B> regex =</SPAN><SPAN STYLE="font-family: Arial;font-size: 12pt;color: #008888;"> /((?:(http|https|Http|Https|rtsp|Rtsp):\/\/(?:(?:<BR> &nbsp;&nbsp;[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&amp;\=]|(?:\%[a-fA-F0-9]{2})){1,64}(?:\:<BR> &nbsp;&nbsp;(?:[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&amp;\=]|(?:\%[a-fA-F0-9]{2})){1,25})?<BR> &nbsp;&nbsp;<A href="mailto:\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}\.)+(?:(?:aero|arpa|asia|a">\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}\.)+(?:(?:aero|arpa|asia|a</A><BR> &nbsp;&nbsp;[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c<BR> &nbsp;&nbsp;[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g<BR> &nbsp;&nbsp;[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop]<BR> &nbsp;&nbsp;)|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])<BR> &nbsp;&nbsp;|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r<BR> &nbsp;&nbsp;[eouw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u<BR> &nbsp;&nbsp;[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1]<BR> &nbsp;&nbsp;[0-9]{2}|[1-9][0-9]|[1-9])\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]<BR> &nbsp;&nbsp;|[1-9]|0)\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(?:25<BR> &nbsp;&nbsp;[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\:\d{1,5})?)(\/(?:(?:<BR> &nbsp;&nbsp;<A href="mailto:[a-zA-Z0-9\;\/\?\:\@\&\=\#\~\-\.\+\!\*\'\(\)\,\_])|(?:\%[a-fA-F0-9]{2}))*)?">[a-zA-Z0-9\;\/\?\:\@\&amp;\=\#\~\-\.\+\!\*\'\(\)\,\_])|(?:\%[a-fA-F0-9]{2}))*)?</A><BR> &nbsp;&nbsp;(?:\b|$)/gi<BR> <BR> </SPAN><SPAN STYLE="font-family: Arial;font-size: 12pt;color: #000000;">Note each use of (?:). These are "look ahead" matches, which will execute depending on what comes after them. Using one or two of these in a regex makes its massively more complicated. This regex uses 32 look ahead expressions, taking "unreadability" to a new height, and flirting with the lesser demons which serve <U>Zalgo.</U> Bonus points for making the comparison case insensitive, but also checking for both http and Http, just in case.<BR> <BR> "There's no module on NPM that can do all of this!" the developer proudly proclaimed. They then presumably uploaded it to NPM as a "microframework", used it within a few of their own modules, and then those modules got used by some other modules, and now 75% of the web depends on this regex.</SPAN></DIV> </BODY></HTML>

/Employees/{id}/note_plain

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/164/note_plain

with the following parameters :

Header Parameters :
ParameterName: Clientnr, ParameterValue: 115
ParameterName: AccessToken, ParameterValue: ftAfWxffjbzSfVIDrfzRqVrbfGUrGfVDfDbbzbIrtbOffrmlVO

Success gives statuscode 200 And the following result

I’m an old person. It’s the sort of thing that happens when you aren’t looking. All the kids these days are writing Slack and Discord bots in JavaScript, and I remember writing my first chatbots in Perl and hooking them into IRC. Fortunately, all the WTFs in my Perl chatbots have been lost to time.

“P” has a peer who wants to scrape all the image URLs out of a Discord chat channel. Those URLs will be fetched, then passed through an image processing pipeline to organize and catalog frequently used images, regardless of their origin.

Our intrepid scraper, however, doesn’t want to run the risk of trying to request a URL that might be invalid. So they need a way to accurately validate every URL.

Now, the trick to URLs, and URIs in general, is that they have a grammar that seems simple but is deceptively complex and doesn’t lend itself to precise validation via regular expressions. If you were a sane person, you’d generally just ballpark it into the neighborhood and handle exceptions, or maybe copy/paste from StackOverflow and call it a day.

This developer spent 7 hours developing their own regular expression to validate a URL. They tested it with every URL they could think of, and it passed with 100% accuracy, which sounds like the kind of robust testing we’d expect from the person who wrote this:

const regex = /((?:(http|https|Http|Https|rtsp|Rtsp):\/\/(?:(?: [a-zA-Z0–9$-_.+!*'()\,\;\?\&\=]|(?:\%[a-fA-F0–9]{2})){1,64}(?:\: (?:[a-zA-Z0–9$-_.+!*'()\,\;\?\&\=]|(?:\%[a-fA-F0–9]{2})){1,25})? \@)?)?((?:(?:[a-zA-Z0–9][a-zA-Z0-9-]{0,64}.)+(?:(?:aero|arpa|asia|a [cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c [acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g [abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop] )|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz]) |(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r [eouw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u [agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))|(?:(?:25[0–5]|2[0–4][0-9]|[0–1][0-9]{2}|[1–9][0-9]|[1–9]).(?:25[0–5]|2[0–4][0-9]|[0–1][0-9]{2}|[1–9][0-9] |[1–9]|0).(?:25[0–5]|2[0–4][0-9]|[0–1][0-9]{2}|[1–9][0-9]|[1–9]|0).(?:25 [0–5]|2[0–4][0-9]|[0–1][0-9]{2}|[1–9][0-9]|[0–9])))(?:\:\d{1,5})?)(\/(?:(?: [a-zA-Z0–9\;\/\?\:\@\&\=#~-.+!*'()\,_])|(?:\%[a-fA-F0–9]{2}))*)? (?:\b|$)/gi

Note each use of (?:). These are “look ahead” matches, which will execute depending on what comes after them. Using one or two of these in a regex makes its massively more complicated. This regex uses 32 look ahead expressions, taking “unreadability” to a new height, and flirting with the lesser demons which serve Zalgo. Bonus points for making the comparison case insensitive, but also checking for both http and Http, just in case.

“There’s no module on NPM that can do all of this!” the developer proudly proclaimed. They then presumably uploaded it to NPM as a “microframework”, used it within a few of their own modules, and then those modules got used by some other modules, and now 75% of the web depends on this regex.

/Employees/{id}/note_rtf

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/164/note_rtf

with the following parameters :

Header Parameters :
ParameterName: Clientnr, ParameterValue: 115
ParameterName: AccessToken, ParameterValue: UfDfWxfOPkzSftIAGfzRqVrrfVmOkGrbftAkzbPDAbPIkfDkUb

Success gives statuscode 200 And the following result

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}}{\colortbl ;\red0\green0\blue0;\red0\green136\blue136;}{*\generator Spikesoft 16.02;}\ql\li0\f0\fs24\cf1 I’m an old person. It’s the sort of thing that happens when you aren’t looking. All the kids these days are writing Slack and Discord bots in JavaScript, and I remember writing my first chatbots in Perl and hooking them into IRC. Fortunately, all the WTFs in my Perl chatbots have been lost to time.\par\par\b “P”\b0 has a peer who wants to scrape all the image URLs out of a Discord chat channel. Those URLs will be fetched, then passed through an image processing pipeline to organize and catalog frequently used images, regardless of their origin.\par\par Our intrepid scraper, however, doesn’t want to run the risk of trying to request a URL that might be invalid. So they need a way to accurately validate every URL.\par\par Now, the trick to URLs, and URIs in general, is that they have a grammar that seems simple but is deceptively complex and doesn’t lend itself to precise validation via regular expressions. If you were a sane person, you’d generally just ballpark it into the neighborhood and handle exceptions, or maybe \ul copy/paste from StackOverflow\ul0 and call it a day.\par\par This developer spent 7 hours developing their own regular expression to validate a URL. They tested it with every URL they could think of, and it passed with 100% accuracy, which sounds like the kind of robust testing we’d expect from the person who wrote this:\par\par\cf2 \cf1\b const\b0 regex =\cf2 /((?:(http|https|Http|Https|rtsp|Rtsp):\ /\ /(?:(?:\par [a-zA-Z0–9\ \(\\ -\\ _\\ .\\ +\\ !\\ *\\ '\\ (\\ )\\ ,\\ ;\\ ?\\ &\\ =]|(?:\\ %[a-fA-F0-9]\{ 2\} ))\{ 1,64\} (?:\\ :\par (?:[a-zA-Z0-9\\ $\\ -\\ _\\ .\\ +\\ !\\ *\\ '\\ (\\ )\\ ,\\ ;\\ ?\\ &\\ =]|(?:\\ %[a-fA-F0-9]\{ 2\} ))\{ 1,25\} )?\par \\ @)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\ -]\{ 0,64\}\\ .)+(?:(?:aero|arpa|asia|a\par [cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c\par [acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g\par [abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop]\par )|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])\par |(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r\par [eouw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u\par [agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1]\par [0-9]\{ 2\} |[1-9][0-9]|[1-9])\\ .(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]\{ 2\} |[1-9][0-9]\par |[1-9]|0)\\ .(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]\{ 2\} |[1-9][0-9]|[1-9]|0)\\ .(?:25\par [0-5]|2[0-4][0-9]|[0-1][0-9]\{ 2\} |[1-9][0-9]|[0-9])))(?:\\ :\\ d\{ 1,5\} )?)(\\ /(?:(?:\par [a-zA-Z0-9\\ ;\\ /\\ ?\\ :\\ @\\ &\\ =\\ #\\ ~\\ -\\ .\\ +\\ !\\ *\\ '\\ (\\ )\\ ,\\ _])|(?:\\ %[a-fA-F0-9]\{ 2\} ))*)?\par (?:\\ b|\))/gi\par\par\cf1 Note each use of (?:). These are “look ahead” matches, which will execute depending on what comes after them. Using one or two of these in a regex makes its massively more complicated. This regex uses 32 look ahead expressions, taking “unreadability” to a new height, and flirting with the lesser demons which serve \ul Zalgo.\ul0 Bonus points for making the comparison case insensitive, but also checking for both http and Http, just in case.\par\par “There’s no module on NPM that can do all of this!” the developer proudly proclaimed. They then presumably uploaded it to NPM as a “microframework”, used it within a few of their own modules, and then those modules got used by some other modules, and now 75% of the web depends on this regex.}

/Employees/FieldInfo

If everything succeeds the HTTP response status is 200
(200 OK)

If there is something wrong with the request, the response status and code is 400
(400 Bad Request)

If there is no record that has the requested id the HTTP response status and code is 404
(404 Not found)

If you forget to send the Authorization, the response status is 401
(401 Unauthorized)

If what you sent can’t be processed, the response status is 500
(500 Internal Server Error)

For an explanation of all possible errors, please consult our section on possible answers to API calls here

Examples:

https://ra.bouwsoft.be/api/v1/Employees/FieldInfo

with the following parameters :

Header Parameters :
ParameterName: AccessToken, ParameterValue: UOIfWxffkAzSfrUjPtzRqUUbfkrkIOlljbPtzDDlVrfGjAmtfb
ParameterName: Clientnr, ParameterValue: 115

Success gives statuscode 200 And the following result

[
  {
    "name": "name",
    "type_id": 2,
    "type_name": "tpString",
    "length": 150,
    "required": false,
    "writeable": true,
    "forcewrite": false,
    "link": ""
  },
  {
    "name": "initials",
    "type_id": 2,
    "type_name": "tpString",
    "length": 5,
    "required": false,
    "writeable": true,
    "forcewrite": false,
    "link": ""
  }
,

]