The Name Card Generation API allows administrators to create professional, printable name cards for conference attendees. Each name card includes:
GET /api/admin/name-cards/generate?conferenceId={id}&format=pdf&includeLogos=true
Description: Generate name cards for all confirmed attendees of a conference.
Query Parameters:
conferenceId
(required): MongoDB ObjectId of the conferenceformat
(optional): Output format - pdf
(default) or png
includeLogos
(optional): Include university logos - true
(default) or false
Response: PDF file download
Example:
curl -X GET "http://localhost:3000/api/admin/name-cards/generate?conferenceId=507f1f77bcf86cd799439011" \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-o "conference-name-cards.pdf"
GET /api/admin/name-cards/attendee/{registrationId}?format=pdf&includeLogos=true
Description: Generate a name card for a specific attendee.
Path Parameters:
registrationId
(required): MongoDB ObjectId of the registrationQuery Parameters:
format
(optional): Output format - pdf
(default) or png
includeLogos
(optional): Include university logos - true
(default) or false
Response: PDF file download
Example:
curl -X GET "http://localhost:3000/api/admin/name-cards/attendee/507f1f77bcf86cd799439012" \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-o "john-doe-name-card.pdf"
GET /api/admin/name-cards/preview/{registrationId}
Description: Get preview data for a name card without generating the PDF.
Path Parameters:
registrationId
(required): MongoDB ObjectId of the registrationResponse:
{
"success": true,
"data": {
"nameCard": {
"preferredName": "Dr. Jane Smith",
"fullName": "Jane Marie Smith",
"affiliation": "University of Example",
"university": "University of Example",
"attendeeType": "academic",
"isFirstTime": false,
"sobieCount": 3,
"conferenceYear": 2024,
"email": "jane.smith@example.edu",
"registrationId": "507f1f77bcf86cd799439012"
},
"attendeeHistory": {
"totalSOBIEsAttended": 3,
"isFirstTime": false,
"previousConferences": [
{
"year": 2022,
"title": "SOBIE 2022: Innovation in Biomedical Engineering"
},
{
"year": 2023,
"title": "SOBIE 2023: Future Technologies"
},
{
"year": 2024,
"title": "SOBIE 2024: Sustainable Solutions"
}
]
}
}
}
GET /api/admin/name-cards/attendees/{conferenceId}?page=1&limit=50&search=smith
Description: Get a paginated list of attendees with name card data for bulk generation.
Path Parameters:
conferenceId
(required): MongoDB ObjectId of the conferenceQuery Parameters:
page
(optional): Page number (default: 1)limit
(optional): Items per page (default: 50, max: 100)search
(optional): Search by name or affiliationResponse:
{
"success": true,
"data": {
"attendees": [
{
"registrationId": "507f1f77bcf86cd799439012",
"nameCard": {
"preferredName": "Dr. Jane Smith",
"fullName": "Jane Marie Smith",
"affiliation": "University of Example",
"university": "University of Example",
"attendeeType": "academic",
"isFirstTime": false,
"sobieCount": 3,
"conferenceYear": 2024,
"email": "jane.smith@example.edu",
"registrationId": "507f1f77bcf86cd799439012"
},
"selected": false
}
],
"pagination": {
"current": 1,
"pages": 5,
"total": 247,
"hasNext": true,
"hasPrev": false
}
}
}
All name card endpoints require:
Authorization: Bearer {your-jwt-token}
Content-Type: application/json
{
"success": false,
"message": "Conference ID is required",
"statusCode": 400
}
{
"success": false,
"message": "Authentication required",
"statusCode": 401
}
{
"success": false,
"message": "Admin access required",
"statusCode": 403
}
{
"success": false,
"message": "No confirmed registrations found for this conference",
"statusCode": 404
}
{
preferredName: String, // Display name on badge
fullName: String, // Full legal name
affiliation: String, // Primary affiliation
university: String, // University name
attendeeType: String, // student|academic|sobie_affiliate|professional|industry
isFirstTime: Boolean, // First SOBIE conference
sobieCount: Number, // Total SOBIEs attended
conferenceYear: Number, // Current conference year
email: String, // Contact email
registrationId: ObjectId // Registration reference
}
student
: University students, graduate students, PhD candidatesacademic
: Faculty, professors, researchers, postdocssobie_affiliate
: SOBIE organization members and staffprofessional
: Independent professionals, consultantsindustry
: Corporate representatives, industry professionals// Generate all name cards for a conference
const generateAllNameCards = async (conferenceId) => {
try {
const response = await fetch(
`/api/admin/name-cards/generate?conferenceId=${conferenceId}&includeLogos=true`,
{
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
if (response.ok) {
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `conference-${conferenceId}-name-cards.pdf`;
a.click();
window.URL.revokeObjectURL(url);
}
} catch (error) {
console.error('Error generating name cards:', error);
}
};
// Get attendees list for selection
const getAttendeesList = async (conferenceId, page = 1, search = '') => {
try {
const response = await fetch(
`/api/admin/name-cards/attendees/${conferenceId}?page=${page}&search=${encodeURIComponent(search)}`,
{
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
}
);
if (response.ok) {
return await response.json();
}
} catch (error) {
console.error('Error fetching attendees:', error);
}
};
# Generate all name cards for a conference
curl -X GET "http://localhost:3000/api/admin/name-cards/generate?conferenceId=507f1f77bcf86cd799439011" \
-H "Authorization: Bearer YOUR_TOKEN" \
-o "conference-name-cards.pdf"
# Generate single name card
curl -X GET "http://localhost:3000/api/admin/name-cards/attendee/507f1f77bcf86cd799439012" \
-H "Authorization: Bearer YOUR_TOKEN" \
-o "attendee-name-card.pdf"
# Get preview data
curl -X GET "http://localhost:3000/api/admin/name-cards/preview/507f1f77bcf86cd799439012" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json"
npm install pdfkit sharp axios
node --max-old-space-size=4096
For technical support or feature requests, please contact the SOBIE development team or create an issue in the project repository.