Most apps/websites are not allowed to store card information due to PCI compliance restrictions, which require a QSA SAQ compliance in order to store full credit card numbers.
Most payment gateways allow an alternative to storing card information which is called Card Vaulting. Card Vaulting allows an application/web site to send an encrypted credit card data which is stored in the payment gateway DB.
Autorize.net calls this feature Customer Profiles.
Usually, when a returning shopper wants to place an order, the application/web site requests the list of all the vaulted credit cards associated with that shopper. The retrieved data does not contain full credit card information, but contains the last-four-digits of the card and the card brand only. Autorize.net API allows retrieving these customer payment profiles while returning only the allowed data in the response (Get Customer Payment Profile API Documentation):
<getCustomerPaymentProfileResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<messages>
<resultCode>Ok</resultCode>
<message>
<code>I00001</code>
<text>Successful.</text>
</message>
</messages>
<paymentProfile>
<customerType>individual</customerType>
<billTo>
<firstName>John</firstName>
<lastName>Smith</lastName>
</billTo>
<customerProfileId>39598611</customerProfileId>
<customerPaymentProfileId>35936989</customerPaymentProfileId>
<payment>
<creditCard>
<cardNumber>XXXX1111</cardNumber>
<expirationDate>XXXX</expirationDate>
</creditCard>
</payment>
<subscriptionIds>
<subscriptionId>3078153</subscriptionId>
<subscriptionId>3078154</subscriptionId>
</subscriptionIds>
</paymentProfile>
</getCustomerPaymentProfileResponse>
Notice how the credit card data is returned:
<creditCard>
<cardNumber>XXXX1111</cardNumber>
<expirationDate>XXXX</expirationDate>
</creditCard>