{
	"info": {
		"_postman_id": "84b1942a-73f1-4455-86e0-83e34685239d",
		"name": "SF",
		"description": "Please refer to the Blog Post for details:\n\nhttps:// blog.bajonczak.com/fetching-data-from-sap-successfactors-via-odata-and-oauth/",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "2904181"
	},
	"item": [
		{
			"name": "01 Generate SAML Request",
			"event": [
				{
					"listen": "test",
					"script": {
						"exec": [
							"console.log(pm.response.text())\r",
							"pm.globals.set(\"SAMLAssertion\",pm.response.text());"
						],
						"type": "text/javascript",
						"packages": {}
					}
				},
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							""
						],
						"type": "text/javascript",
						"packages": {}
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [],
				"body": {
					"mode": "urlencoded",
					"urlencoded": [
						{
							"key": "client_id",
							"value": "{{client_id_api_key}}",
							"type": "text"
						},
						{
							"key": "user_id",
							"value": "{{requested_user}}",
							"type": "text"
						},
						{
							"key": "token_url",
							"value": "{{identity-base-url}}/outh/token",
							"type": "text"
						},
						{
							"key": "private_key",
							"value": "{{private_key}}",
							"type": "text"
						}
					]
				},
				"url": {
					"raw": "{{identity-base-url}}/oauth/idp",
					"host": [
						"{{identity-base-url}}"
					],
					"path": [
						"oauth",
						"idp"
					]
				}
			},
			"response": []
		},
		{
			"name": "02 Token request",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							""
						],
						"type": "text/javascript",
						"packages": {}
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"console.log(pm.response.json().access_token)\r",
							"pm.globals.set(\"bearer_token\",pm.response.json().access_token);"
						],
						"type": "text/javascript",
						"packages": {}
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [],
				"body": {
					"mode": "urlencoded",
					"urlencoded": [
						{
							"key": "company_id",
							"value": "{{company_id}}",
							"type": "text"
						},
						{
							"key": "client_id",
							"value": "{{client_id_api_key}}",
							"type": "text"
						},
						{
							"key": "grant_type",
							"value": "{{grant_type}}",
							"type": "text"
						},
						{
							"key": "assertion",
							"value": "{{assertion}}",
							"type": "text"
						},
						{
							"key": "new_token",
							"value": "{{new_token}}",
							"type": "text"
						}
					]
				},
				"url": {
					"raw": "{{identity-base-url}}/oauth/token",
					"host": [
						"{{identity-base-url}}"
					],
					"path": [
						"oauth",
						"token"
					]
				}
			},
			"response": []
		},
		{
			"name": "03 Api Request",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							""
						],
						"type": "text/javascript",
						"packages": {}
					}
				}
			],
			"request": {
				"method": "GET",
				"header": [
					{
						"key": "Authorization",
						"value": "Bearer {{bearer}}",
						"type": "text"
					},
					{
						"key": "Accept",
						"value": "application/json",
						"type": "text"
					}
				],
				"url": {
					"raw": "{{api-base-url}}/EmployeeTime?$top=10000&$filter=timeType eq 'DEU-ANNL'",
					"host": [
						"{{api-base-url}}"
					],
					"path": [
						"EmployeeTime"
					],
					"query": [
						{
							"key": "$top",
							"value": "10000"
						},
						{
							"key": "$filter",
							"value": "timeType eq 'DEU-ANNL'"
						}
					]
				}
			},
			"response": []
		},
		{
			"name": "04 Absences for German Employees",
			"request": {
				"method": "GET",
				"header": [
					{
						"key": "APIKey",
						"value": "QiLFpwtbVSXWFJMrnLNRjmAVLsAs0AjT",
						"type": "text"
					},
					{
						"key": "Accept",
						"value": "application/json",
						"type": "text"
					}
				],
				"url": {
					"raw": "https://sandbox.api.sap.com/successfactors/odata/v2/EmployeeTime?$expand=timeCalendar,timeTypeNav&$orderby=createdDateTime desc&$filter=timeType eq 'DEU-ANNL'&$select=userId,entityUUID,physicalEndDate,physicalStartDate,quantityInDays,userId,timeType,timeTypeNav/externalCode,timeTypeNav/externalCode,timeTypeNav/externalName_de_DE&$top=1",
					"protocol": "https",
					"host": [
						"sandbox",
						"api",
						"sap",
						"com"
					],
					"path": [
						"successfactors",
						"odata",
						"v2",
						"EmployeeTime"
					],
					"query": [
						{
							"key": "$expand",
							"value": "timeCalendar,timeTypeNav"
						},
						{
							"key": "$orderby",
							"value": "createdDateTime desc"
						},
						{
							"key": "APIKey",
							"value": "QiLFpwtbVSXWFJMrnLNRjmAVLsAs0AjT",
							"disabled": true
						},
						{
							"key": "$filter",
							"value": "timeType eq 'DEU-ANNL'"
						},
						{
							"key": "$select",
							"value": "userId,entityUUID,physicalEndDate,physicalStartDate,quantityInDays,userId,timeType,timeTypeNav/externalCode,timeTypeNav/externalCode,timeTypeNav/externalName_de_DE"
						},
						{
							"key": "$top",
							"value": "1"
						}
					]
				}
			},
			"response": []
		},
		{
			"name": "05 Create Absences for German Employees",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							""
						],
						"type": "text/javascript",
						"packages": {}
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Accept",
						"value": "application/json",
						"type": "text"
					},
					{
						"key": "Authorization",
						"value": "Bearer {{bearer}}",
						"type": "text"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"userId\": \"GE1\",\r\n    \"startDate\": \"/Date(1724869479)/\",\r\n    \"endDate\": \"/Date(1724869479)/\",\r\n    \"timeType\": \"DEU-ANNL\",\r\n    \"approvalStatus\": \"PENDING\",\r\n    \"userIdNav\": {\r\n                    \"__metadata\": {\r\n                        \"uri\": \"https://sandbox.api.sap.com/successfactors/odata/v2/User('GE11')\",\r\n                        \"type\": \"SFOData.User\"\r\n                    },\r\n                    \"userId\": \"GE11\"\r\n                    },\r\n    \"timeTypeNav\": {\r\n        \"__metadata\": {\r\n            \"uri\": \"https://sandbox.api.sap.com/successfactors/odata/v2/TimeType('DEU-ANNL')\",\r\n            \"type\": \"SFOData.TimeType\"\r\n        },\r\n        \"externalCode\": \"DEU-ANNL\",\r\n        \"externalName_de_DE\": \"Jahresurlaub (DEU)\"\r\n    }\r\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{api-base-url}}/EmployeeTime?$expand=timeCalendar,timeTypeNav&$orderby=createdDateTime desc&$select=userId,entityUUID,physicalEndDate,physicalStartDate,quantityInDays,userId,timeType,timeTypeNav/externalCode,timeTypeNav/externalCode,timeTypeNav/externalName_de_DE&$top=1&$filter=timeType eq 'DEU-ANNL'",
					"host": [
						"{{api-base-url}}"
					],
					"path": [
						"EmployeeTime"
					],
					"query": [
						{
							"key": "$expand",
							"value": "timeCalendar,timeTypeNav"
						},
						{
							"key": "$orderby",
							"value": "createdDateTime desc"
						},
						{
							"key": "APIKey",
							"value": "QiLFpwtbVSXWFJMrnLNRjmAVLsAs0AjT",
							"disabled": true
						},
						{
							"key": "$select",
							"value": "userId,entityUUID,physicalEndDate,physicalStartDate,quantityInDays,userId,timeType,timeTypeNav/externalCode,timeTypeNav/externalCode,timeTypeNav/externalName_de_DE"
						},
						{
							"key": "$top",
							"value": "1"
						},
						{
							"key": "$filter",
							"value": "timeType eq 'DEU-ANNL'"
						}
					]
				}
			},
			"response": []
		},
		{
			"name": "Validate Token",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"//////// Setting of Required Variables Value ///////////////////////////////\r",
							"\r",
							"//////////////////////////////////// API Base URL //////////////////////////\r",
							"// Using oData V2\r",
							"pm.variables.set(\"api-base-url-gcp\",\"https://apisalesdemo2.successfactors.eu/odata/v2\");\r",
							"pm.variables.set(\"api-base-url\",\"https://apisalesdemo2.successfactors.eu/odata/v2\");\r",
							"\r",
							"// Using oData V4\r",
							"pm.variables.set(\"api-base-url-gcpv4\",\"https://apisalesdemo2.successfactors.eu/odatav4\");\r",
							"\r",
							"////////////////////////////// IDENTITY Base URL //////////////////////////\r",
							"pm.variables.set(\"identity-base-url-gcp\",\"https://apisalesdemo2.successfactors.eu\");\r",
							"pm.variables.set(\"identity-base-url\",\"https://apisalesdemo2.successfactors.eu\");\r",
							"\r",
							"////////////// Requesting an Access Token ///////////////////////////////////////\r",
							"////////////// Defining Request Body Values ////////////////////////////////////\r",
							"pm.variables.set(\"company_id\",\"SFCPART002085\");\r",
							"\r",
							"pm.variables.set(\"client_id_api_key\",\"MzAyZGZjOTg5Y2M0YWQ2YmU3YmFjZTY4YmFjMw\");\r",
							"\r",
							"pm.variables.set(\"grant_type\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\");\r",
							"\r",
							"// We have Declared as a Collection Variable, under Variables Tab\r",
							"pm.variables.set(\"assertion\",pm.globals.get(\"SAMLAssertion\"));\r",
							"\r",
							"// Sending New Token in Each Request\r",
							"pm.variables.set(\"new_token\",false);\r",
							"\r",
							"pm.variables.set(\"bearer\",pm.globals.get(\"bearer_token\"));\r",
							"\r",
							"////////////////////////////////////////////////////////////////////////////////"
						],
						"type": "text/javascript",
						"packages": {}
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							""
						],
						"type": "text/javascript",
						"packages": {}
					}
				}
			],
			"request": {
				"method": "GET",
				"header": [
					{
						"key": "Authorization",
						"value": "Bearer {{bearer}}",
						"type": "text"
					}
				],
				"url": {
					"raw": "{{identity-base-url}}/oauth/validate",
					"host": [
						"{{identity-base-url}}"
					],
					"path": [
						"oauth",
						"validate"
					]
				}
			},
			"response": []
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"packages": {},
				"exec": [
					"\r",
					"\r",
					"\r",
					"////////////// Requesting an Access Token ///////////////////////////////////////\r",
					"////////////// Defining Request Body Values ////////////////////////////////////\r",
					"pm.variables.set(\"grant_type\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\");\r",
					"\r",
					"// We have Declared as a Collection Variable, under Variables Tab\r",
					"pm.variables.set(\"assertion\",pm.globals.get(\"SAMLAssertion\"));\r",
					"\r",
					"// Sending New Token in Each Request\r",
					"pm.variables.set(\"new_token\",false);\r",
					"////////////////////////////////////////////////////////////////////////////////\r",
					"// set the token toe the bearer variables (if exists)\r",
					"pm.variables.set(\"bearer\",pm.globals.get(\"bearer_token\"));\r",
					"\r",
					"\r",
					"\r",
					"\r",
					""
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"packages": {},
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"key": "api-base-url-v4",
			"value": "https://apisalesdemo2.successfactors.eu/odatav4",
			"type": "string"
		},
		{
			"key": "api-base-url",
			"value": "https://apisalesdemo2.successfactors.eu/odata/v2",
			"type": "string"
		},
		{
			"key": "identity-base-url",
			"value": "https://apisalesdemo2.successfactors.eu",
			"type": "string"
		},
		{
			"key": "company_id",
			"value": "SFCPART002085",
			"type": "string"
		},
		{
			"key": "client_id_api_key",
			"value": "MzAyZGZjOTg5Y2M0YWQ2YmU3YmFjZTY4YmFjMw",
			"type": "string"
		},
		{
			"key": "private_key",
			"value": "TUlJRXV3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS1V3Z2dTaEFnRUFBb0lCQVFDbjArT0VRYVEvaml3SGsya01zN2g4Ukk0ZDBpMUE2MmtmSzExTng0ai9NZ2pwcWZvY1VSNWplK0xkT1NacklLTk5jU2tsKzU2STR3dDMwWTRlZEhGM1FBVVhLRE5WSGRRWTJGTWJjRmJUT3RXd1N5WkN6Unp1TkpKcVlFdlVoVWcyVVYvQTdDbVlMY1hic1kyQzJnaW5oYzhnSjc5T2tuQysrWG1VZ01mTGRObWE5ZUpyM0FUcHhEY3JXaVhqRWVHR0s4MzRyQ3UrWlZ3cXF5S2NicWpBRXVpeUM2Y25qWVB0TlZGVE1VUHg4VWpwMGFEOXN0a0dzUWlKR0FaY0k1WjBSdDNRMDFEMFQza3hSQzVMdkM0RVZ5MnNOY0w3NXBxM200MG9IanV3ejBIbWVkaERiN2daOEFNK3A3L0JMN1Mya1hOQSsreEtaQjZRME9pR2RTeERBZ01CQUFFQ2dmOGpYT2x3bVpaTDhWbTV3MWpkMHRlUkxvNTNEMzBTbmJvTk9HaGNDZmowV2l5NG4rTm1HZmhFY09meXlmMk1NU0piSUZtOVVkSDFrMDZySzMrMUdpOWJzSTZVRHVSMW14L3N1eXpIMWpDSENDNGNKckRGNUNBSVVocEJUUUJWTVgra3RKdE1jbXI3OVYrVldCM2RaZVRRL2RtbkIxM1NndkZRaEQzWlhEcXJqR2N2NzNtVnh1dkFkL0hkZGsvN01jU3FTWjBEUnF6dzhLcExteHNYZWFjU0djZFRmWVpld0RlYkEwbThqbjh2NHdaYVdSVGkvWmJ1L2Z4Y25Zc2c5Wjh6NWVyNFpuRFlMR1dKTVR0MGo4bFY1US9oTmQ1NlpYQjZqNlkvNXhBR1R2SS8xUmZmb1ZYcWErcys2OW00ODJkWTZQcHJnTG8xcElMWUZrMzRxVkVDZ1lFQTJ3RlBrWW9laTJvMmR0cG5IWDdHTlEyK0h1OHhZN3VvdDk5MlJkNkpaYWxROUhSb1c0QXQydEpadjVSYTE3Ym5HREZKZEJrWlJKTTdxcmFRczBPMzJ4anQyRkJaYnhjQ1VsRDR3cml4dU5OTEppWFJjL0p0OUl0NkJ5Qm5ZUUNZM0lucnNzSy9hSlBGeEE3MTkyUWNuZnFyZ3NHTkcvZGhjcW5wZThaSWVCa0NnWUVBeEMxMEp0ei9wRkdoTVR0aFhLT2ZTV3VzQldHcVRNb0hqU04yYjVzQ0w4QmdiUUZ5dnBqUFExN0ZVOUk3RExzbjEyNXVLb1pTemtCZDl6bjkrNDdPWlJ1NjZTa2JNb2NXN203dG1zdWF5eHFPM0hiNGRQUS9SZUxRZEgyWUZGMXlOZnYyV0tXdEl0STJ0SVRKTitxbFZqdWk3M29tVStZQ3NDTlhsUExuUXJzQ2dZQjh2ZzFsVjZlNFAwSlFobXd2ZDdOTUtzeTg3LzlRMEdYMGZicnZaeWNabWN4N3dRWmovK21lZHl3Wm5GWDJBcjgwbjNZNFE4ZUpzTmRPa0hoeE0wUTQ3c1VpN2ZsUzltY2pIZTNqYzdIL0ZaTDdZcFVnRnRrY2JvbU9INTNpdWFWWUVOTUkyamFPU1lWZS9DcUx4Q0VzdHNnVVRVeWp2azlxTVcvRlNaYWptUUtCZ1FDQUpsMFl3Z2J4RlMzaUZqTWNxL255b1RabThZeW95dFN4K3ZkMEltTUVSSHY0MlJoV3IwVzljWndmakZac2s1bU1IaVF5L1RuOFo0bTZaUlNuam5yL0MyVkd5RVp1OUZZamZTMFRrR3RXdjh1UTh0cU1zN3pkYnpQUzFQUlNZVlNwTlNXUWRQR3JySHgxNGNQOEZmalpZdTJsMkRwUFZoSnRjempVSVBTMjN3S0JnSHltUGJCRE1hWFZ6amQ0Umd4MmtPeFZramM5TG9HOFJ6S25YTGp6dnJEWFVOaHJaZWRrR3V3bWF2OEppWm12T1JReFY2ZWRDQXVOWkFxVE9sQUtpNjNqaW5qanZqU2V1ZFJua290dnlOYXRGQ3NqU3pYM1RhUmNQeXptWk9UTG9tOFdRYmhsZExJUWhQUFRaQzZURVQ2bXJBTm1sc3VmTC9uTEtrWG1hR2xUIyMjU0ZDUEFSVDAwMjA4NQ==",
			"type": "string"
		},
		{
			"key": "requested_user",
			"value": "sfadmin",
			"type": "string"
		}
	]
}