function query( slug, id, options, clbk ) {
	var opts;
	var data;

	// Extract request options:
	opts = getOpts( options );

	// Set the query endpoint:
	opts.path = replace( options.pathname, '<slug>', slug );
	opts.path = replace( opts.path, '<id>', id );

	// Get the request data:
	data = string2buffer( getData( options ) );
	opts.headers[ 'Content-Length' ] = data.byteLength;

	// Make the request:
	request( opts, data, done );

	/**
	* Callback invoked after completing request.
	*
	* @private
	* @param {(Error|Null)} error - error object
	* @param {Object} response - HTTP response object
	* @returns {void}
	*/
	function done( error, response ) {
		var info;
		if ( arguments.length === 1 ) {
			debug( 'No available rate limit information.' );
			return clbk( error );
		}
		debug( 'Request completed.' );

		// Get rate limit information:
		info = ratelimit( response.headers );
		debug( 'Rate limit: %d', info.limit );
		debug( 'Rate limit remaining: %d', info.remaining );
		debug( 'Rate limit reset: %s', (new Date( info.reset*1000 )).toISOString() );

		if ( error ) {
			return clbk( error, info );
		}
		clbk( null, info );
	}
}
Queries a remote endpoint in order to create a workflow dispatch event.

@private
@param {string} slug - repository slug
@param {string} id - workflow id or workflow file name
@param {Object} options - query options
@param {Callback} clbk - callback to invoke after completing a query