# Create Question

```
POST 
/v1/questions
```

Create a saved question.

Two gates, deliberately: `require_credits` is a BILLING check (does the account have budget) and `require_creator_or_admin` is an AUTHORIZATION check (may this role spend it). Only the first was here once, and a read-only member created a question through it — spending the account's credits from the least-privileged role. A billing check reads like a gate and is not one; the same conflation reads `SessionOnly()`, which restricts the auth METHOD, as a privilege boundary.

Shipped CLOSED, which is a decision and not a law: the argument for open is real — questions are a read-adjacent exploration tool and credits are the intended meter.

Reads are narrower than this route rather than wider, and narrower than they look. `GET /v1/questions` and `GET /v1/questions/{question_id}` authenticate any member, but the query behind them returns only the questions the CALLER OWNS: a question cannot be shared, so a member who may not create one reads none. Do not read the plain `JWTBearer()` on those handlers as "any member sees the account's questions" — three readers did, and the ownership filter lives one layer down, in `SQLQuestionService`.

## Request[​](#request "Link direto para request")

## Responses[​](#responses "Link direto para Responses")

* 201
* 404
* 422

Successful Response

Not found

Validation Error
