Action slot

Action Slot IDs can vary for some classes and are completely arbitrary to the buttons they exist in. As of 1.11, World of Warcraft allows 120 Action Slot IDs, numbered from 1-120. The IDs 1-72 are used by the six default bars (see below for the button ranges). IDs 73-120 are used by the stance bars of some classes.
As of WoW 2.3, action slots 121-132 exist but are not settable: they refer to the default UI's main action bar while possessing a target (Mind Control, Eyes of the Beast, certain quests, the Chess Event in Karazhan).
==Default UI use of Action slot IDs==
ActionBar page 1: slots 1 to 12 -- Note exceptions below for other classes 
ActionBar page 2: slots 13 to 24
ActionBar page 3 (Right ActionBar): slots 25 to 36
ActionBar page 4 (Right ActionBar 2): slots 37 to 48
ActionBar page 5 (Bottom Right ActionBar): slots 49 to 60
ActionBar page 6 (Bottom Left ActionBar): slots 61 to 72
Warrior Bonus Action Bars
ActionBar page 1 Battle Stance: slots 73 to 84
ActionBar page 1 Defensive Stance: slots 85 to 96
ActionBar page 1 Berserker Stance: slots 97 to 108
Druid Bonus Action Bars
ActionBar page 1 Cat Form: slots 73 to 84
ActionBar page 1 Prowl: slots 85 to 96
ActionBar page 1 Bear Form: slots 97 to 108
ActionBar page 1 Moonkin Form: slots 109 to 120
Rogue Bonus Action Bars
ActionBar page 1 Stealth: slots 73 to 84
ActionBar page 1 Shadow Dance: slots 85 to 96
Priest Bonus Action Bars
ActionBar page 1 Shadowform: slots 73 to 84
Target Possessed Action Bar
ActionBar page 1 Possess: slots 121-132
==Example Code==
This function will display the contents of each of the 120 action slots (skipping empty ones) in the default chat frame. To use, type "/script reportActionButtions()".
 function reportActionButtons()
 	local lActionSlot = 0;
 	for lActionSlot = 1, 120 do
 		local lActionText = GetActionText(lActionSlot);
 		local lActionTexture = GetActionTexture(lActionSlot);
 		if lActionTexture then
 			local lMessage = "Slot " .. lActionSlot .. ": [" .. lActionTexture .. "]";
 			if lActionText then
 				lMessage = lMessage .. " \"" .. lActionText .. "\"";
 			end
 			DEFAULT_CHAT_FRAME:AddMessage(lMessage);
 		end
 	end
 end
If you'd rather avoid function creation, the following macro could be used instead:
 /run for i = 1, 120 do local x = GetActionTexture(i) if x then print("Slot " .. i .. ":", GetActionText(i), x) end end