---
title: "Submit Exercise Photos"
method: POST
path: "/exercise-sessions/{session_id}/exercises/{exercise_id}/photo-submission"
tags: ["photo_submissions"]
---

# Submit Exercise Photos

`POST /exercise-sessions/{session_id}/exercises/{exercise_id}/photo-submission`

## Request

- Base URL: `https://api.excellence-ai.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.excellence-ai.com/exercise-sessions/{session_id}/exercises/{exercise_id}/photo-submission`
- Auth: OAuth 2 (password, token URL `api/login`)

## Path parameters

- `session_id` string, required
- `exercise_id` string, required

## Request body

- PhotoSubmissionCreate: Per-exercise photo submission. `include_transcription` selects the V3 prompt variant (grading + read-only transcription of the copy).
  - `photo_urls` string[], required
  - `include_transcription` boolean
  - `device_type` string, nullable

## Response `200`

Successful Response

- PhotoSubmissionResponse
  - `attempt_index` integer, required
  - `grading_status` 'processing', required

## Other responses

- `400`: Malformed identifier
- `403`: Not authorized for this resource
- `404`: Resource not found
- `409`: Business rule violated
- `422`: Validation Error

---

[API](https://skmtc.dev/excellence-ai/apis/excellence-learning.md) - [All operations](https://skmtc.dev/excellence-ai/apis/excellence-learning/llms.txt) - [OpenAPI document](https://skmtc.dev/excellence-ai/apis/excellence-learning/revisions/379e4a57dee8?raw)
