# Save prepared question

Source: https://musicnerd-docs.vercel.app/api-reference/interview/offer-question

Save prepared question

## POST /api/artist/{id}/interview/session/{sessionId}/offer

Full OpenAPI specification: https://musicnerd-docs.vercel.app/spec/interview-sessions.json

## Authentication

This operation requires one of the security alternatives in the specification below. Security scheme definitions are included where present in the published specification.

[Authentication guide](https://musicnerd-docs.vercel.app/authentication)

## Operation and referenced schemas

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Durable interview sessions",
    "version": "0.1.0",
    "description": "Draft fifth-slice contract; not released."
  },
  "servers": [
    {
      "url": "https://musicnerd-api.vercel.app"
    }
  ],
  "paths": {
    "/api/artist/{id}/interview/session/{sessionId}/offer": {
      "post": {
        "summary": "Save prepared question",
        "description": "At most three sequential offers. The API validates original evidence and current mandatory-memory snapshot atomically; changed memory or evidence returns 409. Duplicate ordinal returns the saved offer. Question generation and editorial judgment belong to the client. Current claimant or administrator only. Private/no-store. Requires staging-verified migrations 0041 and 0042 before deployment. Draft; not released.",
        "security": [
          {
            "PrivyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Exact saved state.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "ok"
                    },
                    "question": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "questionKey": {
                          "type": "string"
                        },
                        "question": {
                          "type": "string"
                        },
                        "answer": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "state": {
                          "type": "string",
                          "enum": [
                            "offered",
                            "answered",
                            "skipped"
                          ]
                        },
                        "revision": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "sitting": {
                          "type": "integer"
                        },
                        "offeredAt": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "answerUpdatedAt": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "ordinal": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "references": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "kind",
                              "revision",
                              "start",
                              "end",
                              "quote"
                            ],
                            "properties": {
                              "kind": {
                                "type": "string",
                                "enum": [
                                  "original",
                                  "answer"
                                ]
                              },
                              "sourceId": {
                                "type": "string",
                                "description": "Required for original evidence: full vault/social source identity."
                              },
                              "entryId": {
                                "type": "string",
                                "description": "Required for answer evidence: full answer identity."
                              },
                              "revision": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "start": {
                                "type": "integer",
                                "minimum": 0,
                                "description": "UTF-16 offset."
                              },
                              "end": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "quote": {
                                "type": "string",
                                "minLength": 8,
                                "maxLength": 1600
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid bounded request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Not signed in.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Current ownership required.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Artist/session/offer unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "State, memory or original evidence changed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "Supported limits exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Persistence unavailable; retry without assuming an empty session.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "error"
                    },
                    "code": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "ordinal",
                  "memorySnapshotId",
                  "question",
                  "references"
                ],
                "properties": {
                  "ordinal": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3
                  },
                  "memorySnapshotId": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "question": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 500
                  },
                  "references": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 3,
                    "items": {
                      "type": "object",
                      "required": [
                        "kind",
                        "revision",
                        "start",
                        "end",
                        "quote"
                      ],
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "original",
                            "answer"
                          ]
                        },
                        "sourceId": {
                          "type": "string",
                          "description": "Required for original evidence: full vault/social source identity."
                        },
                        "entryId": {
                          "type": "string",
                          "description": "Required for answer evidence: full answer identity."
                        },
                        "revision": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "start": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "UTF-16 offset."
                        },
                        "end": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "quote": {
                          "type": "string",
                          "minLength": 8,
                          "maxLength": 1600
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PrivyAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
```
