Posting HTTP Data

If you are a software developer and you wish your software to post subscriptions and unsubscriptions to arpReach, this section explains how to do it.

  • Create a subscription form in arpReach
  • Post data to it using an HTTP request from your software

Create and save a form in the Subscription Forms section of the autoresponder. Then generate the form html code there, too. From this you can see the fields you need to map to. Note the “POST” URL is different for every form because most of the form’s parameters are held in the database instead of “hidden” form fields.

Here’s an example with the form code and associated PHP code. Note the “action” field of the form tag, which is unique for every form stored in arpReach. Also, note that the USER_AGENT is mandatory in the curl post or it will be ignored. It doesn’t matter what you set it to. This is really just a defense against spambots that often don’t bother to have a user agent.

Example Form Code

<!-- subscription_form_lwzysh --> 
<div id=’subscription_form_lwzysh’>
<form method=’post’ action=’https://yourdomain.com/arpreach/a.php/sub/1/lwzysh’>
<div>
<label>Email address</label>
<input type=’text’ id=’email_address’ name=’email_address’ value=’’>
</div>
<div>
<label>First name</label>
<input type=’text’ id=’first_name’ name=’first_name’ value=’’> 
</div>
<div>
<input type=’submit’ value=’Submit’>
</div>
</form>
</div>
<!-- subscription_form_lwzysh -->

Example PHP Code – Subscribe

define(URL, ‘https://yourdomain.com/arpreach/a.php/sub/1/lwzysh‘);
if (! empty($_POST) && count($_POST) > 0) { 

$post_fields = array(

‘email_address’ => ‘whatever@whatever.com’, 
‘first_name’ => ‘first_name_here’,
‘last_name’ => ‘last_name_here’);

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERAGENT, ‘ARPR’); 
curl_setopt($ch, CURLOPT_URL, URL);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
curl_exec($ch);

curl_close($ch);

} // if

Subscription Form Codes

When a subscription form is processed, the success or failure of the form’s submission is posted as a code and a message in the URL of the success/failure page. Example:

http://www.yourpage.com/?code=04&message=The%20list%20no%20longer%20exists

If you are using your own custom success/failure pages and you do not want the code or message to be appended to its URL, you can disable this functionality in Setup / System Settings / Custom Pages and checking the Disable error code and message box.

The code is supplied in the “code” parameter of the custom page URL and can be read by your script.

For example, in PHP, use:

$_GET[‘code’]

… to read the code value. These codes apply only to submissions of subscribe/ unsubscribe forms, not other means of subscribing.

Success Codes

01 = Successful subscription.
02 = Successful subscription - confirmation email sent.
03 = Successful subscription - first email sent.
04 = Successful unsubscription.

Error Codes

00 = There was an unknown error.
01 = Your browser has not sent its user agent type.
02 = The form parameters are not correct.
03 = The form parameters are not correct.
04 = This list no longer exists.
05 = This list does not allow subscriptions by form.
06 = This list is currently disabled.
07 = This list is not currently accepting new subscriptions.
08 = There was a form validation error.
09 = The security code cannot be blank.
10 = The security code is not correct.
11 = The email address cannot be blank.
12 = The email address is not valid.
13 = The email address is not permitted to subscribe.
14 = The email address is not permitted to subscribe.
15 = The title cannot be blank.
16 = The first name cannot be blank.
17 = The middle name cannot be blank.
18 = The last name cannot be blank.
19 = The full name cannot be blank.
20 = The company cannot be blank.
21 = The department cannot be blank.
22 = Address #1 cannot be blank.
23 = Address #2 cannot be blank.
24 = Address #3 cannot be blank.
25 = The town or city cannot be blank.
26 = The state or province cannot be blank.
27 = The postal or ZIP code cannot be blank.
28 = The country cannot be blank.
29 = The alternative email address
30 = The alternative email address
31 = The alternative email address
32 = The phone number #1 cannot
33 = The phone number #2 cannot
34 = The phone number #3 cannot
35 = The mobile phone number #1 cannot be blank.
36 = The mobile phone number #2 cannot be blank.
37 = The mobile phone number #3 cannot be blank.
38 = The fax number #1 cannot be blank.
39 = The fax number #2 cannot be blank.
40 = The fax number #3 cannot be blank.
41 = The referer id cannot be blank.
42 = Your subscription request could not be completed.
43 = Duplicate subscriptions are not allowed.
44 = Your subscription request could not be completed.

Bounce Codes

When the software sends an email and that email bounces, a bounce code is generated and recorded in the contact’s record.

The four digit software bounce code number is assigned based on the answer to two pieces of information.  Understanding a little about the information being used will help you make better choices or locate the cause of delivery issues.

QuickSearch Tip: If you know the bounce code number and you want to know what caused it press (Ctrl + F) or Find – and search for the number but add a zero (0) in front of it.

Email Bounce Basics

There are two types of bounces:

  • hard bounces
  • soft bounces

What is a Hard Bounce?

A hard bounce generally means that there is no point in trying to send email to that address because the reason for the bounce is unlikely to be resolved. Examples include non-existent mailboxes or domains. When the software receives a hard bounce, that contact’s subscriptions are immediately flagged as “failed”.  The software will not try to send email again to a contact who is flagged as failed.

What is a Soft Bounce?

A soft bounce generally means that the issue could be resolved in future so follow-up messages will be retried several times. Multiple soft bounces in an autoresponder sequence will eventually result in a contact’s subscription being flagged as “failed” and no more follow-up messages will be sent for that subscription.

How do I tell?  How do I check?

Understanding the basic process of what an email bounce message/code is and does will help.

An automated message gets sent back to the server that sent the email that could not be delivered.  That message has numbers and messages which generally conform to a set of rules.

The rules are called The RFC code.

Hard bounces have a 3 digit number beginning with a 5 and soft bounce messages have a three digit number beginning with a 4.  Although you should be aware that some ISPs are not consistent some of the time.  This is outside of your control and ours.

The bounce message element.

There are also guidelines for the message element that should be attached to the 4XX number and explains why that email to that contact is being rejected.  It would be good if there was consistency in the explanations and links that get sent back and stored in your mail log files.  Unfortunately there isn’t a lot of consistency and that is outside of your control and ours as well.

What is the bounce code number?

There are many common messages used by ISP’s to say the same thing.  i.e. User does not exist.  Some ISP’s try to have helpful messages.  i.e. user unknown please contact systems admin

If the bounce message the software gets is a properly formatted 5XX response it marks that contact as failed.  Hard bounce.  The software then assigns a bounce code number based on scanning the content in the message element for expected language or terms etc as the most likely reason for the failure.

The following represents a technical explanation of the codes that the software generates for trigger strings in bounced emails.   These can be used as a lookup for the bounce codes shown in a contact’s records in the software.

Top Search Tip:  Type CTRL + F to bring up the browser search tool then type in 00 (zero zero) + the bounce number you are looking for to find it quickly.

‘trigger’ => “/no such address here/i” 
‘code’ => ‘0001’ 
‘is_hard’ => 1
‘trigger’ => “/user doesn’t have.*account/is” 
‘code’ => ‘0002’ 
‘is_hard’ => 1
‘trigger’ => “/user unknown/i”
‘code’ => ‘0003’ 
‘is_hard’ => 1
‘trigger’ => “/no mailbox/i” 
‘code’ => ‘0004’ 
‘is_hard’ => 1
‘trigger’ => “/can’t find.*mailbox/is” 
‘code’ => ‘0005’ 
‘is_hard’ => 1
‘trigger’ => “/=D5=CA=BA=C5=B2=BB=B4=E6=D4=DA/i” 
‘code’ => ‘0006’ 
‘is_hard’ => 1
‘trigger’ => “/Unrouteable address/i”
‘code’ => ‘0007’
‘is_hard’ => 1
‘trigger’ => “/delivery[^\n\r]+failed/i” 
‘code’ => ‘0008’ 
‘is_hard’ => 1
‘trigger’ => “/unknown local-part/i” 
‘code’ => ‘0009’ 
‘is_hard’ => 1
‘trigger’ => “/Invalid.*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0010’ 
‘is_hard’ => 1
‘trigger’ => “/No such.*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0011’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*no.*accept.*mail>/is” 
‘code’ => ‘0012’ 
‘is_hard’ => 1
‘trigger’ => “/over.*quota/is” 
‘code’ => ‘0013’ 
‘is_hard’ => 0
‘trigger’ => “/quota exceeded/i” 
‘code’ => ‘0014’ 
‘is_hard’ => 0
‘trigger’ => “/mailbox.*full/is” 
‘code’ => ‘0015’ 
‘is_hard’ => 0
‘trigger’ => “/The message to.*bounce.*Quota exceed/is” 
‘code’ => ‘0016’ 
‘is_hard’ => 0
‘trigger’ => “/user is inactive/i” 
‘code’ => ‘0017’ 
‘is_hard’ => 1
‘trigger’ => “/inactive account/i” 
‘code’ => ‘0018’ 
‘is_hard’ => 1
‘trigger’ => “/input\/output error/i” 
‘code’ => ‘0019’ 
‘is_hard’ => 1
‘trigger’ => “/not open new email file/i” 
‘code’ => ‘0020’ 
‘is_hard’ => 1
‘trigger’ => “/Resources temporarily unavailable/i” 
‘code’ => ‘0021’ 
‘is_hard’ => 0
‘trigger’ => “/does not accept.*non-Western/is” 
‘code’ => ‘0022’ 
‘is_hard’ => 0
‘trigger’ => “/quota exceed/i” 
‘code’ => ‘0023’ 
‘is_hard’ => 0
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*full/is” 
‘code’ => ‘0024’ 
‘is_hard’ => 0
‘trigger’ => “/Insufficient system storage/i” 
‘code’ => ‘0025’ 
‘is_hard’ => 0
‘trigger’ => “/File.*too large/is” 
‘code’ => ‘0026’ 
‘is_hard’ => 0
‘trigger’ => “/larger than.*limit/is” 
‘code’ => ‘0027’ 
‘is_hard’ => 0
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*not.*list/is” 
‘code’ => ‘0028’ 
‘is_hard’ => 1
‘trigger’ => “/user path no exist/i” 
‘code’ => ‘0029’ 
‘is_hard’ => 1
‘trigger’ => “/Relay.*(?:denied|prohibited)/is” 
‘code’ => ‘0030’ 
‘is_hard’ => 1
‘trigger’ => “/no.*valid.*(?:alias|account|recipient|address|email|mailbox|user)/is”
‘code’ => ‘0031’ 
‘is_hard’ => 1
‘trigger’ => “/Invalid.*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0032’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*(?:disabl ed|discontinued)/is” 
‘code’ => ‘0033’ 
‘is_hard’ => 1
‘trigger’ => “/user doesn’t have.*account/is” 
‘code’ => ‘0034’ 
‘is_hard’ => 1
‘trigger’ => “/(?:unknown|illegal).*(?:alias|account|recipient|address|email|mai lbox|user)/is” 
‘code’ => ‘0035’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*(?:un|n ot\s+)available/is” 
‘code’ => ‘0036’ 
‘is_hard’ => 1
‘trigger’ => “/no (?:alias|account|recipient|address|email|mailbox|user)/i” 
‘code’ => ‘0037’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*unknown/is” 
‘code’ => ‘0038’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*disabled/is” 
‘code’ => ‘0039’ 
‘is_hard’ => 1
‘trigger’ => “/No such (?:alias|account|recipient|address|email|mailbox|user)/i” 
‘code’ => ‘0040’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*not found/is” 
‘code’ => ‘0041’ 
‘is_hard’ => 1
‘trigger’ => “/deactivated (?:alias|account|recipient|address|email|mailbox|user)/i” 
‘code’ => ‘0042’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*reject/is” 
‘code’ => ‘0043’ 
‘is_hard’ => 1
‘trigger’ => “/bounce.*administrator/is” 
‘code’ => ‘0044’ 
‘is_hard’ => 1
‘trigger’ => “/<.*>.*disabled/is” 
‘code’ => ‘0045’ 
‘is_hard’ => 1
‘trigger’ => “/not our customer/i” 
‘code’ => ‘0046’ 
‘is_hard’ => 1
‘trigger’ => “/Wrong (?:alias|account|recipient|address|email|mailbox|user)/i” 
‘code’ => ‘0047’ 
‘is_hard’ => 1
‘trigger’ => “/(?:unknown|bad).*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0048’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*not OK/is” 
‘code’ => ‘0049’ 
‘is_hard’ => 1
‘trigger’ => “/Access.*Denied/is” 
‘code’ => ‘0050’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*lookup.*fail/is”
‘code’ => ‘0051’ 
‘is_hard’ => 1
‘trigger’ => “/(?:recipient|address|email|mailbox|user).*not.*member of domain/is” 
‘code’ => ‘0052’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*cannot be verified/is” 
‘code’ => ‘0053’ 
‘is_hard’ => 1
‘trigger’ => “/Unable to relay/i” 
‘code’ => ‘0054’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*(?:n’t|n ot) exist/is” 
‘code’ => ‘0055’ 
‘is_hard’ => 1
‘trigger’ => “/not have an account/i” 
‘code’ => ‘0056’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*is not allowed/is” 
‘code’ => ‘0057’ 
‘is_hard’ => 1
‘trigger’ => “/inactive.*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0058’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*Inactive/is” 
‘code’ => ‘0059’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user) closed due to inactivity/i” 
‘code’ => ‘0060’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user) not activated/i” 
‘code’ => ‘0061’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*(?:suspen d|expire)/is” 
‘code’ => ‘0062’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*no longer exist/is” 
‘code’ => ‘0063’ 
‘is_hard’ => 1
‘trigger’ => “/(?:forgery|abuse)/i” 
‘code’ => ‘0064’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*restrict/is” 
‘code’ => ‘0065’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*locked/is” 
‘code’ => ‘0066’ 
‘is_hard’ => 1
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user) refused/i” 
‘code’ => ‘0067’ 
‘is_hard’ => 1
‘trigger’ => “/sender.*not.*domain/is” 
‘code’ => ‘0068’ 
‘is_hard’ => 1
‘trigger’ => “/Message refused/i” 
‘code’ => ‘0069’ 
‘is_hard’ => 1
‘trigger’ => “/No permit/i” 
‘code’ => ‘0070’ 
‘is_hard’ => 1
‘trigger’ => “/domain isn’t in.*allowed rcpthost/is” 
‘code’ => ‘0071’ 
‘is_hard’ => 1
‘trigger’ => “/AUTH FAILED/i” 
‘code’ => ‘0072’ 
‘is_hard’ => 1
‘trigger’ => “/relay.*not.*(?:permit|allow)/is” 
‘code’ => ‘0073’ 
‘is_hard’ => 1
‘trigger’ => “/not local host/i” 
‘code’ => ‘0074’ 
‘is_hard’ => 1
‘trigger’ => “/Unauthorized relay/i” 
‘code’ => ‘0075’ 
‘is_hard’ => 1
‘trigger’ => “/Transaction.*fail/is” 
‘code’ => ‘0076’ 
‘is_hard’ => 1
‘trigger’ => “/Invalid data/i” 
‘code’ => ‘0077’ 
‘is_hard’ => 1
‘trigger’ => “/Local user only/i” 
‘code’ => ‘0078’ 
‘is_hard’ => 1
‘trigger’ => “/not.*permit.*to/is” 
‘code’ => ‘0079’ 
‘is_hard’ => 1
‘trigger’ => “/Content reject/i” 
‘code’ => ‘0080’ 
‘is_hard’ => 0
‘trigger’ => “/MIME\/REJECT/i” 
‘code’ => ‘0081’ 
‘is_hard’ => 0
‘trigger’ => “/MIME error/i” 
‘code’ => ‘0082’ 
‘is_hard’ => 0
‘trigger’ => “/Mail data refused.*AISP/is” 
‘code’ => ‘0083’ 
‘is_hard’ => 0
‘trigger’ => “/Host unknown/i” 
‘code’ => ‘0084’ 
‘is_hard’ => 1
‘trigger’ => “/Specified domain.*not.*allow/is” 
‘code’ => ‘0085’ 
‘is_hard’ => 1
‘trigger’ => “/No route to host/i” 
‘code’ => ‘0086’ 
‘is_hard’ => 1
‘trigger’ => “/unrouteable address/i” 
‘code’ => ‘0087’ 
‘is_hard’ => 1
‘trigger’ => “/System.*busy/is” 
‘code’ => ‘0088’ 
‘is_hard’ => 0
‘trigger’ => “/Resources temporarily unavailable/i” 
‘code’ => ‘0089’ 
‘is_hard’ => 0
‘trigger’ => “/sender is rejected/i” 
‘code’ => ‘0090’ 
‘is_hard’ => 0
‘trigger’ => “/Client host rejected/i” 
‘code’ => ‘0091’ 
‘is_hard’ => 0
‘trigger’ => “/MAIL FROM.*mismatches client IP/is” 
‘code’ => ‘0092’ 
‘is_hard’ => 0
‘trigger’ => “/denyip/i” 
‘code’ => ‘0093’ 
‘is_hard’ => 0
‘trigger’ => “/client host.*blocked/is” 
‘code’ => ‘0094’ 
‘is_hard’ => 0
‘trigger’ => “/mail.*reject/is” 
‘code’ => ‘0095’ 
‘is_hard’ => 0
‘trigger’ => “/spam.*detect/is” 
‘code’ => ‘0096’ 
‘is_hard’ => 0
‘trigger’ => “/reject.*spam/is” 
‘code’ => ‘0097’ 
‘is_hard’ => 0
‘trigger’ => “/SpamTrap/i” 
‘code’ => ‘0098’ 
‘is_hard’ =>
‘trigger’ => “/Verify mailfrom failed/i” 
‘code’ => ‘0099’ 
‘is_hard’ => 0
‘trigger’ => “/MAIL.*FROM.*mismatch/is” 
‘code’ => ‘0100’ 
‘is_hard’ => 0
‘trigger’ => “/spam scale/i” 
‘code’ => ‘0101’ 
‘is_hard’ => 0
‘trigger’ => “/junk mail/i” 
‘code’ => ‘0102’ 
‘is_hard’ => 0
‘trigger’ => “/message filtered/i” 
‘code’ => ‘0103’ 
‘is_hard’ => 0
‘trigger’ => “/subject.*consider.*spam/is” 
‘code’ => ‘0104’ 
‘is_hard’ => 0
‘trigger’ => “/Temporary local problem/i” 
‘code’ => ‘0105’ 
‘is_hard’ => 0
‘trigger’ => “/system config error/i” 
‘code’ => ‘0106’ 
‘is_hard’ => 0
‘trigger’ => “/delivery.*suspend/is” 
‘code’ => ‘0107’ 
‘is_hard’ => 0
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*invalid/is” 
‘code’ => ‘0108’ 
‘is_hard’ => 1
‘trigger’ => “/Deferred.*No such.*(?:file|directory)/is” 
‘code’ => ‘0109’ 
‘is_hard’ => 1
‘trigger’ => “/mail receiving disabled/i” 
‘code’ => ‘0110’ 
‘is_hard’ => 1
‘trigger’ => “/bad.*(?:alias|account|recipient|address|email|mailbox|user)/is” 
‘code’ => ‘0111’ 
‘is_hard’ => 1
‘trigger’ => “/over.*quota/is” 
‘code’ => ‘0112’ 
‘is_hard’ => 0
‘trigger’ => “/quota.*exceeded/is” 
‘code’ => ‘0113’ 
‘is_hard’ => 0
‘trigger’ => “/exceed.*\n?.*quota/is” 
‘code’ => ‘0114’ 
‘is_hard’ => 0
‘trigger’ => “/(?:alias|account|recipient|address|email|mailbox|user).*full/is” 
‘code’ => ‘0115’ 
‘is_hard’ => 0
‘trigger’ => “/space.*not.*enough/is” 
‘code’ => ‘0116’ 
‘is_hard’ => 0
‘trigger’ => “/Deferred.*Connection (?:refused|reset)/is” 
‘code’ => ‘0117’ 
‘is_hard’ => 0
‘trigger’ => “/Invalid host name/i” 
‘code’ => ‘0118’ 
‘is_hard’ => 1
‘trigger’ => “/Deferred.*No route to host/is” 
‘code’ => ‘0119’ 
‘is_hard’ => 1
‘trigger’ => “/Host unknown/i” 
‘code’ => ‘0120’ 
‘is_hard’ => 1
‘trigger’ => “/Name server timeout/i” 
‘code’ => ‘0121’ 
‘is_hard’ => 1
‘trigger’ => “/Deferred.*Connection.*tim(?:e|ed).*out/is” 
‘code’ => ‘0122’ 
‘is_hard’ => 1
‘trigger’ => “/Deferred.*host name lookup failure/is” 
‘code’ => ‘0123’ 
‘is_hard’ => 1
‘trigger’ => “/MX list.*point.*back/is” 
‘code’ => ‘0124’ 
‘is_hard’ => 1
‘trigger’ => “/I\/O error/i” 
‘code’ => ‘0125’ 
‘is_hard’ => 0
‘trigger’ => “/connection.*broken/is” 
‘code’ => ‘0126’ 
‘is_hard’ => 0
‘trigger’ => “/Delivery to the following recipients failed/i” 
‘code’ => ‘0127’ 
‘is_hard’ => 0
‘trigger’ => “/User unknown/i” 
‘code’ => ‘0128’ 
‘is_hard’ => 1
‘trigger’ => “/Service unavailable/i” 
‘code’ => ‘0129’ 
‘is_hard’ => 1

What’s useful in the appendix

In this section you’ll find links to pages that can help you work out why the software might not be doing what you expect or explain what something means.

Sending emails sounds easy but it’s a complex process getting great ROI.  We hope that the appendix will help get to the root of some causes of ‘odd things’.

Posting HTTP Data

Subscription Form Codes

Bounce Codes and What Triggered It/Them