node-behind-api-client 2.0.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/.gitlab-ci.yml +20 -0
  2. package/README.md +65 -0
  3. package/docs/behind-api-client/easyjob/JobDescriptions/README.md +654 -0
  4. package/docs/behind-api-client/easyjob/README.md +647 -0
  5. package/docs/behind-api-client/easyjob/applicants/README.md +494 -0
  6. package/docs/behind-api-client/easyjob/applications/README.md +754 -0
  7. package/docs/behind-api-client/easyjob/candidateProfiles/README.md +940 -0
  8. package/docs/behind-api-client/easyjob/jd-candidate-questions/README.md +372 -0
  9. package/docs/behind-api-client/payments/payture/README.21.md +901 -0
  10. package/docs/behind-api-client/payments/payture/README.cards.md +1497 -0
  11. package/docs/behind-api-client/payments/payture/README.md +1497 -0
  12. package/docs/behind-api-client/payments/payture/README.rukitchen.md +396 -0
  13. package/docs/behind-api-client/payments/payture/README.subscriptions.md +1266 -0
  14. package/docs/behind-api-client/payments/stripe/README.flow.md +254 -0
  15. package/docs/behind-api-client/rag/storage/README.md +519 -0
  16. package/example.js +35 -0
  17. package/index.cjs +14 -0
  18. package/index.js +15 -0
  19. package/lib/behind-api-auth-client/BehindApiAuthClient.js +91 -0
  20. package/lib/behind-api-auth-client/authorisation/AuthorisationApp.js +9 -0
  21. package/lib/behind-api-auth-client/authorisation/AuthorisationV10.js +9 -0
  22. package/lib/behind-api-auth-client/authorisation/AuthorisationV10Code.js +30 -0
  23. package/lib/behind-api-auth-client/example.js +47 -0
  24. package/lib/behind-api-auth-client/package.json +9 -0
  25. package/lib/behind-api-client/BehindApiClient.js +137 -0
  26. package/lib/behind-api-client/chat/ChatApp.js +11 -0
  27. package/lib/behind-api-client/chat/ChatV10.js +13 -0
  28. package/lib/behind-api-client/chat/ChatV10Chat.js +87 -0
  29. package/lib/behind-api-client/chat/ChatV10Chats.js +14 -0
  30. package/lib/behind-api-client/chat/ChatV10Message.js +57 -0
  31. package/lib/behind-api-client/chat/ChatV20.js +11 -0
  32. package/lib/behind-api-client/chat/ChatV20Chat.js +14 -0
  33. package/lib/behind-api-client/chat/ChatV20Message.js +27 -0
  34. package/lib/behind-api-client/easyjob/EasyjobApp.js +9 -0
  35. package/lib/behind-api-client/easyjob/EasyjobV10.js +31 -0
  36. package/lib/behind-api-client/easyjob/EasyjobV10Answers.js +16 -0
  37. package/lib/behind-api-client/easyjob/EasyjobV10Applicants.js +29 -0
  38. package/lib/behind-api-client/easyjob/EasyjobV10Applications.js +39 -0
  39. package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfileArtifacts.js +31 -0
  40. package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfiles.js +99 -0
  41. package/lib/behind-api-client/easyjob/EasyjobV10Companies.js +36 -0
  42. package/lib/behind-api-client/easyjob/EasyjobV10Cv.js +15 -0
  43. package/lib/behind-api-client/easyjob/EasyjobV10Departments.js +37 -0
  44. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionArtifacts.js +29 -0
  45. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionCandidateQuestions.js +63 -0
  46. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptions.js +93 -0
  47. package/lib/behind-api-client/easyjob/EasyjobV10Reports.js +35 -0
  48. package/lib/behind-api-client/example.js +47 -0
  49. package/lib/behind-api-client/global/GlobalApp.js +9 -0
  50. package/lib/behind-api-client/global/GlobalV10.js +11 -0
  51. package/lib/behind-api-client/global/GlobalV10Sockets.js +16 -0
  52. package/lib/behind-api-client/global/GlobalV10Storage.js +29 -0
  53. package/lib/behind-api-client/gpt/GptApp.js +15 -0
  54. package/lib/behind-api-client/gpt/GptV10.js +15 -0
  55. package/lib/behind-api-client/gpt/GptV10Prompt.js +17 -0
  56. package/lib/behind-api-client/gpt/GptV10Request.js +16 -0
  57. package/lib/behind-api-client/gpt/GptV10Storedprompts.js +14 -0
  58. package/lib/behind-api-client/gpt/GptV10Whisper.js +23 -0
  59. package/lib/behind-api-client/gpt/GptV20.js +9 -0
  60. package/lib/behind-api-client/gpt/GptV20Prompt.js +15 -0
  61. package/lib/behind-api-client/gpt/GptV30.js +13 -0
  62. package/lib/behind-api-client/gpt/GptV30Chat.js +19 -0
  63. package/lib/behind-api-client/gpt/GptV30Prompt.js +41 -0
  64. package/lib/behind-api-client/gpt/GptV30Prompts.js +32 -0
  65. package/lib/behind-api-client/gpt/GptV40.js +11 -0
  66. package/lib/behind-api-client/gpt/GptV40Prompt.js +24 -0
  67. package/lib/behind-api-client/gpt/GptV40Prompts.js +30 -0
  68. package/lib/behind-api-client/mailer/MailerApp.js +11 -0
  69. package/lib/behind-api-client/mailer/MailerV10.js +15 -0
  70. package/lib/behind-api-client/mailer/MailerV10Bulk.js +21 -0
  71. package/lib/behind-api-client/mailer/MailerV10Message.js +83 -0
  72. package/lib/behind-api-client/mailer/MailerV10Settings.js +44 -0
  73. package/lib/behind-api-client/mailer/MailerV10Template.js +23 -0
  74. package/lib/behind-api-client/mailer/MailerV20.js +9 -0
  75. package/lib/behind-api-client/mailer/MailerV20Message.js +21 -0
  76. package/lib/behind-api-client/mastogram/MastogramApp.js +9 -0
  77. package/lib/behind-api-client/mastogram/MastogramV10.js +13 -0
  78. package/lib/behind-api-client/mastogram/MastogramV10Bluesky.js +42 -0
  79. package/lib/behind-api-client/mastogram/MastogramV10Mastodon.js +45 -0
  80. package/lib/behind-api-client/mastogram/MastogramV10Telegram.js +39 -0
  81. package/lib/behind-api-client/monitor/MonitorApp.js +9 -0
  82. package/lib/behind-api-client/monitor/MonitorV10.js +13 -0
  83. package/lib/behind-api-client/monitor/MonitorV10Finances.js +39 -0
  84. package/lib/behind-api-client/monitor/MonitorV10Record.js +15 -0
  85. package/lib/behind-api-client/monitor/MonitorV10Records.js +22 -0
  86. package/lib/behind-api-client/oauth/OauthApp.js +9 -0
  87. package/lib/behind-api-client/oauth/OauthV10.js +9 -0
  88. package/lib/behind-api-client/oauth/OauthV10Authorisation.js +15 -0
  89. package/lib/behind-api-client/package.json +9 -0
  90. package/lib/behind-api-client/payments/PaymentsApp.js +13 -0
  91. package/lib/behind-api-client/payments/PaymentsV10.js +15 -0
  92. package/lib/behind-api-client/payments/PaymentsV10Gift.js +32 -0
  93. package/lib/behind-api-client/payments/PaymentsV10Payture.js +30 -0
  94. package/lib/behind-api-client/payments/PaymentsV10Product.js +15 -0
  95. package/lib/behind-api-client/payments/PaymentsV10Telegram.js +44 -0
  96. package/lib/behind-api-client/payments/PaymentsV20.js +9 -0
  97. package/lib/behind-api-client/payments/PaymentsV20Payture.js +32 -0
  98. package/lib/behind-api-client/payments/PaymentsV21.js +15 -0
  99. package/lib/behind-api-client/payments/PaymentsV21Cards.js +14 -0
  100. package/lib/behind-api-client/payments/PaymentsV21Payture.js +29 -0
  101. package/lib/behind-api-client/payments/PaymentsV21Stripe.js +28 -0
  102. package/lib/behind-api-client/payments/PaymentsV21Subscriptions.js +21 -0
  103. package/lib/behind-api-client/questionnaire/QuestionnaireApp.js +9 -0
  104. package/lib/behind-api-client/questionnaire/QuestionnaireV10.js +9 -0
  105. package/lib/behind-api-client/questionnaire/QuestionnaireV10Form.js +22 -0
  106. package/lib/behind-api-client/raet/RaetApp.js +11 -0
  107. package/lib/behind-api-client/raet/RaetV10.js +21 -0
  108. package/lib/behind-api-client/raet/RaetV10Cv.js +87 -0
  109. package/lib/behind-api-client/raet/RaetV10Individual.js +43 -0
  110. package/lib/behind-api-client/raet/RaetV10Individuals.js +38 -0
  111. package/lib/behind-api-client/raet/RaetV10Jd.js +47 -0
  112. package/lib/behind-api-client/raet/RaetV10Project.js +61 -0
  113. package/lib/behind-api-client/raet/RaetV10Projects.js +14 -0
  114. package/lib/behind-api-client/raet/RaetV10Report.js +39 -0
  115. package/lib/behind-api-client/raet/RaetV20.js +11 -0
  116. package/lib/behind-api-client/raet/RaetV20Cv.js +31 -0
  117. package/lib/behind-api-client/raet/RaetV20Individuals.js +25 -0
  118. package/lib/behind-api-client/rag/RagApp.js +9 -0
  119. package/lib/behind-api-client/rag/RagV10.js +9 -0
  120. package/lib/behind-api-client/rag/RagV10Storage.js +27 -0
  121. package/lib/behind-api-client/ruKitchen/RuKitchenApp.js +9 -0
  122. package/lib/behind-api-client/ruKitchen/RuKitchenV10.js +11 -0
  123. package/lib/behind-api-client/ruKitchen/RuKitchenV10Importer.js +29 -0
  124. package/lib/behind-api-client/ruKitchen/RuKitchenV10SeoArticle.js +14 -0
  125. package/lib/behind-api-client/sales/SalesApp.js +11 -0
  126. package/lib/behind-api-client/sales/SalesV10.js +23 -0
  127. package/lib/behind-api-client/sales/SalesV10Catalogue.js +58 -0
  128. package/lib/behind-api-client/sales/SalesV10Categories.js +15 -0
  129. package/lib/behind-api-client/sales/SalesV10Companies.js +55 -0
  130. package/lib/behind-api-client/sales/SalesV10Company.js +120 -0
  131. package/lib/behind-api-client/sales/SalesV10Group.js +70 -0
  132. package/lib/behind-api-client/sales/SalesV10Groups.js +21 -0
  133. package/lib/behind-api-client/sales/SalesV10Logs.js +14 -0
  134. package/lib/behind-api-client/sales/SalesV10Notes.js +38 -0
  135. package/lib/behind-api-client/sales/SalesV20.js +11 -0
  136. package/lib/behind-api-client/sales/SalesV20Companies.js +26 -0
  137. package/lib/behind-api-client/sales/SalesV20Notes.js +17 -0
  138. package/lib/behind-api-client/sip/SipApp.js +9 -0
  139. package/lib/behind-api-client/sip/SipV10.js +15 -0
  140. package/lib/behind-api-client/sip/SipV10Call.js +83 -0
  141. package/lib/behind-api-client/sip/SipV10Phone.js +44 -0
  142. package/lib/behind-api-client/sip/SipV10Transcript.js +21 -0
  143. package/lib/behind-api-client/sip/SipV10Transcripts.js +21 -0
  144. package/lib/behind-api-client/storage/StorageApp.js +9 -0
  145. package/lib/behind-api-client/storage/StorageV10.js +11 -0
  146. package/lib/behind-api-client/storage/StorageV10File.js +35 -0
  147. package/lib/behind-api-client/storage/StorageV10Upload.js +21 -0
  148. package/lib/behind-api-client/tests/TestsApp.js +9 -0
  149. package/lib/behind-api-client/tests/TestsV10.js +15 -0
  150. package/lib/behind-api-client/tests/TestsV10Cases.js +29 -0
  151. package/lib/behind-api-client/tests/TestsV10CasesExtended.js +14 -0
  152. package/lib/behind-api-client/tests/TestsV10Core.js +14 -0
  153. package/lib/behind-api-client/tests/TestsV10Mail.js +14 -0
  154. package/lib/behind-api-client/tools/ToolsApp.js +9 -0
  155. package/lib/behind-api-client/tools/ToolsV10.js +9 -0
  156. package/lib/behind-api-client/tools/ToolsV10Pdf.js +30 -0
  157. package/package.json +25 -0
@@ -0,0 +1,940 @@
1
+ # Candidate Profiles API Extension
2
+
3
+ This document extends the main EasyJob JavaScript API Client Documentation with detailed information about the Candidate Profiles API methods.
4
+
5
+ ## Overview
6
+
7
+ The Candidate Profiles API allows you to manage comprehensive candidate profiles throughout the job application process. This includes creating and updating candidate profiles, managing profile sections (education, experience, skills, etc.), parsing resumes from PDFs, and maintaining profile status. Each user can have only one active (non-deleted) candidate profile.
8
+
9
+ ---
10
+
11
+ ## Candidate Profiles API
12
+
13
+ ### behindAPI.easyjob.V10.candidateProfiles.create()
14
+ Creates a new candidate profile record for the authenticated user. Each user can have only one non-deleted profile.
15
+
16
+ **Parameters:**
17
+ - None required (uses authenticated user's session)
18
+
19
+ **Usage:**
20
+ ```javascript
21
+ const result = await behindAPI.easyjob.V10.candidateProfiles.create();
22
+
23
+ // Response:
24
+ {
25
+ success: true,
26
+ data: {
27
+ profile_id: "aa0e8400-e29b-41d4-a716-446655440005"
28
+ }
29
+ }
30
+ ```
31
+
32
+ ### behindAPI.easyjob.V10.candidateProfiles.get()
33
+ Retrieves the candidate profile for the current user. If no profile exists, automatically creates one and returns it.
34
+
35
+ **Parameters:**
36
+ - None required (uses authenticated user's session)
37
+
38
+ **Usage:**
39
+ ```javascript
40
+ const result = await behindAPI.easyjob.V10.candidateProfiles.get();
41
+
42
+ // Response:
43
+ {
44
+ success: true,
45
+ data: {
46
+ id: "aa0e8400-e29b-41d4-a716-446655440005",
47
+ user_id: "550e8400-e29b-41d4-a716-446655440001",
48
+ profile_data: {
49
+ first_name: "John",
50
+ last_name: "Doe",
51
+ email: "john.doe@example.com",
52
+ phone: "+1-555-123-4567",
53
+ location: "New York, NY",
54
+ summary: "Experienced software developer with expertise in full-stack development...",
55
+ linkedin_url: "https://linkedin.com/in/johndoe",
56
+ portfolio_url: "https://johndoe.dev"
57
+ },
58
+ facts: {
59
+ total_experience_years: 5,
60
+ education_level: "masters",
61
+ skills_match_percentage: 85,
62
+ last_updated: "2024-01-20T09:15:00Z"
63
+ },
64
+ education: [
65
+ {
66
+ institution: "MIT",
67
+ degree: "Master of Science",
68
+ field_of_study: "Computer Science",
69
+ start_year: 2017,
70
+ end_year: 2019,
71
+ gpa: 3.8,
72
+ honors: "Magna Cum Laude"
73
+ }
74
+ ],
75
+ job_experience: [
76
+ {
77
+ company: "Tech Corp",
78
+ position: "Senior Software Engineer",
79
+ start_date: "2020-01-15",
80
+ end_date: "2024-01-15",
81
+ current: false,
82
+ description: "Led development of microservices architecture...",
83
+ technologies: ["React", "Node.js", "AWS", "Docker"],
84
+ achievements: ["Reduced deployment time by 60%", "Led team of 5 developers"]
85
+ }
86
+ ],
87
+ hard_skills: [
88
+ {
89
+ skill: "JavaScript",
90
+ level: "Expert",
91
+ years_experience: 6
92
+ },
93
+ {
94
+ skill: "React",
95
+ level: "Advanced",
96
+ years_experience: 4
97
+ }
98
+ ],
99
+ soft_skills: [
100
+ {
101
+ skill: "Leadership",
102
+ level: "Advanced"
103
+ },
104
+ {
105
+ skill: "Communication",
106
+ level: "Expert"
107
+ }
108
+ ],
109
+ certificates: [
110
+ {
111
+ name: "AWS Certified Solutions Architect",
112
+ issuing_organization: "Amazon Web Services",
113
+ issue_date: "2023-06-15",
114
+ expiry_date: "2026-06-15",
115
+ credential_id: "AWS-CSA-12345"
116
+ }
117
+ ],
118
+ languages: [
119
+ {
120
+ language: "English",
121
+ proficiency: "Native"
122
+ },
123
+ {
124
+ language: "Spanish",
125
+ proficiency: "Conversational"
126
+ }
127
+ ],
128
+ status: "active",
129
+ created_at: "2024-01-15T10:30:00Z",
130
+ updated_at: "2024-01-20T09:15:00Z",
131
+ deleted: false
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### behindAPI.easyjob.V10.candidateProfiles.update(profileId, profileData)
137
+ Updates a candidate profile with new profile data.
138
+
139
+ **Parameters:**
140
+ - `profileId` (string, required) - The candidate profile UUID to update
141
+ - `profileData` (object, required) - The profile data object containing fields to update
142
+
143
+ **Usage:**
144
+ ```javascript
145
+ const profileData = {
146
+ name: "John Doe",
147
+ summary: "Senior Software Developer and Team Lead with extensive experience in Java, PHP, Android, and full-stack development, leading teams, and building web applications and CMS solutions.",
148
+ contacts: {
149
+ emails: ["john.doe@example.com"],
150
+ phones: ["+1-555-123-4567"],
151
+ websites: [{
152
+ url: "https://www.linkedin.com/in/johndoe/",
153
+ type: "linkedin"
154
+ }],
155
+ addresses: [{
156
+ city: "New York",
157
+ country: "US"
158
+ }]
159
+ },
160
+ interests: []
161
+ };
162
+
163
+ const result = await behindAPI.easyjob.V10.candidateProfiles.update(
164
+ "aa0e8400-e29b-41d4-a716-446655440005",
165
+ profileData
166
+ );
167
+
168
+ // Response:
169
+ {
170
+ success: true
171
+ }
172
+ ```
173
+
174
+ ### behindAPI.easyjob.V10.candidateProfiles.delete(profileId)
175
+ Soft deletes a candidate profile record (sets deleted flag to TRUE rather than permanently removing the record).
176
+
177
+ **Parameters:**
178
+ - `profileId` (string, required) - The candidate profile UUID to delete
179
+
180
+ **Usage:**
181
+ ```javascript
182
+ const result = await behindAPI.easyjob.V10.candidateProfiles.delete("aa0e8400-e29b-41d4-a716-446655440005");
183
+
184
+ // Response:
185
+ {
186
+ success: true
187
+ }
188
+ ```
189
+
190
+ ### behindAPI.easyjob.V10.candidateProfiles.updateEducation(profileId, education)
191
+ Updates the education section of a candidate profile.
192
+
193
+ **Parameters:**
194
+ - `profileId` (string, required) - The candidate profile UUID to update
195
+ - `education` (object, required) - The education data object containing education records
196
+
197
+ **Usage:**
198
+ ```javascript
199
+ const educationData = {
200
+ education: [
201
+ {
202
+ degree: "Master of Science in Computer Science",
203
+ skills: [],
204
+ end_date: null,
205
+ location: {city: "", country: "US"},
206
+ start_date: "2019-01-01",
207
+ education_name: "",
208
+ institution_name: "Stanford University"
209
+ }
210
+ ]
211
+ };
212
+
213
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateEducation(
214
+ "aa0e8400-e29b-41d4-a716-446655440005",
215
+ educationData
216
+ );
217
+
218
+ // Response:
219
+ {
220
+ success: true
221
+ }
222
+ ```
223
+
224
+ ### behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(profileId, jobExperience)
225
+ Updates the job experience section of a candidate profile.
226
+
227
+ **Parameters:**
228
+ - `profileId` (string, required) - The candidate profile UUID to update
229
+ - `jobExperience` (object, required) - The job experience data object containing work history
230
+
231
+ **Usage:**
232
+ ```javascript
233
+ const jobExperienceData = {
234
+ job_experience: [
235
+ {
236
+ roles: [{
237
+ name: "Senior Software Developer",
238
+ skills: [{
239
+ name: "Java",
240
+ category: "language",
241
+ experience: "Java for Android ECG applications."
242
+ }, {
243
+ name: "Android Studio",
244
+ category: "tool",
245
+ experience: "Android Studio for application development."
246
+ }],
247
+ description: "Built applications for data processing and presentation; implemented applications for reports, activity tracking, and testing; developed and maintained a CMS.",
248
+ responsibilities: [
249
+ "Develop applications (back end/front end) for data processing in Java.",
250
+ "Receive data from devices in real time, pre-process it, and send it to a server for post-processing, storage, and return to the application for presentation."
251
+ ]
252
+ }, {
253
+ name: "Team Lead",
254
+ skills: [{
255
+ name: "Team leadership",
256
+ category: "soft_skill",
257
+ experience: "Led a team of up to 10 developers."
258
+ }],
259
+ description: "Led up to 10 developers, handling planning, task allocation, progress tracking, reporting, code reviews, and testing.",
260
+ responsibilities: [
261
+ "Receive assignments from management, assess them, and build time schedules.",
262
+ "Split workload into tasks, assign to team members, track progress, and report to management."
263
+ ]
264
+ }],
265
+ end_date: null,
266
+ location: {city: "New York", country: "US"},
267
+ position: "Senior Software Developer and Team Lead",
268
+ start_date: "2020-02-01",
269
+ description: "Developed web applications with real-time data processing and server integration; led a team of up to 10 developers; developed and maintained a PHP/JavaScript CMS using MySQL.",
270
+ company_name: "Tech Solutions Inc",
271
+ project_name: ""
272
+ }
273
+ ]
274
+ };
275
+
276
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(
277
+ "aa0e8400-e29b-41d4-a716-446655440005",
278
+ jobExperienceData
279
+ );
280
+
281
+ // Response:
282
+ {
283
+ success: true
284
+ }
285
+ ```
286
+
287
+ ### behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(profileId, hardSkills)
288
+ Updates the hard skills section of a candidate profile.
289
+
290
+ **Parameters:**
291
+ - `profileId` (string, required) - The candidate profile UUID to update
292
+ - `hardSkills` (object, required) - The hard skills data object containing technical skills
293
+
294
+ **Usage:**
295
+ ```javascript
296
+ const hardSkillsData = {
297
+ hard_skills: [
298
+ {
299
+ name: "Java 7+",
300
+ level: 8,
301
+ category: "language",
302
+ experience: "Developed web applications and server components for data processing."
303
+ },
304
+ {
305
+ name: "JavaScript",
306
+ level: 8,
307
+ category: "language",
308
+ experience: "Used for web front end; CMS development with PHP and JavaScript."
309
+ },
310
+ {
311
+ name: "PHP 5.5.6+",
312
+ level: 8,
313
+ category: "language",
314
+ experience: "Developed and maintained a content management system using PHP and MySQL."
315
+ },
316
+ {
317
+ name: "Android Studio 2+",
318
+ level: 6,
319
+ category: "tool",
320
+ experience: "Primary IDE for Android Java development."
321
+ },
322
+ {
323
+ name: "MySQL",
324
+ level: 6,
325
+ category: "database",
326
+ experience: "Used in CMS development and data storage."
327
+ }
328
+ ]
329
+ };
330
+
331
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(
332
+ "aa0e8400-e29b-41d4-a716-446655440005",
333
+ hardSkillsData
334
+ );
335
+
336
+ // Response:
337
+ {
338
+ success: true
339
+ }
340
+ ```
341
+
342
+ ### behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(profileId, softSkills)
343
+ Updates the soft skills section of a candidate profile.
344
+
345
+ **Parameters:**
346
+ - `profileId` (string, required) - The candidate profile UUID to update
347
+ - `softSkills` (object, required) - The soft skills data object containing interpersonal skills
348
+
349
+ **Usage:**
350
+ ```javascript
351
+ const softSkillsData = {
352
+ soft_skills: [
353
+ {
354
+ skill: "Leadership",
355
+ level: "Expert"
356
+ },
357
+ {
358
+ skill: "Communication",
359
+ level: "Expert"
360
+ },
361
+ {
362
+ skill: "Problem Solving",
363
+ level: "Advanced"
364
+ },
365
+ {
366
+ skill: "Team Collaboration",
367
+ level: "Expert"
368
+ },
369
+ {
370
+ skill: "Project Management",
371
+ level: "Advanced"
372
+ }
373
+ ]
374
+ };
375
+
376
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(
377
+ "aa0e8400-e29b-41d4-a716-446655440005",
378
+ softSkillsData
379
+ );
380
+
381
+ // Response:
382
+ {
383
+ success: true
384
+ }
385
+ ```
386
+
387
+ ### behindAPI.easyjob.V10.candidateProfiles.updateCertificates(profileId, certificates)
388
+ Updates the certificates section of a candidate profile.
389
+
390
+ **Parameters:**
391
+ - `profileId` (string, required) - The candidate profile UUID to update
392
+ - `certificates` (object, required) - The certificates data object containing professional certifications
393
+
394
+ **Usage:**
395
+ ```javascript
396
+ const certificatesData = {
397
+ certificates: [
398
+ {
399
+ date: "2023-06-15",
400
+ name: "Master of Science in Computer Science",
401
+ description: "Diploma recognized by accredited university",
402
+ institution: "Stanford University, United States"
403
+ }
404
+ ]
405
+ };
406
+
407
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateCertificates(
408
+ "aa0e8400-e29b-41d4-a716-446655440005",
409
+ certificatesData
410
+ );
411
+
412
+ // Response:
413
+ {
414
+ success: true
415
+ }
416
+ ```
417
+
418
+ ### behindAPI.easyjob.V10.candidateProfiles.updateLanguages(profileId, languages)
419
+ Updates the languages section of a candidate profile.
420
+
421
+ **Parameters:**
422
+ - `profileId` (string, required) - The candidate profile UUID to update
423
+ - `languages` (object, required) - The languages data object containing language proficiencies
424
+
425
+ **Usage:**
426
+ ```javascript
427
+ const languagesData = {
428
+ languages: [
429
+ {
430
+ level: "native_bilingual",
431
+ language: "English"
432
+ },
433
+ {
434
+ level: "advanced",
435
+ language: "Spanish"
436
+ },
437
+ {
438
+ level: "intermediate",
439
+ language: "French"
440
+ }
441
+ ]
442
+ };
443
+
444
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateLanguages(
445
+ "aa0e8400-e29b-41d4-a716-446655440005",
446
+ languagesData
447
+ );
448
+
449
+ // Response:
450
+ {
451
+ success: true
452
+ }
453
+ ```
454
+
455
+ ### behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(url)
456
+ Parses a PDF resume from a URL and stores the extracted text content as a candidate profile artifact.
457
+
458
+ **Parameters:**
459
+ - `url` (string, required) - The URL of the PDF resume to parse
460
+
461
+ **Usage:**
462
+ ```javascript
463
+ const result = await behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(
464
+ "https://example.com/resumes/john-doe-resume.pdf"
465
+ );
466
+
467
+ // Response:
468
+ {
469
+ success: true,
470
+ data: {
471
+ artifact_id: "bb0e8400-e29b-41d4-a716-446655440007",
472
+ candidate_profile_id: "aa0e8400-e29b-41d4-a716-446655440005",
473
+ content: "JOHN DOE\nSenior Software Engineer\n\nEXPERIENCE\nGoogle Inc. - Senior Software Engineer (2021-Present)...",
474
+ source: "https://example.com/resumes/john-doe-resume.pdf",
475
+ type: "cv",
476
+ created_at: "2024-01-20T14:30:00Z"
477
+ }
478
+ }
479
+ ```
480
+
481
+ ### behindAPI.easyjob.V10.candidateProfiles.updateStatus(profileId, status)
482
+ Updates the status of a candidate profile with user permission validation.
483
+
484
+ **Parameters:**
485
+ - `profileId` (string, required) - The candidate profile UUID to update
486
+ - `status` (string, required) - The new status value
487
+
488
+ **Common Status Values:**
489
+ - `"active"` - Profile is active and visible
490
+ - `"inactive"` - Profile is temporarily inactive
491
+ - `"private"` - Profile is private and not searchable
492
+ - `"pending_verification"` - Profile is awaiting verification
493
+ - `"verified"` - Profile has been verified
494
+ - `"suspended"` - Profile has been suspended
495
+
496
+ **Usage:**
497
+ ```javascript
498
+ const result = await behindAPI.easyjob.V10.candidateProfiles.updateStatus(
499
+ "aa0e8400-e29b-41d4-a716-446655440005",
500
+ "verified"
501
+ );
502
+
503
+ // Response:
504
+ {
505
+ success: true
506
+ }
507
+ ```
508
+
509
+ ---
510
+
511
+ ## Data Structure Reference
512
+
513
+ ### Profile Data Object (from contacts)
514
+ The main profile information parsed from resume includes:
515
+
516
+ ```json
517
+ {
518
+ "name": "John Doe",
519
+ "summary": "Senior Software Developer and Team Lead with extensive experience in Java, PHP, Android, and full-stack development, leading teams, and building web applications and CMS solutions.",
520
+ "contacts": {
521
+ "emails": ["john.doe@example.com"],
522
+ "phones": ["+1-555-123-4567"],
523
+ "websites": [{
524
+ "url": "https://www.linkedin.com/in/johndoe/",
525
+ "type": "linkedin"
526
+ }],
527
+ "addresses": [{
528
+ "city": "New York",
529
+ "country": "US"
530
+ }]
531
+ },
532
+ "interests": []
533
+ }
534
+ ```
535
+
536
+ ### Education Object
537
+ Each education entry includes:
538
+
539
+ - `degree` (string) - Full degree title
540
+ - `skills` (array) - Skills learned during education (usually empty from parsing)
541
+ - `end_date` (string|null) - End date in YYYY-MM-DD format
542
+ - `location` (object) - Location with city and country
543
+ - `start_date` (string) - Start date in YYYY-MM-DD format
544
+ - `education_name` (string) - Additional education details (often empty)
545
+ - `institution_name` (string) - Name of educational institution
546
+
547
+ **Example:**
548
+ ```json
549
+ {
550
+ "degree": "Master of Science in Computer Science",
551
+ "skills": [],
552
+ "end_date": null,
553
+ "location": {"city": "", "country": "US"},
554
+ "start_date": "2019-01-01",
555
+ "education_name": "",
556
+ "institution_name": "Stanford University"
557
+ }
558
+ ```
559
+
560
+ ### Job Experience Object
561
+ Each job experience entry includes:
562
+
563
+ - `roles` (array) - Array of roles within the position
564
+ - `name` (string) - Role title
565
+ - `skills` (array) - Skills used in this role
566
+ - `name` (string) - Skill name
567
+ - `category` (string) - Skill category (language, tool, database, etc.)
568
+ - `experience` (string) - Description of how skill was used
569
+ - `description` (string) - Role description
570
+ - `responsibilities` (array) - List of specific responsibilities
571
+ - `end_date` (string|null) - End date in YYYY-MM-DD format (null if current)
572
+ - `location` (object) - Location with city and country
573
+ - `position` (string) - Overall position title
574
+ - `start_date` (string) - Start date in YYYY-MM-DD format
575
+ - `description` (string) - Overall position description
576
+ - `company_name` (string) - Company name
577
+ - `project_name` (string) - Project name (often empty)
578
+
579
+ **Example:**
580
+ ```json
581
+ {
582
+ "roles": [{
583
+ "name": "Senior Software Developer",
584
+ "skills": [{
585
+ "name": "Java",
586
+ "category": "language",
587
+ "experience": "Java for Android ECG applications."
588
+ }],
589
+ "description": "Built Android applications for ECG data processing...",
590
+ "responsibilities": ["Develop applications (back end/front end) for electrocardiography in Java."]
591
+ }],
592
+ "end_date": null,
593
+ "location": {"city": "Prague", "country": "CZ"},
594
+ "position": "Senior Software Developer and Team Lead",
595
+ "start_date": "2011-02-01",
596
+ "company_name": "Future Product Design"
597
+ }
598
+ ```
599
+
600
+ ### Skills Objects (Hard Skills and All Skills)
601
+ Each skill entry includes:
602
+
603
+ - `name` (string) - Name of the skill
604
+ - `level` (number) - Proficiency level (1-10 scale)
605
+ - `category` (string) - Skill category (language, framework, tool, database, platform, etc.)
606
+ - `experience` (string) - Description of experience with this skill
607
+
608
+ **Example:**
609
+ ```json
610
+ {
611
+ "name": "Java 7+",
612
+ "level": 8,
613
+ "category": "language",
614
+ "experience": "Developed Android applications and server components for ECG data processing."
615
+ }
616
+ ```
617
+
618
+ ### Certificates Object
619
+ Each certificate entry includes:
620
+
621
+ - `date` (string) - Date in YYYY-MM-DD format
622
+ - `name` (string) - Certificate name
623
+ - `description` (string) - Certificate description
624
+ - `institution` (string) - Issuing institution
625
+
626
+ **Example:**
627
+ ```json
628
+ {
629
+ "date": "2021-06-15",
630
+ "name": "Master of Science in Computer Science",
631
+ "description": "Diploma recognized by accredited university",
632
+ "institution": "Stanford University, United States"
633
+ }
634
+ ```
635
+
636
+ ### Languages Object
637
+ Each language entry includes:
638
+
639
+ - `level` (string) - Proficiency level (native_bilingual, advanced, intermediate, basic)
640
+ - `language` (string) - Language name
641
+
642
+ **Example:**
643
+ ```json
644
+ {
645
+ "level": "advanced",
646
+ "language": "Spanish"
647
+ }
648
+ ```
649
+
650
+ ### Facts Object
651
+ Computed facts about the candidate:
652
+
653
+ - `total_experience_years` (number) - Total years of professional experience
654
+ - `education_level` (string) - Highest education level achieved
655
+ - `skills_match_percentage` (number) - Percentage match for job requirements
656
+ - `last_updated` (timestamp) - When facts were last computed
657
+
658
+ ---
659
+
660
+ ## Complete Usage Example
661
+
662
+ ```javascript
663
+ // Complete workflow for managing a candidate profile
664
+ async function manageCompleteProfile() {
665
+ try {
666
+ // 1. Get or create candidate profile
667
+ let profile = await behindAPI.easyjob.V10.candidateProfiles.get();
668
+
669
+ if (!profile.success) {
670
+ console.error("Failed to retrieve profile");
671
+ return;
672
+ }
673
+
674
+ console.log(`Working with profile: ${profile.data.id}`);
675
+ const profileId = profile.data.id;
676
+
677
+ // 2. Update basic profile information
678
+ const basicInfo = {
679
+ first_name: "Jane",
680
+ last_name: "Smith",
681
+ email: "jane.smith@email.com",
682
+ phone: "+1-555-987-6543",
683
+ location: "San Francisco, CA",
684
+ summary: "Experienced full-stack developer with a passion for creating scalable web applications and leading high-performing teams.",
685
+ linkedin_url: "https://linkedin.com/in/janesmith",
686
+ portfolio_url: "https://janesmith.dev"
687
+ };
688
+
689
+ await behindAPI.easyjob.V10.candidateProfiles.update(profileId, basicInfo);
690
+ console.log("✓ Updated basic profile information");
691
+
692
+ // 3. Add education history
693
+ const education = {
694
+ education: [
695
+ {
696
+ institution: "University of California, Berkeley",
697
+ degree: "Bachelor of Science",
698
+ field_of_study: "Computer Science",
699
+ start_year: 2016,
700
+ end_year: 2020,
701
+ gpa: 3.8,
702
+ honors: "Magna Cum Laude"
703
+ }
704
+ ]
705
+ };
706
+
707
+ await behindAPI.easyjob.V10.candidateProfiles.updateEducation(profileId, education);
708
+ console.log("✓ Updated education section");
709
+
710
+ // 4. Add work experience
711
+ const jobExperience = {
712
+ job_experience: [
713
+ {
714
+ company: "TechCorp Inc",
715
+ position: "Senior Full Stack Developer",
716
+ start_date: "2022-01-15",
717
+ end_date: null,
718
+ current: true,
719
+ description: "Leading development of microservices architecture and mentoring junior developers in a fast-paced startup environment.",
720
+ technologies: ["React", "Node.js", "PostgreSQL", "AWS", "Docker"],
721
+ achievements: [
722
+ "Reduced page load times by 45% through optimization",
723
+ "Led team of 4 developers",
724
+ "Implemented automated testing reducing bugs by 60%"
725
+ ]
726
+ },
727
+ {
728
+ company: "Digital Solutions LLC",
729
+ position: "Full Stack Developer",
730
+ start_date: "2020-06-01",
731
+ end_date: "2021-12-31",
732
+ current: false,
733
+ description: "Developed and maintained web applications for various clients using modern JavaScript frameworks.",
734
+ technologies: ["Vue.js", "Express.js", "MySQL", "MongoDB"],
735
+ achievements: [
736
+ "Delivered 15+ client projects on time",
737
+ "Improved client satisfaction scores by 25%"
738
+ ]
739
+ }
740
+ ]
741
+ };
742
+
743
+ await behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(profileId, jobExperience);
744
+ console.log("✓ Updated job experience section");
745
+
746
+ // 5. Add technical skills
747
+ const hardSkills = {
748
+ hard_skills: [
749
+ { skill: "JavaScript", level: "Expert", years_experience: 5 },
750
+ { skill: "React", level: "Expert", years_experience: 4 },
751
+ { skill: "Node.js", level: "Advanced", years_experience: 4 },
752
+ { skill: "Python", level: "Intermediate", years_experience: 2 },
753
+ { skill: "AWS", level: "Advanced", years_experience: 3 },
754
+ { skill: "PostgreSQL", level: "Advanced", years_experience: 3 },
755
+ { skill: "Docker", level: "Intermediate", years_experience: 2 }
756
+ ]
757
+ };
758
+
759
+ await behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(profileId, hardSkills);
760
+ console.log("✓ Updated technical skills");
761
+
762
+ // 6. Add soft skills
763
+ const softSkills = {
764
+ soft_skills: [
765
+ { skill: "Leadership", level: "Advanced" },
766
+ { skill: "Communication", level: "Expert" },
767
+ { skill: "Problem Solving", level: "Expert" },
768
+ { skill: "Team Collaboration", level: "Expert" },
769
+ { skill: "Mentoring", level: "Advanced" }
770
+ ]
771
+ };
772
+
773
+ await behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(profileId, softSkills);
774
+ console.log("✓ Updated soft skills");
775
+
776
+ // 7. Add certifications
777
+ const certificates = {
778
+ certificates: [
779
+ {
780
+ name: "AWS Certified Developer - Associate",
781
+ issuing_organization: "Amazon Web Services",
782
+ issue_date: "2023-03-15",
783
+ expiry_date: "2026-03-15",
784
+ credential_id: "AWS-DEV-12345"
785
+ },
786
+ {
787
+ name: "Certified ScrumMaster",
788
+ issuing_organization: "Scrum Alliance",
789
+ issue_date: "2022-09-20",
790
+ expiry_date: "2024-09-20",
791
+ credential_id: "CSM-67890"
792
+ }
793
+ ]
794
+ };
795
+
796
+ await behindAPI.easyjob.V10.candidateProfiles.updateCertificates(profileId, certificates);
797
+ console.log("✓ Updated certifications");
798
+
799
+ // 8. Add language skills
800
+ const languages = {
801
+ languages: [
802
+ { language: "English", proficiency: "Native" },
803
+ { language: "Spanish", proficiency: "Conversational" },
804
+ { language: "French", proficiency: "Basic" }
805
+ ]
806
+ };
807
+
808
+ await behindAPI.easyjob.V10.candidateProfiles.updateLanguages(profileId, languages);
809
+ console.log("✓ Updated language skills");
810
+
811
+ // 9. Update profile status
812
+ await behindAPI.easyjob.V10.candidateProfiles.updateStatus(profileId, "active");
813
+ console.log("✓ Profile status set to active");
814
+
815
+ // 10. Get the complete updated profile
816
+ const updatedProfile = await behindAPI.easyjob.V10.candidateProfiles.get();
817
+ console.log("=== Profile Update Complete ===");
818
+ console.log(`Profile ID: ${updatedProfile.data.id}`);
819
+ console.log(`Name: ${updatedProfile.data.profile_data.first_name} ${updatedProfile.data.profile_data.last_name}`);
820
+ console.log(`Status: ${updatedProfile.data.status}`);
821
+ console.log(`Total Skills: ${updatedProfile.data.hard_skills?.length || 0} technical, ${updatedProfile.data.soft_skills?.length || 0} soft`);
822
+ console.log(`Experience: ${updatedProfile.data.job_experience?.length || 0} positions`);
823
+ console.log(`Education: ${updatedProfile.data.education?.length || 0} degrees`);
824
+ console.log(`Certifications: ${updatedProfile.data.certificates?.length || 0} certificates`);
825
+ console.log(`Languages: ${updatedProfile.data.languages?.length || 0} languages`);
826
+
827
+ } catch (error) {
828
+ console.error("Error managing profile:", error);
829
+ }
830
+ }
831
+
832
+ // Example: Resume parsing workflow
833
+ async function parseAndEnhanceProfile(resumeUrl) {
834
+ try {
835
+ // 1. Parse resume from PDF
836
+ console.log("Parsing resume from PDF...");
837
+ const parseResult = await behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(resumeUrl);
838
+
839
+ if (!parseResult.success) {
840
+ console.error("Failed to parse resume");
841
+ return;
842
+ }
843
+
844
+ console.log("✓ Resume parsed successfully");
845
+ console.log(`Artifact ID: ${parseResult.data.artifact_id}`);
846
+ console.log(`Profile ID: ${parseResult.data.candidate_profile_id}`);
847
+
848
+ // 2. Review extracted content
849
+ const extractedText = parseResult.data.content;
850
+ console.log("Extracted text preview:", extractedText.substring(0, 200) + "...");
851
+
852
+ // 3. Get current profile to see if it was auto-populated
853
+ const profile = await behindAPI.easyjob.V10.candidateProfiles.get();
854
+
855
+ if (profile.success) {
856
+ console.log("Current profile status:");
857
+ console.log(`- Has education: ${profile.data.education?.length > 0 ? 'Yes' : 'No'}`);
858
+ console.log(`- Has experience: ${profile.data.job_experience?.length > 0 ? 'Yes' : 'No'}`);
859
+ console.log(`- Has skills: ${profile.data.hard_skills?.length > 0 ? 'Yes' : 'No'}`);
860
+ }
861
+
862
+ // 4. Manual enhancement after parsing (if needed)
863
+ // You could use the extracted text to suggest profile improvements
864
+ // or integrate with AI services to auto-populate profile sections
865
+
866
+ return parseResult.data;
867
+
868
+ } catch (error) {
869
+ console.error("Error parsing resume:", error);
870
+ return null;
871
+ }
872
+ }
873
+
874
+ // Example: Profile validation and scoring
875
+ async function validateAndScoreProfile() {
876
+ try {
877
+ const profile = await behindAPI.easyjob.V10.candidateProfiles.get();
878
+
879
+ if (!profile.success) {
880
+ console.error("Failed to retrieve profile");
881
+ return;
882
+ }
883
+
884
+ const data = profile.data;
885
+ const score = {
886
+ completeness: 0,
887
+ sections: {},
888
+ recommendations: []
889
+ };
890
+
891
+ // Check basic information completeness
892
+ const basicFields = ['first_name', 'last_name', 'email', 'phone', 'location', 'summary'];
893
+ const completedBasic = basicFields.filter(field =>
894
+ data.profile_data && data.profile_data[field] && data.profile_data[field].trim()
895
+ ).length;
896
+
897
+ score.sections.basic_info = (completedBasic / basicFields.length) * 100;
898
+
899
+ if (completedBasic < basicFields.length) {
900
+ score.recommendations.push("Complete all basic profile information");
901
+ }
902
+
903
+ // Check education
904
+ const hasEducation = data.education && data.education.length > 0;
905
+ score.sections.education = hasEducation ? 100 : 0;
906
+
907
+ if (!hasEducation) {
908
+ score.recommendations.push("Add education background");
909
+ }
910
+
911
+ // Check work experience
912
+ const hasExperience = data.job_experience && data.job_experience.length > 0;
913
+ score.sections.job_experience = hasExperience ? 100 : 0;
914
+
915
+ if (!hasExperience) {
916
+ score.recommendations.push("Add work experience");
917
+ } else if (data.job_experience.length < 2) {
918
+ score.recommendations.push("Consider adding more work experience entries");
919
+ }
920
+
921
+ // Check skills
922
+ const hasHardSkills = data.hard_skills && data.hard_skills.length >= 5;
923
+ const hasSoftSkills = data.soft_skills && data.soft_skills.length >= 3;
924
+
925
+ score.sections.hard_skills = hasHardSkills ? 100 : (data.hard_skills?.length || 0) * 20;
926
+ score.sections.soft_skills = hasSoftSkills ? 100 : (data.soft_skills?.length || 0) * 33;
927
+
928
+ if (!hasHardSkills) {
929
+ score.recommendations.push("Add at least 5 technical skills");
930
+ }
931
+ if (!hasSoftSkills) {
932
+ score.recommendations.push("Add at least 3 soft skills");
933
+ }
934
+
935
+ // Check certifications
936
+ const hasCertificates = data.certificates && data.certificates.length > 0;
937
+ score.sections.certificates = hasCertificates ? 100 : 0;
938
+
939
+ if (!hasCertificates) {
940
+ score.recommendations.push("Consider adding professional certifications");