Skip to content

Create Photo Capture

POST
/users/{user_id}/events/{event_id}/captures/photo
curl --request POST \
--url https://example.com/users/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/events/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/captures/photo \
--header 'Content-Type: multipart/form-data' \
--form file=@file \
--form mode=meal_photo

Capture a meal from an image — a receipt/confirmation photo (mode=receipt) or a photo of the meal itself (mode=meal_photo). Same “capture first, enrich later” flow as text captures: the image is persisted and the nutrition job decomposes it via Claude vision, then drops the bytes. Gated by meal_photo_integration. Client polls GET /meal-items as usual.

user_id
required
User Id
string format: uuid
event_id
required
Event Id
string format: uuid
Media typemultipart/form-data
Body_create_photo_capture_users__user_id__events__event_id__captures_photo_post
object
file
required
File
string format: binary
mode
Mode
string
default: meal_photo

Successful Response

Media typeapplication/json
MealCaptureRead
object
created_at
required
Created At
string format: date-time
event_id
required
Event Id
string format: uuid
id
required
Id
string format: uuid
mode
Mode
string
default: text
status
required
Status
string
text
Any of:
string
Example
{
"mode": "text"
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}