# tax.prizes.events.save

Create or edit a prize event (hackathon, competition, event) with its date, notes and the event or promo documents kept as evidence. Input { id?, expectedRevision, name, kind, heldOn?, notes, evidenceIds?, venue?, archived?, idempotencyKey }. Optional venue { lat, lon, label, address?, city?, region?, countryCode? } adds its location to Insights Map; countryCode is an explicit two-letter uppercase country code. Omit venue to keep it, or set null to remove it. Never infer a venue from an event name.

`POST /api/v1/accounting/tax.prizes.events.save`

Permissions: `accounting:read`, `accounting:write` · Roles: admin, finance · Idempotency key required · Send `expectedRevision`

MCP tool: `accounting_tax_prizes_events_save`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `id` | string (ID) |  | The record's ID. |
| `expectedRevision` | integer | Yes | The record's current revision, from the last time you read it. If someone changed the record since, the request is refused with a conflict so you can reload and check before trying again. 0 to 9007199254740991. |
| `name` | string | Yes | A display name. 1–160 characters. |
| `kind` | enum |  | Which kind of record or job this is. One of: `hackathon`, `competition`, `event`, `other`. Default `"hackathon"`. |
| `heldOn` | string or null |  |  |
| `notes` | string |  | Notes kept with the record. at most 500 characters. Default `""`. |
| `evidenceIds` | array of strings (ID) |  | A list of record IDs. at most 30 items. |
| `venue` | object or null |  |  |
| `venue.lat` | number | Yes | -90 to 90. |
| `venue.lon` | number | Yes | -180 to 180. |
| `venue.label` | string | Yes | 1–200 characters. |
| `venue.address` | string or null |  |  |
| `venue.city` | string or null |  |  |
| `venue.region` | string or null |  |  |
| `venue.countryCode` | string or null |  |  |
| `archived` | boolean |  | Whether the record is archived. |
| `idempotencyKey` | string | Yes | Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match. 8–200 characters. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/tax.prizes.events.save \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "expectedRevision": 3,
  "name": "Synthetic Ventures Inc."
}'
```

Reference page: https://app.getoatmilk.com/docs/api/tax.prizes.events.save
