/v1/invitationsSend an interview invitation
Creates an invitation and emails the candidate a unique link. The candidate clicks the link, lands on a hosted simulation page, and takes the interview. The invitation moves through pending → started → completed.
Request body
| Field | Type | Description |
|---|---|---|
candidateEmailrequired | string | Email address that receives the invitation. |
candidateNamerequired | string | Used in the email greeting and during the interview. |
rolerequired | string | Target role the candidate is interviewing for. Max 200 chars. |
jobPostingrequired | string | Full job description. Used to generate the panelist mix. Max 2000 chars. |
toughness | integer (1–5) | Difficulty of the panel. Defaults to 3 if omitted. |
durationMinutes | integer | Interview length. Allowed values: 10, 15, 20, 30, 45, 60. Defaults to 30. |
language | "en" | "de" | Locale for both the email and the interview. Defaults to "en". |
expiresAt | ISO 8601 timestamp | When the invitation link stops working. Defaults to 14 days from creation. |
metadata | object | Free-form key–value pairs (e.g. ATS req ID). Returned verbatim on result lookups. |
Example request
curl -X POST https://api.meetandgreet.ai/v1/invitations \
-H "Authorization: Bearer mga_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"candidateEmail": "alex@example.com",
"candidateName": "Alex Chen",
"role": "Senior Product Manager",
"jobPosting": "We are hiring a Senior PM to lead our checkout team...",
"toughness": 3,
"durationMinutes": 30,
"language": "en",
"expiresAt": "2026-06-01T00:00:00Z"
}'Response (201 Created)
{
"id": "inv_01HX2BT8A3JXG5Z3F4WV7QY3K9",
"status": "pending",
"candidateEmail": "alex@example.com",
"candidateName": "Alex Chen",
"role": "Senior Product Manager",
"invitationUrl": "https://meetandgreet.ai/invite/abc123XYZ",
"expiresAt": "2026-06-01T00:00:00Z",
"createdAt": "2026-05-02T12:00:00Z",
"metadata": {}
}