Authorize.net is one of the service providers that allows you to process payments by taking credit card and/or electronic check payments on your website. Integrating with Authorize.net requires testing, first. So, when you create an account with Authorize.net, it is placed in Test Mode, and you must manually put the account in Live Mode before you can actually charge customers.
This is fairly straightforward to understand and do, but the terms “test ” and “live” actually can be used in three different contexts when dealing with Authorize.net, and this often makes it difficult to communicate with clients. Having explained this enough times, I thought I would write up a permanent explanation so I can point people here instead of going through it, myself, every time. I also hope that anyone needing to understand these differences will find this explanation helpful.
Summary
There are three meanings for the terms “Test” and “Live” when discussing Authorize.net accounts and transactions. These are:
- Server Level: Test vs. Live => Authorize.net has their normal Live Servers (presumably more than one) and a Test Server. You can request a Test Account (which is an account on the Test Server) for free and they do not require a merchant account.
- Account Level: Test vs. Live => You can set your whole account in Test Mode and any transactions submitted will be validated but not processed (thus they will not be added to the Unsettled Transactions list or leave any other trace in your account).
- Transaction Level: Test vs. Live => Each payment transaction submitted can indicate that it is a Test Transaction. If your account is in Test Mode, this has no effect since all transactions will be treated as test transactions. If your account is in Live Mode, then this treats the transaction request the same as if your whole account was in Test Mode.
Detailed Explanation
Here is a more detailed explanation of these terms, along with a chart showing all combinations.
Server Level: Authorize.net’s normal accounts run on their Live server(s). However, they also have a complete, exact copy of their live system on a different server which does everything the live servers do except communicate with the back-end merchant accounts to actually transfer funds. Anyone integrating with Authorize.net can request an account on this Test server for free and submit all the transactions they want and no money will ever be charged against any accounts nor will any emails be sent. An account on the Test Server is referred to as a Test Account.
Account Level: To confuse things, you can also have your Live Authorize.net account in Test Mode. This is an option you can set in the account settings section of your account on Authorize.net. All new Live accounts are automatically placed in Test Mode and must be put in to Live Mode before they can be used to perform real transactions. When a Live Account is in Test Mode, it basically only performs the first level of processing to verify that the transaction submitted was well formed.
Also, Test Mode supports a feature where if you submit transactions with special credit card numbers, then the dollar amount of the transaction is returned as the Response Reason Code for the transaction. Therefore, if you submit a payment request for $1.00, it gives you a Success response. If the amount is for $2.00, you get a failed transaction with the Reason Code being 2 (“This transaction has been declined” – you can look up Response Reason Codes here).
However, transactions submitted while an account is in Test Mode never write anything to your transaction history, so there is no evidence of your tests if you log in to your account at Authorize.net (which is not true for Test Accounts, since the Test Server acts like a real live server and does all of the processing internal to Authorize.net and writes the transactions to the history for your Test Account). Note that, for what it’s worth, you can also place your Test Account (on the Test Server) in Test Mode or Live Mode, since it has the same features as a normal Live Account.
Transaction Level: Lastly, you can submit a transaction to a Live Account in Live Mode, but set a value in the data submitted with the transaction which says to submit just this one transaction in Test Mode, and it will behave as if you are submitting a transaction to an account in Test Mode.
Therefore, you can submit:
| Server | Account Mode | Transaction Mode | Action |
| Test | Test | Test | Basic validation of transaction |
| Test | Test | Live | Basic validation of transaction |
| Test | Live | Test | Basic validation of transaction |
| Test | Live | Live | Acts like a real transaction, but does not settle with the payment processor |
| Live | Test | Test | Basic validation of transaction |
| Live | Test | Live | Basic validation of transaction |
| Live | Live | Test | Basic validation of transaction |
| Live | Live | Live | Submits a real/live transaction |
- If either the account is in Test Mode or the transaction is marked as a Test Transaction, then only basic validation of the request is performed.
- If the account is in Live Mode and the transaction is not marked as a Test Transaction, then…
- If submitting against the Test Server it acts like a normal transaction but no money changes hands
- If submitting agains the Live Server then, assuming everything is okay, money will change hands.
I hope this helps those of you who are trying to integrate with Authorize.net and implement payment processing on your website. Let me know if you have any questions!

{ 3 trackbacks }
{ 10 comments… read them below or add one }
Very helpful information here. Often the documentation on Authorize.net’s developer site is pretty opaque, so it’s great when people document their findings like you’ve done here.
Helpful!
what is the response from authorize.net in live mode for transcationid=? if account number is 4111111111111111 and a valid account number
yalestar and Patrick: Thanks. I have benefitted greatly from similar blog posts from others and I am glad to finally be giving back to the community.
rselvam: Your question is not entirely clear. If you want to clarify what you mean by “transactionid=?” and “account number is 4111111111111111 and a valid account number”, I can try to answer your question here. However, I think you will be better served by asking questions like this in the Authorize.net Developer Community forums at http://community.developer.authorize.net/.
Hi,
I am not sure of my authorize.net account is in live mode or test mode in server.
Because, i dont have account details from client.
I am submitting test cc numbers to authorize.net and getting success message.
and same for the valid cc numbers.
Now my question is what may be the response from authorize.net ,if we submit the test cc numbers to live server?
any thing on this will be helpfull.
Thanks
If you submit a payment against credit card 4111111111111111 to the live server and it is not in test mode, then you will get an error. One way you could determine if the account is in Test mode or not is to use credit card number 4222222222222222, and submit a transaction for $1.00 and $2.00. The $1.00 transaction should report success, while the $2.00 transaction should give you an error with a response reason code of 2 (“This transaction has been declined.”)
My site has not went live yet. I am trying to get it done now. I have been up all night and I am so confused i really need to speak to someone on the phone asap. Is authorize.net and the others a merchant account or not or just some type of go between. I do not understand all this at all I am not computer savy and I did not know this was so complicated. I am still trying to find something with say, the charges per transaction or will that be a surprise.
Hi,
Thanks for the nice article.
Well, I wanna ask can you please tell me how best I can test the AUTH only transaction and then CAPTURE prior AUTH transaction can be tested as well ?
I am still bit confuse with behavior of test account on test server. When i submit real credit card information with CCV validation enabled in my account, all information is correct but still it returns status P (Not Processed) so my question is, does test account on test server (live mode) validates the credit card information like CCV against bank?
If you ask me, there should be only two settings: Test, Live, Live (test server), and Live, Live, Live (live server). The rest of the settings are just for complete confusion (with the exception of the magic card number).