Get Document Details
Get document details and check status
Poll this endpoint after uploading to check if processing is complete.
Response States
| Status | Meaning | What to do |
|---|---|---|
| uploading | File being processed (0-15s) | Wait 10s, check again |
| pending | AI analyzing CV (15-50s) | Wait 15s, check again |
| completed | ✅ Done! | Retrieve full data |
| failed | ❌ Error occurred | Check error message |
| invalid | Not a valid CV | Upload different file |
What You Get (when completed)
Complete Response Structure
{
"documentId": "e89f1798-8e91-405b-83b2-036987006593",
"documentName": "Benjamin Gabay - CV",
"documentType": "cv",
"documentDate": "11-2025",
"status": "completed",
"message": "Document processing completed successfully",
"summary": "Benjamin Gabay - Sales-marketing Professional based in Paris, FRA with 4 years of experience. Educational background: Bachelor in Philosophy, Literature from University of Paris I: Panthéon-Sorbonne. Technical expertise: Copywriting, Content Creation, Prospecting. Domain experience: Ghostwriting, LinkedIn Coaching, Lead Generation, B2B, Inbound Sales. Most recently specializing in Ghostwriting, LinkedIn Coaching, Lead Generation.",
"extractedText": "Contact +33766771226\nLinkedIn: www.linkedin.com/in/benjamin-gabay\n\nBenjamin Gabay\nGhostwriter LinkedIn...\n\nEXPERIENCE\nFreelance Ghostwriter & Coach LinkedIn\nJanuary 2023 - Present (2 years)\n...",
"contact": {
"firstName": "Benjamin",
"lastName": "Gabay",
"email": "benjamin.gabay@example.com",
"linkedin": "www.linkedin.com/in/benjamin-gabay",
"location": {
"city": "Paris",
"country": "FRA"
}
},
"profile": {
"domain": "Sales Marketing",
"specialization": "Content Marketing",
"seniorityLevel": "Junior",
"experienceYears": 4,
"technicalStack": ["Copywriting", "Content Creation", "Prospecting"],
"industries": ["Real-estate", "Social Media"],
"recentExpertise": ["Ghostwriting", "LinkedIn Coaching", "Lead Generation"],
"hasManagement": false
},
"attributes": {
"languages": {
"french": 1,
"languages_count": 1,
"cv_language_detected": "French"
},
"technical_skills": {
"copywriting": 1,
"content_creation": 1,
"prospecting_tools": 1,
"technical_skills_count": 3
},
"professional_experience": {
"total_experience_years": 4,
"number_of_employers": 3,
"average_tenure_months": 16,
"current_position_duration": 4
},
"education_indicators": {
"highest_degree": "Bachelor",
"education_field": ["Philosophy", "Literature"],
"first_school_name": "University of Paris I: Panthéon-Sorbonne",
"education_prestige_score": 3
},
"industry_verticals": {
"real_estate": 1,
"social_media": 1,
"verticals_count": 2
},
"business_specialization": {
"roi_analysis": 1,
"training_experience": 1,
"revenue_generation_experience": 1,
"client_relationship_experience": 1
},
"performance_impact": {
"lead_generation_impact": 1,
"revenue_responsibility": 1,
"brand_awareness": 1
},
"domain_expertise": {
"b2b_sales_experience": 1,
"inbound_sales_experience": 1,
"content_marketing_experience": 1,
"social_media_marketing_experience": 1
}
},
"processingTime": {
"milliseconds": 61761,
"seconds": 62,
"formatted": "62s"
},
"timestamps": {
"createdAt": "2025-11-05T16:08:54.293Z",
"updatedAt": "2025-11-05T16:08:54.293Z",
"lastProcessedAt": "2025-11-05T16:09:56.054Z"
}
}Field Descriptions
summary
AI-generated professional summary (2-3 sentences) including:
- Name and location
- Years of experience
- Educational background
- Technical expertise
- Domain specializations
- Recent focus areas
extractedText
Complete text extracted from the CV (typically 5-15KB). Useful for:
- Full-text search
- Custom parsing
- LLM analysis
- Displaying original CV content
contact
Extracted contact information:
- firstName / lastName - Parsed from CV
- email - Email address (or "Unknown" if not found)
- linkedin - LinkedIn profile URL
- location - City and country (ISO codes)
profile
Professional profile summary:
- domain - Primary professional domain (e.g., "Sales Marketing", "Technology", "Finance")
- specialization - Specific expertise area (e.g., "Content Marketing", "Backend Development")
- seniorityLevel - Career level: "Junior", "Senior", "Executive"
- experienceYears - Total years of professional experience
- technicalStack - Array of tools, technologies, or methodologies
- industries - Array of industry verticals (e.g., "Real-estate", "Fintech")
- recentExpertise - Recent focus areas from last 1-2 positions
- hasManagement - Boolean indicating leadership/management experience
attributes
100+ structured attributes grouped by category:
languages - Language proficiency
- Specific languages (e.g.,
french: 1,english_fluent: 1) - Language counts and CV language
technical_skills - Technical competencies
- Specific skills (e.g.,
copywriting: 1,python_experience: 1) - Skill counts by category
professional_experience - Career metrics
- Total experience years
- Number of employers
- Job stability scores
- Current position duration
education_indicators - Academic background
- Highest degree earned
- Fields of study
- School names
- Education prestige score
industry_verticals - Industry experience
- Specific industries worked in
- Vertical counts
business_specialization - Business skills
- Revenue generation
- Client relationships
- Strategic planning
- ROI analysis
- Training/mentoring
domain_expertise - Domain-specific experience
- B2B/B2C experience
- Inbound/outbound sales
- Content/digital marketing
- Technical domains
performance_impact - Achievement indicators
- Lead generation impact
- Revenue responsibility
- Innovation contributions
- Brand awareness
market_client - Market experience
- Geographic markets (EMEA, APAC, etc.)
- B2B/B2C indicators
- Customer segments
- Channel experience
certifications - Professional credentials
- Certification counts
- Continuing education indicators
Polling Example
async function waitForCompletion(documentId) {
for (let i = 0; i < 18; i++) { // 90 seconds max
const res = await fetch(
`/v1/public/documents/${documentId}`,
{ headers: { 'X-API-Key': 'YOUR_API_KEY' } }
);
const data = await res.json();
if (data.status === 'completed') {
console.log('✅ Processing complete!');
console.log('Contact:', data.contact);
console.log('Profile:', data.profile);
return data;
}
if (data.status === 'failed' || data.status === 'invalid') {
throw new Error(data.error?.message || 'Processing failed');
}
console.log(`⏳ Status: ${data.status} - waiting...`);
await new Promise(r => setTimeout(r, 5000)); // Wait 5s
}
throw new Error('Timeout: Processing took longer than expected');
}
const result = await waitForCompletion('e89f1798-8e91-405b-83b2-036987006593');Use Cases
Display Candidate Profile
const { contact, profile, summary } = await getDocument(documentId);
displayProfile({
name: `${contact.firstName} ${contact.lastName}`,
email: contact.email,
summary: summary,
experience: profile.experienceYears,
skills: profile.technicalStack
});Search by Attributes
const { attributes } = await getDocument(documentId);
if (attributes.professional_experience.total_experience_years >= 5 &&
attributes.domain_expertise.b2b_sales_experience) {
addToShortlist(documentId);
}Custom Analysis
const { extractedText } = await getDocument(documentId);
const customData = await analyzeWithLLM(extractedText);Typical processing time: 30 to 90 seconds (average: 60s)
API key for public API access. Get yours at https://app.floreal.ai?tab=api
In: header
Path Parameters
uuidResponse Body
curl -X GET "https://api.floreal.ai/v1/public/documents/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
"documentName": "string",
"documentType": "cv",
"documentDate": "string",
"status": "uploading",
"message": "string",
"summary": "string",
"extractedText": "string",
"contact": {
"firstName": "string",
"lastName": "string",
"email": "string",
"linkedin": "string",
"location": {
"city": "string",
"country": "string"
}
},
"profile": {
"domain": "string",
"specialization": "string",
"seniorityLevel": "string",
"experienceYears": 0,
"technicalStack": [
"string"
],
"industries": [
"string"
],
"recentExpertise": [
"string"
],
"hasManagement": true
},
"attributes": {},
"error": {
"message": "string",
"timestamp": "2019-08-24T14:15:22Z"
},
"processingTime": {
"milliseconds": 0,
"seconds": 0,
"formatted": "string"
},
"timestamps": {
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"lastProcessedAt": "2019-08-24T14:15:22Z"
}
}{
"error": "string",
"message": "string"
}{
"error": "string"
}{
"error": "string",
"message": "string"
}