Never has the name Brand Risk Promotions ever been more appropriate than tonight’s event in Miami.
Adin Ross returns to his secretive warehouse for the thirteenth iteration of his celebrity boxing showcase. And in his entire time promoting, the streamer has never staged more of a Brand Risk than his foremost and co-main events.
The penultimate bout of the evening will see Paul Miller – higher often known as Gypsy Crusader – tackle battle rapper Supah Hot Fire. Recent Yorker Miller is notorious online for his streams where he gives extreme takes on race and other hot button political issues.
And although Ross has helped him to get in front of a big audience and given him the possibility to return to his past love of fighting, Miller seems irked by the promoter and his tactics to construct hype for the fight.
The foremost event then sees hit-making rapper Blueface return to the ring for the primary time since serving just over a 12 months of a four-year prison sentence for a probation violation stemming from a 2021 battery incident.
After bulking up considerably while behind bars, Blueface faces the fan favorite heavyweight Chibu as he warms up for a May 2 showdown against NBA champion Nick ‘Swaggy P’ Young.
Elsewhere within the evening, Anderson Silva’s son Gabriel Silva will return to the ring for the primary time since losing to AP The Fighter back in January. And his old rival can be coming back to tackle former Misfits Boxing star Minikon.
BLUEFACE AND CHIBU GO THE DISTANCE
The referee was taking a really close look towards the second third of that round – and never for Chibu! If he had a tiny bit more within the tank he would have won by knockout! What a performance from the underdog!
Blueface and Chibu go to the sixth round
This can be a war of attrition. Chibu won’t get the choice, but he’s giving it every thing he has. I still would have scored that shot through the ropes a knockdown. We head to the sixth.
Blueface and Chibu are going to war
It’s obvious who the higher technical boxer is, but Chibu is battling and despite their respective body types he seems to have the cardio to get something done here.
BLUEFACE GOES THROUGH THE ROPES
Chibu pushes Blueface – in keeping with the referee – through the ropes. That was a series of punches to my eye! That is far more of a fight than Blueface was expecting. Not only a warm-up!
Blueface vs Chibu – Round 1
Blueface is moving Chibu around a bit, each men look loads higher than they’ve physically in recent appearances. Chibu is just a lot slower than Blueface, who’s being roundly booed.
Gypsy Crusader defeats Supah Hot Fire by Split Decision
29-28 on two cards, Supah Hot Fire isn’t glad in any respect! Adin Ross is horrified, the commentators are all losing their minds.
Gypsy Crusader vs Supah Hot Fire – Round 3
Supah Hot Fire appears to have a headphone in his ear between rounds, then comes out swinging and gets thrown down by Miller. These two have each now completely gassed out and are only swinging for the fences. Supah appears to attempt to get out of the ring at one stage but Miller is so completely drained that he cannot make the most. They swing to the bell, and we go the space. Very fun, but terrible fight.
Gypsy Crusader vs Supah Hot Fire – Round 2
Miller is so drained, Supah Hot Fire’s little bit of ring activity is clearly standing to him, but he gets bundled to the bottom early. Supah is taunting him now, and that’s a significantly better round for the underdog. Everbody in Adin’s warehouse is cheering on Supah Hot Fire. What a villain the Gypsy Crusader is!
Gypsy Crusader vs Supah Hot Fire – Round 1
This size difference is crazy, but Supah Hot Fire is landing along with his overhand right. Miller on top of things, despite Adin Ross’ insistence that the round was a victory for Supah. Miller looks absolutely shattered after only a round. 10-9 Miller for me.
Gypsy Crusader makes the ring walk
With Joker in his corner and a bunch of other characters, the person of the hour arrives!
Time for the Gypsy Crusader fight!
I cannot repeat one word, and even allude to anything that they’re saying on the desk.
Janaya Berry defeats Kristina Santa by Unanimous Decision
Each of those women got here out swinging and the underdog Berry scores a giant victory. Now time for the massive fight!
Another fight to go until the Gypsy Crusader fights
Kristina Santa vs Janaya Berry is out sole ladies fight of the night!
AP THE FIGHTER PUTS MINIKON TO SLEEP IN ROUND ONE
Absolutely vicious knockout for AP The Fighter who sends his rival – a really experienced fighter – to the canvas on the buzzer of the primary round!
AP The Fighter vs Minikon is next
The returning former Misfits Boxing star Minikon takes on Gabriel Silva’s conqueror AP The Fighter.
GABRIEL SILVA KNOCKS OUT JOSE FLORENTINO TO THE BODY IN ROUND ONE
Some of the vicious knockouts I even have watched, although it won’t look it on the replays. After being rocked by Florentino, Silva lands a large shot to the liver that gave the impression of a gunshot! Florentino in some way gets up and offers an interview. That was wild.
Gabe Silva vs Jose Florentino up next
Not much of a record for Florentino, who’s 1-3 as knowledgeable. Silva needs an announcement after his last defeat.
Antonio Williams VICIOUSLY KOs Carlos Portillo in the primary round
That was absolutely brutal, three hard knockdowns that might have been stoppages. ‘Baby Tank’ is likely to be a greater nickname than ‘Bang’ to be honest!
Antonio Williams faces Carlos Portillo in our next pro fight
Teofimo Lopez’s prospect ‘Bang’ Williams in search of one other big stoppage. Anderson Silva’s son is up after this.
Wild viewership figures for tonight
Over 350,000 concurrent viewers on Ross’ Kick stream, 80,000 on X and an illegal stream on YouTube even has 57,000. Not to say all of the main influencers who’re streaming their perspectives of the event live.
Rooga defeats KMac The Great via UD
An enormous knockdown early was enough for the underdog to get a choice victory on every scorecard. That’s a disaster for KMac, who fancies himself a fighter. Rooga calls out GHerbo!
Rooga vs Kmac The Great is our next fight
Rooga vs Blueface was the plan for the foremost event but his sparring was so bad that the fight was cancelled by the commission and Chibu was drafted in. Given what we’ve seen of Chibu, God knows what they saw in that sparring footage.
Clavicular is here!
He’s excited for the 2 foremost events, but doesn’t want to present an explicit opinion on Paul Miller’s fight.
King Keem quits within the corner after one round – General Zach wins!
XQC defeats DDG in one other proxy battle. Adin has banned Keem from fighting on Brand Risk again!
Andrew Garcia defeats DeShawn Porter by Decision
The chat are glad with that, the Adin loyals on X not a lot.
NoNeckJay quits on the stool after two rounds!
JBoolin answers the decision, NoNeckJay doesn’t and the fight is over!
Watch Gypsy Crusader vs Supah Hot Fire HERE
No PPV, no change of channel, here is the complete legal stream for tonight’s event. Watch out for offensive language!
We’re attributable to get underway shortly
Don’t expect this to begin bang on time, Adin likes to maintain his public waiting!
The way to watch Brand Risk 13
Adin Ross will likely be streaming the event FREE across his socials, totally on Kick. We may have a link for you after they’re live!
Welcome to the Bloody Elbow live blog
Good evening and welcome to our live coverage right here on Bloody Elbow from Brand Risk Promotions 13 in Miami. My name is Donagh Corby and I will likely be with you throughout the evening with all the outcomes and updates from this wildly controversial evening of fights. I’ve got to be honest – I fear I would lose my job for just reporting on this show!
const postId = 298172;
let modifiedDate = “2026-03-15T04:33:23+00:00”;
// creates a timestamp cachebuster rounded to nearest 30 seconds threshold
function getLiveBlogCacheBusterTimestamp() {
const now = recent Date();
// Get current UTC time components
const minutes = now.getUTCMinutes();
const seconds = now.getUTCSeconds();
// Round as much as the closest 30 seconds
const roundedSeconds = Math.ceil(seconds / 30) * 30;
// Adjust minutes and seconds
let roundedDate = recent Date(Date.UTC(
now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
now.getUTCHours(),
minutes,
roundedSeconds
));
// Convert to Unix timestamp
return Math.floor(roundedDate.getTime() / 1000);
}
function getPollingEndpointUrl(postId) {
const baseUrl = “/wp-json/grv-live-blog/v1/post-modified-date”;
const cacheBuster = getLiveBlogCacheBusterTimestamp();
return `${baseUrl}?post_id=${postId}&t=${encodeURIComponent(cacheBuster)}`;
}
function getUpdatedEventEndpointUrl(postId) {
const baseUrl = “/wp-json/grv-live-blog/v1/get-updated-events”;
const cacheBuster = getLiveBlogCacheBusterTimestamp();
return `${baseUrl}?post_id=${postId}&t=${encodeURIComponent(cacheBuster)}`;
}
function showRefreshButton() {
const refresh_btn = document.getElementById(“glb-btn”);
refresh_btn.style.display = “block”;
}
function hideRefreshButton() {
const refresh_btn = document.getElementById(“glb-btn”);
refresh_btn.style.display = “none”;
}
function jumpToLatestEvent() {
hideRefreshButton();
const element = document.querySelector(“.wp-block-grvmedia-grv-live-blog”);
// Scroll to the element
if (element) {
element.scrollIntoView({ behavior: “smooth”, block: “start” });
}
}
function createPointItem(item) {
// Create the
const li = document.createElement(“li”);
li.appendChild(document.createTextNode(item.headline));
const a = document.createElement(“a”);
a.href = `#${item.anchorId}`; // Set the href attribute
a.innerHTML = `View post
`; // Set the text content
li.appendChild(a);
return li;
}
function addScriptSrcToHead(src) {
let s = document.createElement(“script”);
// expectation is that that is the primary script element in the pinnacle
let insertion = document.getElementsByTagName(“script”)[0];
s.async = true;
s.src = src;
insertion.parentNode.insertBefore(s, insertion);
}
function refreshScripts( fragment ) {
let scripts = fragment.querySelectorAll(“script”);
for ( let script of scripts ) {
let freshScript = document.createElement(“script”);
// copy attributes
let attrs = script.attributes;
for ( let attr of attrs ) {
freshScript.setAttribute( attr.name, attr.value );
}
// copy inner script code. #718, #782
freshScript.innerHTML = script.innerHTML;
script.parentNode.replaceChild( freshScript, script );
}
}
function reverseEvents(updated_events){
const events = Object.entries(updated_events);
// Reverse the order of the entries
events.reverse();
// Convert the reversed entries back to an object
return Object.fromEntries(events);
}
function fetchUpdatedEvents() {
const apiUrl = getUpdatedEventEndpointUrl(postId);
fetch(apiUrl)
.then(response => response.json())
.then(updatedEvents => {
// Find the events container
let key_points = document.querySelector(“.grv-live-blog-key-points”);
// if we had no key points to begin with but have some now we want to create the div and ul
// for it to populate
if(updatedEvents.key_points.length > 0) {
if (!key_points) {
// Element doesn’t exist, create it
key_points = document.createElement(“div”);
key_points.className = “grv-live-blog-key-points”;
// Create and append
to the brand new element
const heading = document.createElement(“h5”);
heading.textContent = “Key points”;
key_points.appendChild(heading);
// Create and append
- to the brand new element
const ul = document.createElement(“ul”);
ul.className = “grv-live-blog-key-points-list”;
key_points.appendChild(ul);
const glb_wrapper = document.getElementById(“glb-wrapper”);
if (glb_wrapper) {
// Insert the brand new element before the wrapper
glb_wrapper.parentNode.insertBefore(key_points, glb_wrapper);
}
}
const key_points_list = document.querySelector(“.grv-live-blog-key-points-list”);
key_points_list.innerHTML = “”;
// Update the important thing points
updatedEvents.key_points.forEach(point => {
const point_item = createPointItem(point);
key_points_list.appendChild(point_item);
});
// else we’ve got no key points so lets remove the list
}else{
if (key_points) {
key_points.remove();
}
}
// now cope with the events themselves…
const events_container = document.querySelector(“.wp-block-grvmedia-grv-live-blog”);
// get a map of the present events keyed by id
const existingEvents = Array.from(events_container.querySelectorAll(“.wp-block-grvmedia-grv-live-blog-event”))
.reduce((map, event) => {
map[event.id] = event;
return map;
}, {});
// get the present and updated keys so we will compare
const existingKeys = Object.keys(existingEvents);
const updatedKeys = Object.keys(updatedEvents.updated_blocks);
// find events which are in existing but not in updated
const keysToRemove = existingKeys.filter(key => !updatedKeys.includes(key));
// remove any events which were deleted
keysToRemove.forEach(key => {
// Find the element with the corresponding id
const element = document.getElementById(key);
// Remove the element if it exists
if (element) {
element.remove();
}
});
// reverse the events so that they are in the correct order if we add multiple…
updatedEvents.updated_blocks = reverseEvents(updatedEvents.updated_blocks);
// loop through each updated event
Object.values(updatedEvents.updated_blocks).forEach(updatedEvent => {
// create temp elem so we will hydrate it from our rendered event after which access the id etc
const parser = recent DOMParser();
const tempEvent = parser.parseFromString(updatedEvent,”text/html”);
// Select the event from our temp container
const eventElement = tempEvent.querySelector(“.wp-block-grvmedia-grv-live-blog-event”);
// Extract the id
const eventId = eventElement ? eventElement.id : null;
// Using a fraction allows us to refresh scripts before attaching to dom
let frag = document.createDocumentFragment();
if (existingEvents[eventId]) {
frag.append( …eventElement.childNodes );
} else {
frag.append( eventElement );
}
refreshScripts( frag );
// if its an existing event replace the content of the event so we dont cause a jump
if (existingEvents[eventId]) {
// get the present event
const event = document.getElementById(eventId);
event.style.minHeight = event.offsetHeight + “px”;
// update its innerHTML and sophistication incase we’ve got modified to featured or breaking etc
event.className = eventElement.className;
event.replaceChildren(…frag.childNodes);
const seeMore = event.querySelector(“.see-more-wrapper.lazy”);
let seeMoreSrc = seeMore?.getAttribute(“data-src”);
if (seeMoreSrc) {
if ( seeMoreSrc.indexOf(‘instagram’) != -1 && window.instgrm ) {
window.instgrm.Embeds?.process();
} else {
addScriptSrcToHead(seeMoreSrc);
}
}
// if its a brand new event add to the highest – TODO: sort order if multiple recent events
} else {
// Create a brand new event
events_container.insertBefore(frag, events_container.firstChild);
}
});
})
.catch(error => {
console.error(“Error fetching updated blocks:”, error);
});
}
document.addEventListener(“DOMContentLoaded”, function() {
function startPolling(postId) {
function fetchPostModifiedDate() {
const url = getPollingEndpointUrl(postId);
fetch(url)
.then(response => response.json())
.then(data => {
// if our post modified date has modified we’ve got an update
if(modifiedDate != data.modified_date) {
// update the modified time to be the brand new modified time
modifiedDate = data.modified_date;
// show the button so a user can refresh
fetchUpdatedEvents();
showRefreshButton();
}
})
.catch(error => {
console.error(“Error fetching post modified date:”, error);
});
}
// Set interval to fetch every 30 seconds
setInterval(fetchPostModifiedDate, 30000); // 30 seconds
}
// Start polling
startPolling(postId);
const refreshButton = document.getElementById(“glb-btn”);
refreshButton.addEventListener(“click”, jumpToLatestEvent);
});
We may have the entire updates right here for you on the Bloody Elbow live blog, in addition to a live-stream of the fight itself.

