Save a presentation
sparka_presentation_saveCreates or fully replaces a presentation's interactive questions in one call. Each call carries the COMPLETE presentation: title, optional settings, and the ordered list of all questions including correct answers for scored types (valid types and fields: sparka_question_types_list). Without presentation_id it creates a new presentation; with it, it replaces that presentation entirely — the ID stays the same, so a deck already using it keeps working, and unchanged question IDs keep matching the deck's slides. The questions without answers are readable by anyone who has the presentation_id; that is how decks and participants' phones load them. Returns presentation_id, the stored questions WITHOUT answers, and embed_block: a ready-to-paste <script type="application/json" id="sparka-questions"> element for the deck. A working deck contains embed_block exactly once with no answers added, and never the user's Sparka secret key (spk_live_…) — the presentation_id is all a deck needs. The deck's JavaScript pattern is in sparka_deck_guide. After the questions change, a deck needs the new embed_block; an outdated one shows a mismatch banner. Validation problems come back as an error with JSON paths.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| settings | No | ||
| questions | Yes | All questions, in slide order. | |
| presentation_id | No | Omit to create. Pass to replace that presentation entirely. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| created | Yes | true if new, false if replaced. | |
| settings | Yes | ||
| warnings | Yes | ||
| next_step | Yes | ||
| questions | Yes | Public copy (no answers) — exactly what GET /v1/presentations/{id} returns. | |
| embed_block | Yes | ||
| live_session | Yes | ||
| presentation_id | Yes |