How to create a paid event ticket type?

I am able to create free event ticket types like this example:

REQUEST:
POST https://api.zoom.us/v2/zoom_events/events/C5Dq58qFSA2PbkLCqJnNag/ticket_types 
{
  "name":"VIP backstage pass",
  "currency":"CAD",
  "free":true,
  "start_time":"2025-07-05T15:10:40Z",
  "end_time":"2025-07-12T15:10:36Z",
  "description":"Allows backstage access during the conference",
  "attendance_type":"in-person"
}

RESPONSE:
HTTP/1.1 201 Created
Date: Sat, 05 Jul 2025 15:17:11 GMT
x-zm-trackingid: WEB_8bbce1b8182f3542f44af49114511182
{"ticket_type_id":"0iiC7WWnQYeK_bNrxi_2zg"}

However, I am unable to create a ticket type that is not free. Here are two examples:

This first example shows that I set the “free” property to false and I also set the price (the documentation says the price should be a string, which I find surprising):

REQUEST:
POST https://api.zoom.us/v2/zoom_events/events/C5Dq58qFSA2PbkLCqJnNag/ticket_types 
{"name":"VIP backstage pass","currency":"CAD","free":false,"price":"123.45","start_time":"2025-07-05T15:10:40Z","end_time":"2025-07-12T15:10:36Z","description":"Allows backstage access during the conference","attendance_type":"in-person"}

RESPONSE:
HTTP/1.1 400 Bad Request
Date: Sat, 05 Jul 2025 15:12:11 GMT
x-zm-trackingid: WEB_dd018296c8a9925fa0b4d3eb1d50d08b
{"code":400, "message":"invalid_paid_ticket_type"}

In this second example I set the price but I omit the “free” property:

REQUEST:
POST https://api.zoom.us/v2/zoom_events/events/C5Dq58qFSA2PbkLCqJnNag/ticket_types 
{
"name":"VIP backstage pass",
"currency":"CAD",
"price":"123.45",
"start_time":"2025-07-05T15:10:40Z",
"end_time":"2025-07-12T15:10:36Z",
"description":"Allows backstage access during the conference",
"attendance_type":"in-person"
}

RESPONSE:
HTTP/1.1 400 Bad Request
Date: Sat, 05 Jul 2025 15:12:33 GMT
x-zm-trackingid: WEB_80c67cbca3d375123c8fc5236422f3aa
{"code":400, "message":"The currency of event tickets is not the same one. Please try to re-create the ticket."}

This error message is confusing to me: it says the currency “is not the same one”. Same as what??? Maybe the error message is trying to tell me that CAD is not a valid currency? I haven’t found a list of currencies accepted by the Zoom API so I tried “USD” and it was rejected with the same error mesage.

I tried “US” as the currency, I got a different error message:

REQUEST:
POST https://api.zoom.us/v2/zoom_events/events/C5Dq58qFSA2PbkLCqJnNag/ticket_types 
{"name":"VIP backstage pass","currency":"US","price":"123","start_time":"2025-07-05T15:10:40Z","end_time":"2025-07-12T15:10:36Z","description":"Allows backstage access during the conference","attendance_type":"in-person"}

RESPONSE:
HTTP/1.1 400 Bad Request
Date: Sat, 05 Jul 2025 15:30:36 GMT
x-zm-trackingid: WEB_6b169cd87ed83d8863caeaaa655b1cac
{"code":400, "message":"Invalid price."}

This latest error message led me to believe that maybe “US” is an accepted currency but that, despite what the documentation says, the price should be a numerical value. So I made one more attempt:

REQUEST:
POST https://api.zoom.us/v2/zoom_events/events/C5Dq58qFSA2PbkLCqJnNag/ticket_types 
{"name":"VIP backstage pass","currency":"US","price":123,"start_time":"2025-07-05T15:10:40Z","end_time":"2025-07-12T15:10:36Z","description":"Allows backstage access during the conference","attendance_type":"in-person"}

RESPONSE:
HTTP/1.1 400 Bad Request
Date: Sat, 05 Jul 2025 15:30:25 GMT
x-zm-trackingid: WEB_98a51de0f077d282f506f0befc58aa37
{"code":400, "message":"Invalid price."}

Does anybpody know how to create a non-free ticket type?

First, your Zoom account must have an active Zoom Events license that supports paid tickets—this means you need either an Unlimited or Pay‑Per‑Attendee plan, and your account must be connected to a valid payment processor like Stripe or PayPal Business.

Without this setup, any attempt to create paid tickets will fail, regardless of your API request details. Next, when building your request payload, make sure you use the correct 3-letter ISO currency code—like “CAD” or “USD”—not “US,” which is invalid. The “price” field must be included as a string (for example, “123.45”), not a number, and you must explicitly set “free”: false.

You should also specify the “attendance_type” as “in-person”, since the Zoom Events API requires this for ticket creation. Additionally, it helps to include ticket sale windows like “sale_start_time” and “sale_end_time” to match what’s configured for your event.

Many users run into confusing errors like “invalid_paid_ticket_type” or “The currency of event tickets is not the same one” because the currency doesn’t match the event’s setup, or the price is formatted incorrectly. Always double-check that the currency you’re sending matches the event’s default currency.

If you meet all these conditions and format the request correctly, your paid ticket type should be created successfully, returning a 201 Created response with a valid ticket_type_id.

Thank you for the feedback.

I was granted a “Zoom Events Unlimited” license, so this should not be the source of the problem:

If you look at the first sample request where I attempt to create a non-free ticket type, you’ll see that:

  • I used “CAD” as my currency
  • I specified the price as a string
  • I have explicitly set “free”:false

So, as far as I can tell, I have met all the requirements you mentioned.

Having said all this, you mentioned something that I find intriguing: you said that I must match the currency from the even setup. I was not aware that events had a currency. I can’t find any mention of that in the documentation and also the JSON I receive from the API when I invoke GET /zoom_events/events/{eventId} does not indicate the currency. Do you know how to verify an event’s default currency?