Search code examples
node.jseventbrite

Unable to create Eventbrite event using API


I am trying to create an event using V3 API. The parameters I am sending are:

var _event = {
    "event" : {
        "name": {
            "html": "Test Event 01"
        },
        "description": {
            "html": "Test Event 01"
        },
        "start": {
            "timezone": "America/Chicago",
            "utc": "2017-07-10T18:00:00Z"
        },
        "end": {
            "timezone": "America/Chicago",
            "utc": "2017-07-10T20:00:00Z"
        },
        "currency": "USD"
    }
};

This is how I am sending the request using NodeJS:

var request = require('request');
var _headers = {
    'Authorization': 'Bearer ' + _token,
    'Content-Type': 'application/json',
}

// Configure the request
var options = {
    url: EVENTBRITE_API_URL + "events/",
    method: 'POST',
    headers: _headers,
    form: _event
}

I have also tried Content-Type: application/x-url-form-encoded and inside options, JSON.stringify(_event). I also tried to change _event object to:

var _event = {        
    "name": {
        "html": "Test Event 01"
    },
    "description": {
        "html": "Test Event 01"
    },
    "start": {
        "timezone": "America/Chicago",
        "utc": "2017-07-10T18:00:00Z"
    },
    "end": {
        "timezone": "America/Chicago",
        "utc": "2017-07-10T20:00:00Z"
    },
    "currency": "USD"
};

I have tried all the combinations but I always get the same response:

{
    "status_code": 400,
    "error_description": "There are errors with your arguments: event[currency] - Unknown parameter, event.start.timezone - This field is required., event.currency - This field is required., event.start.utc - This field is required., event[start][timezone] - Unknown parameter, event.end.utc - This field is required., event[end][utc] - Unknown parameter, event[description][html] - Unknown parameter, event[name][html] - Unknown parameter, event[end][timezone] - Unknown parameter, event[start][utc] - Unknown parameter, event.end.timezone - This field is required., event.name.html - This field is required.",
    "error": "ARGUMENTS_ERROR"
}

Is there any sample create event request anywhere I can look into? What is the problem with above request?


Solution

  • I think the issue is that you're currently sending a form post (by virtue of using the form option), but then your parameters should look like { "event.currency": "USD", "event.name.html": "Test Event 01", ... }. If you want to send JSON, you need to use json: true and pass a JSON-serializable body:

    var request = require('request');
    var _headers = {
        'Authorization': 'Bearer ' + _token,
        'Content-Type': 'application/json',
    }
    
    // Configure the request
    var options = {
        url: EVENTBRITE_API_URL + "events/",
        method: 'POST',
        headers: _headers,
    
        // Instead of this:
        // form: _event
    
        // use this:
        json: true, // says you're sending JSON
        body: _event, // so the body should be JSON-serializable
    };
    

    If you want to stick with a form post, I think this should do it:

    var _event = {
        "event.name.html": "Test Event 01",
        "event.description.html": "Test Event 01",
        "event.start.timezone": "America/Chicago",
        "event.start.utc": "2017-07-10T18:00:00Z",
        "event.end.timezone": "America/Chicago",
        "event.end.utc": "2017-07-10T20:00:00Z",
        "event.currency": "USD",
    };
    
    var request = require('request');
    var _headers = {
        'Authorization': 'Bearer ' + _token,
        'Content-Type': 'application/x-www-form-urlencoded',
    }
    
    // Configure the request
    var options = {
        url: EVENTBRITE_API_URL + "events/",
        method: 'POST',
        headers: _headers,
        form: _event,
    };