Skip to main content

Next.js Integration

This example uses Next.js API Routes to proxy requests from your website to the Recsphere API, keeping your key server-side.

Environment variables

.env.local
# Never commit this file
RECSPHERE_API_KEY=your_api_key_here
RECSPHERE_API_BASE=https://api.recsphere.co.uk

List vacancies

pages/api/vacancies.js
export default async function handler(req, res) {
if (req.method !== 'POST') return res.status(405).end();

const response = await fetch(`${process.env.RECSPHERE_API_BASE}/v1/vacancies/get-filtered`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.RECSPHERE_API_KEY,
},
body: JSON.stringify(req.body),
});

const data = await response.json();
res.status(response.status).json(data);
}

Submit an application

pages/api/apply/[refNo].js
import formidable from 'formidable';
import fs from 'fs';

export const config = { api: { bodyParser: false } };

export default async function handler(req, res) {
if (req.method !== 'POST') return res.status(405).end();

const { refNo } = req.query;
const form = formidable({ maxFileSize: 10 * 1024 * 1024 });

form.parse(req, async (err, fields, files) => {
if (err) return res.status(400).json({ error: err.message });

const formData = new FormData();
formData.append('candidateName', fields.candidateName[0]);
formData.append('candidateEmail', fields.candidateEmail[0]);
if (fields.candidatePhone) formData.append('candidatePhone', fields.candidatePhone[0]);
if (fields.coverLetter) formData.append('coverLetter', fields.coverLetter[0]);
if (fields.linkedInUrl) formData.append('linkedInUrl', fields.linkedInUrl[0]);

const cvFile = files.cv[0];
formData.append('cv', new Blob([fs.readFileSync(cvFile.filepath)]), cvFile.originalFilename);

const response = await fetch(
`${process.env.RECSPHERE_API_BASE}/v1/vacancies/${refNo}/apply`,
{
method: 'POST',
headers: { 'X-Api-Key': process.env.RECSPHERE_API_KEY },
body: formData,
}
);

const data = await response.json();
res.status(response.status).json(data);
});
}

Frontend usage

// Fetch vacancies
const response = await fetch('/api/vacancies', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
take: 10,
columns: ['id', 'refNo', 'role', 'description', 'salaryFrom', 'salaryTo'],
filters: { statusId: 1 },
}),
});
const { items, total } = await response.json();

// Submit application
const formData = new FormData(document.getElementById('applyForm'));
const applyResponse = await fetch(`/api/apply/${refNo}`, {
method: 'POST',
body: formData,
});
const result = await applyResponse.json();