# Submit a study to marola marola publishes studies by anyone with a GitHub account that is at least 7 days old. A study is public at once and is labelled "not reviewed, not medical advice". The board can hide a study later; it then keeps its hash, its date and a reason. Only open licences are accepted, because marola hosts the file. ## Get a key Sign in with GitHub on marola.dev and make an API key (`msk_...`). The key is shown once. An account has at most 3 active keys. Send it as `Authorization: Bearer $MAROLA_KEY`. Never put a key in a repository or a log. ## Endpoint `POST https://marola.dev/api/v1/studies` with `multipart/form-data`. Add `?dry_run=1` to check everything (the file and the limits too) with nothing stored. The same API as an OpenAPI 3.1 document: `https://marola.dev/api/v1/openapi.json`. | field | rule | |---|---| | `title` | 5 to 200 characters, one line | | `authors` | 1 to 20 lines. One author per line: `Name` or `Name | 0000-0002-1825-0097` (an ORCID iD with its check digit). A name has 2 to 120 characters | | `abstract` | 100 to 4000 characters | | `area` | rio, floripa, salvador, other | | `topic` | water-quality, waves, wind, trails, ecology, safety, data, other | | `sources` | 0 to 10 https links, one per line | | `repository` | optional https link | | `licence` | CC-BY-4.0, CC-BY-SA-4.0, CC0-1.0. Default `CC-BY-4.0` | | `rights` | `true`: you have the right to publish this file under that licence | | `ai_models` | optional, up to 300 characters | | `ai_contribution` | one of the levels below | | `ai_process` | up to 1500 characters. Required unless `ai_contribution` is `none` | | `pdf` | the file: a PDF of at most 20 MB | Each field appears once. Text is UTF-8. Control characters other than newline and tab are removed. ## AI contribution levels - `none`: No AI system took part. - `language-editing`: An AI system fixed or translated the text. The ideas and the results are the authors'. - `analysis-assistance`: An AI system helped with code, data or statistics. The authors checked the output. - `drafting`: An AI system wrote parts of the text. The authors planned, edited and checked it. - `substantial`: An AI system did most of the analysis or the writing. The authors directed and checked it. - `autonomous`: An AI system did the work with no human step between the question and the file. ## The PDF It must start with `%PDF-` and end with `startxref` and `%%EOF`. marola refuses a file that has one of the names `/Launch`, `/JavaScript`, `/JS`, `/EmbeddedFile` (also written with `#xx` escapes) or an `/OpenAction` whose value is an action. Export the PDF again without scripts, attachments or launch actions. ## Examples ``` curl -sS -H "Authorization: Bearer $MAROLA_KEY" "https://marola.dev/api/v1/studies?dry_run=1" \ -F title="Enterococcus at Leblon, 2025" -F "authors=Ana Silva | 0000-0002-1825-0097" \ -F "abstract=" ``` ## Errors `400` returns `{"errors":[{"field","code","message"}]}` with every error at once. The codes are `required`, `too_short`, `too_long`, `too_many`, `invalid`, `unknown_value`, `bad_name`, `bad_orcid`, `bad_link`, `must_be_true`, `invalid_utf8`, `duplicate_field`, `unknown_field`, `too_many_parts`, `malformed_multipart`, and for the file `not_pdf`, `truncated`, `active_content`, `pdf_encrypted`, `pdf_unscannable`. `401` bad or missing key. `403` the account is under 7 days old. `409` this account sent this file already (the answer has the old `id`). `413` the file or the request is too large. `415` not multipart. `429` too many requests: one real submission per account every 10 minutes and 10 a day, 30 requests a minute per key (a dry run counts a third); read `Retry-After`. `507` the study store is full.