š” This guide is intended for software vendors with their own HR database (HRIS, payroll tool, in-house hubā¦) and wishing to expose an API compatible with our standards.
ā
Reflect will create a connector to a REST API if and only if it is "reusable" for multiple Reflect client companies.
Objective and General Principle
Reflect allows automatic aggregation of HR data from any software (HRIS, payroll, ATSā¦) via a REST API. The API must allow:
Retrieve all structured HR history
Automate daily data retrieval
Ensure performance, security and reliability
Expected Data
Reflect uses HR data according to a standard semantic model. Each API entry point corresponds to a specific business object.
Here are the 7 business objects your API must expose if you want full coverage:
Business object | Expected data |
| Demographic and identification information |
| Contractual information (type, dates, FTE, etc.) |
| Organizational positioning (department, role, site, gradeā¦) |
| Hierarchical reporting link to manager |
| Theoretical contractual compensation |
| Days of absence and associated typology |
| Actual compensation from the pay slip |
Each record must contain a unique and stable employee_id and contract_id, and an effective_date.
Historical vs. Permanent Mode
Your API must support two modes of use:
1. Initial historical load
Expose all available HR data from the past 3 years (or more if possible)
Support pagination for large volumes (up to 1M+ rows)
Allow replaying an export for a specific period (via
start_dateandend_date)All records must include :
a field
effective_date(business effective date)a field
updated_at(last technical modification date)
2. Permanent Mode (incremental)
All endpoints must support the
updated_afterfilterThis filter applies to the
updated_atfield, noteffective_dateIt allows retrieving only the records modified since the last synchronization
š” An object whose effective_date is old but whose data has been modified must reappear in updated_after calls.
Technical specifications
Authentication
We recommend one of the following two modes:
Bearer token in the HTTP header
Authorization: Bearer YOUR_API_TOKEN
The token must be able to be manually regenerated if expired.
Response format
Strictly structured JSON format
List of homogeneous objects
Each object contains a
employee_idfield required and aneffective_datefieldExample :
[
{
"employee_id": "E1234",
"legal_entity": "SAS ABC",
"effective_date": "2023-01-01",
"job_title": "Sales Manager",
"employment_type": "CDI",
"fte": 1.0,
"arrival_date": "2022-03-08",
"contract_start_date": "2023-01-01",
"contract_end_date": null,
"remote_status": "HYBRID"
"employment_type": "CDI",
},
...
]
Pagination
Required beyond 500 results
Standard: limit + page
Recommended: totalCount + links.prev / links.next
Example :
GET /contracts?limit=100&page=3
Error handling
Your API must return standardized errors with a readable message in JSON format:
All 4xx and 5xx errors must contain an explicit JSON object
Always include
status,titleanderrors
Example (HTTP 400)
{
"title": "Validation failed",
"status": 400,
"errors": {
"employee_id": ["This field is required."],
"contract_start_date": ["Invalid format."]
}
}
Business specifications
Required fields
Each field must comply with the business definitions of the Reflect model (cf. details of recommended fields / columns). However, names do not necessarily have to follow Reflect's nomenclature.
You can also include additional data not covered by the document above.
Filtering
All endpoints must allow filtering the data to optimize calls.
Parameter | Target | Type | Example |
| Employee identifier | equality |
|
| HR status (active, inactive) | equality |
|
| Range on | interval |
|
| Last modification | ISO date-time |
|
Recommendations :
The
updated_atfield is required on each objectUse ISO 8601 format for dates (
YYYY-MM-DDorYYYY-MM-DDTHH:MM:SSZ)Date ranges can be open (e.g.:
start_date=2023-01-01alone)
Anti-patterns to avoid
Here are common practices that make an API incompatible with Reflect. They must be strictly avoided.
What to avoid | Why it's blocking |
API without | Impossible to detect changes |
Data limited to the ācurrentā state | No historical visibility |
Physical deletion of records | Breaks data traceability |
Unstable model (fields renamed or removed) | Breaks Reflect mappings |
Non-persistent HR identifiers (name, emailā¦) | Impossible to track an employee over time |
Non-ISO date formats | Parsing impossible or imprecise |
Partial data depending on status or implicit filter | Business inconsistencies in dashboards |
Recommended documentation
We recommend providing:
A link to public documentation (e.g., Swagger) or PDF
An example request per object
The authentication method and usable parameters (pagination, filters...)
If you're looking for inspiration, the API documentation of Lucca software is of good quality: š Lucca API Documentation (example to follow)
Integration and creation of the Reflect connector
Once the API is available, our Data team follows this process to create the API connector:
Technical audit (structure, authentication, coverage, volume)
Field quality control (formats, identifiers, coverage)
Mapping with our semantic model
Launch of the automatic flow (production)
The full test generally takes one week if the API is well structured.
Best practices
Use a stable HR identifier per employee (
employee_id)Expose dates in ISO format (
YYYY-MM-DD)Never return empty or ambiguous fields
Maintain structural consistency between calls
Provide a response time < 5s for 1000 results
Need help? Contact your usual Reflect contact or send us an email at [email protected]. We will be happy to collaborate to set up a stable, reliable and sustainable API.