diff --git a/independent-publisher-connectors/Sap Successfactors/ConnectorPackage.zip b/independent-publisher-connectors/Sap Successfactors/ConnectorPackage.zip new file mode 100644 index 0000000000..b1c8de3b75 Binary files /dev/null and b/independent-publisher-connectors/Sap Successfactors/ConnectorPackage.zip differ diff --git a/independent-publisher-connectors/Sap Successfactors/apiDefinition.swagger.json b/independent-publisher-connectors/Sap Successfactors/apiDefinition.swagger.json new file mode 100644 index 0000000000..ae9ed20633 --- /dev/null +++ b/independent-publisher-connectors/Sap Successfactors/apiDefinition.swagger.json @@ -0,0 +1,1552 @@ +{ + "swagger": "2.0", + "info": { + "title": "PremiumConnector SF", + "description": "SAP SuccessFactors integration via PremiumConnector SF. Manage candidates, job postings, applications, interviews, picklists, and metadata. Monitor and adjust your quota at https://sap-connectors.bajonczak.com.", + "contact": { + "name": "Sascha Bajonczak", + "url": "https://sap-connectors.bajonczak.com", + "email": "xbeejayx@hotmail.com" + }, + "version": "v1" + }, + "host": "sap-api.bajonczak.com", + "schemes": [ + "https" + ], + "paths": { + "/api/v1/candidates": { + "get": { + "tags": [ + "Candidate" + ], + "summary": "Get Candidates", + "description": "Returns a list of candidates from SAP SuccessFactors.", + "operationId": "Candidate_GetCandidates_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "top", + "description": "Maximum number of records to return (default: 20).", + "type": "integer", + "format": "int32", + "default": 20 + } + ], + "responses": { + "200": { + "description": "List of candidates.", + "schema": { + "$ref": "#/definitions/CandidateListResponse" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + }, + "post": { + "tags": [ + "Candidate" + ], + "summary": "Create Candidate", + "description": "Creates a new candidate in SAP SuccessFactors.", + "operationId": "Candidate_CreateCandidate_POST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateRequest" + } + } + ], + "responses": { + "201": { + "description": "Candidate created successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Required fields missing or invalid.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}": { + "get": { + "tags": [ + "Candidate" + ], + "summary": "Get Candidate by ID", + "description": "Returns a single candidate by their SAP SuccessFactors candidate ID.", + "operationId": "Candidate_GetCandidateById_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID, e.g. \"12333\".", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Candidate data.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "502": { + "description": "SAP SuccessFactors API error or candidate not found.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + }, + "patch": { + "tags": [ + "Candidate" + ], + "summary": "Update Candidate", + "description": "Updates an existing candidate via upsert.", + "operationId": "Candidate_UpdateCandidate_PATCH", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID, e.g. \"45417\".", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Fields to update.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateRequest" + } + } + ], + "responses": { + "200": { + "description": "Candidate updated successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Required fields missing.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}/education": { + "put": { + "tags": [ + "Candidate" + ], + "summary": "Set Candidate Education", + "description": "Sets the education record for an existing candidate via upsert. Fields not sent remain unchanged.", + "operationId": "Candidate_UpsertCandidateEducation_PUT", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Education data.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateEducation" + } + } + ], + "responses": { + "200": { + "description": "Education set successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Invalid request data.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}/work-experience": { + "put": { + "tags": [ + "Candidate" + ], + "summary": "Set Candidate Work Experience", + "description": "Sets the outside work experience for an existing candidate via upsert.", + "operationId": "Candidate_UpsertCandidateWorkExperience_PUT", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Work experience data.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateWorkExperience" + } + } + ], + "responses": { + "200": { + "description": "Work experience set successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Invalid request data.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}/attachments": { + "post": { + "tags": [ + "Candidate" + ], + "summary": "Add Candidate Attachment", + "description": "Adds a file attachment (for example a CV) to an existing candidate.", + "operationId": "Candidate_AddCandidateAttachment_POST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Attachment with Base64-encoded file content.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateAttachment" + } + } + ], + "responses": { + "201": { + "description": "Attachment added successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Required fields missing.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}/comments": { + "post": { + "tags": [ + "Candidate" + ], + "summary": "Add Candidate Comment", + "description": "Adds a comment to an existing candidate.", + "operationId": "Candidate_AddCandidateComment_POST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Comment content.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateComment" + } + } + ], + "responses": { + "201": { + "description": "Comment added successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Required fields missing.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/candidates/{candidateId}/tags": { + "post": { + "tags": [ + "Candidate" + ], + "summary": "Add Candidate Tag", + "description": "Adds a tag to an existing candidate.", + "operationId": "Candidate_AddCandidateTag_POST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "candidateId", + "description": "SF candidate ID.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Tag label.", + "required": true, + "schema": { + "$ref": "#/definitions/CandidateTag" + } + } + ], + "responses": { + "201": { + "description": "Tag added successfully.", + "schema": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "400": { + "description": "Required fields missing.", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/job-applications": { + "get": { + "tags": [ + "JobApplication" + ], + "summary": "Get Job Applications", + "description": "Returns a paginated list of job applications.", + "operationId": "JobApplication_GetJobApplications_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "JobReqId", + "description": "Filter nach Job-Ausschreibungs-ID.\r\nEmpfohlen um nur Bewerbungen für eine bestimmte Stelle zu erhalten.", + "type": "integer", + "format": "int64" + }, + { + "in": "query", + "name": "Status", + "description": "Filter nach Bewerbungsstatus, z.B. \"Active\".", + "type": "string" + }, + { + "in": "query", + "name": "Skip", + "description": "Anzahl zu überspringender Einträge (OData $skip).", + "type": "integer", + "format": "int32", + "maximum": 2147483647, + "minimum": 0 + }, + { + "in": "query", + "name": "Top", + "description": "Maximale Anzahl zurückgegebener Einträge (OData $top). Default 50, Max 200.", + "type": "integer", + "format": "int32", + "maximum": 200, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Paginated list of job applications.", + "schema": { + "$ref": "#/definitions/JobApplicationListResponse" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/job-applications/{id}": { + "get": { + "tags": [ + "JobApplication" + ], + "summary": "Get Job Application by ID", + "description": "Returns a single job application by its ID.", + "operationId": "JobApplication_GetJobApplicationById_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "The application ID (applicationId).", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "The job application.", + "schema": { + "$ref": "#/definitions/JobApplication" + } + }, + "404": { + "description": "Not found.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/job-interviews": { + "post": { + "tags": [ + "JobInterview" + ], + "summary": "Create Job Interview", + "description": "Creates a new job interview for an application in SAP SuccessFactors.", + "operationId": "JobInterview_CreateInterview_POST", + "consumes": [ + "application/json-patch+json", + "application/json", + "text/json", + "application/*+json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Interview details.", + "schema": { + "$ref": "#/definitions/CreateJobInterviewRequest" + } + } + ], + "responses": { + "201": { + "description": "Interview created successfully.", + "schema": { + "$ref": "#/definitions/CreateJobInterviewResponse" + } + }, + "400": { + "description": "Invalid request (e.g. applicationId missing).", + "schema": { + "$ref": "#/definitions/ValidationProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/job-postings": { + "get": { + "tags": [ + "JobPosting" + ], + "summary": "Get Job Postings", + "description": "Returns a paginated list of job postings.", + "operationId": "JobPosting_GetJobPostings_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "ActiveOnly", + "description": "Nur aktive (nicht gelöschte) Ausschreibungen zurückgeben.\r\ntrue = nur aktive, false = alle inkl. gelöschte. Default: true.", + "type": "boolean" + }, + { + "in": "query", + "name": "TemplateType", + "description": "Filter nach Template-Typ, z.B. \"JOB_REQ\". Leer = alle.", + "type": "string" + }, + { + "in": "query", + "name": "Skip", + "description": "Anzahl zu überspringender Einträge (OData $skip).", + "type": "integer", + "format": "int32", + "maximum": 2147483647, + "minimum": 0 + }, + { + "in": "query", + "name": "Top", + "description": "Maximale Anzahl zurückgegebener Einträge (OData $top). Default 50, Max 200.", + "type": "integer", + "format": "int32", + "maximum": 200, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Paginated list of job postings.", + "schema": { + "$ref": "#/definitions/JobPostingListResponse" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/job-postings/{id}": { + "get": { + "tags": [ + "JobPosting" + ], + "summary": "Get Job Posting by ID", + "description": "Returns a single job posting by its requisition ID.", + "operationId": "JobPosting_GetJobPostingById_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "The job requisition ID.", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "The job posting.", + "schema": { + "$ref": "#/definitions/JobRequisition" + } + }, + "404": { + "description": "Not found.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/metadata/raw": { + "get": { + "tags": [ + "Metadata" + ], + "summary": "Get Raw Metadata", + "description": "Returns the raw OData metadata (EDMX/XML) of the SAP SuccessFactors instance. Contains all entity types and their fields.", + "operationId": "Metadata_GetRawMetadata_GET", + "produces": [ + "application/xml", + "application/json" + ], + "responses": { + "200": { + "description": "EDMX XML document with all entities and fields.", + "schema": { + "type": "string" + } + }, + "502": { + "description": "SF API unreachable or authentication error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/metadata/entities/{entityName}/fields": { + "get": { + "tags": [ + "Metadata" + ], + "summary": "Get Entity Fields", + "description": "Returns all available field names for a given entity (for example JobRequisition or JobApplicationInterview). Useful for discovering which fields are available in this SAP SuccessFactors instance.", + "operationId": "Metadata_GetEntityFields_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "entityName", + "description": "OData entity name, e.g. \"JobRequisition\".", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of available field names.", + "schema": { + "$ref": "#/definitions/EntityFieldsResponse" + } + }, + "502": { + "description": "SF API unreachable, entity does not exist, or authentication error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + }, + "/api/v1/picklists/{picklistId}": { + "get": { + "tags": [ + "Picklist" + ], + "summary": "Get Picklist Options", + "description": "Returns all options for a given picklist.", + "operationId": "Picklist_GetPicklist_GET", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "picklistId", + "description": "The picklist ID, e.g. \"Gender\".", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of picklist options.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PicklistOption" + } + } + }, + "400": { + "description": "Invalid request or unknown tenant.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + }, + "502": { + "description": "SAP SuccessFactors API error.", + "schema": { + "$ref": "#/definitions/ProblemDetails" + } + } + }, + "security": [ + { + "ApiKeyAuth": [ ] + } + ], + "x-ms-visibility": "important" + } + } + }, + "definitions": { + "CandidateAttachment": { + "required": [ + "fileContent", + "fileName" + ], + "type": "object", + "properties": { + "fileName": { + "description": "File name including extension, e.g. \"CV_John_Doe.pdf\".", + "minLength": 1, + "type": "string" + }, + "fileContent": { + "description": "File content as a Base64-encoded string.", + "minLength": 1, + "type": "string" + }, + "module": { + "description": "SF module. Default: \"RECRUITING\".", + "type": "string" + }, + "moduleCategory": { + "description": "SF category. Default: \"ATTACHMENTS\".", + "type": "string" + } + }, + "additionalProperties": false + }, + "CandidateComment": { + "required": [ + "content" + ], + "type": "object", + "properties": { + "content": { + "minLength": 1, + "type": "string" + } + }, + "additionalProperties": false + }, + "CandidateEducation": { + "type": "object", + "properties": { + "school": { + "description": "School or university, e.g. \"TU München\".", + "type": "string" + }, + "startDate": { + "description": "Start date (ISO or OData /Date(ms)/).", + "type": "string" + }, + "endDate": { + "description": "End date (ISO or OData /Date(ms)/).", + "type": "string" + } + }, + "additionalProperties": false + }, + "CandidateListResponse": { + "description": "Paged list of candidates returned by GET /api/v1/candidates.", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/CandidateResponse" + } + }, + "count": { + "format": "int32", + "type": "integer", + "readOnly": true + } + }, + "additionalProperties": false + }, + "CandidateRequest": { + "description": "Request to create or update a candidate in SAP SuccessFactors.\r\nOnly firstName, lastName, country, and primaryEmail are required; all other fields are optional.\r\n \r\nCreate → POST /api/v1/candidates\r\nUpdate → PATCH /api/v1/candidates/{candidateId}", + "required": [ + "country", + "firstName", + "lastName", + "primaryEmail" + ], + "type": "object", + "properties": { + "firstName": { + "minLength": 1, + "type": "string" + }, + "lastName": { + "minLength": 1, + "type": "string" + }, + "country": { + "description": "ISO country code, e.g. \"US\", \"DE\", \"BR\".", + "minLength": 1, + "type": "string" + }, + "primaryEmail": { + "format": "email", + "minLength": 1, + "type": "string" + }, + "address": { + "type": "string" + }, + "cellPhone": { + "description": "Mobile phone number, e.g. \"+1 866 9999-9999\".", + "type": "string" + }, + "gender": { + "description": "Gender: \"M\" or \"F\".", + "type": "string" + }, + "minAnnualSal": { + "description": "Desired minimum salary as a string, e.g. \"70000\".", + "type": "string" + }, + "city": { + "description": "City (optional). Free text.", + "type": "string" + }, + "zip": { + "description": "ZIP code (optional). Free text.", + "type": "string" + }, + "education": { + "$ref": "#/definitions/CandidateEducation" + }, + "outsideWorkExperience": { + "$ref": "#/definitions/CandidateWorkExperience" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/CandidateTag" + } + }, + "educationSchool": { + "description": "School or university (flat, for Power Platform).", + "type": "string" + }, + "educationMajor": { + "description": "Field of study or major (flat).", + "type": "string" + }, + "educationDegree": { + "description": "Degree, e.g. \"Bachelor\", \"Master\", or SF code \"217\" (flat).", + "type": "string" + }, + "educationStartDate": { + "description": "Education start date (ISO or OData /Date(ms)/) (flat).", + "type": "string" + }, + "educationEndDate": { + "description": "Education end date (ISO or OData /Date(ms)/) (flat).", + "type": "string" + }, + "workExperienceEmployer": { + "description": "Employer (flat, for Power Platform).", + "type": "string" + }, + "workExperienceStartDate": { + "description": "Work experience start date (ISO or OData /Date(ms)/) (flat).", + "type": "string" + }, + "workExperienceEndDate": { + "description": "Work experience end date (ISO or OData /Date(ms)/) (flat).", + "type": "string" + }, + "attachmentFileName": { + "description": "Attachment file name including extension (flat), e.g. \"CV.pdf\".", + "type": "string" + }, + "attachmentFileContent": { + "description": "Attachment file content as a Base64-encoded string (flat).", + "type": "string" + }, + "attachmentModule": { + "description": "SF module for the attachment (flat). Default: \"RECRUITING\".", + "type": "string" + }, + "attachmentModuleCategory": { + "description": "SF category for the attachment (flat). Default: \"ATTACHMENTS\".", + "type": "string" + }, + "commentContent": { + "description": "Comment text (flat, single entry). Stored as the candidate's resume/note field in SF.", + "type": "string" + }, + "tagLabel": { + "description": "Tag label (flat, single entry). Comma-separated values create multiple tags.", + "type": "string" + } + }, + "additionalProperties": false, + "example": { + "firstName": "John", + "lastName": "Doe", + "country": "US", + "primaryEmail": "john.doe@example.com", + "city": "New York", + "address": "5th Avenue 350", + "cellPhone": "+1 866 9999-9999", + "education": { + "school": "ABC institute", + "degree": "217", + "major": "111", + "startDate": "/Date(1577836800000)/", + "endDate": "/Date(1703980800000)/" + }, + "outsideWorkExperience": { + "employer": "ACME GmbH", + "startDate": "/Date(1577836800000)/", + "endDate": "/Date(1703980800000)/" + }, + "educationSchool": "ABC institute", + "educationDegree": "217", + "educationMajor": "111", + "educationStartDate": "2020-01-01", + "educationEndDate": "2023-12-31", + "workExperienceEmployer": "ACME GmbH", + "workExperienceStartDate": "2020-01-01", + "workExperienceEndDate": "2023-12-31", + "attachmentFileName": "CV.pdf", + "attachmentFileContent": "base64encodedcontent==", + "commentContent": "Sehr guter Kandidat.", + "tagLabel": "Favorite" + } + }, + "CandidateResponse": { + "type": "object", + "properties": { + "candidateId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "primaryEmail": { + "type": "string" + }, + "country": { + "type": "string" + }, + "cellPhone": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "minAnnualSal": { + "type": "string" + } + }, + "additionalProperties": { } + }, + "CandidateTag": { + "required": [ + "label" + ], + "type": "object", + "properties": { + "label": { + "minLength": 1, + "type": "string" + } + }, + "additionalProperties": false + }, + "CandidateWorkExperience": { + "type": "object", + "properties": { + "employer": { + "description": "Employer name, e.g. \"ACME GmbH\".", + "type": "string" + }, + "startDate": { + "description": "Start date (ISO or OData /Date(ms)/).", + "type": "string" + }, + "endDate": { + "description": "End date (ISO or OData /Date(ms)/).", + "type": "string" + } + }, + "additionalProperties": false + }, + "CreateJobInterviewRequest": { + "description": "Request zum Erstellen eines Job-Interviews in SAP SuccessFactors.\r\nBasiert auf dem OData-Payload von /odata/v2/JobApplicationInterview.\r\n \r\nWorkflow:\r\n 1. GET /api/v1/job-applications?jobReqId=X → applicationId ermitteln\r\n 2. POST /api/v1/job-interviews mit dieser applicationId", + "required": [ + "applicationId" + ], + "type": "object", + "properties": { + "applicationId": { + "description": "Bewerbungs-ID aus GET /api/v1/job-applications (Feld applicationId).\r\nPflichtfeld — Primary Key des Interviews in SF.", + "minLength": 1, + "type": "string" + }, + "startDate": { + "format": "date-time", + "description": "Startdatum und -uhrzeit des Interviews (UTC).\r\nWird in OData /Date(ms+0000)/ Format konvertiert.", + "type": "string" + }, + "endDate": { + "format": "date-time", + "description": "Enddatum des Interviews (UTC). Optional.", + "type": "string" + }, + "isTimeSet": { + "description": "Gibt an ob Startdatum eine genaue Uhrzeit enthält (true)\r\noder nur ein Datum ohne Zeit (false/null).", + "type": "boolean" + }, + "templateType": { + "description": "Template-Typ der Ausschreibung.\r\nTypischer Wert: \"JOB_REQ\".", + "type": "string" + }, + "source": { + "description": "Quelle der Bewerbung.\r\nMögliche Werte: \"INTERNAL\", \"EXTERNAL\".", + "type": "string" + }, + "notes": { + "description": "Notizen zum Interview-Verlauf.", + "type": "string" + }, + "interviewerUserId": { + "description": "userId des Interviewers in SAP SuccessFactors (z.B. \"mhoff1\").\r\nWird als Navigation Property interviewer.userId gesetzt.", + "type": "string" + } + }, + "additionalProperties": false + }, + "CreateJobInterviewResponse": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": "string" + }, + "endDate": { + "format": "date-time", + "type": "string" + }, + "isTimeSet": { + "type": "boolean" + }, + "templateType": { + "type": "string" + }, + "source": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "interviewerUserId": { + "type": "string" + } + }, + "additionalProperties": false + }, + "EntityFieldsResponse": { + "type": "object", + "properties": { + "entityName": { + "type": "string" + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "count": { + "format": "int32", + "type": "integer" + } + }, + "additionalProperties": false + }, + "JobApplication": { + "description": "Bewerbung (JobApplication) aus SAP SuccessFactors.\r\nVerknüpft einen Kandidaten mit einer Ausschreibung (JobRequisition).", + "type": "object", + "properties": { + "applicationId": { + "description": "Eindeutige ID der Bewerbung.", + "type": "string" + }, + "jobReqId": { + "description": "Verknüpfte Job-Ausschreibungs-ID.", + "type": "string" + }, + "status": { + "description": "Bewerbungsstatus, z.B. \"Active\", \"Rejected\".", + "type": "string" + }, + "candidateId": { + "description": "Kandidaten-ID.", + "type": "string" + }, + "candidateNameLF": { + "description": "Name des Kandidaten (Nachname, Vorname).", + "type": "string" + }, + "applicationDate": { + "description": "Bewerbungsdatum (OData /Date(ms)/ Format).", + "type": "string" + }, + "lastModifiedDate": { + "description": "Letztes Änderungsdatum (OData /Date(ms)/ Format).", + "type": "string" + } + }, + "additionalProperties": { } + }, + "JobApplicationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/JobApplication" + } + }, + "count": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "skip": { + "format": "int32", + "type": "integer" + }, + "top": { + "format": "int32", + "type": "integer" + } + }, + "additionalProperties": false + }, + "JobPostingListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/JobRequisition" + } + }, + "count": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "skip": { + "format": "int32", + "type": "integer" + }, + "top": { + "format": "int32", + "type": "integer" + } + }, + "additionalProperties": false + }, + "JobRequisition": { + "description": "Job-Ausschreibung aus SAP SuccessFactors (JobRequisition).\r\nBeinhaltet die häufigsten Felder; weitere Instanz-spezifische\r\nFelder sind in PremiumConnector.SF.Models.JobPosting.JobRequisition.AdditionalFields verfügbar.", + "type": "object", + "properties": { + "jobReqId": { + "description": "Eindeutige ID der Ausschreibung.", + "type": "string" + }, + "templateType": { + "description": "Template-Typ, z.B. \"JOB_REQ\".", + "type": "string" + }, + "jobCode": { + "description": "Interne Job-Code Nummer.", + "type": "string" + }, + "departmentCode": { + "description": "Abteilungs-Code.", + "type": "string" + }, + "locationCode": { + "description": "Standort-Code.", + "type": "string" + }, + "divisionCode": { + "description": "Divisions-Code.", + "type": "string" + }, + "numberOpenings": { + "description": "Anzahl offener Stellen.", + "type": "string" + }, + "deleted": { + "description": "Löschstatus, z.B. \"Deleted\" oder null.", + "type": "string" + }, + "defaultLanguage": { + "description": "Standardsprache der Ausschreibung.", + "type": "string" + }, + "currency": { + "description": "Währung.", + "type": "string" + }, + "ratedApplicantCount": { + "description": "Anzahl bewerteter Bewerber.", + "type": "string" + }, + "createdDateTime": { + "description": "Erstelldatum (OData /Date(ms+tz)/ Format).", + "type": "string" + }, + "closedDateTime": { + "description": "Schlussdatum (OData /Date(ms+tz)/ Format).", + "type": "string" + }, + "intranetPosting": { + "description": "Im Internet publiziert.", + "type": "boolean" + }, + "corporatePosting": { + "description": "Unternehmensweit publiziert.", + "type": "boolean" + } + }, + "additionalProperties": { } + }, + "PicklistOption": { + "description": "Eine einzelne Option in einer SAP SuccessFactors Pickliste.", + "type": "object", + "properties": { + "picklistId": { + "type": "string" + }, + "optionId": { + "type": "string" + }, + "externalCode": { + "type": "string" + }, + "status": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "additionalProperties": { } + }, + "ProblemDetails": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "format": "int32", + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string" + } + }, + "additionalProperties": { } + }, + "ValidationProblemDetails": { + "type": "object", + "properties": { + "errors": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "format": "int32", + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string" + } + }, + "additionalProperties": { } + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "type": "apiKey", + "name": "X-api-key", + "in": "header", + "description": "API key issued via the PremiumConnector portal (https://sap-connectors.bajonczak.com). Include it as the **X-api-key** request header." + } + } +} \ No newline at end of file diff --git a/independent-publisher-connectors/Sap Successfactors/apiProperties.json b/independent-publisher-connectors/Sap Successfactors/apiProperties.json new file mode 100644 index 0000000000..a2728a03cd --- /dev/null +++ b/independent-publisher-connectors/Sap Successfactors/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "publisher": "Sascha Bajonczak", + "stackOwner": "Sascha Bajonczak", + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "PremiumConnector API Key", + "description": "API key issued via the PremiumConnector portal (https://sap-connectors.bajonczak.com). Include it as the **X-api-key** request header.", + "tooltip": "Enter the API key created at httsp://sap-connectors.bajonczak.com", + "constraints": { + "clearText": false, + "required": "true", + "tabIndex": 1 + } + } + } + }, + "iconBrandColor": "#0A66C2", + "policyTemplateInstances": [] + } +} \ No newline at end of file diff --git a/independent-publisher-connectors/Sap Successfactors/readme.md b/independent-publisher-connectors/Sap Successfactors/readme.md new file mode 100644 index 0000000000..3cb2322f20 --- /dev/null +++ b/independent-publisher-connectors/Sap Successfactors/readme.md @@ -0,0 +1,57 @@ +# PremiumConnector SF +PremiumConnector SF is an connector for SAP SuccessFactors recruiting and metadata scenarios, exposed through the PremiumConnector API. It is designed for Microsoft Power Platform and can be imported as a custom connector. + +PremiumConnector SF is not affiliated with, associated with, authorized by, endorsed by, or officially connected to SAP SE (including SAP SuccessFactors), Microsoft, or any of their affiliates. SAP, SuccessFactors, and related names are trademarks of their respective owners. + +## Publisher: Sascha Bajonczak + +## Prerequisites +There are no speciel requirements needed. Only the Authentication settings described below. + +## Authentication +- The connector uses an api key that cann be created for free on httpss://sa-connectors.bajonczak.com + +## Supported Operations + +### List plans +Returns all active plans for pricing and onboarding. + +### List job postings +Returns job requisitions from SuccessFactors through PremiumConnector. + +### Get job posting by id +Returns a single job requisition by id. + +### List job applications +Returns paged job applications and supports filtering by jobReqId and status. + +### Get job application by id +Returns a single job application by its id. + +### Create interview +Creates a new interview for an existing job application. + +### List candidates +Returns a list of candidates. + +### Create candidate +Creates a candidate in SuccessFactors. + +### Get candidate by id +Returns a candidate by SuccessFactors candidate id. + +### Update candidate +Updates an existing candidate. + +### Get picklist values +Returns all values for the given picklist id. + +### Get entity fields +Returns available field names for a SuccessFactors entity. + +### Get raw metadata +Returns raw EDMX metadata XML as text. + +## Notes +- Operation availability depends on backend configuration and SuccessFactors role permissions. +- If an action fails with authorization or missing field errors, verify SuccessFactors API permissions, entity access, and environment-specific endpoint settings. \ No newline at end of file