---
title: "Send a beer price"
method: POST
path: "/api/v1/submissions"
tags: ["public"]
---

# Send a beer price

`POST /api/v1/submissions`

## Request

- Base URL: `https://cervejabarata.com.br`
- URL: `https://cervejabarata.com.br/api/v1/submissions`
- Auth: none declared

A price someone saw, for a person to review before it goes live. Behind Turnstile and a daily cap per address; an email, if any, is kept encrypted only to say the price is live, then deleted.

## Request body

- Submission
  - `city` string, required
  - `venue` union, required
    - object: A bar already on the map
      - `id` integer, required
    - object: A bar that isn't on the map yet
      - `new` NewVenue, required
        - `name` string, required
        - `lat` number, required
        - `lng` number, required
        - `kind` 'bar' | 'boteco' | 'pub' | 'barraca' | 'restaurante' | 'deposito' | 'cervejaria' | 'outro', required
        - `on_site` boolean, required: People can drink there (a depósito only counts when they can)
        - `address` string
        - `instagram` string
        - `opening_hours` string: As written ("seg a sex 17h–1h")
  - `beer` string, nullable, required: As written; null for "outra / não sei"
  - `format_code` string, required: A format from the catalog, e.g. garrafa_600
  - `price` number, required: What was paid, in currency units (9.99)
  - `units` integer
  - `packaging` 'single' | 'balde' | 'torre' | 'combo' | 'dobro'
  - `kind` 'regular' | 'happy_hour' | 'promo' | 'combo' | 'open_bar'
  - `open_bar_minutes` integer
  - `schedules` ScheduleDraft[]
    - `days` integer[], required: 0 = Sunday … 6 = Saturday, city time
    - `start` string, required: HH:MM
    - `end` string, required: HH:MM; earlier than start when it ends after midnight
  - `valid_from` string, date
  - `valid_until` string, date
  - `conditions` string
  - `service_charge_pct` integer
  - `couvert` number
  - `attributes` string[]
  - `seen_in` 'menu' | 'poster' | 'instagram' | 'staff' | 'receipt' | 'other'
  - `link` string, uri
  - `observed_on` string, date: City-local date the price was seen
  - `notes` string
  - `is_owner` boolean: Sent by the bar's owner or manager
  - `nickname` string: Credited on the site when the price goes live
  - `email` string, email: Only to say "seu preço está no ar"; deleted after
  - `consent` boolean: LGPD consent: required with an email
  - `turnstile` string, required: Cloudflare Turnstile token

## Response `202`

Queued for review

- Received
  - `status` 'received' | 'duplicate', required: duplicate: the same thing from the same address is already waiting for review

## Other responses

- `400`: Invalid request
- `403`: The Turnstile check failed
- `422`: Unknown city, bar or format
- `429`: Too many from this address today
- `503`: Closed: not configured yet, or degraded mode

---

[API](https://skmtc.dev/cervejabarata/apis/cerveja-barata-public-api.md) · [All operations](https://skmtc.dev/cervejabarata/apis/cerveja-barata-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cervejabarata/apis/cerveja-barata-public-api/revisions/19a783be3c18?raw)
