Export Candidate

📘

We recommend reading the Integration Plugin Overview first.

Overview

This documentation covers the exportCandidate action workflow — the Integration Plugins Framework action type used to export a hired candidate into any external system (typically, but not exclusive to, HRIS, HCM, payroll).

Unlike assessments and background checks, exportCandidate is a synchronous, fire-and-forget action. There is no webhook processing — the plugin completes the export and returns a success or error response directly.

📘

If the external system that the plugin integrates with processes the submission asynchronously, please let us know via email ([email protected]).

Export Candidate Flow

Registration

📘

To register your plugin on your sandbox account, you need to send the Meta Endpoint URL to us via email ([email protected]).

If you don't have a sandbox account we will create one for you.

For now all plugins are registered by the Pinpoint Integration Team - this is both for sandbox and live (client's) accounts (as we are still in Public Beta).

Lifecycle Overview

  1. User initiates "Send to ExampleHR" action (where ExampleHR is the name of the provider/service defined by the plugin configuration)



  2. Pinpoint calls Action Meta Endpoint to build the form

  3. User fills and submits the form



  4. Platform calls Action Submit Endpoint to process

    1. The plugin calls the external system, passing the form field values
    2. External system (e.g. HRIS, HCM) processes the request
      1. If the export completes successfully:
        1. The plugin returns a successful response
        2. Pinpoint records the export result
      2. If the external system rejects the request (validation errors, 5xx):
        1. The plugin returns an error response
        2. Pinpoint shows the errors on the form and allows the user to correct and resubmit
📘

All requests Pinpoint makes to the plugin are POST requests


exportCandidate Action

Purpose

The exportCandidate action enables users to export a candidate's information to an external system at the point of hire.

Initial Set Up Endpoint (Meta Endpoint)

Endpoint: Defined by your service (e.g. /) - POST request

Called when: You initiate the setup of your plugin service. Pinpoint calls this endpoint when it registers the plugin to get the name, logo, and possible actions and configuration fields.

Responsibilities:

  • Create the integration in Pinpoint
  • Fetch configuration fields
  • Fetch form field data mappings

Response

Example Meta Response
{
  version: '2.0.0',
  name: 'ExampleHR',
  logoBase64: 'data:image/png;base64,{base64_data}',
  actions: [
    {
      actionType: 'exportCandidate',
      key: 'exportExampleHrCandidate',
      label: 'Send to ExampleHR',
      iconSvgBase64: 'data:image/svg+xml;base64,{base64_svg}',
      metaEndpoint: '/exportCandidate/meta',
      mappings: [
        { key: 'firstName', label: 'First Name', value: '{{candidate_first_name}}' },
        { key: 'lastName', label: 'Last Name', value: '{{candidate_last_name}}' },
        { key: 'email', label: 'Email', value: '{{{candidate_email}}}' },
        { key: 'startDate', label: 'Start Date', value: '{{application_start_date}}' },
      ],
    },
  ],
  configurationFormFields: [
    {
      key: 'apiKey',
      label: 'API Key',
      description: 'Your ExampleHR API key',
      type: 'string',
      required: true,
      sensitive: true,
      useAsHttpHeader: 'X-Example-HR-Key',
      placeholder: 'For example: sk_live_abc123',
    },
  ],
}

Meta response schema
FieldTypeRequiredValidationDescription
versionstringYesMust be '2.0.0'API version of the plugin interface
namestringYesNon-emptyDisplay name of the integration provider
logoBase64stringYesNon-emptyBase64-encoded logo image with data URI prefix (e.g., data:image/png;base64,{base64_png})
actionsarrayYesSee Action Object SchemaList of action definitions. For HRIS exports, this will be exportCandidate
listEndpointsarrayOptionalSee List Endpoint Object SchemaEndpoints that return dynamic lists of options (e.g. departments, job titles, locations)
configurationFormFieldsarrayOptionalSee Configuration Form Field SchemaConfiguration fields for plugin setup (e.g. API Key, Base URL)
webhookProcessEndpointstringOptionalNot used for exportCandidate. This action type does not support webhook processing.
errorEndpointstringOptionalRelative endpoint for error handling/reporting
Action Object Schema
FieldTypeRequiredValidationDescription
actionTypestring(enum)YesMust be exportCandidateDefines the type of the action
keystringYesUnique action keyMust be unique across all actions (e.g. exportExampleHrCandidate)
labelstringYesNon-emptyDisplay label for the action in UI (e.g. Send to ExampleHR)
iconSvgBase64stringYesNon-emptyBase64-encoded SVG icon for the action. e.g. data:image/svg+xml;base64,{base64_svg}
metaEndpointstringYesNon-emptyRelative endpoint to fetch action-specific form fields. e.g. /exportCandidate/meta
mappingsarrayOptionalSee Mapping Object SchemaDefault field mappings. Pinpoint pre-populates form fields using candidate data variables (e.g. {{candidate_first_name}})
Configuration Form Fields Schema
FieldTypeRequiredValidationDescription
keystringYesNon-empty, uniqueUnique identifier for the configuration field
labelstringYesNon-emptyDisplay label for the field
typestringYesOne of: string, persisted_stringField type
descriptionstringOptionalHelp text shown below the field
placeholderstringOptionalPlaceholder text for the input
requiredbooleanOptionalWhether this field must be filled
sensitivebooleanOptionalWhether the value is encrypted and masked. Set to true for API keys.
useAsHttpHeaderstringOptionalNon-emptySend this value as an HTTP header instead of in configurationValues
defaultValuestringOptionalPre-populated default value
readonlybooleanOptionalWhether the field is read-only
Mapping Object Schema
FieldTypeRequiredDescription
keystringYesField identifier that references a form field
valuestringYesDefault value or template variable (e.g. {{candidate_email}})
labelstringOptionalDisplay label for the mapping
multilinebooleanOptionalWhether this is a multiline text field
List Endpoint Object Schema
FieldTypeRequiredDescription
keystringYesUnique identifier for the list endpoint (e.g. departments)
labelstringYesDisplay label for the list
endpointstringYesRelative endpoint path (e.g. /exportCandidate/list/departments)

Action Meta Endpoint

Endpoint: Defined in the meta response (at actions.[].metaEndpoint, e.g. /exportCandidate/meta) - POST request

Called when: User clicks the action button in the UI (e.g. "Send to ExampleHR")

Responsibilities:

  • Validate plugin configuration
  • Fetch dynamic options from the HRIS system (e.g. departments, job titles, locations)
  • Build the form fields

Dynamic form refetching

The Plugin Framework supports form re-rendering based on the value selected by the user. Please find more information here

Request payload

Request Payload Example
{
  payloadVersion: "1.0.0",
  key: "exportCandidate",
  configurationValues: [
    { key: 'apiKey', value: 'sk_live_abc123' }
  ],
  formFields: [
    { key: 'department', value: 'engineering' },
    { key: 'firstName', value: 'Jane' },
  ],
}
Request Payload Schema
FieldTypeRequiredValidationDescription
payloadVersionstringYesMust be '1.0.0'Version of the payload schema
keystringYesMust be 'exportCandidate'Action identifier
configurationValuesarrayOptionalSee Configuration Value ObjectCurrent configuration values
formFieldsarrayOptionalSee Form Field Value ObjectCurrent form field values (only present during refetch, includes fields marked with includeValueInRefetch: true)

Response

Response Example
{
  actionVersion: '1.0.0',
  key: 'exportCandidate',
  label: 'Send to ExampleHR',
  description: 'Export this hired candidate to ExampleHR',
  formFields: [
    {
      key: 'firstName',
      label: 'First Name',
      type: 'string',
      required: true,
      readonly: false,
    },
    {
      key: 'lastName',
      label: 'Last Name',
      type: 'string',
      required: true,
      readonly: false,
    },
    {
      key: 'startDate',
      label: 'Start Date',
      type: 'date',
      required: true,
    },
    {
      key: 'department',
      label: 'Department',
      type: 'string',
      required: true,
      singleSelectOptionsListKey: 'departments',
    },
    {
      key: 'email',
      label: 'Email',
      type: 'string',
      required: true,
      readonly: false,
    },
  ],
  submitEndpoint: '/exportCandidate/submit'
}
Response Schema
FieldTypeRequiredValidationDescription
actionVersionstringYesMust be 1.0.0Version of the action schema
keystringYesMust be exportCandidateAction identifier
labelstringYesNon-emptyDisplay label for the action
descriptionstringYesNon-emptyDescription of what this action does
formFieldsarrayYesSee Form Fields SchemaForm fields to display to the user
submitEndpointstringYesNon-emptyRelative path of the submit endpoint (e.g. /exportCandidate/submit)
Form Fields Schema
FieldTypeRequiredValidationDescription
keystringYesNon-emptyUnique identifier for the field
labelstringYesNon-emptyDisplay label for the field
typestringYesOne of: string, callout, heading, date, divider, file, filesType of form field to render. NOTE: Select/dropdown fields are of the string type, but require specifying singleSelectOptions, multiSelectOptions, or their ListKey variants.
valuestringOptionalDefault or pre-filled value (typically populated via field mappings)
placeholderstringOptionalPlaceholder text for input fields
descriptionstringOptionalHelp text displayed below the field
requiredbooleanOptionalWhether the field must be filled
readonlybooleanOptionalWhether the field is read-only
hiddenbooleanOptionalWhether the field is hidden from view (value is still submitted)
multilinebooleanOptionalWhether to render as a textarea
intentstringOptionalOne of: none, primary, success, warning, dangerVisual intent for callout fields
acceptedFileTypesarrayOptionalArray of: doc, docx, gif, jpeg, jpg, pdf, png, pptx, svg, xls, xlsxAccepted file types for file/files fields
includeValueInRefetchbooleanOptionalInclude this field's value when refetching the form
performRefetchOnChangebooleanOptionalTrigger a form refetch when this field's value changes
singleSelectOptionsarrayOptionalSee Select Option ObjectOptions for single-select dropdown
singleSelectOptionsListKeystringOptionalReference to a listEndpoint key for dynamic options
multiSelectOptionsarrayOptionalSee Select Option ObjectOptions for multi-select dropdown
multiSelectOptionsListKeystringOptionalReference to a listEndpoint key for dynamic multi-select options
checkboxOptionsarrayOptionalSee Select Option ObjectOptions for checkbox group
radioOptionsarrayOptionalMax 3 options, See Select Option ObjectOptions for radio button group
Select Option Object Schema
FieldTypeRequiredDescription
labelstringYesDisplay text for the option
valuestringYesValue to submit when this option is selected

Action Submit Endpoint

Endpoint: Defined in meta response (via submitEndpoint, e.g. /exportCandidate/submit) - POST request

Called when: User submits the form

Responsibilities:

  • Validate configuration and field values
  • Create or update the employee record in the external HRIS system
  • Return a success or error response

Payload

The platform sends the form field values and configuration values. Unlike assessments and background checks, there is no webhookUrl or generatedUuid — this action does not use webhooks.

Example payload
{
  payloadVersion: '1.0.0',
  key: 'exportCandidate',
  formFields: [
    { key: 'firstName', value: 'Jane' },
    { key: 'lastName', value: 'Smith' },
    { key: 'email', value: '[email protected]' },
    { key: 'startDate', value: '2024-03-01' },
    { key: 'department', value: 'engineering' },
  ],
  configurationValues: [
    { key: 'apiKey', value: 'sk_live_abc123' },
  ],
}
Request Payload Schema
FieldTypeRequiredValidationDescription
payloadVersionstringYesMust be '1.0.0'Version of the payload schema
keystringYesMust be 'exportCandidate'Action identifier
formFieldsarrayYesSee Form Field Value ObjectUser-submitted form field values
configurationValuesarrayOptionalSee Configuration Value ObjectCurrent configuration values from plugin setup
Form Field Value Object
FieldTypeRequiredDescription
keystringYesField identifier (matches the key from formFields in meta response)
valuestringOptionalUser-submitted value
Configuration Value Object
FieldTypeRequiredDescription
keystringYesConfiguration field key (from configurationFormFields)
valuestringYesConfiguration value (nullable)

Response

Successful Response

Returned when the export completes successfully.

{
  resultVersion: '2.0.0',
  key: 'exportCandidate',
  success: true,
  externalIdentifier: 'emp_789',       # ID of the employee record in the HRIS
  externalSystem: 'personio',          # identifies the HRIS system
  message: {
    title: 'Export successful',
    text: 'Jane Smith has been exported to ExampleHR.',
    status: 'success'
  }
}
Error Response
{
  resultVersion: '2.0.0',
  key: 'exportCandidate',
  success: false,
  toast: {
    error: 'Failed to export candidate to ExampleHR'
  },
  errors: [
    { key: 'department', error: 'Department not found in ExampleHR' },
    { key: 'startDate', error: 'Start date must be in the future' }
  ]
}

Response Schema

Success Response
FieldTypeRequiredValidationDescription
resultVersionstringYesMust be '2.0.0'Version of the result schema
keystringYesMust be 'exportCandidate'Action identifier
successbooleanYesMust be trueIndicates successful export
externalIdentifierstringOptionalNon-emptyID of the created record in the external system (e.g. employee ID)
externalSystemstringOptionalSee External System ValuesIdentifies the HRIS system — used by Pinpoint to tag the export record
messageobjectOptionalSee Message Object SchemaSuccess or informational message displayed to the user
toastobjectOptionalSee Toast Object SchemaToast notifications to display in the UI
persistarrayOptionalSee Persist Object SchemaConfiguration values to persist for future use
Error Response
FieldTypeRequiredValidationDescription
successbooleanYesMust be falseIndicates failure
toastobjectOptionalSee Toast Object SchemaToast notifications to display
errorsarrayOptionalSee Field Error Object SchemaField-specific validation errors
Message Object Schema
FieldTypeRequiredDescription
textstringYesMessage body text
titlestringOptionalMessage title
statusstringOptionalOne of: success, error — controls the visual styling
Toast Object Schema
FieldTypeRequiredDescription
errorstringOptionalError message to display
warningstringOptionalWarning message to display
infostringOptionalInformational message to display
successstringOptionalSuccess message to display
Field Error Object Schema
FieldTypeRequiredDescription
keystringYesField identifier that has the error
errorstringYesError message for the field
Persist Object Schema
FieldTypeRequiredDescription
keystringYesConfiguration field key to update
valuestringYesNew value to persist (will be available in configurationValues on future requests)
External System Values

The externalSystem field identifies which HRIS the candidate was exported to. Accepted values:

other, intelli_hr, people_hr, rippling, oracle, cezanne, adonis_hr, humaans, itrent, bob, deel, compas, bizimply, workday, planday, natural_hr, personio, paycom, ukg_pro, gusto, ukg_ready, adp_workforce_now, fourth_onboarding, adonis, lattice, dayforce, paylocity, smartsheet, sap_successfactors

Use other if your system is not listed.


Complete Integration Flow Example

Note: This is a simplified example of the complete flow (payloads are not complete).

1. User Exports Candidate to HRIS

Platform → Plugin (Action Meta Endpoint)

POST /exportCandidate/meta

Plugin → Platform

{
  formFields: [
    { key: 'firstName', type: 'string', value: 'Jane' },
    { key: 'lastName', type: 'string', value: 'Smith' },
    { key: 'department', type: 'string', singleSelectOptionsListKey: 'departments' },
    { key: 'startDate', type: 'date' }
  ],
  submitEndpoint: '/exportCandidate/submit'
}

2. User Submits Form

Platform → Plugin (Submit Endpoint)

POST /exportCandidate/submit
{
  payloadVersion: '1.0.0',
  key: 'exportCandidate',
  formFields: [
    { key: 'firstName', value: 'Jane' },
    { key: 'lastName', value: 'Smith' },
    { key: 'department', value: 'engineering' },
    { key: 'startDate', value: '2024-03-01' }
  ],
  configurationValues: [
    { key: 'apiKey', value: 'sk_live_abc123' }
  ]
}

3. Plugin Returns Success

Plugin → Platform

{
  resultVersion: '2.0.0',
  key: 'exportCandidate',
  success: true,
  externalIdentifier: 'emp_789',
  externalSystem: 'personio',
  message: {
    title: 'Export successful',
    text: 'Jane Smith has been created in ExampleHR.',
    status: 'success'
  }
}

Schemas

Action Meta Schema

This schema validates the response from your Action Meta Endpoint.

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "type": "object",
  "properties": {
    "actionVersion": { "enum": ["1.0.0"], "type": "string" },
    "key": { "enum": ["exportCandidate"], "type": "string" },
    "label": { "type": "string", "minLength": 1 },
    "description": { "type": "string", "minLength": 1 },
    "formFields": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string", "minLength": 1 },
          "label": { "type": "string", "minLength": 1 },
          "type": { "enum": ["string", "callout", "heading", "date", "divider", "file", "files"] },
          "value": { "type": "string" },
          "placeholder": { "type": "string" },
          "description": { "type": "string" },
          "multiline": { "type": "boolean" },
          "required": { "type": "boolean" },
          "readonly": { "type": "boolean" },
          "hidden": { "type": "boolean" },
          "intent": { "enum": ["none", "primary", "success", "warning", "danger"] },
          "acceptedFileTypes": { "type": "array", "items": { "enum": ["doc","docx","gif","jpeg","jpg","pdf","png","pptx","svg","xls","xlsx"] } },
          "includeValueInRefetch": { "type": "boolean" },
          "performRefetchOnChange": { "type": "boolean" },
          "singleSelectOptions": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1 }, "value": { "type": "string", "minLength": 1 } }, "required": ["label", "value"] } },
          "singleSelectOptionsListKey": { "type": "string" },
          "multiSelectOptions": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1 }, "value": { "type": "string", "minLength": 1 } }, "required": ["label", "value"] } },
          "multiSelectOptionsListKey": { "type": "string" },
          "checkboxOptions": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1 }, "value": { "type": "string", "minLength": 1 } }, "required": ["label", "value"] } },
          "radioOptions": { "type": "array", "maxLength": 3, "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1 }, "value": { "type": "string", "minLength": 1 } }, "required": ["label", "value"] } }
        },
        "required": ["key", "label", "type"]
      }
    },
    "submitEndpoint": { "type": "string", "minLength": 1 }
  },
  "required": ["actionVersion", "key", "label", "description", "formFields", "submitEndpoint"]
}

Action Payload Schema

This schema validates the request sent to your Action Submit Endpoint.

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "type": "object",
  "properties": {
    "payloadVersion": { "enum": ["1.0.0"], "type": "string" },
    "key": { "enum": ["exportCandidate"], "type": "string" },
    "formFields": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string", "minLength": 1 },
          "value": { "type": "string" }
        },
        "required": ["key"]
      }
    },
    "configurationValues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string", "minLength": 1 },
          "value": { "type": ["null", "string"] }
        },
        "required": ["key", "value"]
      }
    }
  },
  "required": ["payloadVersion", "key", "formFields"]
}

Action Result Schema

This schema validates the response from your Action Submit Endpoint.

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "type": "object",
  "properties": {
    "resultVersion": { "enum": ["2.0.0"], "type": "string" },
    "key": { "enum": ["exportCandidate"], "type": "string" },
    "success": { "type": "boolean" },
    "externalIdentifier": { "type": "string", "minLength": 1 },
    "externalSystem": {
      "enum": ["other","intelli_hr","people_hr","rippling","oracle","cezanne","adonis_hr","humaans","itrent","bob","deel","compas","bizimply","workday","planday","natural_hr","personio","paycom","ukg_pro","gusto","ukg_ready","adp_workforce_now","fourth_onboarding","adonis","lattice","dayforce","paylocity","smartsheet","sap_successfactors"],
      "type": "string"
    },
    "message": {
      "type": "object",
      "properties": {
        "text": { "type": "string", "minLength": 1 },
        "title": { "type": "string", "minLength": 1 },
        "status": { "enum": ["success", "error"], "type": "string" }
      },
      "required": ["text"]
    },
    "toast": {
      "type": "object",
      "properties": {
        "error": { "type": "string", "minLength": 1 },
        "warning": { "type": "string", "minLength": 1 },
        "info": { "type": "string", "minLength": 1 },
        "success": { "type": "string", "minLength": 1 }
      }
    },
    "persist": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string", "minLength": 1 },
          "value": { "type": "string", "minLength": 1 }
        },
        "required": ["key", "value"]
      }
    }
  },
  "required": ["resultVersion", "key", "success"]
}