REST API reference

DICE API

15 endpoints for DICE. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/dice
Connects with
Your own DICE partner (MIO) account, with email and password
Integration page
DICE
DICE Endpoints
Endpoint Access Description
list_events read Your events in MIO with state, dates, venue and total allocation.
get_event read Full event: description, artists, venue, announce and on-sale dates, ticket types and price tiers.
get_sales_summary read Tickets sold and face value, split by ticket type and sales channel.
list_orders read Orders with time, quantity, sales channel, totals and promo code used.
list_ticket_holders read Who holds a ticket now: name, ticket type and whether it was claimed.
list_returns read Tickets returned by fans, with date, reason and the original order.
list_transfers read Tickets passed from one fan to another, with date and orders.
create_event write New event as a draft in MIO. Fans see nothing until you submit it and DICE approves it.
add_ticket_type write Add a ticket type to an event, with price, allocation and optional door price.
add_price_tier write Add a release to a ticket type that moves on after an allocation sells out or at a set time.
update_ticket_type write Change the name, price, allocation or door price of a ticket type, or archive it to stop sales.
submit_event write Send a draft to DICE for review. Once approved it is announced and goes on sale on its dates.
update_event write Change the date, times, venue, line-up or description of an event fans may already hold tickets for.
message_attendees write Send an operational message to ticket holders with MIO Connect, e.g. door times or entry info.
cancel_event write Cancel an event in MIO. Fans are told and refunds follow your DICE agreement.

POST https://cotlet.dev/api/v1/dice/list_events

Lists the events of your MIO account, soonest first. Filter by state or start date to find tonight's show or everything still in draft. Use the event_id from each item in the other tools. Pages hold up to 100 events; pass next_cursor back as cursor.

Parameters

Parameters: list_events
NameTypeDescription
state enum draft, submitted, review, approved, declined, cancelled or archived. Default: all.
starts_after date Only events starting on or after this date.
starts_before date Only events starting before this date.
limit integer 1 to 100. Default: 25.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/list_events \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("dice", "list_events")
Node.js
const result = await cotlet.call('dice', 'list_events');
CLI
cotlet call dice list_events

Example response

{
  "events": [
    {
      "event_id": "ev_48213",
      "name": "Club Night",
      "state": "approved",
      "start": "2026-11-14T22:00:00+00:00",
      "venue": "The Warehouse",
      "allocation": 350
    },
    {
      "event_id": "ev_48377",
      "name": "Rooftop Session",
      "state": "draft",
      "start": "2026-12-05T19:00:00+00:00",
      "venue": "Skyline Terrace",
      "allocation": 200
    }
  ],
  "next_cursor": null
}

Get event

read

POST https://cotlet.dev/api/v1/dice/get_event

Returns one event with its description, line-up, venue and dates, and every ticket type with its price tiers. Read it before changing prices, so your agent sees which tier is current.

Parameters

Parameters: get_event
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/get_event \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("dice", "get_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('dice', 'get_event', {"event_id":"event_8c41d2"});
CLI
cotlet call dice get_event --data '{"event_id":"event_8c41d2"}'

Example response

{
  "event_id": "ev_48213",
  "name": "Club Night",
  "state": "approved",
  "currency": "USD",
  "venue": "The Warehouse",
  "start": "2026-11-14T22:00:00+00:00",
  "end": "2026-11-15T04:00:00+00:00",
  "artists": [
    "DJ Orla",
    "Kest"
  ],
  "announce_at": "2026-10-01T10:00:00+00:00",
  "on_sale_at": "2026-10-02T10:00:00+00:00",
  "ticket_types": [
    {
      "ticket_type_id": "8841273",
      "name": "Early bird",
      "price_tier_type": "allocation",
      "tiers": [
        {
          "id": "510922",
          "name": "Early bird",
          "price": 1500,
          "allocation": 100
        }
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/dice/get_sales_summary

Adds up the orders of one event: tickets sold and face value per ticket type and per sales channel (internet, door, free, external). Face value is in cents. Both splits add up to the totals. Set since to count only newer orders.

Parameters

Parameters: get_sales_summary
NameTypeDescription
event_id required string Event ID from list_events.
since datetime Only orders placed after this time.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/get_sales_summary \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"ev_48213","since":"2026-10-05T00:00:00+01:00"}'
Python
result = client.call("dice", "get_sales_summary", {"event_id":"ev_48213","since":"2026-10-05T00:00:00+01:00"})
Node.js
const result = await cotlet.call('dice', 'get_sales_summary', {"event_id":"ev_48213","since":"2026-10-05T00:00:00+01:00"});
CLI
cotlet call dice get_sales_summary --data '{"event_id":"ev_48213","since":"2026-10-05T00:00:00+01:00"}'

Example response

{
  "event_id": "ev_48213",
  "currency": "USD",
  "tickets_sold": 182,
  "face_value": 314000,
  "by_ticket_type": [
    {
      "ticket_type_id": "8841273",
      "name": "Early bird",
      "tickets": 100,
      "face_value": 150000
    },
    {
      "ticket_type_id": "8841290",
      "name": "General admission",
      "tickets": 82,
      "face_value": 164000
    }
  ],
  "by_channel": [
    {
      "channel": "internet",
      "tickets": 160,
      "face_value": 276000
    },
    {
      "channel": "door",
      "tickets": 22,
      "face_value": 38000
    }
  ]
}

POST https://cotlet.dev/api/v1/dice/list_orders

Lists the orders of one event, newest first, with time, number of tickets, sales channel and total in cents. Use it when the summary is not enough. Pages hold up to 100 orders; pass next_cursor back as cursor.

Parameters

Parameters: list_orders
NameTypeDescription
event_id required string Event ID from list_events.
sales_channel enum internet, door, free or external. Default: all.
since datetime Only orders placed after this time.
limit integer 1 to 100. Default: 50.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/list_orders \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("dice", "list_orders", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('dice', 'list_orders', {"event_id":"event_8c41d2"});
CLI
cotlet call dice list_orders --data '{"event_id":"event_8c41d2"}'

Example response

{
  "orders": [
    {
      "order_id": "or_90412",
      "placed_at": "2026-10-09T18:22:00+00:00",
      "channel": "internet",
      "tickets": 2,
      "total": 3600,
      "promo_code": null
    },
    {
      "order_id": "or_90398",
      "placed_at": "2026-10-09T16:05:00+00:00",
      "channel": "internet",
      "tickets": 1,
      "total": 1800,
      "promo_code": "FRIENDS"
    }
  ],
  "next_cursor": "eyJvZmZzZXQiOjUwfQ"
}

POST https://cotlet.dev/api/v1/dice/list_ticket_holders

Lists who holds a ticket for one event right now, so returned and transferred tickets are reflected. Filter by ticket type for a door list per type. Set format to csv to get a file your door team can open. Pages hold up to 100 rows; pass next_cursor back as cursor.

Parameters

Parameters: list_ticket_holders
NameTypeDescription
event_id required string Event ID from list_events.
ticket_type_id string Only one ticket type.
format enum json or csv. Default: json.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/list_ticket_holders \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("dice", "list_ticket_holders", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('dice', 'list_ticket_holders', {"event_id":"event_8c41d2"});
CLI
cotlet call dice list_ticket_holders --data '{"event_id":"event_8c41d2"}'

Example response

{
  "ticket_holders": [
    {
      "ticket_id": "tk_1182034",
      "name": "Sam Ortiz",
      "ticket_type": "Early bird",
      "claimed": true
    },
    {
      "ticket_id": "tk_1182035",
      "name": "Jo Marsh",
      "ticket_type": "General admission",
      "claimed": false
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/dice/list_returns

Lists tickets that fans returned, newest first, with the date, the reason and the order they came from. Leave event_id out to cover all your events. Set since to see only the latest returns.

Parameters

Parameters: list_returns
NameTypeDescription
event_id string Only one event. Default: all events.
since datetime Only returns after this time.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/list_returns \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("dice", "list_returns")
Node.js
const result = await cotlet.call('dice', 'list_returns');
CLI
cotlet call dice list_returns

Example response

{
  "returns": [
    {
      "return_id": "rt_3301",
      "event_id": "ev_48213",
      "returned_at": "2026-10-08T12:40:00+00:00",
      "reason": "Can't make it",
      "order_id": "or_90102"
    }
  ]
}

POST https://cotlet.dev/api/v1/dice/list_transfers

Lists tickets that fans passed to another fan, newest first, with the date and the orders involved. Leave event_id out to cover all your events. Set since to see only the latest transfers.

Parameters

Parameters: list_transfers
NameTypeDescription
event_id string Only one event. Default: all events.
since datetime Only transfers after this time.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/list_transfers \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("dice", "list_transfers")
Node.js
const result = await cotlet.call('dice', 'list_transfers');
CLI
cotlet call dice list_transfers

Example response

{
  "transfers": [
    {
      "transfer_id": "tf_7710",
      "event_id": "ev_48213",
      "transferred_at": "2026-10-09T09:15:00+00:00",
      "from_order_id": "or_90102",
      "to_order_id": "or_90415"
    }
  ]
}

Create event

write

POST https://cotlet.dev/api/v1/dice/create_event

Saves a new event as a draft in MIO. Fans see nothing until you submit it with submit_event and DICE approves it. Venue is a name or an ID from one of your past events. Add ticket types with add_ticket_type. create_event reaches no one, so it runs without asking first.

Parameters

Parameters: create_event
NameTypeDescription
name required string Event name.
venue required string Venue name or ID from one of your past events.
start required datetime ISO 8601 with time zone.
end required datetime ISO 8601 with time zone.
description string Event description shown to fans.
artists string[] Line-up, headliner first.
currency string ISO code, e.g. USD, GBP, EUR. Default: your account currency.
announce_at datetime When the event appears on DICE.
on_sale_at datetime When tickets go on sale.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/create_event \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Club Night","venue":"The Warehouse","start":"2026-11-14T22:00:00+00:00","end":"2026-11-15T04:00:00+00:00","artists":["DJ Orla","Kest"],"currency":"USD","announce_at":"2026-10-15T10:00:00+00:00","on_sale_at":"2026-10-16T10:00:00+00:00"}'
Python
result = client.call("dice", "create_event", {"name":"Club Night","venue":"The Warehouse","start":"2026-11-14T22:00:00+00:00","end":"2026-11-15T04:00:00+00:00","artists":["DJ Orla","Kest"],"currency":"USD","announce_at":"2026-10-15T10:00:00+00:00","on_sale_at":"2026-10-16T10:00:00+00:00"})
Node.js
const result = await cotlet.call('dice', 'create_event', {"name":"Club Night","venue":"The Warehouse","start":"2026-11-14T22:00:00+00:00","end":"2026-11-15T04:00:00+00:00","artists":["DJ Orla","Kest"],"currency":"USD","announce_at":"2026-10-15T10:00:00+00:00","on_sale_at":"2026-10-16T10:00:00+00:00"});
CLI
cotlet call dice create_event --data '{"name":"Club Night","venue":"The Warehouse","start":"2026-11-14T22:00:00+00:00","end":"2026-11-15T04:00:00+00:00","artists":["DJ Orla","Kest"],"currency":"USD","announce_at":"2026-10-15T10:00:00+00:00","on_sale_at":"2026-10-16T10:00:00+00:00"}'

Example response

{
  "event_id": "ev_48501",
  "name": "Club Night",
  "state": "draft",
  "venue": "The Warehouse",
  "start": "2026-11-14T22:00:00+00:00",
  "end": "2026-11-15T04:00:00+00:00",
  "artists": [
    "DJ Orla",
    "Kest"
  ],
  "currency": "USD"
}

Add ticket type

write Confirm

POST https://cotlet.dev/api/v1/dice/add_ticket_type

Adds a ticket type to an event with its face value in cents, allocation and an optional door price. A price of 0 makes a free ticket. On an event fans can already buy from, it changes what they can buy. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: add_ticket_type
NameTypeDescription
event_id required string Event ID from list_events.
name required string e.g. Early bird, General admission.
price required integer Face value in cents. 0 for a free ticket.
allocation required integer Number of tickets.
description string Shown to fans under the name.
door_sales_price integer Price at the door in cents.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/add_ticket_type \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2","name":"Jane Doe","price":1,"allocation":1}'
Python
result = client.call("dice", "add_ticket_type", {"event_id":"event_8c41d2","name":"Jane Doe","price":1,"allocation":1})
Node.js
const result = await cotlet.call('dice', 'add_ticket_type', {"event_id":"event_8c41d2","name":"Jane Doe","price":1,"allocation":1});
CLI
cotlet call dice add_ticket_type --data '{"event_id":"event_8c41d2","name":"Jane Doe","price":1,"allocation":1}'

Example response

{
  "ticket_type_id": "8841290",
  "event_id": "ev_48213",
  "name": "General admission",
  "price": 2000,
  "allocation": 250,
  "door_sales_price": 2500
}

Add price tier

write Confirm

POST https://cotlet.dev/api/v1/dice/add_price_tier

Adds a price tier to a ticket type. A tier takes over after the earlier tier's allocation sells out (pass allocation) or at a set time (pass time). Price is in cents. The response lists all tiers of the ticket type in order. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: add_price_tier
NameTypeDescription
ticket_type_id required string Ticket type ID from get_event.
name required string e.g. Second release.
price required integer Face value in cents.
allocation integer Tickets in this tier, for allocation-based tiers.
time datetime When the tier switches, for time-based tiers.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/add_price_tier \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticket_type_id":"8841273","name":"Second release","price":1800,"allocation":150}'
Python
result = client.call("dice", "add_price_tier", {"ticket_type_id":"8841273","name":"Second release","price":1800,"allocation":150})
Node.js
const result = await cotlet.call('dice', 'add_price_tier', {"ticket_type_id":"8841273","name":"Second release","price":1800,"allocation":150});
CLI
cotlet call dice add_price_tier --data '{"ticket_type_id":"8841273","name":"Second release","price":1800,"allocation":150}'

Example response

{
  "ticket_type_id": "8841273",
  "price_tier_type": "allocation",
  "tiers": [
    {
      "id": "510922",
      "name": "Early bird",
      "price": 1500,
      "allocation": 100
    },
    {
      "id": "510987",
      "name": "Second release",
      "price": 1800,
      "allocation": 150
    }
  ]
}

Update ticket type

write Confirm

POST https://cotlet.dev/api/v1/dice/update_ticket_type

Changes a ticket type: name, description, price, allocation, door price, or archived to stop sales. Only the fields you pass change. Price and allocation changes affect what fans pay and what is left. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: update_ticket_type
NameTypeDescription
ticket_type_id required string Ticket type ID from get_event.
fields required object Any of name, description, price, allocation, door_sales_price, archived.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/update_ticket_type \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticket_type_id":"ticket_type_8c41d2","fields":"fields"}'
Python
result = client.call("dice", "update_ticket_type", {"ticket_type_id":"ticket_type_8c41d2","fields":"fields"})
Node.js
const result = await cotlet.call('dice', 'update_ticket_type', {"ticket_type_id":"ticket_type_8c41d2","fields":"fields"});
CLI
cotlet call dice update_ticket_type --data '{"ticket_type_id":"ticket_type_8c41d2","fields":"fields"}'

Example response

{
  "ticket_type_id": "8841290",
  "name": "General admission",
  "price": 2200,
  "allocation": 250,
  "archived": false
}

Submit event

write Confirm

POST https://cotlet.dev/api/v1/dice/submit_event

Sends a draft to DICE for review. Under the MIO terms DICE decides at its sole discretion which events it promotes, so the event can be declined. Once approved, it is announced and goes on sale on its dates. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: submit_event
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/submit_event \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("dice", "submit_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('dice', 'submit_event', {"event_id":"event_8c41d2"});
CLI
cotlet call dice submit_event --data '{"event_id":"event_8c41d2"}'

Example response

{
  "event_id": "ev_48501",
  "state": "submitted"
}

Update event

write Confirm

POST https://cotlet.dev/api/v1/dice/update_event

Changes the name, times, venue, line-up or description of an event. Only the fields you pass change. Fans may already hold tickets, so tell them with message_attendees. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: update_event
NameTypeDescription
event_id required string Event ID from list_events.
fields required object Any of name, start, end, venue, artists, description.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/update_event \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2","fields":"fields"}'
Python
result = client.call("dice", "update_event", {"event_id":"event_8c41d2","fields":"fields"})
Node.js
const result = await cotlet.call('dice', 'update_event', {"event_id":"event_8c41d2","fields":"fields"});
CLI
cotlet call dice update_event --data '{"event_id":"event_8c41d2","fields":"fields"}'

Example response

{
  "event_id": "ev_48213",
  "state": "approved",
  "updated": [
    "start"
  ],
  "start": "2026-11-14T20:00:00+00:00"
}

Message attendees

write Confirm

POST https://cotlet.dev/api/v1/dice/message_attendees

Sends one message to the ticket holders of an event with MIO Connect. Keep it to event information such as door times. It reaches every ticket holder at once and cannot be unsent. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: message_attendees
NameTypeDescription
event_id required string Event ID from list_events.
message required string Event information only, e.g. door times.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/message_attendees \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"ev_48213","message":"Doors now open at 20:00. Your ticket is still valid."}'
Python
result = client.call("dice", "message_attendees", {"event_id":"ev_48213","message":"Doors now open at 20:00. Your ticket is still valid."})
Node.js
const result = await cotlet.call('dice', 'message_attendees', {"event_id":"ev_48213","message":"Doors now open at 20:00. Your ticket is still valid."});
CLI
cotlet call dice message_attendees --data '{"event_id":"ev_48213","message":"Doors now open at 20:00. Your ticket is still valid."}'

Example response

{
  "event_id": "ev_48213",
  "status": "sent",
  "recipients": 182,
  "sent_at": "2026-11-14T12:00:00+00:00"
}

Cancel event

write Confirm

POST https://cotlet.dev/api/v1/dice/cancel_event

Cancels an event in MIO. Under the MIO terms, you are responsible for refunds due to customers when an event is cancelled or rescheduled. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: cancel_event
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/dice/cancel_event \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("dice", "cancel_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('dice', 'cancel_event', {"event_id":"event_8c41d2"});
CLI
cotlet call dice cancel_event --data '{"event_id":"event_8c41d2"}'

Example response

{
  "event_id": "ev_48213",
  "state": "cancelled"
}