curl -X POST https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate \
-H "Authorization: Bearer vpk_live_xxxxx" \
-H "Idempotency-Key: 9f1b5a4d-6e7f-4a8b-c2d3-4e5f6a7b8c9d"
const response = await fetch('https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate', {
method: 'POST',
headers: {
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': crypto.randomUUID()
}
});
const result = await response.json();
console.log(`Regenerating member, task: ${result.task_id}`);
import requests
import uuid
response = requests.post(
'https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate',
headers={
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': str(uuid.uuid4())
}
)
result = response.json()
print(f"Regenerating member, task: {result['task_id']}")
{
"family_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task_id": "task_fam458rgn",
"status": "generating",
"livemode": true,
"_links": {
"self": "/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task": "/v1/tasks/task_fam458rgn"
}
}
{
"error": {
"code": "PLAN_NOT_ALLOWED",
"message": "Families are available on the Pro, Max and Enterprise plans. Upgrade your plan to use this feature.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_FOUND",
"message": "Family not found or not accessible with this API key.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_MEMBER_NOT_FOUND",
"message": "Member index is out of range for this family.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_READY",
"message": "Another generation is already in progress for this family. Poll the task until it finishes, then retry.",
"request_id": "req_xyz123"
}
}
Families
Regenerate Family Member Portrait
Regenerate a family member’s portrait using its existing descriptors
POST
/
v1
/
families
/
{familyId}
/
members
/
{index}
/
regenerate
curl -X POST https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate \
-H "Authorization: Bearer vpk_live_xxxxx" \
-H "Idempotency-Key: 9f1b5a4d-6e7f-4a8b-c2d3-4e5f6a7b8c9d"
const response = await fetch('https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate', {
method: 'POST',
headers: {
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': crypto.randomUUID()
}
});
const result = await response.json();
console.log(`Regenerating member, task: ${result.task_id}`);
import requests
import uuid
response = requests.post(
'https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate',
headers={
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': str(uuid.uuid4())
}
)
result = response.json()
print(f"Regenerating member, task: {result['task_id']}")
{
"family_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task_id": "task_fam458rgn",
"status": "generating",
"livemode": true,
"_links": {
"self": "/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task": "/v1/tasks/task_fam458rgn"
}
}
{
"error": {
"code": "PLAN_NOT_ALLOWED",
"message": "Families are available on the Pro, Max and Enterprise plans. Upgrade your plan to use this feature.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_FOUND",
"message": "Family not found or not accessible with this API key.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_MEMBER_NOT_FOUND",
"message": "Member index is out of range for this family.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_READY",
"message": "Another generation is already in progress for this family. Poll the task until it finishes, then retry.",
"request_id": "req_xyz123"
}
}
Regenerates a family member’s portrait using its current descriptors, without changing them, then regenerates the family’s group
The family must be in
See Error Handling for more details.
card_image_url. Useful when a generated portrait doesn’t look right and you want another attempt without editing the member. Only the family’s owner can regenerate a member.
Regenerating a family member requires a Pro, Max, or Enterprise plan, like all other family write operations.
ready status: if another generation is already in progress for this family, the request is rejected with 422 FAMILY_NOT_READY.
Path Parameters
string
required
The UUID of the family. Only accepts families you own.Example:
3fa85f64-5717-4562-b3fc-2c963f66afa6integer
required
The 0-based position of the member to regenerate, matching the order of the
members array returned by Get Family.Returns 404 FAMILY_MEMBER_NOT_FOUND if out of range.Example: 1Request Body
No body fields are required.string
HTTPS URL to receive a webhook notification when the new portrait finishes generating.See Webhooks for payload format and verification details.
Webhook URLs must use HTTPS and cannot point to private/internal networks (SSRF protection).
string
Optional idempotency key. Retrying a request with the same key returns the original result instead of starting a second regeneration.
Response
Returns a202 Accepted response with a task to poll:
string
required
Unique identifier for the family.
string
required
Unique identifier for the generation task. Poll it via Get Task, or use
webhook_url for a notification instead.string
required
Always
generating for this response shape.boolean
required
true for live (vpk_live_) requests; false for test-mode (vpk_test_) requests. See Test Mode.object
required
HATEOAS links for navigation.
self: URL to fetch the family (/v1/families/{family_id})task: URL to poll for the generation task (/v1/tasks/{task_id})
curl -X POST https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate \
-H "Authorization: Bearer vpk_live_xxxxx" \
-H "Idempotency-Key: 9f1b5a4d-6e7f-4a8b-c2d3-4e5f6a7b8c9d"
const response = await fetch('https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate', {
method: 'POST',
headers: {
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': crypto.randomUUID()
}
});
const result = await response.json();
console.log(`Regenerating member, task: ${result.task_id}`);
import requests
import uuid
response = requests.post(
'https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/1/regenerate',
headers={
'Authorization': 'Bearer vpk_live_xxxxx',
'Idempotency-Key': str(uuid.uuid4())
}
)
result = response.json()
print(f"Regenerating member, task: {result['task_id']}")
{
"family_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task_id": "task_fam458rgn",
"status": "generating",
"livemode": true,
"_links": {
"self": "/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"task": "/v1/tasks/task_fam458rgn"
}
}
{
"error": {
"code": "PLAN_NOT_ALLOWED",
"message": "Families are available on the Pro, Max and Enterprise plans. Upgrade your plan to use this feature.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_FOUND",
"message": "Family not found or not accessible with this API key.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_MEMBER_NOT_FOUND",
"message": "Member index is out of range for this family.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "FAMILY_NOT_READY",
"message": "Another generation is already in progress for this family. Poll the task until it finishes, then retry.",
"request_id": "req_xyz123"
}
}
Polling for Completion
Poll the returnedtask_id via Get Task. Once status is completed, Get Family reflects the new portrait and the regenerated group card_image_url. The member’s descriptors (role, type, age, ethnicity, physical, clothing) are unchanged.
If the task fails, the family is left exactly as it was: the previous portrait remains in place.
Error Codes
| Code | Status | Description |
|---|---|---|
MISSING_API_KEY | 401 | No Authorization header was sent |
INVALID_API_KEY | 401 | The API key is invalid or has been revoked |
PLAN_NOT_ALLOWED | 403 | Your plan doesn’t allow editing a family (requires Pro, Max, or Enterprise) |
FAMILY_NOT_FOUND | 404 | Family doesn’t exist or isn’t yours |
FAMILY_MEMBER_NOT_FOUND | 404 | index is out of range for this family’s members array |
FAMILY_NOT_READY | 422 | Another generation is already in progress for this family |

