Submits a candidate's completed background check form. Takes no API key — the caller is whichever page the candidate filled in, identified only by the request_key issued when the request was created.
Which page that is depends on the callback_url you set when creating the request. Leave it pointing at the Prembly-hosted form and the candidate is sent there, and you need not call this endpoint at all. Point it at a page of your own and you are hosting the form: you collect the candidate's details and post them here yourself.
If you host the form
You take on the obligations that come with collecting this data. The form gathers personal information — identity, address, employment and education history, and named references — so you are responsible for obtaining the candidate's consent and for telling them what the data will be used for, before you submit it. This endpoint performs no consent check and will accept whatever it is given. Consent to the background check itself is captured later in the provider's own flow and reported back as a consent_signed webhook event; that is a separate step and does not cover your collection of the data here.
Your page must also be served from the host you registered as callback_url. A redirect_url on an unrecognised host is ignored, because these endpoints are unauthenticated and honouring one would be an open redirect.
Submitting
Accepts JSON or multipart/form-data. Inline file blobs inside request_data are converted to storage URLs before the verification engine is called; multipart file fields on the same request are stored and replaced with URLs. Submitting twice for the same request_key is rejected.
Authorization
ApiKeyAuth In: header
TypeScript Definitions
Use the request body type in TypeScript.
Serializer for candidate form submission.
Response Body
application/json
curl -X POST "https://example.com/api/v1/api/bgc/candidate-form-data/" \ -H "Content-Type: application/json" \ -d '{ "request_key": "123e4567-e89b-12d3-a456-426614174000", "request_data": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone": "+2348012345678", "date_of_birth": "1990-01-15", "address": { "street": "123 Main Street", "city": "Lagos", "state": "Lagos", "country": "Nigeria", "postal_code": "100001" }, "employment_history": [ { "company": "Tech Corp", "position": "Software Engineer", "start_date": "2020-01-01", "end_date": "2023-12-31", "is_current": false } ], "education": [ { "institution": "University of Lagos", "degree": "Bachelor of Science", "field_of_study": "Computer Science", "graduation_year": 2019 } ], "references": [ { "name": "Jane Smith", "relationship": "Manager", "email": "jane.smith@example.com", "phone": "+2348098765432" } ] } }'{ "data": {}, "status": true, "message": "Request successful.", "errors": {}, "meta": { "timestamp": "2019-08-24T14:15:22Z", "version": "v1", "request_id": "string" }, "pagination": { "page": 0, "page_size": 0, "total_pages": 0, "total_items": 0 }}response_code values (e.g., 00 Success, 01 Not Found, 02 Unavailable).Join our developer Slack channel for real-time integration support, engineering updates, and direct Q&A with the Prembly team.
Join Slack ChannelGet a screened transaction GET
Returns one screened transaction in full: the score it was given, every rule that fired and why, the AI analysis, and any review actions taken since. Look it up by the `internal_reference` returned when the transaction was screened.
Track a check by reference GET
Returns a candidate's own view of their background check progress. Takes no API key — the tracking reference is the credential, so treat it as one and do not publish it anywhere the candidate would not expect. This is the candidate-facing counterpart to the timeline, and returns less: progress only, not your internal notes or provider detail. Link candidates here if you want them to self-serve on status.