It's highly recommended to visit this website under a Sandboxed browser or, even better, a Virtual Machine (VM).
Please take all necessary precautions before clicking ANY links under that modal. You have been warned.
Go ahead and click one of the fake download buttons to download desired malware. Use it for educational and research purposes ONLY. Turn off AdBlock for optimal experience.
You may use a VPN to generate different samples, as the campaigns are variable for each country. Forward samples you find interesting to my mailbox!
Available downloads
Additional mirrors
503 Service Temporarily Unavailable
Our website is currently experiencing technical difficulties. We are working on it to fix the server as soon as possible.
Check back in 40 seconds.
(1) New Message!
I started to earn money on short links.
It’s easy - make the shorte.st links and earn the biggest money - shorte.st.
Please wait
Checking if you're not a robot...
Error. Please refresh this page.
Skip this ad
Well, I came across this. www.deviantart.com/owencarlson… So, I made the font first. This is the WEIRDEST font... Based off of the '07-'08 TCF Calendar.
I realize other people have gotten this error, but I do not see any actual help on it in the forum. This error happens when I make an API call. But the exact API call works just fine on other apps. Putting in breakpoints is unhelpful because it just gives the error and stops with no new information in the debugging console. Not sure what to do
Well, I’ve been drinking and smoking for 13 hours… and bubble status is fine… same thing. It doesnt really give me a lot to go on. the API it is calling, is the same one my other apps use and they re fine.
Hi @hirscr How do you know its not happening any more ? I thought so too until a kind user reported. And looking at user behaviour / logs, I fear many users encountering and left. My users mostly are strangers online. Is there a way to be notified when this or any error happen ? Thankyou.
Our support team has been looking into this specific issue. Keep in mind that this error message is general. It can apply to a workflow timeout and a backend uncaught error, for example. Though the latter would result in a console error message, which we do not see for this use case. Either way, we’re handling via our support channel, but thanks for posting here as well.
"Windows Defender Security Center" is a fake error message displayed by various websites. Users visit often these sites inadvertently - they are redirected by potentially unwanted programs (PUPs) or intrusive advertisements delivered by other rogue sites.
Research shows that many PUPs infiltrate systems without users’ permission. As well as causing redirects, they deliver intrusive advertisements, record user-system information, and run unwanted background processes.
The "Windows Defender Security Center" error states that the system is infected with a number of viruses and encourages users to immediately remove them by downloading and installing fake anti-virus/system optimization tools (such as, for example, System Keeper).
All claims regarding the infection are false. After running a full system scan with the downloaded tool, users are presented with many "infections". Since the free version of the tool is apparently unable to remove them, users are encouraged to purchase the 'full version'.
In this way, cyber criminals generate revenue by scaring and tricking unsuspecting users into purchasing full versions that are not required. Your system is likely to be perfectly safe and optimized. The full version will simply clear the list and nothing more, delivering no real value.
Therefore, ignore "Windows Defender Security Center" and never download promoted apps. Note, however, that fake error-displaying websites often employ scripts that prevent users from closing browsing tabs/windows. In these cases, terminate the browser via Task Manager or simply reboot the system.
The next time you run the browser, do not restore the previous session, otherwise you will re-open the malicious sites.
Potentially unwanted programs are notorious for delivering intrusive advertisements (e.g., coupons, banners, pop-ups, etc.) To achieve this, developers employ tools that enable placement of third party graphical content on any site. Therefore, delivered ads often conceal underlying website content, thereby significantly diminishing the browsing experience.
Furthermore, intrusive ads can lead to malicious websites and even execute scripts that stealthily download and install malware. Therefore, even accidental clicks might result in high-risk computer infections.
Another important issue is data tracking. Most PUPs gather IP addresses, website URLs visited, pages viewed, search queries, keystrokes, and other similar data that typically includes personal details. Developers later share this data with third parties to generate revenue.
These people (potentially, cyber criminals) generate revenue by misusing personal details. Therefore, the presence of data-tracking app(s) can lead to serious privacy issues or even identity theft. In addition, potentially unwanted programs mine cryptocurrencies or run other unwanted processes without users' consent.
These programs essentially misuse system resources, thereby significantly reducing overall performance. For these reasons, you are advised to uninstall all potentially unwanted programs immediately.
Threat Summary:
Name
"Windows Defender Security Center" virus
Threat Type
Phishing, Scam, Social Engineering, Fraud
Fake Claim
Scam claims that access to the device has been blocked for security reasons.
Disguise
Scam is disguised as an alert from Windows Defender.
Loss of sensitive private information, monetary loss, identity theft, possible malware infections.
Malware Removal (Windows)
To eliminate possible malware infections, scan your computer with legitimate antivirus software. Our security researchers recommend using Combo Cleaner. ▼ Download Combo Cleaner To use full-featured product, you have to purchase a license for Combo Cleaner. 7 days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
All claim that the system is damaged (e.g., infected, missing files, and so on), however, rather than promoting potentially unwanted programs, most fake errors attempt to trick users into contacting fake 'tech support' and paying for services that are unnecessary.
Potentially unwanted programs also share many similarities. Most claim to provide "useful features", however, such claims are merely attempts to give the impression of legitimacy and trick users to install. In fact, rather than giving any real value for regular users, PUPs pose a direct threat to your privacy and Internet browsing safety.
How did potentially unwanted programs install on my computer?
Some PUPs have official download/promotion websites, however, due to the lack of knowledge and careless behavior of many users, PUPs often infiltrate systems without permission. Developers proliferate them using intrusive advertisements and "bundling" method (stealth installation of PUPs together with regular apps).
Developers know that users often rush download/installation processes and skip steps. Therefore, they hide "bundled" apps within "Custom/Advanced" settings (or other sections) of the download/installation processes. Skipping download/installation steps and clicking advertisements often leads to inadvertent installation of PUPs.
How to avoid installation of potentially unwanted applications?
To prevent this situation, be very cautious when browsing the Internet, and downloading/installing software. Intrusive advertisements may seem legitimate, but can redirect to dubious websites (e.g., gambling, adult dating, pornography, etc.) If you experience these redirects, immediately remove all suspicious applications and browser plug-ins.
Remember also to carefully analyze each step (especially "Custom/Advanced" settings) of the download/installation processes and opt-out of all additionally-included programs.
You are advised to avoid using third party downloaders/installers, since criminals monetize them by promoting PUPs (the "bundling" method). Applications should be downloaded only from official/trusted sources and, preferably, using a direct download link. The key to computer safety is caution.
Text presented within:
Windows Defender Security Center App: Ads.fiancetrack(2).dll Threat Detected: DOSAttack Spyware
Access to this PC has been blocked for security reasons. Contact Windows Support: 1-865-484-6972 (Toll Free) Note: If you think this Notification is by error, report immediately to Windows Support to halt the auto-deletion of files and applications from this computer. As this Computer ID is flagged and is connected over the internet Servers, files and apps deletion may start any moment.
Microsoft Deny Allow
Windows-Defender - Security Warning
** ACCESS TO THIS PC HAS BEEN BLOCKED FOR SECURITY REASONS **
Your computer has alerted us that it has been infected with a DOSAttack Spyware. The following data has been compromised.
Windows-Defender Scan has found potentially unwanted Adware on this device that can steal your passwords, online identity, financial information, personal files, pictures or documents.
You must contact us immediately so that our engineers can walk you through the removal process over the phone.
Call Microsoft Support immediately to report this threat, prevent identity theft and unlock access to this device.
Closing this window will put your personal information at risk and lead to a suspension of your Windows Registration.
Call Microsoft Support: 1-865-484-6972 (Toll Free)
OK Cancel
Appearance of this pop-up scam (GIF):
Another example of "Windows Defender Security Center" scam:
At the time of research, this "Windows Defender Security Center" variant was used to promote the System Keeper PUP:
Yet another example of "Windows Defender Security Center" scam website:
Access to this PC has been blocked for security reasons. Contact Windows Support: +1(877) 833-7874 (Security Helpline) Microsoft [Deny][Allow]
Instant automatic malware removal:Manual threat removal might be a lengthy and complicated process that requires advanced computer skills. Combo Cleaner is a professional automatic malware removal tool that is recommended to get rid of malware. Download it by clicking the button below: ▼ DOWNLOAD Combo CleanerBy downloading any software listed on this website you agree to our Privacy Policy and Terms of Use. To use full-featured product, you have to purchase a license for Combo Cleaner. 7 days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
Pop-up windows with various fake messages are a common type of lures cybercriminals use. They collect sensitive personal data, trick Internet users into calling fake tech support numbers, subscribe to useless online services, invest in shady cryptocurrency schemes, etc.
While in the majority of cases these pop-ups don't infect users' devices with malware, they can cause direct monetary loss or could result in identity theft.
Cybercriminals strive to create their rogue pop-up windows to look trustworthy, however, scams typically have the following characteristics:
Spelling mistakes and non-professional images - Closely inspect the information displayed in a pop-up. Spelling mistakes and unprofessional images could be a sign of a scam.
Sense of urgency - Countdown timer with a couple of minutes on it, asking you to enter your personal information or subscribe to some online service.
Statements that you won something - If you haven't participated in a lottery, online competition, etc., and you see a pop-up window stating that you won.
Computer or mobile device scan - A pop-up window that scans your device and informs of detected issues - is undoubtedly a scam; webpages cannot perform such actions.
Exclusivity - Pop-up windows stating that only you are given secret access to a financial scheme that can quickly make you rich.
Example of a pop-up scam:
How do pop-up scams work?
Cybercriminals and deceptive marketers usually use various advertising networks, search engine poisoning techniques, and shady websites to generate traffic to their pop-ups. Users land on their online lures after clicking on fake download buttons, using a torrent website, or simply clicking on an Internet search engine result.
Based on users' location and device information, they are presented with a scam pop-up. Lures presented in such pop-ups range from get-rich-quick schemes to fake virus scans.
How to remove fake pop-ups?
In most cases, pop-up scams do not infect users' devices with malware. If you encountered a scam pop-up, simply closing it should be enough. In some cases scam, pop-ups may be hard to close; in such cases - close your Internet browser and restart it.
In extremely rare cases, you might need to reset your Internet browser. For this, use our instructions explaining how to reset Internet browser settings.
How to prevent fake pop-ups?
To prevent seeing pop-up scams, you should visit only reputable websites. Torrent, Crack, free online movie streaming, YouTube video download, and other websites of similar reputation commonly redirect Internet users to pop-up scams.
To minimize the risk of encountering pop-up scams, you should keep your Internet browsers up-to-date and use reputable anti-malware application. For this purpose, we recommend Combo Cleaner Antivirus for Windows.
What to do if you fell for a pop-up scam?
This depends on the type of scam that you fell for. Most commonly, pop-up scams try to trick users into sending money, giving away personal information, or giving access to one's device.
If you sent money to scammers: You should contact your financial institution and explain that you were scammed. If informed promptly, there's a chance to get your money back.
If you gave away your personal information: You should change your passwords and enable two-factor authentication in all online services that you use. Visit Federal Trade Commission to report identity theft and get personalized recovery steps.
If you let scammers connect to your device: You should scan your computer with reputable anti-malware (we recommend Combo Cleaner Antivirus for Windows) - cyber criminals could have planted trojans, keyloggers, and other malware, don't use your computer until removing possible threats.
Pop-up scams are deceptive message designed to make users perform certain actions (e.g., call fake helplines, disclose personal information, download files, etc.).
What is the purpose of a pop-up scam?
The purpose of pop-up scams is to generate revenue for their designers. This can be achieved by selling disclosed data, promoting untrustworthy or malicious content (e.g., websites, apps, products, etc.), proliferating malware, and so on.
Why do I encounter fake pop-ups?
Pop-up scams are displayed on rogue sites, which are seldom accessed intentionally, most enter them via mistyped URLs or redirects caused by dubious webpages, browser notifications/ intrusive ads, or untrustworthy/harmful software into onto their devices.
I have allowed cyber criminals to remotely access my computer, what should I do?
If you have allowed cyber criminals to remotely access your devices, you should first disconnect it from the Internet. Afterwards, remove the remote access software you've been asked to install (e.g., TeamViewer, AnyDesk, etc.). And lastly, perform a full system scan and if any threats are detected - eliminate them.
I have provided my personal information when tricked by a pop-up scam, what should I do?
If you have provided account credentials - immediately change the passwords of all potentially exposed accounts and contact their official support. And if you've disclosed other personal information (e.g., ID card details, credit card numbers, etc.) - contact the corresponding authorities without delay.
Will Combo Cleaner protect me from pop-up scams and the malware they proliferate?
Combo Cleaner is capable of scanning visited websites and detecting deceptive/malicious ones. Furthermore, it can block all access to such sites. Combo Cleaner can also scan devices and eliminate practically all known malware infections. However, performing a full system scan is crucial since high-end malicious programs usually hide deep within systems.
PCrisk is a cyber security portal, informing Internet users about the latest digital threats. Our content is provided by security experts and professional malware researchers. Read more about us.
To use full-featured product, you have to purchase a license for Combo Cleaner. 7 days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
Amazon Error Page
We're sorry!
An error occurred when we tried to process your request. Rest assured, we're already working on the problem and expect to resolve it shortly.
If you're having trouble accessing a Google product, there's a chance we're currently experiencing a temporary problem. You can check for outages and downtime on the G Suite Status Dashboard.
All advertising is strictly family-safe with no popups. Anti-virus and malware servers are scanning the adverts 24/7.
Advertisers
Pay for real visitors on your website, our comprehensive fraud filters ensures high quality traffic. Campaigns start at only $5.
Low Minimum Payout
You are required to earn only $5 before you will be paid. We can pay all users via their PayPal or Payoneer.
Statistics
Detailed statistics are provided per link. Allowing you at a glance see the amount you've earned, referring URLs and countries.
API
Easy-to-use API that allows your website, widget or app to create an AdF.ly link instantly and securely.
Website Scripts
We offer a selection of simple to install scripts, now you can easily get paid for every visitor who comes to your website.
Marco Antonio from Spain says...
I like AdF.ly because it's very easy to use
Your visitors have to wait only 5 seconds to click the skip icon, which is excellent. AdFly always pays what you earned on time. If you want make easy money, AdF.ly is the best website.
Links clicked today:
2
,
0
4
3
,
9
6
1
Users registered:
5
,
3
7
3
,
9
0
7
AdChoices
This site uses cookies. By continuing to browse the site, you are agreeing to our use of cookies. Find out more.
Microsoft Learn Cloud Skills Challenge:
Earn a free Microsoft Certification exam by completing the Microsoft Learn Cloud Skills Challenge. The challenge ends November 9th.Sign up now
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
This information is intended for developers debugging system errors. For other errors, such as issues with Windows Update, there is a list of resources on the Error codes page.
The following list describes system error codes (errors 0 to 499). They are returned by the GetLastError function when many functions fail. To retrieve the description text for the error in your application, use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag.
ERROR_SUCCESS
0 (0x0)
The operation completed successfully.
ERROR_INVALID_FUNCTION
1 (0x1)
Incorrect function.
ERROR_FILE_NOT_FOUND
2 (0x2)
The system cannot find the file specified.
ERROR_PATH_NOT_FOUND
3 (0x3)
The system cannot find the path specified.
ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
The system cannot open the file.
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
ERROR_INVALID_HANDLE
6 (0x6)
The handle is invalid.
ERROR_ARENA_TRASHED
7 (0x7)
The storage control blocks were destroyed.
ERROR_NOT_ENOUGH_MEMORY
8 (0x8)
Not enough memory resources are available to process this command.
ERROR_INVALID_BLOCK
9 (0x9)
The storage control block address is invalid.
ERROR_BAD_ENVIRONMENT
10 (0xA)
The environment is incorrect.
ERROR_BAD_FORMAT
11 (0xB)
An attempt was made to load a program with an incorrect format.
ERROR_INVALID_ACCESS
12 (0xC)
The access code is invalid.
ERROR_INVALID_DATA
13 (0xD)
The data is invalid.
ERROR_OUTOFMEMORY
14 (0xE)
Not enough storage is available to complete this operation.
ERROR_INVALID_DRIVE
15 (0xF)
The system cannot find the drive specified.
ERROR_CURRENT_DIRECTORY
16 (0x10)
The directory cannot be removed.
ERROR_NOT_SAME_DEVICE
17 (0x11)
The system cannot move the file to a different disk drive.
ERROR_NO_MORE_FILES
18 (0x12)
There are no more files.
ERROR_WRITE_PROTECT
19 (0x13)
The media is write protected.
ERROR_BAD_UNIT
20 (0x14)
The system cannot find the device specified.
ERROR_NOT_READY
21 (0x15)
The device is not ready.
ERROR_BAD_COMMAND
22 (0x16)
The device does not recognize the command.
ERROR_CRC
23 (0x17)
Data error (cyclic redundancy check).
ERROR_BAD_LENGTH
24 (0x18)
The program issued a command but the command length is incorrect.
ERROR_SEEK
25 (0x19)
The drive cannot locate a specific area or track on the disk.
ERROR_NOT_DOS_DISK
26 (0x1A)
The specified disk or diskette cannot be accessed.
ERROR_SECTOR_NOT_FOUND
27 (0x1B)
The drive cannot find the sector requested.
ERROR_OUT_OF_PAPER
28 (0x1C)
The printer is out of paper.
ERROR_WRITE_FAULT
29 (0x1D)
The system cannot write to the specified device.
ERROR_READ_FAULT
30 (0x1E)
The system cannot read from the specified device.
ERROR_GEN_FAILURE
31 (0x1F)
A device attached to the system is not functioning.
ERROR_SHARING_VIOLATION
32 (0x20)
The process cannot access the file because it is being used by another process.
ERROR_LOCK_VIOLATION
33 (0x21)
The process cannot access the file because another process has locked a portion of the file.
ERROR_WRONG_DISK
34 (0x22)
The wrong diskette is in the drive. Insert %2 (Volume Serial Number: %3) into drive %1.
ERROR_SHARING_BUFFER_EXCEEDED
36 (0x24)
Too many files opened for sharing.
ERROR_HANDLE_EOF
38 (0x26)
Reached the end of the file.
ERROR_HANDLE_DISK_FULL
39 (0x27)
The disk is full.
ERROR_NOT_SUPPORTED
50 (0x32)
The request is not supported.
ERROR_REM_NOT_LIST
51 (0x33)
Windows cannot find the network path. Verify that the network path is correct and the destination computer is not busy or turned off. If Windows still cannot find the network path, contact your network administrator.
ERROR_DUP_NAME
52 (0x34)
You were not connected because a duplicate name exists on the network. If joining a domain, go to System in Control Panel to change the computer name and try again. If joining a workgroup, choose another workgroup name.
ERROR_BAD_NETPATH
53 (0x35)
The network path was not found.
ERROR_NETWORK_BUSY
54 (0x36)
The network is busy.
ERROR_DEV_NOT_EXIST
55 (0x37)
The specified network resource or device is no longer available.
ERROR_TOO_MANY_CMDS
56 (0x38)
The network BIOS command limit has been reached.
ERROR_ADAP_HDW_ERR
57 (0x39)
A network adapter hardware error occurred.
ERROR_BAD_NET_RESP
58 (0x3A)
The specified server cannot perform the requested operation.
ERROR_UNEXP_NET_ERR
59 (0x3B)
An unexpected network error occurred.
ERROR_BAD_REM_ADAP
60 (0x3C)
The remote adapter is not compatible.
ERROR_PRINTQ_FULL
61 (0x3D)
The printer queue is full.
ERROR_NO_SPOOL_SPACE
62 (0x3E)
Space to store the file waiting to be printed is not available on the server.
ERROR_PRINT_CANCELLED
63 (0x3F)
Your file waiting to be printed was deleted.
ERROR_NETNAME_DELETED
64 (0x40)
The specified network name is no longer available.
ERROR_NETWORK_ACCESS_DENIED
65 (0x41)
Network access is denied.
ERROR_BAD_DEV_TYPE
66 (0x42)
The network resource type is not correct.
ERROR_BAD_NET_NAME
67 (0x43)
The network name cannot be found.
ERROR_TOO_MANY_NAMES
68 (0x44)
The name limit for the local computer network adapter card was exceeded.
ERROR_TOO_MANY_SESS
69 (0x45)
The network BIOS session limit was exceeded.
ERROR_SHARING_PAUSED
70 (0x46)
The remote server has been paused or is in the process of being started.
ERROR_REQ_NOT_ACCEP
71 (0x47)
No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept.
ERROR_REDIR_PAUSED
72 (0x48)
The specified printer or disk device has been paused.
ERROR_FILE_EXISTS
80 (0x50)
The file exists.
ERROR_CANNOT_MAKE
82 (0x52)
The directory or file cannot be created.
ERROR_FAIL_I24
83 (0x53)
Fail on INT 24.
ERROR_OUT_OF_STRUCTURES
84 (0x54)
Storage to process this request is not available.
ERROR_ALREADY_ASSIGNED
85 (0x55)
The local device name is already in use.
ERROR_INVALID_PASSWORD
86 (0x56)
The specified network password is not correct.
ERROR_INVALID_PARAMETER
87 (0x57)
The parameter is incorrect.
ERROR_NET_WRITE_FAULT
88 (0x58)
A write fault occurred on the network.
ERROR_NO_PROC_SLOTS
89 (0x59)
The system cannot start another process at this time.
ERROR_TOO_MANY_SEMAPHORES
100 (0x64)
Cannot create another system semaphore.
ERROR_EXCL_SEM_ALREADY_OWNED
101 (0x65)
The exclusive semaphore is owned by another process.
ERROR_SEM_IS_SET
102 (0x66)
The semaphore is set and cannot be closed.
ERROR_TOO_MANY_SEM_REQUESTS
103 (0x67)
The semaphore cannot be set again.
ERROR_INVALID_AT_INTERRUPT_TIME
104 (0x68)
Cannot request exclusive semaphores at interrupt time.
ERROR_SEM_OWNER_DIED
105 (0x69)
The previous ownership of this semaphore has ended.
ERROR_SEM_USER_LIMIT
106 (0x6A)
Insert the diskette for drive %1.
ERROR_DISK_CHANGE
107 (0x6B)
The program stopped because an alternate diskette was not inserted.
ERROR_DRIVE_LOCKED
108 (0x6C)
The disk is in use or locked by another process.
ERROR_BROKEN_PIPE
109 (0x6D)
The pipe has been ended.
ERROR_OPEN_FAILED
110 (0x6E)
The system cannot open the device or file specified.
ERROR_BUFFER_OVERFLOW
111 (0x6F)
The file name is too long.
ERROR_DISK_FULL
112 (0x70)
There is not enough space on the disk.
ERROR_NO_MORE_SEARCH_HANDLES
113 (0x71)
No more internal file identifiers available.
ERROR_INVALID_TARGET_HANDLE
114 (0x72)
The target internal file identifier is incorrect.
ERROR_INVALID_CATEGORY
117 (0x75)
The IOCTL call made by the application program is not correct.
ERROR_INVALID_VERIFY_SWITCH
118 (0x76)
The verify-on-write switch parameter value is not correct.
ERROR_BAD_DRIVER_LEVEL
119 (0x77)
The system does not support the command requested.
ERROR_CALL_NOT_IMPLEMENTED
120 (0x78)
This function is not supported on this system.
ERROR_SEM_TIMEOUT
121 (0x79)
The semaphore timeout period has expired.
ERROR_INSUFFICIENT_BUFFER
122 (0x7A)
The data area passed to a system call is too small.
ERROR_INVALID_NAME
123 (0x7B)
The filename, directory name, or volume label syntax is incorrect.
ERROR_INVALID_LEVEL
124 (0x7C)
The system call level is not correct.
ERROR_NO_VOLUME_LABEL
125 (0x7D)
The disk has no volume label.
ERROR_MOD_NOT_FOUND
126 (0x7E)
The specified module could not be found.
ERROR_PROC_NOT_FOUND
127 (0x7F)
The specified procedure could not be found.
ERROR_WAIT_NO_CHILDREN
128 (0x80)
There are no child processes to wait for.
ERROR_CHILD_NOT_COMPLETE
129 (0x81)
The %1 application cannot be run in Win32 mode.
ERROR_DIRECT_ACCESS_HANDLE
130 (0x82)
Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O.
ERROR_NEGATIVE_SEEK
131 (0x83)
An attempt was made to move the file pointer before the beginning of the file.
ERROR_SEEK_ON_DEVICE
132 (0x84)
The file pointer cannot be set on the specified device or file.
ERROR_IS_JOIN_TARGET
133 (0x85)
A JOIN or SUBST command cannot be used for a drive that contains previously joined drives.
ERROR_IS_JOINED
134 (0x86)
An attempt was made to use a JOIN or SUBST command on a drive that has already been joined.
ERROR_IS_SUBSTED
135 (0x87)
An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted.
ERROR_NOT_JOINED
136 (0x88)
The system tried to delete the JOIN of a drive that is not joined.
ERROR_NOT_SUBSTED
137 (0x89)
The system tried to delete the substitution of a drive that is not substituted.
ERROR_JOIN_TO_JOIN
138 (0x8A)
The system tried to join a drive to a directory on a joined drive.
ERROR_SUBST_TO_SUBST
139 (0x8B)
The system tried to substitute a drive to a directory on a substituted drive.
ERROR_JOIN_TO_SUBST
140 (0x8C)
The system tried to join a drive to a directory on a substituted drive.
ERROR_SUBST_TO_JOIN
141 (0x8D)
The system tried to SUBST a drive to a directory on a joined drive.
ERROR_BUSY_DRIVE
142 (0x8E)
The system cannot perform a JOIN or SUBST at this time.
ERROR_SAME_DRIVE
143 (0x8F)
The system cannot join or substitute a drive to or for a directory on the same drive.
ERROR_DIR_NOT_ROOT
144 (0x90)
The directory is not a subdirectory of the root directory.
ERROR_DIR_NOT_EMPTY
145 (0x91)
The directory is not empty.
ERROR_IS_SUBST_PATH
146 (0x92)
The path specified is being used in a substitute.
ERROR_IS_JOIN_PATH
147 (0x93)
Not enough resources are available to process this command.
ERROR_PATH_BUSY
148 (0x94)
The path specified cannot be used at this time.
ERROR_IS_SUBST_TARGET
149 (0x95)
An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute.
ERROR_SYSTEM_TRACE
150 (0x96)
System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed.
ERROR_INVALID_EVENT_COUNT
151 (0x97)
The number of specified semaphore events for DosMuxSemWait is not correct.
ERROR_TOO_MANY_MUXWAITERS
152 (0x98)
DosMuxSemWait did not execute; too many semaphores are already set.
ERROR_INVALID_LIST_FORMAT
153 (0x99)
The DosMuxSemWait list is not correct.
ERROR_LABEL_TOO_LONG
154 (0x9A)
The volume label you entered exceeds the label character limit of the target file system.
ERROR_TOO_MANY_TCBS
155 (0x9B)
Cannot create another thread.
ERROR_SIGNAL_REFUSED
156 (0x9C)
The recipient process has refused the signal.
ERROR_DISCARDED
157 (0x9D)
The segment is already discarded and cannot be locked.
ERROR_NOT_LOCKED
158 (0x9E)
The segment is already unlocked.
ERROR_BAD_THREADID_ADDR
159 (0x9F)
The address for the thread ID is not correct.
ERROR_BAD_ARGUMENTS
160 (0xA0)
One or more arguments are not correct.
ERROR_BAD_PATHNAME
161 (0xA1)
The specified path is invalid.
ERROR_SIGNAL_PENDING
162 (0xA2)
A signal is already pending.
ERROR_MAX_THRDS_REACHED
164 (0xA4)
No more threads can be created in the system.
ERROR_LOCK_FAILED
167 (0xA7)
Unable to lock a region of a file.
ERROR_BUSY
170 (0xAA)
The requested resource is in use.
ERROR_DEVICE_SUPPORT_IN_PROGRESS
171 (0xAB)
Device's command support detection is in progress.
ERROR_CANCEL_VIOLATION
173 (0xAD)
A lock request was not outstanding for the supplied cancel region.
ERROR_ATOMIC_LOCKS_NOT_SUPPORTED
174 (0xAE)
The file system does not support atomic changes to the lock type.
ERROR_INVALID_SEGMENT_NUMBER
180 (0xB4)
The system detected a segment number that was not correct.
ERROR_INVALID_ORDINAL
182 (0xB6)
The operating system cannot run %1.
ERROR_ALREADY_EXISTS
183 (0xB7)
Cannot create a file when that file already exists.
ERROR_INVALID_FLAG_NUMBER
186 (0xBA)
The flag passed is not correct.
ERROR_SEM_NOT_FOUND
187 (0xBB)
The specified system semaphore name was not found.
ERROR_INVALID_STARTING_CODESEG
188 (0xBC)
The operating system cannot run %1.
ERROR_INVALID_STACKSEG
189 (0xBD)
The operating system cannot run %1.
ERROR_INVALID_MODULETYPE
190 (0xBE)
The operating system cannot run %1.
ERROR_INVALID_EXE_SIGNATURE
191 (0xBF)
Cannot run %1 in Win32 mode.
ERROR_EXE_MARKED_INVALID
192 (0xC0)
The operating system cannot run %1.
ERROR_BAD_EXE_FORMAT
193 (0xC1)
%1 is not a valid Win32 application.
ERROR_ITERATED_DATA_EXCEEDS_64k
194 (0xC2)
The operating system cannot run %1.
ERROR_INVALID_MINALLOCSIZE
195 (0xC3)
The operating system cannot run %1.
ERROR_DYNLINK_FROM_INVALID_RING
196 (0xC4)
The operating system cannot run this application program.
ERROR_IOPL_NOT_ENABLED
197 (0xC5)
The operating system is not presently configured to run this application.
ERROR_INVALID_SEGDPL
198 (0xC6)
The operating system cannot run %1.
ERROR_AUTODATASEG_EXCEEDS_64k
199 (0xC7)
The operating system cannot run this application program.
ERROR_RING2SEG_MUST_BE_MOVABLE
200 (0xC8)
The code segment cannot be greater than or equal to 64K.
ERROR_RELOC_CHAIN_XEEDS_SEGLIM
201 (0xC9)
The operating system cannot run %1.
ERROR_INFLOOP_IN_RELOC_CHAIN
202 (0xCA)
The operating system cannot run %1.
ERROR_ENVVAR_NOT_FOUND
203 (0xCB)
The system could not find the environment option that was entered.
ERROR_NO_SIGNAL_SENT
205 (0xCD)
No process in the command subtree has a signal handler.
ERROR_FILENAME_EXCED_RANGE
206 (0xCE)
The filename or extension is too long.
ERROR_RING2_STACK_IN_USE
207 (0xCF)
The ring 2 stack is in use.
ERROR_META_EXPANSION_TOO_LONG
208 (0xD0)
The global filename characters, * or ?, are entered incorrectly or too many global filename characters are specified.
ERROR_INVALID_SIGNAL_NUMBER
209 (0xD1)
The signal being posted is not correct.
ERROR_THREAD_1_INACTIVE
210 (0xD2)
The signal handler cannot be set.
ERROR_LOCKED
212 (0xD4)
The segment is locked and cannot be reallocated.
ERROR_TOO_MANY_MODULES
214 (0xD6)
Too many dynamic-link modules are attached to this program or dynamic-link module.
ERROR_NESTING_NOT_ALLOWED
215 (0xD7)
Cannot nest calls to LoadModule.
ERROR_EXE_MACHINE_TYPE_MISMATCH
216 (0xD8)
This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher.
ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY
217 (0xD9)
The image file %1 is signed, unable to modify.
ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY
218 (0xDA)
The image file %1 is strong signed, unable to modify.
ERROR_FILE_CHECKED_OUT
220 (0xDC)
This file is checked out or locked for editing by another user.
ERROR_CHECKOUT_REQUIRED
221 (0xDD)
The file must be checked out before saving changes.
ERROR_BAD_FILE_TYPE
222 (0xDE)
The file type being saved or retrieved has been blocked.
ERROR_FILE_TOO_LARGE
223 (0xDF)
The file size exceeds the limit allowed and cannot be saved.
ERROR_FORMS_AUTH_REQUIRED
224 (0xE0)
Access Denied. Before opening files in this location, you must first add the web site to your trusted sites list, browse to the web site, and select the option to login automatically.
ERROR_VIRUS_INFECTED
225 (0xE1)
Operation did not complete successfully because the file contains a virus or potentially unwanted software.
ERROR_VIRUS_DELETED
226 (0xE2)
This file contains a virus or potentially unwanted software and cannot be opened. Due to the nature of this virus or potentially unwanted software, the file has been removed from this location.
ERROR_PIPE_LOCAL
229 (0xE5)
The pipe is local.
ERROR_BAD_PIPE
230 (0xE6)
The pipe state is invalid.
ERROR_PIPE_BUSY
231 (0xE7)
All pipe instances are busy.
ERROR_NO_DATA
232 (0xE8)
The pipe is being closed.
ERROR_PIPE_NOT_CONNECTED
233 (0xE9)
No process is on the other end of the pipe.
ERROR_MORE_DATA
234 (0xEA)
More data is available.
ERROR_VC_DISCONNECTED
240 (0xF0)
The session was canceled.
ERROR_INVALID_EA_NAME
254 (0xFE)
The specified extended attribute name was invalid.
ERROR_EA_LIST_INCONSISTENT
255 (0xFF)
The extended attributes are inconsistent.
WAIT_TIMEOUT
258 (0x102)
The wait operation timed out.
ERROR_NO_MORE_ITEMS
259 (0x103)
No more data is available.
ERROR_CANNOT_COPY
266 (0x10A)
The copy functions cannot be used.
ERROR_DIRECTORY
267 (0x10B)
The directory name is invalid.
ERROR_EAS_DIDNT_FIT
275 (0x113)
The extended attributes did not fit in the buffer.
ERROR_EA_FILE_CORRUPT
276 (0x114)
The extended attribute file on the mounted file system is corrupt.
ERROR_EA_TABLE_FULL
277 (0x115)
The extended attribute table file is full.
ERROR_INVALID_EA_HANDLE
278 (0x116)
The specified extended attribute handle is invalid.
ERROR_EAS_NOT_SUPPORTED
282 (0x11A)
The mounted file system does not support extended attributes.
ERROR_NOT_OWNER
288 (0x120)
Attempt to release mutex not owned by caller.
ERROR_TOO_MANY_POSTS
298 (0x12A)
Too many posts were made to a semaphore.
ERROR_PARTIAL_COPY
299 (0x12B)
Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
ERROR_OPLOCK_NOT_GRANTED
300 (0x12C)
The oplock request is denied.
ERROR_INVALID_OPLOCK_PROTOCOL
301 (0x12D)
An invalid oplock acknowledgment was received by the system.
ERROR_DISK_TOO_FRAGMENTED
302 (0x12E)
The volume is too fragmented to complete this operation.
ERROR_DELETE_PENDING
303 (0x12F)
The file cannot be opened because it is in the process of being deleted.
With the release of Windows 8.1, the behavior of the GetVersionEx API has changed in the value it will return for the operating system version. The value returned by the GetVersionEx function now depends on how the application is manifested. (Unicode)
Locks the specified file for exclusive access by the calling process. This function can operate either synchronously or asynchronously and can request either an exclusive or a shared lock.
Las aplicaciones de Google Drive facilitan la creación, el almacenamiento y el uso compartido de documentos, hojas de cálculo, presentaciones y mucho más en línea.
Avast | Baixe antivírus e VPN | 100% grátis e fácil
Central de preferência de privacidade
Ao clicar em “ACEITAR TODOS”, você autoriza o uso de cookies que melhoram a sua experiência em nosso site, ajudam a analisar o desempenho e uso de nossas páginas e permitem a exibição de conteúdo de marketing relevante. Você pode gerenciar os cookies nas configurações abaixo. Ao clicar em “CONFIMAR SELEÇÃO”, você concorda com as configurações atuais. Ver
Política de cookies
Gerenciar configurações de consentimento
Cookies necessários
Sempre ativos
Cookies necessários ajudam na usabilidade de um site com a ativação de funções básicas, como a navegação da página para proteger as áreas do site. O site não funciona corretamente sem esses cookies.
Cookies de preferência
Cookies de preferência permitem que um site guarde informações que alteram a aparência e a forma como ele se comporta, como idioma preferido ou região do usuário.
Cookies de desempenho
Cookies de desempenho ajudam a melhorar o site com a análise de como os usuários o utilizam e interagem com suas páginas.
Cookies de marketing
Cookies de marketing são usados para rastrear os visitantes em todo o site. O objetivo é exibir anúncios relevantes e atraentes a cada usuário, entregando mais valor a publishers e anunciantes de outras empresas.
Cookies de publicidade
label
Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.
Cookies das redes sociais
label
Estes cookies são estabelecidos por uma série de serviços das redes sociais que adicionamos ao website para permitir que possa partilhar o nosso conteúdo com os seus amigos e conhecidos. Eles são capazes de rastrear a sua navegação por outros websites e criar um perfil sobre os seus interesses. Isso pode afetar o conteúdo e as mensagens que vê noutros websites que visita. Se não permitir estes cookies, talvez não consiga usar ou ver essas ferramentas de partilha.
Performance Cookies
label
ConsentLeg.Interest
label
label
label
Somos compatíveis com navegadores, não com dinossauros. Atualize o navegador se quiser ver o conteúdo desta página web corretamente.
Um antivírus grátis é o seu primeiro passo rumo à liberdade online
Acreditamos que todos têm o direito a segurança online. É por isso que oferecemos nosso premiado antivírus gratuito para milhões de pessoas ao redor do mundo.
Tenha um antivírus gratuito que oferece ferramentas avançadas de privacidade e segurança
O Avast Free Antivirus é mais do que um antivírus - ele também traz as seguintes ferramentas especializadas:
6 camadas de segurança
Faça escaneamentos inteligentes sem complicações nos seus softwares, arquivos e aplicativos para encontrar vulnerabilidades; analise arquivos suspeitos na nuvem, receba alertas de ameaças e muito mais.
Fácil de instalar e usar
A instalação do Avast Free Antivirus é rápida e, depois de feita, o aplicativo funciona imperceptivelmente em segundo plano, protegendo você contra vírus e outras ameaças em tempo real, 24 horas por dia.
Segurança de rede Wi-Fi
Conecte-se com segurança em qualquer Wi-Fi, até mesmo redes públicas desprotegidas, e veja quem está utilizando a internet da sua casa para bloquear o invasor com um clique.
Proteja-se contra ataques de ransomware
Proteja suas informações. Não deixe que suas fotos, arquivos e documentos pessoais sejam sequestrados por ransomwares.
Nosso antivírus mais avançado é a sua defesa mais potente contra vírus, ransomwares, ameaças de dia zero, vulnerabilidades na rede Wi-Fi doméstica e muito mais.
Não deixe que seu provedor de internet rastreie suas atividades, acabe com restrições geográficas de provedores de conteúdo e transforme qualquer Wi-Fi pública em uma rede segura com a rede privada virtual (VPN) da Avast.
Desfrute de um dispositivo mais veloz e com mais espaço de armazenamento
Reconquiste muitos gigabytes de espaço de armazenamento e deixe o seu dispositivo funcionando como se fosse novo com a remoção de arquivos inúteis, como dados residuais, bloatwares e programas indesejados. O Avast Cleanup também atualiza os seus softwares automaticamente, suspende a operação de aplicativos gastões, etc.
É muito fácil de instalar - a troca para o Avast leva poucos segundos
Você pode começar a usar o antivírus premiado da Avast agora mesmo. Sua instalação é fácil e rápida, dando a você toda a proteção necessária para viver a sua vida online com segurança. E ele é totalmente grátis - então faça um teste agora mesmo.
A Avast tem mais de 435 milhões de usuários ao redor do mundo
A interface de usuário do software é incrível! Trabalho bem feito e em constante evolução. Só tenho elogios.
Ryan R.
Avast, obrigado pelo excelente trabalho de vocês. Sou usuários do seu antivírus tanto no Windows quanto no Mac OS X. Vocês têm os melhores produtos do mercado, e ponto final.
Eric S.
Faz mais de um ano que uso o Avast Antivirus. Acho que ele é um dos melhores antivírus gratuitos do mercado.
Daryl C.
“...recebe notas excelentes em nossos testes práticos e em avaliações de laboratórios independentes... oferece mais do que muitos produtos pagos da concorrência...”
“Premiado como Produto de Segurança Fora de Série de 2021 pela AV-Comparatives.”
Receba dicas e conselhos sobre VPNs direto dos especialistas
Mais de 66 milhõesde ameaças bloqueadas diariamente
Parece que você está usando o Windows
Parece que você está usando um Mac
Parece que você está usando um Android
Parece que você está usando o iOS
Gostaria de ter este aplicativo para Windows ou Mac?Gostaria de ter este aplicativo para Windows ou Android?Gostaria de ter este aplicativo para Windows ou iOS?Gostaria de ter este aplicativo para Mac ou Windows?Gostaria de ter este aplicativo para Mac ou Android?Gostaria de ter este aplicativo para Mac ou iOS?Gostaria de ter este aplicativo para Android ou Windows?Gostaria de ter este aplicativo para Android ou Mac?Gostaria de ter este aplicativo para Android ou iOS?Gostaria de ter este aplicativo para iOS ou Windows?Gostaria de ter este aplicativo para iOS ou Android?Gostaria de ter este aplicativo para iOS ou Mac?
Gostaria de ter este aplicativo para Windows ou Mac?Gostaria de ter este aplicativo para Windows ou Android?Gostaria de ter este aplicativo para Windows ou iOS?Gostaria de ter este aplicativo para Mac ou Windows?Gostaria de ter este aplicativo para Mac ou Android?Gostaria de ter este aplicativo para Mac ou iOS?Gostaria de ter este aplicativo para Android ou Windows?Gostaria de ter este aplicativo para Android ou Mac?Gostaria de ter este aplicativo para Android ou iOS?Gostaria de ter este aplicativo para iOS ou Windows?Gostaria de ter este aplicativo para iOS ou Android?Gostaria de ter este aplicativo para iOS ou Mac?
Gostaria de ter este aplicativo para Windows ou Mac?Gostaria de ter este aplicativo para Windows ou Android?Gostaria de ter este aplicativo para Windows ou iOS?Gostaria de ter este aplicativo para Mac ou Windows?Gostaria de ter este aplicativo para Mac ou Android?Gostaria de ter este aplicativo para Mac ou iOS?Gostaria de ter este aplicativo para Android ou Windows?Gostaria de ter este aplicativo para Android ou Mac?Gostaria de ter este aplicativo para Android ou iOS?Gostaria de ter este aplicativo para iOS ou Windows?Gostaria de ter este aplicativo para iOS ou Android?Gostaria de ter este aplicativo para iOS ou Mac?
Conclua a instalação clicando no arquivo baixado. Em seguida, siga as instruções na tela.
Inicializando download...
Atenção: se o download não se iniciar automaticamente, clique aqui.
Clique neste arquivo para começar a instalação do Avast.
Clique neste arquivo para começar a instalação do Avast
Antivírus para Windows XP | Download gratuito do AVG
Central de preferência de privacidade
Ao clicar em “ACEITAR TODOS”, você autoriza o uso de cookies que melhoram a sua experiência em nosso site, ajudam a analisar o desempenho e uso de nossas páginas e permitem a exibição de conteúdo de marketing relevante. Você pode gerenciar os cookies nas configurações abaixo. Ao clicar em “CONFIMAR SELEÇÃO”, você concorda com as configurações atuais. Ver
Política de cookies
Gerenciar configurações de consentimento
Cookies necessários
Sempre ativos
Cookies necessários ajudam na usabilidade de um site com a ativação de funções básicas, como a navegação da página para proteger as áreas do site. O site não funciona corretamente sem esses cookies.
Cookies de preferência
Cookies de preferência permitem que um site guarde informações que alteram a aparência e a forma como ele se comporta, como idioma preferido ou região do usuário.
Cookies de desempenho
Cookies de desempenho ajudam a melhorar o site com a análise de como os usuários o utilizam e interagem com suas páginas.
Cookies de marketing
Cookies de marketing são usados para rastrear os visitantes em todo o site. O objetivo é exibir anúncios relevantes e atraentes a cada usuário, entregando mais valor a publishers e anunciantes de outras empresas.
Cookies de publicidade
label
Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.
Performance Cookies
label
ConsentLeg.Interest
label
label
label
Baixe o Free Antivirus para Windows XP
O AVG ainda protege usuários do XP, mas não recebe mais novos recursos
Importante! Se estiver usando Windows XP, é hora de atualizar
Embora a Microsoft tenha encerrado suas atualizações de segurança para Windows XP em 2014, o AVG AntiVirus FREE continua a proteger proprietários desse sistema com atualizações de definição de vírus. No entanto, não fornecemos mais atualizações de programa, novos recursos, correções de bugs ou suporte para Windows XP. Além disso, recomendamos que todos os usuários do XP atualizem para a versão mais recente do Windows.
Instalação fácil
Instale com rapidez e facilidade, sem nenhuma dor de cabeça.
Proteção em tempo real
Protege instantaneamente contra as ameaças mais recentes
Proteção de internet e e-mail
Verifica seus dispositivos e bloqueia links, downloads e anexos arriscados.
Nosso software gratuito combina dados de milhões de usuários para entregar o melhor sistema de segurança para o seu PC com Windows XP. Enviamos automaticamente atualizações de definição de vírus para o AVG AntiVirus FREE para fornecer a proteção definitiva contra malware ao seu computador com Windows XP e manter você, seu PC e sua família em segurança online.
Por que você precisa de proteção extra para Windows XP?
Acha que já tem segurança com seu software Windows XP? O firewall integrado não é suficiente e o Windows XP não tem nenhum antivírus, nenhum anti-spyware e nenhuma atualização de segurança. De fato, a Microsoft interrompeu o suporte ao Windows XP em 2014, o que significa que não há mais atualizações de segurança para ele.
E o AVG AntiVirus FREE? Bom, temos tudo isso. Pois, quando se trata da segurança do seu PC com Windows XP, não vale a pena correr certos riscos.
O AVG AntiVirus fornece proteção essencial para o seu PC com Windows XP, bloqueando vírus, spywares e outros malwares. Ele também é compatível com as versões mais recentes do Windows, por isso, quando estiver pronto para atualizar do Windows XP para Windows 7, Windows 8 ou Windows 10, o seu AVG AntiVirus continuará funcionando.
Como instalar o AVG AntiVirus no Windows XP
Baixe o arquivo de instalação abaixo.
Execute o arquivo para começar sua instalação.
Siga as etapas descritas na sua tela.
Assim que terminar, reinicie seu computador. Fácil!
Para uma proteção ainda mais abrangente, recomendamos a atualização do Windows XP o mais rápido possível.
Por que dispositivos com Windows XP precisam de um antivírus?
O Windows XP é extremamente vulnerável a todos os tipos de malwares. Como ele é muito antigo, nem a Microsoft ou a maioria das empresas de segurança oferecem soluções abrangentes a esse sistema operacional. O Microsoft Security Essentials entrega uma segurança básica, que não protege o dispositivo contra todos os tipos de vírus e malwares. Então é melhor ter o AVG AntiVirus FREE para Windows XP até que você possa atualizar seu PC para um sistema operacional mais novo.
O AVG AntiVirus ainda funciona em Windows XP?
Como o AVG AntiVirus continua atualizando suas definições de vírus e outras proteções críticas, ele pode proteger computadores com Windows XP (até a versão 18.8) contra malwares e ameaças de dia zero. Mas novas funcionalidades e outras atualizações do AVG AntiVirus estão disponíveis apenas para Windows 7 e versões mais atuais do sistema operacional da Microsoft. Para uma segurança ideal, recomendamos a atualização da sua máquina para uma versão mais recente do Windows o mais rápido possível.
Os aplicativos antivírus da AVG continuam funcionando mesmo depois da atualização do XP?
Sim, mesmo que seja importante a atualização do seu Windows XP, é bom saber que as versões mais recentes do Windows, como o Windows 10, também precisam de uma proteção antivírus poderosa. Assim, depois de atualizar para uma versão mais recente do Windows, você terá que baixar novamente o seu AVG AntiVirus. Oferecemos proteção para as versões mais recentes e seguras do Windows, como o AVG AntiVirus FREE para Windows 10.
A AVG recomenda usar o navegador GRATUITO Chrome™.
Y2Mate is the fastest Youtube Downloader tool that allows you to easily convert and download videos and audios from youtube for free and in the best available quality. Y2Mate is the ultimate tool to download unlimited youtube videos without any need for registration. You can quickly convert and download hundreds of videos and music files directly from youtube and other social media websites. We support all audio and video formats like MP3, MP4, M4V, FLV, WEBM, 3GP, WMV, AVI, etc., and the most amazing thing, it's completely free.
How to Download Youtube videos with Y2Mate?
Open Youtube and copy the video URL you want to download.
Paste the video URL in the Search box, Tool will fetch video info.
Select the Video or Audio quality you need and click the "Convert" button.
After the conversion is successfully completed, hit the "Download" button.
Once the video is downloaded, you can play it whenever and wherever you want.
Why use our Online Video Downloader?
Unlimited Conversions, so you can convert all your videos.
High-Speed encoding to convert your videos faster.
Unlimited Downloads, convert as much as you can.
No Signup required, our service is totally free.
Support Downloading multiple formats, e.g. MP4 and MP3.
Unlimited Conversions
We offers unlimited conversions of youtube videos to mp3 and mp4.
Auto Fetch from Youtube
We automatically fetch data from Youtube, you just have to copy and paste the youtube URL.
No Registration Required
You don't need to register to convert and download youtube videos to mp4 and mp3 format.
Faster Video Conversion
We use the latest technologies for encoding system, so you don't have to wait much for the conversion.
Browser Compatibility
Our web app is fully compatible with the latest browsers like Chrome, Firefox, Safari, Microsoft Edge, etc.
Completely Mobile friendly
Our site can be used on any device to download your favorite youtube videos to mp4 and mp3.
211
100
240
97
23
www.stopbadware.org | 520: Web server is returning an unknown error
Web server is returning an unknown errorError code 520
There is an unknown connection issue between Cloudflare and the origin web server. As a result, the web page can not be displayed.
What can I do?
If you are a visitor of this website:
Please try again in a few minutes.
If you are the owner of this website:
There is an issue between Cloudflare's cache and your origin web server. Cloudflare monitors for these errors and automatically investigates the cause. To help support the investigation, you can pull the corresponding error log from your web server and submit it our support team. Please include the Ray ID (which is at the bottom of this error page).Additional troubleshooting resources.
Firefox travando ou fechando de repente? Veja como resolver | Dicas e Tutoriais | TechTudo
Firefox travando ou fechando de repente? Veja como resolver
Confira dicas incríveis para acabar com os travamentos do navegador Mozilla Firefox de uma vez por todas.
Por Fonte; Para O TechTudo
Muitos usuários do Firefox já passaram por alguns incômodos ao usar o navegador da Mozilla. Entre os problemas estão diferentes travamentos, cliques do mouse e comandos do teclado não têm mais efeito, a mensagem “Não respondendo” na barra de título e o fechamento repentino do browser sem ter motivo.
Confira a lista para solucionar os problemas no navegador e aproveite para usar o browser da Mozilla sem preocupações. As dicas podem ajudar também a deixar o Firefox mais rápido e menos pesado para que ele não fique travando ou fechando de repente.
1 de 6
Confira um apanhado de dicas para acabar com os travamentos do Firefox (Foto: Zíngara Lofrano/TechTudo) — Foto: TechTudo
Confira um apanhado de dicas para acabar com os travamentos do Firefox (Foto: Zíngara Lofrano/TechTudo) — Foto: TechTudo
Travamentos aleatórios
Quando o Firefox começa a travar de maneira aleatória, sem motivo aparente, fica difícil diagnosticar a real origem do problema. Porém, algumas medidas podem ajudar, como criar um novo banco de dados. Esse armazena anotações, favoritos, ícones dos favoritos, históricos, palavras-chave, entre outras informações de navegação. Fique atento ao criar um novo places, pois o histórico de navegação e favoritos adicionados nas últimas 24 horas serão excluídos.
Aceleração de hardware
2 de 6
Desativando aceleração por hardware (Foto: Reprodução/Helito Bijora) — Foto: TechTudo
Desativando aceleração por hardware (Foto: Reprodução/Helito Bijora) — Foto: TechTudo
A aceleração de hardware pode ser a causa dos travamentos quando os drivers da placa de vídeo apresentam algum problema. Nesse caso, desativar a aceleração de hardware é a solução. Ao fazer o procedimento do link e reiniciar o Firefox, a aceleração de hardware estará desativada.
O plugin Adobe Flash Player já teve seus dias de glória. Entretanto, hoje é um complemento pesado e cheio de brechas de segurança. Ele é a causa dos travamentos e lentidões na maioria das vezes quando o assunto é vídeo ou animação.
Se após atualizar para a versão mais recente o problema persistir, é o caso de desativar a aceleração por hardware no Firefox e também no Flash. Para desativar esta função no Flash, acesse a página de suporte da Adobe (helpx.adobe.com/flash-player), clique com o botão direito na logo do Flash e, em seguida, em “Configurações”. Agora, desabilite a opção “Habilitar aceleração de hardware”.
4 de 6
Atualização do Adobe Flash Player concluída (Foto: Felipe Alencar/TechTudo) — Foto: TechTudo
Atualização do Adobe Flash Player concluída (Foto: Felipe Alencar/TechTudo) — Foto: TechTudo
Se após atualizar para a versão mais recente o problema persistir é o caso de desativar a aceleração por hardware no Firefox e também no Flash. Para isso, acesse a página de suporte da Adobe (helpx.adobe.com/flash-player), clique com o botão direito na logo do Flash e, em seguida, em “Configurações”. Depois, desabilite a opção “Habilitar aceleração de hardware”.
Travamentos após longos períodos de uso
Versões mais antigas do Firefox possuem bugs e gerenciamento de memória ineficiente. Sendo assim, ele costuma travar após longos períodos de uso. Se você está passando por esse problema e usa uma versão mais antiga do Firefox, uma simples atualização pode resolver os travamentos.
5 de 6
Acesse o site do Firefox e inicie o download da atualização (Foto: Reprodução/Barbara Mannara) — Foto: TechTudo
Acesse o site do Firefox e inicie o download da atualização (Foto: Reprodução/Barbara Mannara) — Foto: TechTudo
Firefox trava ao carregar a primeira janela
Esse problema acontece quando você encerra a sessão com muitas abas abertas. Ao iniciar o Firefox novamente, ele vai tentar recarregar todas as abas, ocasionando o travamento. Acelerar a recuperação da sessão pode solucionar o problema. Dessa maneira, o Firefox só irá carregar uma aba ao restaurar a sessão, acelerando a recuperação da sessão e evitando os travamentos.
Navegador trava ao baixar arquivos ou imagens
Sempre que você tenta baixar algum arquivo de texto, instalador ou até mesmo imagem, o navegador trava por completo e não responde mais aos comandos. O problema pode estar no histórico de downloads. Quando ele está muito grande, o Firefox trava ao baixar novos arquivos. A solução neste caso é limpar o histórico de downloads do Mozilla Firefox.
6 de 6
Apagando histórico e outros dados pessoais do Firefox (Foto: Reprodução/Helito Bijora) — Foto: TechTudo
Apagando histórico e outros dados pessoais do Firefox (Foto: Reprodução/Helito Bijora) — Foto: TechTudo
O travamento também pode acontecer se a pasta que está configurada para receber os downloads do Firefox não estiver mais disponível. Assim, a única solução é escolher uma pasta diferente.
Firefox trava ao fechar
Em outras situações, pode acontecer do browser parar de responder no momento em que você clica em fechar. Quando isso acontece, mesmo depois que as abas são fechadas o navegador permanece na memória do computador. Pode ocorrer também de abrir o Firefox e ver uma mensagem pedindo para fechar o navegador ou informando que ele já está em execução, mas não está respondendo.
Para resolver o problema, sempre que quiser fechar o Firefox, acesse o menu e clique em “Sair”. Não se esqueça de fechar também todas as janelas de diálogo ou janelas secundárias, como a de Download.
Caso o fechamento completo não funcione, atualizar ou desabilitar o plugin Java pode ajudar. Applets Java podem fazer com que os processos continuem ativos mesmo depois de fechar o Firefox. A solução, neste caso, é atualizar a extensão plugin, conforme já ensinamos acima. Ou, caso você não precise deste plugin, desative-o no painel do Gerenciador de Complementos.
Nós usamos cookies e outras tecnologias semelhantes para melhorar a sua experiência em nossos serviços, personalizar publicidade e recomendar conteúdo de seu interesse. Ao utilizar nossos serviços, você concorda com tal monitoramento. Informamos ainda que atualizamos nossa Política de Privacidade. Conheça nosso Portal da Privacidade e veja a nossa nova Política.
Google Chrome is probably the most used platform to browse the internet. The latest browser statistics show that more than 60% of users use Google Chrome software on their computer to connect to the network.
Sometimes, however, it can happen that we run into the notorious Chrome aw snap page, which prevents us from continuing browsing a website: but what error does it correspond to and how do we solve it?
Let’s see in the next few lines some solutions to this problem.
It may happen that Google Chrome does not open some sites showing this message: Chrome aw snap, page loading error. There are several ways to solve this error in displaying the page.
Let’s take a look at all possible solutions.
Table of Contents
What is aw snap error?
As mentioned here Chrome aw snap is a generic error code.
When you see this error on your screen you will see a similar text:
An error occurred while viewing the page. To continue, click Reload or go to another page.
According to the error codes listed on Google’s support page we can see:
“aw snap!”. Chrome encountered problems while displaying this webpage.
As it always happens with generic errors, it is difficult to define the exact cause of the problem because there could be multiple causes.
Update: Google has added error codes to better describe the problem and make it easier to find the solution. I have included these errors at the bottom of the article.
Thanks to these error codes we can make sense of this page display error and solve the problem of why chrome won’t load pages..
Note that this has nothing to do with another quite common error, which is Chrome not opening. This error can happen in some cases on windows 7 or windows 10. In this case Google Chrome opens correctly but shows a Chrome aw snap error, sometimes indicating it is “unable to open this page”.
In other cases with the same error Google Chrome does not load any pages.
But before we look at the solutions let’s try to understand what can cause the problem.
Chrome aw snap: causes and solutions
As I said the cause of this error can be numerous, so we have to go by trial and error, starting from the simplest solutions to the most complex.
Sometimes simply reloading the page or restarting the computer may solve the problem. In other cases it may be necessary to check all the extensions or run an antivirus scanon the computer.
The simplest solution
In some cases this error happens because Google Chrome encounters a problem and the page does not load. we cannot be sure that this is the problem but the first solution to try is very simple.
Don’t hate me for giving you such a simple solution.
It’s possible that you have tried it and it didn’t solve anything, but if you haven’t tried it yet then the advice is this: reload the page.
If it still doesn’t work close Chrome and restart your computer.
I know. It’s the kind of solution my grandmother uses, but sometimes it works and I couldn’t leave it out.
If you still haven’t solved the Chrome aw snap problem, let’s have a look at some other solutions now.
Check browser extensions
The Chrome aw snap page might appear if some extensions have recently been installed which might not be compatible with the browser.
To check if it is due to that, just disable them and reload the page. This procedure can also be useful if you encounter other errors such as DNS_PROBE_FINISHED_NXDOMAIN or the error code 502 bad gateway.
In this case, the first thing you should do is to create a new user profile in Chrome. Click on your name in the top right corner and then click on add at the bottom.
If the same page works then an extension is to blame. In this case, we are going to disable the extensions one by one, going by trial and error until we find the offending one.
This procedure can also help you to solve another error that you might encounter using Google Chrome, that is err_connection_refused.
You can get the same result by browsing the same page in incognito mode, unless you have set your extensions to be used in incognito mode as well.
To do this, click on Google chrome settings and then extensions, it will open a list with all the installed extensions. Alternatively you can type chrome://extensions/ in the browser bar to go directly to the settings page to manage Chrome extensions.
Clear the cache
It is possible that it is a cache problem. If you still haven’t solved the problem then try clearing Chrome’s cache.
To clear the cache on Google Chrome click on the three dots in the top right corner -> More Tools -> Clear Browser Data. Or simply type chrome://settings/clearBrowserData in the address bar.
Then click to clear your cache and cookies.
Device memory
It’s possible that your device has run out of memory and that’s why it can’t open your web page. By the way, it is known that Google Chrome uses a lot of RAM memory, which is why quite frequently Google Chrome is unresponsive and crashes.
A test you can do is to close all Chrome tabs and other applications on your computer and reload the page.
Update Chrome
It is possible that you are using an old version of Chrome. If this is the case updating Chrome might solve the problem.
Just check the Google Chrome information at the top of the window and if you’re not using the latest version, update the browser.
Keeping the browser up-to-date will also help you in case of other errors, for example when the Windows network diagnostics detect that the DNS server is not responding.
Use compatibility mode
If you use Windows, you can use compatibility mode. From the properties of Google Chrome go to the compatibility section.
Tick the checkmark next to “compatibility mode” then choose the version of the operating system you are using. In the screenshot I show how to do it if you use windows 7.
Restore Google Chrome settings
If with all the previous steps, you were not able to solve the problem you can do a general reset of Chrome.
To restore chrome:
Open Chrome
In the top right corner, click on Settings icon, to reset settings
Click on show advanced settings at the bottom
Windows: in the “Reset and cleanup” section click on Reset settings to Reset settings
Mac:in the”Restore Settings” section, click on Reset Settings and Restore
This will delete all additional plugins. Google Chrome will reset the default search engine as your home page and bring back Google Chrome as it was when you had just installed it.
Disable Antivirus
This operation is the so-called last resort.
If after all these attempts you still see the error Chrome offa it is possible that it is the antivirus that is creating the error due to a misconfiguration.
It is not a good idea to leave your computer without antivirus, so if this works try to find a permanent solution by reconfiguring the antivirus or using another one.
Resolve the error Chrome aw snap on Android
This browser error is not only found on computers, Mac or Windows, but also on mobile devices.
In fact, it is possible that your android tablet or smartphone presents the same error.
Also in this case the first attempt should be to reload the page.
If this doesn’t work make sure you are online, that you haven’t consumed all the data of your plan (not difficult if you use tethering) and that you are actually connected to the network.
If you still can’t see the page try opening an incognito window. If this solves the problem, the cause is probably the cache. Let’s take a quick look at how to clear the cache on Android and iOS.
Clear cache on Android
To clear cache and cookies on Android go to settings -> privacy -> Clear browsing data.
Select Cookies and site data and Images and cached files, uncheck everything else then click Clear Data.
If the problem persists close all other tabs, all other open apps on the device and try again. It
might be a device memory issue.
If the problem persists restart your phone or tablet. And if you still don’t solve try updating Google Chrome and then restore chrome android if the update wasn’t enough.
The solution to aw snap on IOS
iPhone and iPad are not immune to this problem. Let’s see how to fix it when it happens.
In this case, solutions are similar to the ones used with Android.
The first test is to reload the page.
If you still have the error chrome aw snap using incognito mode or clear the browser cache.
Finally if the problem persists try closing all tabs and all apps on the phone.
Clear cache on Chrome IOS
To clear Chrome cache on IOS tap on the three dots at the bottom right corner, then open settings. Now tap on privacy -> clear browsing data.
Select Cookies, Site data and Cached images and files and uncheck all other options then tap clear browsing data.
Try to reload the page to see if it works.
If the problem persists, as in the case of Android, try restarting your phone or iPad and try updating Google Chrome.
The new error codes.
Google has added 94 error codes for the Chrome aw snap page to make it easier to fix the error.
I expect Chrome to get even better in the future, in fact the Chromium page showed:
To make it easier to diagnose user reports of the sad tab, perhaps we could consider putting the crash exit code on the sad tab as we do for SSL errors. Then users can google for the error, we can seed help center pages to help users, everyone wins.
Not all these errors are easy to understand without an explanation, in fact many of them need an explanation and a guide for the solution.
The same errors are also valid on microsoft edge since it is now based on Chromium.
The available error codes are:
HUNG
KILLED_BAD_MESSAGE
GPU_DEAD_ON_ARRIVAL
INVALID_CMDLINE_URL
BAD_PROCESS_TYPE
MISSING_DATA
SHELL_INTEGRATION_FAILED
MACHINE_LEVEL_INSTALL_EXISTS
UNINSTALL_CHROME_ALIVE
UNINSTALL_USER_CANCEL
UNINSTALL_DELETE_PROFILE
UNSUPPORTED_PARAM
IMPORTER_HUNG
RESPAWN_FAILED
NORMAL_EXIT_EXP1
NORMAL_EXIT_EXP2
NORMAL_EXIT_EXP3
NORMAL_EXIT_EXP4
NORMAL_EXIT_CANCEL
PROFILE_IN_USE
PACK_EXTENSION_ERROR
UNINSTALL_EXTENSION_ERROR
NORMAL_EXIT_PROCESS_NOTIFIED
INSTALL_FROM_WEBSTORE_ERROR_2
EULA_REFUSED
SXS_MIGRATION_FAILED_NOT_USED
ACTION_DISALLOWED_BY_POLICY
INVALID_SANDBOX_STATE
CLOUD_POLICY_ENROLLMENT_FAILED
DOWNGRADE_AND_RELAUNCH
SIGQUIT
SIGILL
SIGTRAP
SIGABRT
SIGBUS (7)
SIGFPE
SIGKILL
SIGBUS (10)
SIGSEGV
SIGSYS
WAIT_TIMEOUT
SBOX_FATAL_INTEGRITY
SBOX_FATAL_DROPTOKEN
SBOX_FATAL_FLUSHANDLES
SBOX_FATAL_CACHEDISABLE
SBOX_FATAL_CLOSEHANDLES
SBOX_FATAL_MITIGATION
SBOX_FATAL_MEMORY_EXCEEDED
SBOX_FATAL_WARMUP
Crashpad_FailedToCaptureProcess
Crashpad_HandlerDidNotRespond
Crashpad_SimulatedCrash
CPP_EH_EXCEPTION
STATUS_GUARD_PAGE_VIOLATION
Out of Memory
FACILITY_VISUALCPP/ERROR_PROC_NOT_FOUND
FACILITY_VISUALCPP/ERROR_MOD_NOT_FOUND
STATUS_INVALID_IMAGE_HASH
STATUS_STACK_BUFFER_OVERRUN
STATUS_HEAP_CORRUPTION
STATUS_DLL_INIT_FAILED
STATUS_CONTROL_C_EXIT
STATUS_DLL_NOT_FOUND
STATUS_STACK_OVERFLOW
STATUS_BAD_IMPERSONATION_LEVEL
STATUS_PRIVILEGED_INSTRUCTION
STATUS_INTEGER_OVERFLOW
STATUS_INTEGER_DIVIDE_BY_ZERO
STATUS_FLOAT_UNDERFLOW
STATUS_FLOAT_STACK_CHECK
STATUS_FLOAT_OVERFLOW
STATUS_FLOAT_INVALID_OPERATION
STATUS_FLOAT_INEXACT_RESULT
STATUS_FLOAT_DIVIDE_BY_ZERO
STATUS_FLOAT_DENORMAL_OPERAND
STATUS_ARRAY_BOUNDS_EXCEEDED
STATUS_INVALID_UNWIND_TARGET
STATUS_INVALID_DISPOSITION
STATUS_NONCONTINUABLE_EXCEPTION
STATUS_ACCESS_DENIED
STATUS_INVALID_LOCK_SEQUENCE
STATUS_ILLEGAL_INSTRUCTION
STATUS_CONFLICTING_ADDRESSES
STATUS_NO_MEMORY
STATUS_INVALID_PARAMETER
STATUS_INVALID_HANDLE
STATUS_IN_PAGE_ERROR
STATUS_ACCESS_VIOLATION
STATUS_SEGMENT_NOTIFICATION
STATUS_FATAL_APP_EXIT
STATUS_SINGLE_STEP
STATUS_BREAKPOINT
STATUS_DATATYPE_MISALIGNMENT
unknown
Erroresbox_fatal_memory_exceeded
This error code is shown in the Chrome aw snap page when Chrome runs out of available memory. Usually the cause is an application or website using too much memory.
You can check via the task manager which applications use the most memory so you can close them.
Errore status_invalid_image_hash
The problem in this case may be due to your antivirus software. Try updating it or disabling it.
If you use Windows, you can follow these steps:
From the start menu select run
Enter “Regedit” to open the Regedit application.2. Enter “\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome”.
If you only find “\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google”, create a folder called “Chrome”.
Create a new file named “RendererCodeIntegrityEnabled” (DWORD 32).
Set the value of ‘RendererCodeIntegrityEnabled’ to 0.
Restart Chrome.
If you still see the Chrome aw snap error try updating Google Chrome or edge. And if it still doesn’t resolve try renaming chrome.exe or msedge.exe to any other name and restart the browser.
Error status_access_violation
IMG
If Chrome aw snap shows the status_access_violation error code you can try updating and restarting Google Chrome to fix it.
Check the extensions by disabling them one by one to see if one of them is creating the problem.
If this does not solve it try renaming the .exe file to any other name as described above and then restart the browser.
Error status_breakpoint
To fix this Chrome aw snap error code there are not many solutions.
Update the browser and restart it. If it still doesn’t work try renaming chrome.exe to another name and restart the browser.
Conclusion
Were you able to fix Chrome aw snap error on your computer? Let me know in the comments.
If you have found a solution that I didn’t write about here let me know in the comments, so I can add it to the article.
Try our shared hosting for 14 days for free and without obligation. If you're happy with it, you can upgrade to a paid plan without losing the work you've done!
13 comments on “Chrome aw snap, how to solve the error”
I have tried everything possible to get rid of Aw Snap. This just started happening g 3 days ago. I have 3 android tablets , they are old and all 3 are doing the same thing, like I said this just started happening 3 days ago. Any advice will be appreciated
I got an aw snap error on one of my tablets, a Samsung Galaxy, 2017 brand a few months ago and my computer guy had never heard of it! No one I know has heard of it so I was relieved when I was able to later Google it and find other people have had that happen. My computer guy couldn’t resolve it so I needed to install a different browser. It interfered with my google so I ended up disabling it. I have another identical tablet that is okay so far.
Hi. Using iMac Big Sur 11.5.2 but my browser is Chrome.
I get Error Code: 5
It seems to be random which makes trouble shooting difficult.
Usually it effects Google Mail, Contacts and Calendar which are my pinned resources.
Sometimes just reloading the page works – sometimes not.
So annoying to have to spend hours trouble shooting a mainstream product like Google Chrome!
I am also continuing to get this error on multiple pages that I use and keep bookmarked for my daily work. (Gmail, Asana, and Harvest) Error Code 5. Big Sur 11.6. They reload each time without fail and work just fine. I will try to track how often it is, but I would say multiple times per hour at least one of those three pages gives me the Aw Snap Error Code 5.
Nothing worked for me except clicking exit. To do this: Open chrome, you will see your usual error message… Click the three vertical dots in top right corner of the page, click exit (last option), and that is supposed to close any open browsers. Then click back to chrome and it should work. Also, creating a shortcut for chrome can sometimes help with problems. Good luck everyone.
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. However you may visit Cookie Settings to provide a controlled consent.
This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities...
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
_dc_gtm_UA-*
1 minute
Google Tag Manager cookie for controlling the loading of a Google Analytics script tag.
_ga
2 years
The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
_gcl_au
3 months
Provided by Google Tag Manager to experiment advertisement efficiency of websites using their services.
_gid
1 day
Installed by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
_GRECAPTCHA
5 months 27 days
This cookie is set by the Google recaptcha service to identify bots to protect the website against malicious spam attacks.
cookielawinfo-checkbox-advertisement
1 year
Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other".
PHPSESSID
session
This cookie is native to PHP applications. The cookie is used to store and identify a users' unique session ID for the purpose of managing user session on the website. The cookie is a session cookies and is deleted when all the browser windows are closed.
promocode
Until the coupon code expires, maximum 1 year
This cookie is set when you visit a page via a link that includes a discount code. The name of the discount code is remembered to remind the user that they can get a discount on the service.
RefID
90 days
This cookie stores the ID of the referral that sent the friend so that if the customer places an order within the next 90 days following the referral, the referral receives a gift for it.
user_currency_pref
11 months
This cookie is set to remember the user's currency.
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
WHMCSAffiliateID
90 days
This cookie stores the ID of the affiliate that made the referral so that if the customer places an order within the next 90 days following the referral, the affiliate receives a commission for it.
WHMCSInstanceID
session
This cookie stores the unique session ID for each visitor and enables variables to pass between page loads. The cookie only contains a reference to a session on the web server. The user's browser won't store any personal information.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Cookie
Duration
Description
_fbp
3 months
This cookie is set by Facebook to display advertisements when either on Facebook or on a digital platform powered by Facebook advertising, after visiting the website.
fr
3 months
Facebook sets this cookie to show relevant advertisements to users by tracking user behaviour across the web, on sites that have Facebook pixel or Facebook social plugin.
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
Cookie
Duration
Description
cf_chl_*
1 hour
This cookie is used to check whether the Cloudflare Edge server supports cookies.
cf_chl_prog
1 hour
These cookies are used by Cloudflare for the execution of Javascript or Captcha challenges. They are not used for tracking or beyond the scope of the challenge.
cf_chl_rc_ni
1 hour
These cookies are for internal use which allows Cloudflare to identify production issues on clients.
cf_chl_seq_*
session
These cookies are used by Cloudflare for the execution of Javascript or Captcha challenges. They are not used for tracking or beyond the scope of the challenge.
pvc_visits*
1 day
These Cookies are used by Posts View Counter plugin to count visits to specific posts, pages and tutorials.
WHMCSLinkID
364 days
This cookie remembers the link the visitor followed to get to our website, and the system uses it when receiving an order, to be able to associate the conversion with a link to be able to provide stats.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Cookie
Duration
Description
__cf_bm
30 minutes
This cookie, set by Cloudflare, is used to support Cloudflare Bot Management.
__stripe_mid
1 year
This cookie is used to prevent credit card frauds.
__stripe_sid
1 year
This cookie is used to prevent credit card frauds.
WHMCSUser
364 days
This cookie is used for the remember me functionality of the client area. The system only sets it if a client chose to have the system remember their details, ensuring that they don't need to log in multiple times. It is persistent and lasts for 365 days, or until logout.
Large HTML page with images
When to load CSS
Large HTML page
with Images
This page shall test if the recorder generates
scripts with requests in correct order. It includes images in sequential order: stadyn_image1.gif
through stadyn_image10.gif
1. Overview 51.1 Introduction 51.1.1 Design Principles 51.2 Open Financial Exchange at
a Glance 71.2.1 Data Transport 71.2.2 Request and Response Model 81.3 Conventions 92.
Structure 102.1 HTTP Headers 102.2 Open Financial Exchange Headers 112.2.1 The Meaning of
Version Numbers 122.3 SGML Details 122.3.1 Compliance 122.3.2 Special Characters 122.4
Open Financial Exchange SGML Structure 132.4.1 Overview 132.4.2 Top Level 132.4.3 Messages
132.4.4 Message Sets and Version Control 142.4.5 Transactions 152.5 The Signon Message Set
162.5.1 Signon <SONRQ> <SONRS> 162.5.2 PIN Change <PINCHRQ>
<PINCHRS> 192.5.3 Examples 202.6 External Data Support 202.7 Extensions to Open
Financial Exchange 213. Common Aggregates, Elements, and Data Types 223.1 Common
Aggregates 223.1.1 Identifying Financial Institutions and Accounts 223.1.2 Balance Records
<BAL> 223.1.3 Error Reporting <STATUS> 233.2 Common Elements 243.2.1 Financial
Institution Transaction ID <FITID> 243.2.2 Server-Assigned ID <SRVRTID>
243.2.3 Client-Assigned Transaction UID <TRNUID> 253.2.4 Token <TOKEN> 253.2.5
Transaction Amount <TRNAMT> 253.2.6 Memo <MEMO> 253.2.7 Date Start and Date
End <DTSTART> <DTEND> 263.3 Common data types 263.3.1 Dates and Times 263.3.2
Amounts, Prices, and Quantities 283.3.3 Language 283.3.4 Basic data types 284. Security
294.1 Security Solutions 294.1.1 Determining Security Levels <OFXSEC>
<TRANSPSEC> 294.2 Channel-Level Security 304.2.1 Security Requirements 304.2.2 Using
SSL 3.0 in Open Financial Exchange 304.3 Application-Level Security 314.3.1 Requirements
for Application-Layer Security 314.3.2 Using Application-level Encryption in Open
Financial Exchange 325. International Support 335.1 Language and Encoding 335.2 Currency
<CURDEF> <CURRENCY> <ORIGCURRENCY> 335.3 Country-Specific Tag Values
346. Data Synchronization 356.1 Overview 356.2 Background 356.3 Data Synchronization
Approach 366.4 Data Synchronization Specifics 376.5 Conflict Detection and Resolution
396.6 Synchronization vs. Refresh 406.7 Typical Server Architecture for Synchronization
416.8 Typical Client Processing of Synchronization Results 436.9 Simultaneous Connections
446.10 Synchronization Alternatives 446.10.1 Lite Synchronization 446.10.2 Relating
Synchronization and Error Recovery 456.11 Examples 467. FI Profile 487.1 Overview 487.1.1
Message Sets 487.1.2 Version Control 497.1.3 Batching and Routing 497.2 Profile Request
507.3 Profile Response 517.3.1 Message Set 527.3.2 Signon Realms 537.3.3 Status Codes
537.4 Profile Message Set Profile Information 548. Activation & Account Information
558.1 Overview 558.2 Approaches to User Sign-Up with Open Financial Exchange 558.3 Users
and Accounts 568.4 Enrollment and Password Acquisition <ENROLLRQ> <ENROLLRS>
568.4.1 User IDs 578.4.2 Enrollment Request 578.4.3 Enrollment Response 598.4.4 Enrollment
Status Codes 598.4.5 Examples 608.5 Account Information 608.5.1 Request <ACCTINFORQ>
618.5.2 Response <ACCTINFORS> 618.5.3 Account Information Aggregate <ACCTINFO>
628.5.4 Status Codes 628.5.5 Examples 638.6 Service Activation 638.6.1 Activation Request
and Response 648.6.2 Service Activation Synchronization 668.6.3 Examples 668.7 Name and
Address Changes <CHGUSERINFORQ> <CHGUSERINFORS> 678.7.1 <CHGUSERINFORQ>
678.7.2 <CHGUSERINFORS> 688.7.3 Status Codes 688.8 Signup Message Set Profile
Information 699. Customer to FI Communication 709.1 The E-Mail Message Set 709.2 E-Mail
Messages 709.2.1 Regular vs. Specialized E-Mail 719.2.2 Basic <MAIL> Aggregate
719.2.3 E-Mail <MAILRQ> <MAILRS> 719.2.4 E-Mail Synchronization
<MAILSYNCRQ> <MAILSYNCRS> 729.2.5 Example 739.3 Get HTML Page 749.3.1 MIME Get
Request and Response <GETMIMERQ> <GETMIMERS> 749.3.2 Example 759.4 E-Mail
Message Set Profile Information 7610. Recurring Transactions 7710.1 Creating a Recurring
Model 7710.2 Recurring Instructions <RECURRINST> 7710.2.1 Values for <FREQ>
7810.2.2 Examples 7910.3 Retrieving Transactions Generated by a Recurring Model 8010.4
Modifying and Canceling Individual Transactions 8010.5 Modifying and Canceling Recurring
Models 8010.5.1 Examples 81
Open Financial Exchange is a broad-based framework for exchanging
financial data and instructions between customers and their financial institutions. It
allows institutions to connect directly to their customers without requiring an
intermediary.
Open Financial Exchange is an open specification that anyone can
implement: any financial institution, transaction processor, software developer or other
party. It uses widely accepted open standards for data formatting (such as SGML),
connectivity (such as TCP/IP and HTTP), and security (such as SSL).
Open Financial Exchange defines the request and response messages used
by each financial service as well as the common framework and infrastructure to support
the communication of those messages. This specification does not describe any specific
product implementation.
The following principles were used in designing Open Financial Exchange:
l BroadRange of Financial Activities -
Open Financial Exchange provides support for a broad range of financial
activities. Open Financial Exchange 1.0 specifies the following services:
n Bank statement download
n Credit card statement download
n Funds transfers including
recurring transfers
n Consumer payments, including
recurring payments
n Business payments, including
recurring payments
n Brokerage and mutual fund
statement download, including transaction history, current holdings and balances
l BroadRange of Financial Institutions -
Open Financial Exchange supports communication with a broad range of
financial institutions (FIs), including:
n Banks
n Brokerage houses
n Merchants
n Processors
n Financial advisors
n Government agencies
l BroadRange of Front-End applications -
Open Financial Exchange supports a broad range of front-end applications
covering all types of financial activities running on all types of platforms, including
Web-based applications.
l Extensible - Open Financial Exchange has been
designed to allow the easy addition of new services. Future versions will include support
for many new services.
l Open - This specification is publicly available.
You can build client and server applications using the Open Financial Exchange protocols
independent of any specific technology, product, or company.
l Multiple Client Support - Open Financial Exchange
allows a user to use multiple client applications to access the same data at a financial
institution. With the popularity of the World Wide Web, customers are increasingly more
likely to use multiple applications-either desktop-based or Web-based-to perform financial
activities. For example, a customer can track personal finances at home with a desktop
application and occasionally pay bills while at work with a Web-based application. The use
of data synchronization to support multiple clients is a key innovation in Open Financial
Exchange.
l Robust - Open Financial Exchange will be used for
executing important financial transactions and for communicating important financial
information. Assuring users that transactions are executed and information is correct is
crucial. Open Financial Exchange provides robust protocols for error recovery.
l Secure - Open Financial Exchange provides a
framework for building secure online financial services. In Open Financial Exchange,
security encompasses authentication of the parties involved, as well as secrecy and
integrity of the information being exchanged.
l Batch & Interactive - The design of request and
response messages in Open Financial Exchange is for use in either batch or interactive
style of communication. Open Financial Exchange provides for applying a single
authentication context to multiple requests in order to reduce the overhead of user
authentication.
l InternationalSupport - Open Financial Exchange is designed to supply financial services throughout
the world. It supports multiple currencies, country-specific extensions, and different
forms of encoding such as UNICODE.
l Platform Independent -Open Financial Exchange can
be implemented on a wide variety of front-end client devices, including those running
Windows 3.1, Windows 95, Windows NT, Macintosh, or UNIX. It also supports a wide variety
of Web-based environments, including those using HTML, Java, JavaScript, or ActiveX.
Similarly on the back-end, Open Financial Exchange can be implemented on a wide variety of
server systems, including those running UNIX, Windows NT, or OS/2.
l Transport Independent - Open Financial Exchange is
independent of the data communication protocol used to transport the messages between the
client and server computers. Open Financial Exchange 1.0 will use HTTP.
The design of Open Financial Exchange is as a client and server system.
An end-user uses a client application to communicate with a server at a financial
institution. The form of communication is requests from the client to the server and
responses from the server back to the client.
Open Financial Exchange uses the Internet Protocol (IP) suite to provide
the communication channel between a client and a server. IP protocols are the foundation
of the public Internet and a private network can also use them.
Clients use the HyperText Transport Protocol (HTTP) to communicate to an
Open Financial Exchange server. The World Wide Web throughout uses the same HTTP protocol.
In principle, a financial institution can use any off-the-shelf web server to implement
its support for Open Financial Exchange.
To communicate by means of Open Financial Exchange over the Internet,
the client must establish an Internet connection. This connection can be a dial-up
Point-to-Point Protocol (PPP) connection to an Internet Service Provider (ISP) or a
connection over a local area network that has a gateway to the Internet.
Clients use the HTTP POST command to send a request to the previously
acquired Uniform Resource Locator (URL) for the desired financial institution. The URL
presumably identifies a Common Gateway Interface (CGI) or other process on an FI server
that can accept Open Financial Exchange requests and produce a response.
The POST identifies the data as being of type application/x-ofx. Use
application/x-ofx as the return type as well. Fill in other fields per the HTTP 1.0 spec.
Here is a typical request:
A blank line defines the separation between the HTTP headers and the
start of the actual Open Financial Exchange data. A blank line also separates the Open
Financial Exchange headers and the actual response. (See Chapter 2, for more information.)
The structure of a response is similar to the request, with the first
line containing the standard HTTP result, as shown next. The content length is given in
bytes.
The basis for Open Financial Exchange is the request and response model.
One or more requests can be batched in a single file. This file typically includes a
signon request and one or more service-specific requests. An FI server will process all of
the requests and return a single response file. This batch model lends itself to Internet
transport as well as other off-line transports. Both requests and responses are plain text
files, formatted using a grammar based on Standard Generalized Markup Language (SGML).
Open Financial Exchange is syntactically similar to HyperText Markup Language (HTML),
featuring tags to identify and delimit the data. The use of a tagged data format allows
Open Financial Exchange to evolve over time while continuing to support older clients and
servers.
Here is a simplified example of an Open Financial Exchange request file.
(This example does not show the Open Financial Exchange headers and the indentation is
only for readability.) For complete details, see the more complete examples throughout
this specification.
<OFX> <!-- Begin request data --> <SIGNONMSGSRQV1> <SONRQ>
<!-- Begin signon --> <DTCLIENT>19961029101000 <!-- Oct. 29, 1996, 10:10:00
am --> <USERID>123-45-6789 <!-- User ID (that is, SSN) -->
<USERPASS>MyPassword <!-- Password (SSL encrypts whole) -->
<LANGUAGE>ENG <!-- Language used for text --> <FI> <!-- ID of
receiving institution --> <ORG>NCH <!-- Name of ID owner -->
<FID>1001 <!-- Actual ID --> </FI> <APPID>MyApp <APPVER>0500
</SONRQ> <!-- End of signon --> </SIGNONMSGSRQV1> <BANKMSGSRQV1>
<STMTTRNRQ> <!-- First request in file --> <TRNUID>1001 <STMTRQ>
<!-- Begin statement request --> <BANKACCTFROM> <!-- Identify the account
--> <BANKID>121099999 <!-- Routing transit or other FI ID -->
<ACCTID>999988 <!-- Account number --> <ACCTTYPE>CHECKING <!--
Account type --> </BANKACCTFROM> <!-- End of account ID --> <INCTRAN>
<!-- Begin include transaction --> <INCLUDE>Y <!-- Include transactions
--> </INCTRAN> <!-- End of include transaction --> </STMTRQ> <!--
End of statement request --> </STMTTRNRQ> <!-- End of first request -->
</BANKMSGSRQV1></OFX> <!-- End of request data -->The
response format follows a similar structure. Although a response such as a statement
response contains all of the details of each transaction, each element is identified using
tags.
The key rule of Open Financial Exchange syntax is that each tag is
either an element or an aggregate. Data follows its element tag. An aggregate tag begins a
compound tag sequence, which must end with a matching tag; for example, <AGGREGATE>
... </AGGREGATE>.
The actual file Open Financial Exchange sends is without any extra white
space between tags.
The conventions used in the detailed descriptions include:
Required tags are in bold. Regular face indicates tags that are
optional. Required means that a client will always include a tag in a request, and a
server must always include a tag in a response.
Italic shows a required or optional aggregate from a set of
possible aggregates.
Required tags occur once unless noted as one or more in the description,
in which case the specification allows multiple occurrences.
Optional tags occur once if present unless noted as zero or more in the
description, in which case the specification allows multiple occurrences.
Allowable specific values are listed, where applicable.
A-n or N-n, specify those values that take general
alphanumeric or pure numeric type values, where n indicates the maximum size.
References to certain common value types, such as a dollar amount, are by
name. Chapter 3 lists value types that can be referenced by name.
Tag
Description
<REQUIREDTAG>
Required tag (1 or more)
<REQUIREDTAG2>
Required tag that occurs only once
<OPTIONALTAG>
Optional tag; this particular one can occur multiple times
(0 or more)
<SPECIFIC>
Values are A, B, and C
<ALPHAVALUE>
Takes an alphanumeric value up to 32 characters, A-32
This chapter describes the basic structure of an Open Financial Exchange
request and response. Structure includes headers, basic syntax, and the Signon request and
response. This chapter also describes how Open Financial Exchange encodes external data,
such as bit maps.
Open Financial Exchange data consists of some headers plus one or more
Open Financial Exchange data blocks. Each block consists of a signon message and zero or
more additional messages. When sent over the internet using HTTP, standard HTTP and
multi-part MIME headers and formats surround the Open Financial Exchange data. A simple
file that contained only Open Financial Exchange data would have the following form:
HTTP headers
MIME type application/x-ofx
Open Financial Exchange headers
Open Financial Exchange SGML block 1
A more complex file that contained multiple Open Financial Exchange data
blocks and additional Open Financial Exchange data would have this form:
HTTP headers
MIME type multipart/x-mixed-replace; boundary =--boundary-
---boundary---
MIME type application/x-ofx
Open Financial Exchange headers
Open Financial Exchange SGML block 1
Open Financial Exchange SGML block 2
---boundary---
MIME type image/jpeg
FI logo
Data delivered by way of HTTP places the standard HTTP result code on
the first line. HTTP defines a number of status codes. Servers can return any standard
HTTP result. However, FIs should expect clients to collapse these codes into the following
three cases:
Code
Meaning
Action
200
OK
The request was processed and a valid Open Financial
Exchange result is returned.
400s
Bad request
The request was invalid and was not processed. Clients will
report an internal error to the user.
500s
Server error
The server is unavailable. Clients should advise the user
to retry shortly.
NOTE: Open Financial Exchange returns a code 400 only if it cannot parse the
file. Open Financial Exchange handles content errors such as wrong PIN, or invalid
account, by returning a valid Open Financial Exchange response along with code 200.
Open Financial Exchange requires the following HTTP standard headers:
Code
Value
Explanation
Content-type
application/x-ofx
The MIME type for Open Financial Exchange
Content-length
length
Length of the data after removing HTTP headers
When responding with multi-part MIME, the main type will be
multi-part/x-mixed-replace;
one of the parts will use application/x-ofx.
The intent of Open Financial Exchange is for use with a variety of
transports and to provide sufficient version control capabilities for future expansion. To
support this goal, the contents of an Open Financial Exchange file consist of a simple set
of headers followed by contents defined by that header. "File format" means the
entire content after removal of any transport headers. The HTTP transport described in
this document, means without the HTTP and MIME headers.
The Open Financial Exchange headers are in a simple tag:value
syntax and terminated by a blank line. Open Financial Exchange always sends headers
unencrypted, even if there is application-level encryption in use for the remaining
contents. The first entry will always be OFXHEADER with a version number. This entry will
help identify the contents as an Open Financial Exchange file, and provides the version of
the Open Financial Exchange headers that follow (not of the content itself). For example:
OFXHEADER:100
This document defines version 1.0 of the headers to contain at least the
following additional tags:
The data tag identifies the contents as being in OFX SGML form. VERSION
identifies the version type as OFXSGML data. In the case of OFXSGML, it translates to the
version of the Document Type Definition (DTD) that it uses for parsing. The ENCODING and
CHARSET tags define the interpretation of the character data. See Chapter 5,
"International Support" for more information on these tags. Chapter 4 describes
the security tag. A future version of this specification will define compression.
Open Financial Exchange uses OLDFILEUID and NEWFILEUID to support error
recovery. They are not present when clients are not requesting error recovery. (See
Chapter 6, "Data Synchronization")
A blank line follows the last tag. Then (for type OFXSGML), the
SGML-readable data begins with the <OFX> tag.
NOTE: Here, VERSION provides the overall version of the DTD.
The <OFX> block describes the specific message set versions used, shown later in
this chapter.
The OFXHEADER value should only change its major number if an existing
client is unable to process the new header. This can occur because of a complete syntax
change in a header, or a significant change in the semantics of an existing tag-not the
entire response. You can add new tags as long as clients can function without
understanding them.
You should add new values for a data tag only when you introduce an
entirely new syntax. In the case of OFXSGML, a new syntax would have to be non-SGML
compliant to warrant a new data value. It is possible that there will be more than one
syntax in use at the same time to meet different needs.
The intent of the header version tag is to identify syntactic changes.
In the case of OFXSGML, this corresponds to the DTD. Purely for identification purposes,
each change will increment the minor number of the version tag. If you introduce an
incompatible change so that an older DTD can not parse the file, the major number will
change. See the general discussion of message sets and version control, later in this
chapter.
SGML is the basis for Open Financial Exchange. There is a DTD that
formally defines the SGML wire format. However, Open Financial Exchange is not completely
SGML-compliant because the specification allows unrecognized tags to be present. It
requires clients and servers to skip over the unrecognized material. That is, if
<XYZ>qqq</XYZ> appeared and a client or server cannot recognize <XYZ>,
the server should ignore that tag and its enclosed data. A fully-compliant SGML parser
would not validate an Open Financial Exchange document if it contained any tags
that the DTD does not define.
Although SGML is the basis for the specification, and the specification
is largely compliant with SGML, do not assume Open Financial Exchange supports any SGML
features not documented in this specification. The intent is to allow parsing to be as
simple as possible, while retaining compatibility with the SGML world.
The following characters are special to SGML. Use the given alternative
sequence to represent them:
Character
Escape sequence
< (less than)
<
> (greater than)
>
& (ampersand)
&
For example, the string "AT&T" encodes "AT&T."
A special case applies in specific tags that can accept HTML-formatted strings, such as
e-mail records. These accept SGML marked section syntax to hide the HTML from the Open
Financial Exchange parser. You must prefix strings with "<![ CDATA ["and
suffixed with"]]>." Within these bounds, treat the above characters literally
without an escape. See the Chapter 9 for an example.
Open Financial Exchange hierarchically organizes request and response
blocks:
Top Level <OFX>
Message Set and Version <XXXMSGSVn>
Synchronization Wrappers <YYYSYNCRQ>, <YYYSYNCRS>
Transaction Wrappers <YYYTRNRQ>, <YYYTRNRS>
Specific requests and responses
The following sections describe each of these levels.
An Open Financial Exchange request or response has the following
top-level form:
Tag
Description
<OFX>
Opening tag
... Open Financial Exchange requests or responses ...
0 or more transaction requests and responses inside
appropriate message set aggregates
</OFX>
Closing tag for the Open Financial Exchange record
This chapter specifies the order of requests and responses.
A single file can contain multiple <OFX> ... </OFX> blocks. A typical use
of multiple blocks is to request in a single file information associated with different
users.
A message is the unit of work in Open Financial Exchange. It refers to a
request and response pair, and the status codes associated with that response. For
example, the message to download a bank statement consists of the request <STMTRQ>
and the response <STMTRS>. In addition, with the exception of the signon message,
each message includes a transaction wrapper. These aggregates add a transaction
unique ID <TRNUID>, and for responses, a <STATUS> aggregate, to the basic
request and response.
For messages subject to synchronization (see Chapter 6), a third layer
of aggregates is also part of a message definition: a synchronization request and
response. These add a token and, in some cases, other information to the transactions.
Open Financial Exchange uses the following naming where the XXX
message includes:
Basic request <XXXRQ> and response <XXXRS>
Transaction wrapper <XXXTRNRQ> and <XXXTRNRS>
If needed, synchronization wrapper <XXXSYNCRQ> and
<XXXSYNCRS>
In a few cases, a small number of related basic requests and responses
share a transaction and synchronization wrapper. The term message will still apply to each
request and response; only the naming scheme will not hold in those cases.
Message sets are collections of messages. Generally they form all or
part of what a user would consider a service, something for which they might have
signed up, such as "banking." Message sets are the basis of version control,
routing, and security. They are also the basis for the required ordering in Open Financial
Exchange files.
Within an Open Financial Exchange block, Open Financial Exchange
organizes messages by message set. A message set can appear at most once within an Open
Financial Exchange block. All messages from a message set must be from the same version of
that message set.
For each message set of XXX and version n, there exists an
aggregate named <XXXMSGSVn>. (Compare with <XXXMSGSETVn>
in Chapter 7.) All of the messages from that message set must be inside the appropriate
message set aggregate. In the following example, the Open Financial Exchange block
contains a signon request inside the signon message set, and two statement requests and a
transfer request inside the bank message set.
Other than the signon message, each request is made as a transaction.
Transactions contain a client-assigned globally unique ID, optional client-supplied
pass-back data, and then the record for the specific request. A transaction similarly
wraps each response. The response transaction returns the client ID sent in the request,
along with a status message, the pass-back data if present, and the specific response
record. This technique allows a client to track responses against requests.
The <STATUS> aggregate, defined in Chapter 3, provides feedback on
the processing of the request. If the <SEVERITY> of the status is ERROR, the server
provides no specific response record. Otherwise, the response will be complete even though
some warning might have occurred.
Clients can send additional information in <CLTCOOKIE> that
servers will return in the response. This allows clients that do not maintain state, and
thus do not save TRNUIDs, to cause some additional descriptive information to be present
in the response. For example, a client might identify a request as relating to a user or a
spouse.
In some countries some transactions require a customer-supplied
authorization number for each transaction. In those countries, the <TAN> element
provides the means to pass this information to servers. As Open Financial Exchange is
implemented in each country, the specification will define the specific requirements for
the use of <TAN> in each country.
A typical request is as follows:
Tag
Description
<XXXTRNRQ>
Transaction-request aggregate
<TRNUID>
Client-assigned globally unique ID for this transaction trnuid
<CLTCOOKIE>
Data to be echoed in the transaction response A-32
<TAN>
Transaction authorization number; used in some countries
with some types of transactions. Country-specific documentation will define messages that
require a TAN, A-80
specific request
Aggregate for the specific request
</XXXTRNRQ>
A typical response is as follows:
Tag
Description
<XXXTRNRS>
Transaction-response aggregate
<TRNUID>
Client-assigned globally unique ID for this transaction, trnuid
<CLTCOOKIE>
Client-provided data, REQUIRED if provided in
request, A-32
The Signon message set includes the signon message and the PIN change
message, and must appear in that order. The <SIGNONMSGSRQV1> and
<SIGNONMSGSRSV1> aggregates wrap the message.
The signon record identifies and authenticates a user to an FI. It also
includes information about the application making the request, because some services might
be appropriate only for certain clients. Every Open Financial Exchange request contains
exactly one <SONRQ>. Every response must contain exactly one <SONRS> record.
Use of Open Financial Exchange presumes that FIs authenticate each
customer and then give the customer access to one or more accounts or services. If
passwords are specific to individual services or accounts, a separate Open Financial
Exchange request will be made for each distinct user ID or password required. This will
not necessarily be in a manner visible to the user. Note that some situations, such as
joint accounts or business accounts, will have multiple user IDs and multiple passwords
that can access the same account.
FIs assign user IDs for the customer. It can be the customer's social
security number, but the client will not make any assumptions about the syntax of the ID,
add check-digits, or do similar processing.
To improve server efficiency in handling a series of Open Financial
Exchange request files sent over a short period of time, clients can request that a server
return a <USERKEY> in the signon response. If the server provide a user key, clients
will send the <USERKEY> in instead of the user ID and password in subsequent
sessions, until the <USERKEY> expires. This allows servers to authenticate
subsequent requests more quickly.
The client returns <SESSCOOKIE> if it sent one in a previous
<SONRS>. Servers can use this value to track client usage but cannot assume that all
requests come from a single client, nor can they deny service if they did not expect the
returned cookie. Use of a backup file, for example, would lead to an unexpected
<SESSCOOKIE> value that should nevertheless not stop a user from connecting.
Servers can request that a consumer change his or her password by
returning status code 15000. Servers should keep in mind that only one status code can be
returned. If the current signon response status should be 15500 (invalid ID or password),
the request to change password will need to wait until an otherwise successful signon is
achieved.
Record Request <SONRQ>
Tag
Description
<SONRQ>
Record- request aggregate
<DTCLIENT>
Date and time of the request from the client computer, datetime
<USERID>
User identification string. Use <USERID> &
<USERPASS>, or <USERKEY>, but not both; A-32
<USERPASS>
User password on server - either <USERID> &
<USERPASS> are used, or <USERKEY>, but not both; A-32
<USERKEY>
Login using previously authenticated context - use
<USERID> & <USERPASS>, or <USERKEY>, but not both; A-64
<GENUSERKEY>
Request server to return a USERKEY for future use, Boolean
<LANGUAGE>
Requested language for text responses, language
<SESSCOOKIE>
Session cookie, value received in previous <SONRS>,
not sent if first login or if none sent by FI A-1000
<FI>
Financial-Institution-identification aggregate
</FI>
<APPID>
ID of client application, A-5
<APPVER>
Version of client application, N-4 (6.00 encoded as
0600)
</SONRQ>
Response <SONRS>
Tag
Description
<SONRS>
Record-response aggregate
<STATUS>
Status aggregate, see list of possible code values
<DTSERVER>
Date and time of the server response, datetime
<USERKEY>
Use user key that instead of USERID and USERPASS for
subsequent requests. TSKEYEXPIRE can limit lifetime
<TSKEYEXPIRE>
Date and time that USERKEY expires
<LANGUAGE>
Language used in text responses, language
<DTPROFUP>
Date and time of last update to profile information for any
service supported by this FI (see Chapter 7), datetime
<DTACCTUP>
Date and time of last update to account information (see
Chapter 8), datetime
<FI>
Financial-Institution-identification aggregate
</FI>
<SESSCOOKIE>
Session cookie that the client should return on the next
<SONRQ> A-1000
</SONRS>
List of status code values for the <CODE> element of <STATUS>:
Value
Meaning
0
Success (INFO)
2000
General error (ERROR)
15000
Must change PIN (INFO)
15500
Signon (for example, user ID or password) invalid (ERROR)
15501
Customer account already in use (ERROR)
15502
PIN Lockout (ERROR)
Financial Institution ID <FI>
Some service providers support multiple FIs, and assign each FI an ID.
The signon allows clients to pass this information along, so that providers will know to
which FI the user is actually doing a signon.
Tag
Description
<FI>
FI-record aggregate
<ORG>
Organization defining this FI name space, A-32
<FID>
Financial Institution ID (unique within <ORG>), A-32
The signon sends a request to change a customer password as a separate
request. The transaction request <PINCHTRNRQ> aggregate contains <PINCHRQ>.
Responses are also inside transaction responses <PINCHTRNRS>.
Password changes pose a special problem for error recovery. If the
client does not receive a response, it does not know whether the password change was
successful or not. Open Financial Exchange recommends that servers accept either the old
password or the new password on the connection following the one containing a password
change. The password used becomes the new password.
Tag
Description
<PINCHRQ>
PIN-change-request aggregate
<USERID>
User identification string. Often a social security number,
but if so, does not include any check digits, A-32
<NEWUSERPASS>
New user password, A-32
</PINCHRQ>
Tag
Description
<PINCHRS>
PIN-change-response aggregate
<USERID>
User identification string. Often a social security number,
but if so, does not include any check digits, A-32
<DTCHANGED>
Date and time the password was changed, datetime
</PINCHRS>
Status Code Values for the <CODE> Element of
<STATUS>
Some data, such as binary data, cannot be easily sent directly within
SGML. For these situations, the specification will define a tag that contains a reference
to some external data. The way that clients pick up the external data depends on the
transport used. For the HTTP-based transport described in this document, servers can send
the data in one of two ways:
Send the same response, using multi-part MIME types to separate the
response into basic
Open Financial Exchange and one or more external data files
Client can make a separate HTTP get against the supplied URL, if it
really needs the data
For example, to retrieve a logo, a <GETMIMERS> might answer a
<GETMIMERQ> as follows:
An organization that provides a customized client and server that
communicate by means of
Open Financial Exchange might wish to add new requests and responses or even specific
elements to existing requests and responses. To ensure that each organization can extend
the specification without the risk of conflict, Open Financial Exchange defines a style of
tag naming that lets each organization have its own name space.
Organizations can register a specific tag name prefix. (The specific
procedure or organization to manage this registration will be detailed at a later time.)
If an organization registers "ABC," then they can safely add new tags named
<ABC.SOMETHING> without
Colliding with another party wishing to extend the specification
Confusing a client or server that does not support the extension
The extensions are not considered proprietary. An organization is free
to publish their extensions and encourage client and server implementers to support them.
All tag names that do not contain a period (.) are reserved for use in
future versions of the core
Open Financial Exchange specification.
Open Financial Exchange does not provide a universal space for
identifying financial institutions, accounts, or types of accounts. The way to identify an
FI and an account at that FI depends on the service. For information about
service-specific ID aggregates, see Chapters 11, 12, and 13 on banking, payments, and
investments.
Several responses allow FIs to send an arbitrary set of balance
information as part of a response, for example a bank statement download. FIs might want
to send information on outstanding balances, payment dates, interest rates, and so forth.
Balances can report the date the given balance reflects in <DTASOF>.
Tag
Description
<BAL>
Balance-response aggregate
<NAME>
Balance name, A-20
<DESC>
Balance description, A-80
<BALTYPE>
Balance type.
DOLLAR = dollar (value formatted DDDDcc)
PERCENT = percentage (value formatted XXXX.YYYY)
NUMBER = number (value formatted as is)
<VALUE>
Balance value.
Interpretation depends on <BALTYPE> field, N-20
<CURRENCY>
If dollar formatting, can optionally include currency
To provide as much feedback as possible to clients and their users, Open
Financial Exchange defines a <STATUS> aggregate. The most important element is the
code that identifies the error. Each response defines the codes it uses. Codes 0 through
2999 have common meanings in all Open Financial Exchange transactions. Codes from 3000 and
up have meanings specific to each transaction.
Tag
Description
<STATUS>
Error-reporting aggregate.
<CODE>
Error code, N-6
<SEVERITY>
Severity of the error:
INFO = Informational only
WARN = Some problem with the request occurred but valid response still present
ERROR = A problem severe enough that response could not be made
<MESSAGE>
A textual explanation from the FI. Note that clients will
generally have messages of their own for each error ID. Use this tag only to provide more
details or for the General errors.
</STATUS>
stadyn_image6
stadyn_image7
For general errors, the server can respond with one of the following <CODE>
values. However, not all codes are possible in a specific context.
Code
Meaning
0
Success (INFO)
2000
General error (ERROR)
2021
Unsupported version (ERROR)
NOTE: Clients will generally have error messages based on <CODE>.
Therefore, do not use <MESSAGE> to replace that text. Use <MESSAGE> only to
explain an error not well described by one of the defined CODEs, or to provide some
additional information.
This section defines elements used in several services of Open Financial
Exchange. The format of the value is either alphanumeric (A-n)or numeric
(N-n) with a maximum length n; or as a named type. Section 3.3 describes the
named types.
An FI assigns an <FITID> to uniquely identify a transaction. Its
primary purpose is to allow a client to detect duplicate responses. Open Financial
Exchange intends <FITID> for use in statement download applications, where every
transaction requires a unique ID; not just those that are client-originated or
server-originated.
FITIDs must be unique within the scope of the requested transactions
(that is, within an account) but need not be sequential or even increasing. Clients should
be aware that FITIDs are not unique across FIs. If a client performs the same type of
request within the same scope at two different FIs, clients will need to use FI + account
+ <FITID> as a unique key in a client database.
Usage: Bank statement download, investment statement download
A <SRVRTID> is a server-assigned ID. It should remain constant
throughout the lifetime of the object on the server. The client will consider the SRVRTID
as its "receipt" or confirmation and will use this ID in any subsequent requests
to change, delete, or inquire about this object.
Where the context allows, it is possible for a server to use the same value
for a given server object for both <SRVRTID> and <FITID>, but the client
will not know this. SRVRTIDs need be unique only within the scope of the requests and
responses they apply to, such as an account number. Like <FITID>, a <SRVRTID>
is not unique across FIs and clients might need to use FI + <SRVRTID> if a client
requires a unique key.
Open Financial Exchange uses TRNUIDs to identify transactions,
specifically <XXXTRNRQ>. Clients expect a server to return the same
<TRNUID> in the corresponding response and can use this to match up requests and
responses. Servers can use TRNUIDs to reject duplicate requests. Because multiple clients
might be generating requests to the same server, transaction IDs need to be unique across
clients. Thus, <TRNUID> must be a globally unique ID.
The Open Software Foundation Distributed Computing Environment standards
specify a 36-character hexadecimal encoding of a 128-bit number and an algorithm to
generate it. Clients are free to use their own algorithm, to use smaller TRNUIDs, or to
relax the uniqueness requirements if in their particular application it makes sense.
However, it is RECOMMENDED that clients allow for the full 36 characters in
responses to work better with other clients.
Open Financial Exchange uses <TOKEN> as part of data
synchronization requests to identify the point in history that the client has already
received data, and in responses to identify the server's current end of history. See
Chapter 6, "Data Synchronization," for more information.
<TOKEN> is unique within an FI and the scope of the
synchronization request. For example, if the synchronization request includes an account
ID, the <TOKEN> needs be unique only within an account. Servers are free to use a
<TOKEN> that is unique across the entire FI. Clients must save separate
<TOKEN>s for each account, FI, and type of synchronization request.
Open Financial Exchange uses these tags in requests to provide guidance
to the FI about the range of response that is desired. It also uses them in responses to
let clients know what the FI was actually able to produce.
In requests, the following rules apply:
If <DTSTART> is absent, the client is requesting all available
history (up to the <DTEND>, if specified). Otherwise, it indicates the inclusive
date and time in history where the client expects servers to start sending information.
If <DTEND> is absent, the client is requesting all available
history (starting from <DTSTART>, if specified). Otherwise, it indicates the exclusive
date and time in history where the client expects servers to stop sending information.
In responses, the following rules apply:
<DTSTART> is the date and time where the server began looking
for information, not necessarily the date of the earliest returned information. If the
response <DTSTART> is later than the requested <DTSTART>, clients can infer
that the user has not signed on frequently enough to ensure that the client has retrieved
all information. If the user has been calling frequently enough, <DTSTART> in the
response will match <DTSTART> in the request.
<DTEND> is the date and time that, if used by the client as the
next requested <DTSTART>, it would pick up exactly where the current response left
off. It is the exclusive date and time in history where the server stopped looking
for information, based on the request <DTEND> rules.
In all cases, servers are REQUIRED to use a "system add
datetime" as the basis for deciding which details match the requested date range. For
example, if an FI posts a transaction dated Jan 3 to a user's account on Jan 5, and a
client connects on Jan 4 and again on Jan 6, the server is REQUIRED to return that
Jan 3 dated transaction to the client when it calls on Jan 6.
Usage: Bank statement download, investment statement download
There is one format for representing dates, times, and time zones. The
complete form is:
YYYYMMDDHHMMSS.XXX[gmt offset:tz name]
For example, "19961005132200.1234[-5:EST]" represents October
5, 1996, at 1:22 and 124 milliseconds p.m., in Eastern Standard Time. This is the same as
6:22 p.m. Greenwich Mean Time (GMT).
Tags specified as type date and generally starting with the
letters "DT" will accept a fully formatted date-time-timezone as specified
above. They will also accept values with fields omitted from the right. They assume the
following defaults if a field is missing:
YYYYMMDD: 12:00 midnight (the start of the day), GMT
YYYYMMDDHHMMSS: GMT
YYYYMMDDHHMMSS.XXX: GMT
YYYYMMDDHHMMSS.XXX[-0500:EST]: Fully qualified
Open Financial Exchange identifies elements that require a time as
having type timestamp and their tag name will start with the prefix TS. The
timezone and milliseconds are still optional, and will default to GMT.
Take care when specifying an ending date without a time. If the last
transaction returned for a bank statement download was Jan 5 1996 10:46 a.m. and if the
<DTEND> was given as just Jan 5, the transactions on Jan 5 would be resent. If
results are only available daily, then just using dates and not times will work correctly.
NOTE: Open Financial Exchange does not require servers or
clients to use the full precision specified. However, they are REQUIRED to
accept any of these forms without complaint.
Some services extend the general notion of a date by adding
special values, such as "TODAY." These special values are called "smart
dates." Specific requests indicate when to use these extra values, and list the tag
as having a special data type.
Time Zone Issues
Several issues arise when a customer and the FI are not in the same time
zone, or when a customer moves a computer into new time zones. In addition, it is
generally unsafe to assume that computer users have correctly set their time or timezone.
Although most transactions are not sensitive to the exact time, they
often are sensitive to the date. In some cases, time zone errors lead to actions occurring
on a different date than intended by the customer. For this reason, servers should always
use a complete local time plus GMT offset in any datetime values in a response. If a
customer's request is for 5 p.m. EST, and a server in Europe responds with 1 a.m. MET the
next day, a smart client can choose to warn the customer about the date shift.
Clients that maintain local state, especially of long-lived server
objects, should be careful how they store datetime values. If a customer initiates a
repeating transaction for 5 p.m. EST, then moves to a new time zone, the customer might
have intended that the transaction remain 5 p.m. in the new local time, requiring a change
request to be sent to the server. If, however, they intended it to remain fixed in server
time, this would require a change in the local time stored in the client.
Unless otherwise noted in the specification, Open Financial Exchange
always signs amounts and quantities from the perspective of the customer. Some typically
negative amounts:
Investment buy amount, investment sell quantity
Bank statement debit amounts, checks, fees
Credit card purchases
Margin balance (unless the FI owes the client money)
Some typically positive amounts:
Investment sell amount, investment buy quantity
Bank statement credits
Credit card payments
Ledger balance (unless the account is overdrawn)
Amount: All amount-valued tags are sent with a decimal point or
comma, as in "XXXX.XX." There should not be any punctuation separating
thousands, millions, and so forth. The maximum value accepted depends on the client.
Quantity: Use decimal notation.
Unitprice: Use decimal notation. Unless specifically noted,
prices should always be positive.
Rate: Use decimal notation, with the rate specified out of 100%.
For example, 5.2 is 5.2%.
Some services define special values, such as INFLATION, which you can
use instead of a designated value. Open Financial Exchange refers to these as "smart
types," and identifies them in the specification.
Open Financial Exchange carries financial information over the Internet
in such a way to provide privacy, message integrity, and authentication for applications
at the appropriate level. Each service within Open Financial Exchange requires a certain
level of security. Online banking and payments require strong secrecy, whereas stock
quotations consist of publicly available information and consequently have a much weaker
secrecy requirement.
Some Internet protocols, such as HTTPS (which uses Secure Socket Layer
version 3, SSLv3), provide channel-level security. When the security requirement exceeds
that provided by the channel, you must use an application-level protocol.
Secure Socket Layer version 3 (SSLv3) provides channel-level security in
Open Financial Exchange. SSLv3 provides confidentiality, message integrity, and implicit
authentication. In Open Financial Exchange 1.0, channel-level security using SSLv3 is the
primary form of security.
Open Financial Exchange provides a method to exchange financial
information over public networks. This necessitates strong security facilities and careful
protocol design. The most commonly used facility, and trusted method for accomplishing
many of these goals is SSL. The following sub-sections describe the most prominent
requirements for security and how Secure Socket Layer (SSL) addresses these.
Privacy, Authentication, and Message Integrity
SSL provides a range of strong encryption methods for insuring
confidentiality, and strong measures to insure that messages are not altered as they
propagate over the Internet. User authentication is usually addressed at the application
layer, not within SSL. Servers are configured with public key certificates that client
application software verifies. This provides some measure of server authentication.
Testing certificate revocation lists is not commonly performed. However, as these
facilities emerge, client software will be written to support this need.
Facilities for Authorization
Open Financial Exchange messages typically provide user ID and password
so that a service provider can authenticate the user. Once a system authenticates a user,
the service provider must insure that the user is authorized to perform the requested
actions. For example, the service provider must decide if the specified user is authorized
to perform a transfer from the specified account. The service provider must also determine
whether the user has exceeded allowed limits on withdrawals, whether the activity on this
account is unusual given past history, and other context-sensitive issues.
SSL version 3.0 provides a set of widely and commonly accepted methods
for securing Internet transactions. These common methods within SSL are called
CipherSuites. You can secure applications appropriately within SSL by specifying an
ordered sequence of preferred CipherSuites (highest preference listed first). Servers
select the strongest supported CipherSuite from the list provided by the client.
NOTE: Passing username and password pairs in a weakly
encrypted channel exposes this information to cryptographic attack. When implementing Open
Financial Exchange, use the strongest available ciphers.
You should not use the following CipherSuites because they are
vulnerable to man-in-the-middle attacks during Open Financial Exchange message exchanges:
While strong channel-level security is sufficient for the current suite
of Open Financial Exchange transactions, there are features that channel security does not
provide. These include (but are not limited to) data signing, non-repudiation, rational
certificate management and revocation, and trust proxy. Where the trust model for an
application requires such features to conduct the transaction safely, Open Financial
Exchange stipulates the use of an application-level protocol. A future implementation
guide will publish this protocol.
The standard method for providing application-level security is to rely
upon the RSA Public Key Cryptography Standard (PKCS) message format. The PKCS #7 standard
specifies a message format that is both cryptographically strong and flexible enough to
provide sufficient facilities for evolution.
RSA Public Key Cryptography Standard #7 (PKCS#7) defines a rich set of
message formats for securely exchanging information over public networks. These message
formats provide for encrypting data using a combination of cryptographic techniques to
leverage manageability of public key cryptography. It also utilizes the speed of block
ciphers into a hybrid, which exploits the best properties of each.
PKCS#7 message encryption provides privacy. A digitally signed message
(or applying HMAC) insures message integrity.
Use one of the following to define PKCS#7 messages: Data, Digitally
Signed-Data, Enveloped-Data, or Digitally Signed and Enveloped-Data (also referred to as
Sealed-Data). Open Financial Exchange can use Digested-Data, which digests application
data before it embeds data within an Enveloped-Data object. However, it should not
transmit this data over public networks without encryption applied.
Facilities for Authorization
As stated previously in the section 4.2, authentication and
authorization are the responsibility of the service provider. Open Financial Exchange
messages contain the information to enable authentication and authorization decisions.
With application-level security that uses a digitally signed format, the verification of
that signature provides an additional method of authenticating the user.
Open Financial Exchange applications requiring a sophisticated trust
model require more facilities than those provided by SSL. If an Open Financial Exchange
application requires only point-to-point security, SSL version 3.0 provides adequate
facilities for message security. However, if the application requires more directed,
specific forms of security, then use the appropriate PKCS#7 message formats for the
application. An example of this might be a stock trading application issuing orders whose
values demand that the security level be high, and where Open Financial Exchange treats
the message with special handling instructions.
Recommended cryptographic techniques for Open Financial Exchange
application security are:
RC4 for bulk encryption (using 40 bits for exportable applications, 128
for North America)
RSA encryption of bulk encryption keys and digital signatures
SHA-1 as a secure hash algorithm
In the absence of digital signatures, Open Financial Exchange
applications should utilize the HMAC keyed MAC algorithm, using SHA-1 as a secure hash
function.
When you set the tags for application-layer security-which determines
whether to use PKCS#7 message format-in the FI profile, the application software uses
these facilities.
Most of the content in Open Financial Exchange is language-neutral.
However, some error messages, balance descriptions, and similar tags contain text meant to
appear to the financial institution customers. There are also cases, such as e-mail
records, where customers need to send text in other languages. To support world-wide
languages, Open Financial Exchange must identify the basic text encoding, specific
character set, and the specific language.
The outer Open Financial Exchange headers specify the encoding and
character set, as described Chapter 2. Current encoding values are ASCII and UNICODE. For
ASCII, character set values are code pages. Unicode ignores the character set per se
although it still requires the syntax. Clients identify the language in the signon
request. Open Financial Exchange specifies languages by three-letter codes as defined in
ISO-639. Servers report their supported languages in the profile (see Chapter 7). If a
server cannot support the requested language, they must return an error and not process
the rest of the transactions.
In each transaction involving amounts, responses include a default
currency identification, <CURDEF>. The values are based on the ISO 4217 three-letter
currency identifiers.
Within each transaction, specific parts of the response might need to
report a different currency. Where appropriate, aggregates will include an optional
<CURRENCY> aggregate. The scope of a <CURRENCY> aggregate is everything within
the same aggregate that the <CURRENCY> aggregate appears in, including nested
aggregates, unless overridden by a nested <CURRENCY> aggregate. For example,
specifying a <CURRENCY> aggregate in an investment statement detail means that the
unit price, transaction total, commission, and all other amounts are in terms of the given
currency, not the default currency.
Note that there is no way for two or more individual elements that
represent amounts-and are directly part of the same aggregate-to have different
currencies. For example, there is no way in a statement download to have a different
currency for the <LEDGERBAL> and the <AVAILBAL>, because they are both
directly members of <STMTRS>. In most cases, you can use the optional <BAL>
records to overcome this limitation, which do accept individual <CURRENCY>
aggregates.
The default currency for a request is the currency of the source
account. For example, the currency for <BANKACCTFROM>.
The <CURRATE> should be the one in effect throughout the scope of
the <CURRENCY> aggregate. It is not necessarily the current rate. Note that the
<CURRATE> needs to take into account the choice of the FI for formatting of amounts
(that is, where the decimal is) in both default and overriding currency, so that a client
can do math. This can mean that the rate is adjusted by orders of magnitude (up or down)
from what is commonly reported in newspapers.
Tag
Description
<CURRENCY>or
<ORIGCURRENCY>
Currency aggregate
<CURSYM>
ISO 4217 3-letter currency identifier, A-3
<CURRATE>
Ratio of <CURDEF> currency to <CURSYM>
currency, in decimal form
</CURRENCY>or </ORIGCURRENCY>
In some cases, Open Financial Exchange will define transaction responses so that
amounts have been converted to the home currency. However, Open Financial Exchange will
allow FIs to optionally report the original amount and the original (foreign) currency. In
these cases, transactions include a specific tag for the original amount, and then a
<ORIGCURRENCY> tag to report the details of the foreign currency.
Again, <CURRENCY> means that Open Financial Exchange has not converted
amounts. Whereas, <ORIGCURRENCY> means that Open Financial Exchange has
already converted amounts.
Some of the tags in Open Financial Exchange have values that are
country-specific. For example, <USPRODUCTTYPE> is only useful within the United
States. Open Financial Exchange will extend in each country as needed to provide tags that
accept values useful to that country. Clients in other countries that do not know about
these tags will simply skip them.
In some cases, a tag value represents a fundamental way of identifying
something, yet there does not exist a world-wide standard for such identification.
Examples include bank accounts and securities. In these cases, it is important that Open
Financial Exchange defines a single, extensible approach for identification. For example,
CUSIPs are used within the U.S., but not in other countries. However, CUSIPs are
fundamental to relating investment securities, holdings, and transactions. Thus, a
security ID consists of a two-part aggregate: one to identify the naming scheme, and one
to provide a value. Open Financial Exchange will define valid naming schemes as necessary
for each country.
Currently, some systems provide only limited support for error recovery
and no support for backup files or multiple clients. The Open Financial Exchange data
synchronization approach described in this chapter handles all of these situations.
Open Financial Exchange defines a powerful form of data synchronization
between clients and servers.
Open Financial Exchange data synchronization addresses the following
problems:
Error recovery
Use of multiple client applications
Restoring from a backup file
Multiple data files (for example, one copy at home, another at work).
This chapter first provides a brief background of error recovery
problems and then presents the basic strategy used in Open Financial Exchange to perform
data synchronization. Each Open Financial Exchange service includes specific details for
data synchronization requests and responses.
Most of the information in this chapter concerns data synchronization,
since it is a relatively new concept. The final section in this chapter discusses
alternatives to full synchronization, and summarizes the options for each.
When a client begins a connection with a server for which the connection
does not successfully complete, there are two main problems:
Unconfirmed requests
If a client does not receive a response to work it initiates, it has no
way of knowing whether the server processed the request. It also will not have any
server-supplied information about the request, such as a server ID number.
Unsolicited data
Some banking protocols allow a server to send data to the client
whenever the client makes a connection. This specification assumes that the first client
that calls in after the unsolicited data is available for download receives the data. If
the connection fails, this information would be forever lost to the client. Examples of
unsolicited data include updates in the status of a bill payment and e-mail responses.
Unsolicited data presents problems beyond error recovery. Because the
first client that connects to a server is the only one to receive unsolicited data, this
situation precludes use of multiple clients without a data synchronization method. For
example, if a user has a computer at work and one at home, and wants to perform online
banking from both computers, a bank server could send unsolicited data to one but not the
other.
An even greater problem occurs when a user resorts to a backup copy of
the client data file. This backup file will be missing recent unsolicited data with no way
to retrieve it from the server once the server sends it.
A simple solution is to make sure that clients can always obtain
information from the server for a reasonable length of time. Clients can request recent
responses-whether due to client-initiated work or other status changes on the server-by
supplying the previous endpoint in the response history. Servers always supply a new
endpoint whenever they supply responses.
If a client connection fails-or a client receives a response, but
crashes before updating its database-the client will not save the new endpoint. On the
next synchronization request, the server sends the same information (plus any further
status changes).
If a user switches to a backup file, again the client will use the older
endpoint in the synchronization request.
If multiple clients are in use, each will send requests based on its own
endpoint, so that both clients will obtain complete information from the server. This is
one reason why Open Financial Exchange responses carry enough information from the request
to enable them to be processed on their own. The diagram below shows the relationship
between clients and servers.
Open Financial Exchange relieves the server from maintaining any special
error-recovery state information. However, Open Financial Exchange requires the server to
maintain a history of individual responses it would have sent and a way to identify a
position in the history. This ID could be a timestamp, or be based on its existing state
information.
NOTE: Open Financial Exchange does not require servers to
store these responses based on individual connections. Also, not all requests are subject
to synchronization. For example, Open Financial Exchange does not require servers to store
statement-download responses separately for data synchronization.
Open Financial Exchange does synchronization separately for each type of
response. In addition, a synchronization request might include further identifying
information, such as a specific account number. This specification defines the additional
information for each synchronization request.
Each Open Financial Exchange service will identify the specific
responses that are subject to data synchronization. For example, a bank statement-download
is a read-only operation from the server. A client can request again if it fails;
consequently, there is no special data synchronization for this type of response.
The basis for synchronization is a token as defined by the
<TOKEN> tag. The server is free to create a token in any way it wishes. The client
simply holds the token for possible use in a future synchronization request.
The server can derive a token from one of the following:
Timestamp
Sequential number
Unique non-sequential number
Other convenient values for a server
Clients will send a <TOKEN> of zero on their first synchronization
request. Servers should send all available history, allowing a new client to know about
work done by other clients. If a user's account has never been used with Open Financial
Exchange, the server returns no history.
The server can use different types of tokens for different types of
responses, if suitable for the server.
Tokens will be subject to a maximum size; see Chapter 3, "Common
Aggregates, Elements, and Data Types." Tokens need to be unique only with respect to
a specific type of synchronization request and the additional information in that request.
For example, a bill payment synchronization request takes an account number; therefore, a
token needs to be unique only within payments for a specific account.
Servers will not have infinite history available, so synchronization
responses include a <LOSTSYNC> element with a value of Y (yes) if the old token in
the synchronization request was older than available history. This tag allows clients to
alert users that some responses have been lost.
NOTE: A token is unrelated to a <TRNUID>,
<SRVRTID>, or <FITID>. Each of these serves a specific purpose, and has its
own scope and lifetime.
A <SRVRTID> is not appropriate as a <TOKEN> for bill
payment. A single payment has a single <SRVRTID>, but it can undergo several state
changes over its life and thus have several entries in the token history.
There are three different ways a client and a server can conduct their
requests and responses:
Explicit synchronization - A client can request synchronization without
sending any (other) Open Financial Exchange requests. Clients will send a specific
synchronization request, including the current token for that request. The response will
be a set of individual responses more recent than the given token, along with a new token.
Synchronization with new requests - A client can request synchronization
as part of the response to any new requests it has. It gives the old token. The response
should include responses to the new requests plus any others that became available since
the old token, along with a new token. An aggregate contains the requests so that the
server can process the new requests and update the token as an atomic action.
New requests without synchronization - A client can make new requests
without providing the old token. In this case, it expects just responses to the new
requests. A subsequent request for synchronization will cause the client to send the same
response again, because the client did not update its token.
Each request and response that requires data synchronization will define
a synchronization aggregate. The aggregate tells the server which particular kind of data
it should synchronize. By convention, these aggregates always have SYNC as part of their
tag names, for example, <PMTSYNCRQ>. You can use these aggregates on their
own to perform explicit synchronization, or as wrappers around one or more new
transactions. For example, you can use <PMTSYNCRQ> aggregates to request
synchronization in combination with new work. You can use the <PMTTRNRQ> by itself
if you do not require synchronization.
Some clients can choose to perform an explicit synchronization before
sending any new requests (with or without synchronization). This practice allows clients
to be up-to-date and possibly interact with the user before sending any new requests.
Other clients can simply send new requests as part of the synchronization request.
If a client synchronizes in one file, then sends new work inside a
synchronization request in a second file, there is a small chance that additional
responses become available between the two connections. There is even a smaller chance
that these would be conflicting requests, such as modifications to the same object.
However, some clients and some requests might require absolute control, so that the user
can be certain that they are changing known data. To support this, synchronization
requests can optionally specify <REJECTIFMISSING>. The tag tells a server that it
should reject all enclosed requests if the supplied <TOKEN> is out of date before
considering the new requests. That is, if any new responses became available, whether
related to the incoming requests or not (but part of the scope of the synchronization
request), the server should immediately reject the requests. It should still return the
new responses. A client can then try again until it finds a stable window to submit the
work. See section 6.5 for more information about conflict detection and resolution.
The password change request and response present a special problem. See
section 2.5.2 for further information.
Conflicts arise whenever two or more users or servers modify the same
data. This can happen to any object that has a <SRVRTID> that supports change or
delete requests. For example, one spouse and the other might independently modify the same
recurring bill payment model. From a server perspective, there is usually no way to
distinguish between the same user making two intended changes and two separate users
making perhaps unintended changes. Therefore, Open Financial Exchange provides enough
tools to allow clients to carefully detect and resolve conflicts. Open Financial Exchange
requires only that a server process atomically all requests in a single <OFX> block.
A careful client will always synchronize before sending any new
requests. If any responses come back that could affect a user's pending requests, the
client can ask the user whether it should still send those pending requests. Because there
is a small chance for additional server actions to occur between the initial
synchronization request and sending the user's pending requests, extremely careful clients
can use the <REJECTIFMISSING> option. Clients can iterate sending pending requests
inside a synchronization request with <REJECTIFMISSING> and testing the responses to
see if they conflict with pending requests. A client can continue to do this until a
window of time exists wherein the client is the only agent trying to modify the server. In
reality, this will almost always succeed on the first try.
There are some situations, and some types of clients, where it is
preferable for a client to ask a server to send everything it knows, rather than just
receive a set of changes. For example, a situation where a client that has not connected
often enough has lost synchronization. An example of "type" might be a
completely stateless client, such as a web browser. This choice is made during client
implementation. Open Financial Exchange does not require a client to refresh just because
it has lost synchronization.
Clients will mainly want to refresh lists of long-lived objects on the
server; generally objects with a <SRVRTID>. For example, Open Financial Exchange
Payments has both individual payments and models of recurring payments.
A brand new client, or a client that lost synchronization, might want to
learn about in-progress payments by doing a synchronization refresh of the payment
requests. It would almost certainly want to do a synchronization refresh of the recurring
payment models, because these often live for months or years.
A client might not perform a synchronization refresh on e-mail
responses.
A client can request a refresh by using the <REFRESH> tag with
value of Y instead of the <TOKEN> tag. Server descriptions detail the exact behavior
that servers should follow. However, the general rule is that servers should send
responses that emulate a client creating or adding each of the objects governed by the
particular synchronization request.
In these cases, you can set <TRNUID> to zero; the standard value
for server-generated responses.
There is no need to recreate a stream of responses that emulate the
entire history of the object, just an add response that reflects the current state. For
example, if you create a model and then modify it three times, even if this history would
have been available for a regular synchronization, servers should only send a single add
that reflects the current state.
A client that just wants the current token, without refresh or
synchronization, makes requests with <TOKENONLY> and a value of Y.
In all cases, servers should send the current ending <TOKEN> for
the synchronization request in refresh responses. This allows a client to perform regular
synchronization requests in the future.
The following table summarizes the options in a client synchronization
request:
Tag
Description
<TOKEN>
Previous value of <TOKEN> received for this type of
synchronization request from server; 0 for first-time requests; token
<TOKENONLY>
Request for just the current <TOKEN> without the
history, Boolean
<REFRESH>
Request for refresh of current state, Boolean
<REJECTIFMISSING>
If Y, do not process requests if client <TOKEN> is
out of date, Boolean
NOTE:Open Financial Exchange requires one each of <TOKEN>,
<TOKENONLY>, or <REFRESH>.
This section describes how an FI can approach supporting synchronization
based on the assumption that modifications to an existing financial server will be kept to
a minimum.
The simplest approach is to create a history database separate from the
existing server. This history could consist of the actual Open Financial Exchange
transaction responses (<TRNRS> aggregates) that are available to a synchronization
request. The history database could index records by token, response type, and any other
identifying information for that type, such as account number.
The diagram below shows a high-level model of the Open Financial
Exchange architecture for a financial institution. Notice that the diagram shows the
presence of a history journal.
The server adds responses to the history journal for any action that
takes place on the existing server. This is true whether the Open Financial Exchange
requests initiate the action or, in the case of recurring payments, it happens
automatically on the server. Once added to the history journal, the server can forget
them.
The areas of the Open Financial Exchange server that process
synchronization requests need only search this history database for matching responses
that are more recent than the incoming token.
For a refresh request, an Open Financial Exchange server would access
the actual bank server to obtain the current state rather than recent history.
Periodically the bank server would purge the history server of older
entries.
Only requests that are subject to synchronization need to have entries
in the history database. Statement downloads do not involve synchronization; therefore,
the FI server should not add these responses to the history database. Since statement
downloads are usually the largest in space and the most frequent, eliminating these saves
much of the space a response history might otherwise require.
More sophisticated implementations can save even more space. The history
database could save responses in a coded binary form that is more compact than the full
Open Financial Exchange response format. Some FIs might have much or all of the necessary
data already in their servers; consequently, they would not require new data. An FI could
regenerate synchronization responses rather than recall them from a database.
The diagram below shows a general flowchart of what an Open Financial
Exchange client would do with the results of a synchronization request. Most requests and
responses subject to data synchronization contain both <TRNUID> and <SRVRTID>.
It is increasingly common that a server can get simultaneous or
overlapping requests from the same user over two different computers. Open Financial
Exchange requires a server to process each set of requests sent in a file as an atomic
action. Servers can deal with the problems that arise with simultaneous use in two ways:
Allow simultaneous connections, insure each is processed atomically, and
use the data synchronization mechanism to bring the two clients up to date. This is the
preferred method.
Lock out all but one user at a time, returning the error code for
multiple users.
Although it is RECOMMENDED that Open Financial Exchange servers
implement full synchronization as described in this chapter, an alternate approach,
"lite synchronization," could be easier for some servers to support. This
approach focuses only on error recovery and does not provide any support for multiple
clients, multiple data files, or use of backup files. The approach is to preserve the
message sets while simplifying the implementation.
In addition, some clients might prefer to use response-file based error
recovery with all servers, even if the client and some server both support full
synchronization. This section first describes lite synchronization, and then explains the
rules that clients and servers use to decide how to communicate.
Lite synchronization requires servers to accept all synchronization
messages, but does not require them to keep any history or tokens. Responses need only be
sent once and then the server can forget them. Responses to client requests, whether or
not they are made inside a synchronization request, are processed normally. Responses that
represent server-initiated work, such as payment responses that arise from recurring
payments, are sent only in response to synchronization requests. A server does not have to
hold responses in case a second client makes a synchronization request.
Because full synchronization supports error recovery, an alternative is
needed for lite synchronization. Servers using lite synchronization keep a copy of the
entire response file they last sent. Clients requesting that servers prepare for error
recovery generate a globally unique ID for each file they send. In the OFX headers, there
are two tags associated with error recovery:
OLDFILEUID - UID of the last request and response that was successfully
received and processed by the client
NEWFILEUID - UID of the current file
The format of these is the same as used with <TRNUID> as
documented in Chapter 3.
Servers use the following rules:
If these tags are absent, the client is not requesting error recovery
protection for this file. The server does not need to save a copy of the response.
If the NEWFILEUID matches a file saved on the server, then the client is
in error recovery. The server must ignore the new requests in this file and instead send
back the matching saved response file.
If the OLDFILEUID matches a file saved on the server, then OLDFILEUID is
a file that the client has successfully processed and the server can delete it. The client
is also requesting that the response for the current file be saved under the NEWFILEUID
for possible error recovery.
A server will never need to save more than one file per client data
file, but because of possible multi-client or multi-datafile usage, it might need to save
several files for a given user. A server should save as long as possible, but not
indefinitely. A server cannot recognize an error recovery attempt if it comes after it has
purged the error recovery file. A server would process it as a new request. In this case,
a server should recognize duplicate transaction UIDs for client-initiated work, such as
payments, and then reject them individually. Server-generated responses would be lost to
the client.
For a server accustomed to sending unsolicited responses, lite
synchronization should closely match the current response-file based implementation. The
only difference is that a server should hold the unsolicited responses until the client
makes the first appropriate synchronization request; rather than automatically adding them
to any response file. Once added, the server can mark them as delivered, relying on error
recovery to insure actual delivery.
Client and server developers should first decide whether they will
support full synchronization or not. If they can, then they can support response-file
error recovery as well, or they can rely on synchronization to perform error recovery. If
they adopt only lite synchronization, Open Financial Exchange requires response-file error
recovery. A severs describes each of these choices in its server profile records. The
following combinations are valid:
Full synchronization with response-file error recovery
Full synchronization without separate response-file error recovery
Lite synchronization with response-file error recovery
Clients request response-file error recovery by including the old and
new session UIDs in the header. If they are absent, servers need not save the response
file for error recovery. Clients request synchronization by using those synchronization
requests defined throughout this specification.
Here is an example of full synchronization using bill payment as the
service. Open Financial Exchange Payments provides two different synchronization requests
and responses, each with their own token; one for payment requests and one for repeating
payment model requests. See Chapter 102 for full details.
These simplified examples, show without the outer <OFX> layer,
<SIGNON>, and so forth.Client A requests synchronization:
<PMTSYNCRQ>
<TOKEN>123
<BANKACCTFROM>
<BANKID>121000248
<ACCTID>123456789
<ACCTTYPE>CHECKING
</BANKACCTFROM>
</PMTSYNCRQ>The server sends in response:
<PMTSYNCRS>
<TOKEN>125
<LOSTSYNC>N
<BANKACCTFROM>
<BANKID>121000248
<ACCTID>123456789
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<PMTTRNRS>
<STATUS>
... status details
</STATUS>
<TRNUID>123
<PMTRS>
... details on a payment response
</PMTRS>
</PMTTRNRS>
<PMTTRNRS>
<STATUS>
... status details
</STATUS>
<TRNUID>546
<PMTRS>
... details on another payment response
</PMTRS>
</PMTTRNRS>
</PMTSYNCRS>
Client A was missing two payment responses, which the server provides.
At this point, client A is synchronized with the server. Client A now makes a new payment
request, and includes a synchronization update as part of the request. This update avoids
having to re-synchronize the expected response at a later time.
<PMTSYNCRQ>
<TOKEN>125
<BANKACCTFROM>
<BANKID>121000248
<ACCTID>123456789
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<PMTTRNRQ>
<TRNUID>12345
<PMTRQ>
... details of a new payment request
</PMTRQ>
</PMTTRNRQ>
</PMTSYNCRQ>The response to this new
request:
<PMTSYNCRS>
<TOKEN>126
<LOSTSYNC>N
<BANKACCTFROM>
<BANKID>121000248
<ACCTID>123456789
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<PMTTRNRS>
... details on a payment response to the new request
</PMTTRNRS>
</PMTSYNCRS>
The client now knows that the server has processed the payments request
it just made, and that nothing else has happened on the server since it last synchronized
with the server.
Assume client B was synchronized with respect to payments for this
account up through token 125. If it called in now and synchronized-with or without making
additional requests-it would pick up the payment response associated with token 126. It
records the same information that was in client A, which would give both clients a
complete picture of payment status.
Open Financial Exchange clients use the profile to learn the
capabilities of an Open Financial Exchange server. This information includes general
properties such as account types supported, user password requirements, specific messages
supported, and how the client should batch requests and where to send the requests. A
client obtains a portion of the profile when a user first selects an FI. The client
obtains the remaining information prior to sending any actual requests to that FI. The
server uses a timestamp to indicate whether the server has updated the profile, and the
client checks periodically to see if it should obtain a new profile.
In more detail, a profile response contains the following sections,
which a client can request independently:
Message Sets - list of services and any general attributes of those
services. Message sets are collections of messages that are related functionally. They are
generally subsets of what users see as a service.
Signon realms - FIs can require different signons (user ID and/or
password) for different message sets. Because there can only be one signon per <OFX>
block, a client needs to know which signon the server requires and then provide the right
signon for the right batch of messages.
The profile message is itself a message set. In files, Open Financial
Exchange uses the <PROFMSGSV1> aggregate to identify this profile message set.
The following sections describe the general use of profile information.
A message set is a collection of related messages. For example, Chapter
11, "Banking," defines several message sets: statement download, credit card
statement download, intrabank transfers, and so forth. A server routes all of the messages
in a message set to a single URL and merges their versions together.
Clients and servers generally use message sets as the granularity to
decide what functionality they will support. A "banking" server can choose to
support the statement download and intrabank transfer message sets, but not the wire
transfer message set. Attributes are available in many cases to further define how Open
Financial Exchange supports a message set.
Each portion of the Open Financial Exchange specification that defines
messages also defines the message set to which that the messages belongs. This includes
what additional attributes are available for those messages, and whether Open Financial
Exchange requires the message set or it is optional.
Message sets are the basis of version control. Over time there will be
new versions of the message sets, and at any given time servers will likely want to
support more than one version of a message set. Clients should also be capable of
supporting as many versions as possible. Through the profile, clients discover which
versions are supported for each message set. Considering the client capabilities, it
exchanges messages at the highest common level for each message set.
For the Open Financial Exchange-SGML data format, there is a single DTD
for all message sets. Its version advances when any syntactic change is made to any
of the message sets. (It is possible to make a semantic change that would not even
require a change in syntax. A change in rules, for example, that would change the version
of the message set without changing the DTD.) A single DTD cannot have two different
definitions for the same aggregate. There are limitations to how a server that uses true
DTD-based parsing can handle multiple versions of a message at the same time.
To allow FIs to set up different servers for different message sets,
different versions, or to directly route some messages to third party processors, message
sets define the URL to which a server sends messages in that message set. Each version of
a message set can have a different URL. In the common case where many or all message sets
are sent to a single URL, clients will consolidate messages across compatible message
sets. Clients can consolidate when:
A profile request indicates which profile components a client desires.
It also indicates what the client's routing capability is. Profiles returned by the FI
must be compatible with the requested routing style, or it returns an error.
Profile requests are not subject to synchronization. Use the
<PROFTRNRQ> transaction tag.
Tag
Description
<PROFRQ>
Profile-request aggregate
<CLIENTROUTING>
Identifies client routing capabilities, see table below
<DTPROFUP>
Date and time client last received a profile update
</PROFRQ>
Tag
Description
NONE
Client cannot perform any routing. All URLs must be the
same. All message sets share a single signon realm.
SERVICE
Client can perform limited routing. See details below.
MSGSET
Client can route at the message-set level. Each message set
may have a different URL and/or signon realm.
The intent of the SERVICE option for client routing is to support clients that can
route bill payment messages to a separate URL from the rest of the messages. Because the
exact mapping of message sets to the general concept of bill payment can vary by client
and by locale, this specification does not provide precise rules for the SERVICE option.
Each client will define its requirements.
An aggregate describes each message set supported by an FI. Message sets
in turn contain an aggregate for each version of the message set that is supported. For a
message set named XXX, the convention is to name the outer aggregate <XXXMSGSET>
and the tag for each version <XXXMSGSETVn>. The reason for message
set-specific aggregates is that the set of attributes depends on the message set. These
can change from version to version, so there are version-specific aggregates as well.
The general form of the response is:
Tag
Description
<XXXMSGSET>
Service aggregate
<XXXMSGSETVn>
Version-of-message-set aggregate, 1 or more
</XXXMSGSETVn>
</XXXMSGSET>
The <XXXMSGSETVn> aggregate has the following form:
Tag
Description
<XXXMSGSETVn>
Message-set-version aggregate
<MSGSETCORE>
Common message set information
</MSGSETCORE>
message-set specific
Zero or more attributes specific to this version of this
message set, as defined by each message set
</XXXMSGSETVn>
The common message set information <MSGSETCORE> is as follows:
Tag
Description
<MSGSETCORE>
Common-message-set-information aggregate
<VER>
Version number, N-5 (version 1.0 formatted as 100)
<URL>
URL where messages in this set are to be sent
<OFXSEC>
Security level required for this message set; see Chapter 4
<TRANSPSEC>
Y if transport security must be used, N if not used; Boolean
A signon realm identifies a set of messages that can be accessed using
the same password. Realms are used to disassociate signons from specific services,
allowing FIs to require different signons for different message sets. In practice, FIs
will want to use the absolute minimum number of realms possible to reduce the user's
workload.
The profile message set functions the same way as all other message
sets; therefore, it contains a profile description for that message set. Because
<PROFMSGSET> is always part of a message set response, it is described here. Servers
that support profile information must include the <PROFMSGSET> as part of the
profile response <MSGSETLIST>. There are no attributes, but the aggregate must be
present to indicate support for the message set.
Tag
Description
<PROFMSGSET>
Message-set-profile-information aggregate
<PROFMSGSETV1>
Opening tag for V1 of the message set profile information
The Signup message set defines three messages to help users get setup
with their FI:
Enrollment - informs FI that a user wants to use Open Financial Exchange
and requests that a password be returned
Accounts - asks the FI to return a list of accounts, and the services
supported for each account
Activation - allows a client to tell the FI which services a user wants
on each account
There is also a message to request name and address changes.
Clients use the account information request on a regular basis to look
for changes in a user's account information. A timestamp is part of the request so that a
server has only to report new changes. Account activation requests are subject to data
synchronization, and will allow multiple clients to learn how the other clients have been
enabled.
In Open Financial Exchange files, the <SIGNUPMSGSV1> aggregate
identifies the Signup message.
The message sets in this chapter are designed to allow both FIs and
clients to support a variety of sign-up procedures. There are four basic steps a user
needs to go through to complete the sign-up:
Select the FI. Open Financial Exchange does not define this step
or provide message sets to support it. Client developers and FIs can let a user browse or
search this information on a web site, or might define additional message sets to do this
within the client. At the conclusion of this step, the client will have some minimal
profile information about the FI, including the set of services supported and the URL to
use for the next step.
Enrollment and password acquisition. In this step, the user
identifies and authenticates itself to the FI without a password. In return, the
user obtains a password (possibly temporary) to use with Open Financial Exchange. FIs can
perform this entire step over the telephone, through a combination of telephone requests
and a mailed response, or at the FI web site. FIs can also use the Open Financial Exchange
enrollment message to do this by means of the client. The response can contain a temporary
password or users can wait for a mailed welcome letter containing the password.
Account Information. In this step, the user obtains a list of
accounts available for use with Open Financial Exchange, and which specific services are
available for each account. Even if users have enrolled over the telephone, clients will
still use this message set to help users properly set up the accounts within the client.
Clients periodically check back with the FI for updates.
Service Activation. The last step is to activate specific services
on specific accounts. The activation messages support this step. Synchronization is
applied to these messages to insure that other clients are aware of activated services.
The combination of media-interface through which an FI accomplishes
these steps can vary. FIs might wish to do steps two through four over the telephone.
Clients will still use Open Financial Exchange messages in steps 3 and 4 to automatically
set up the client based on the choices made by the user over the phone. Other FIs might
wish to have the entire user experience occur within the client. Either way, the Open
Financial Exchange sign-up messages support the process.
To support the widest possible set of FIs, Open Financial Exchange
assumes that individual users and accounts are in a many-to-many relationship. Consider a
household with three accounts:
Checking 1 - held individually by one spouse
Checking 2 - held jointly by both
Checking 3 - held individually by the other spouse
Checking 2 should be available to either spouse, and the spouse holding
Checking 1 should be able to see both Checking 1 and 2.
Open Financial Exchange expects FIs to give each user their own user ID
and password. Each user will go through the enrollment step separately. A given account
need only be activated once for a service; not once for each user. Clients will use the
account information and activation messages to combine information about jointly-held
accounts.
If an FI prefers to have a single user ID and password per household or
per master account, they will have to make this clear to users through the enrollment
process. It is up to the FI to assign a single user ID and password that can access all
three of the checking accounts described above.
The main purpose of the enrollment message is to communicate a user's
intent to access the FI by way of Open Financial Exchange and to acquire a password for
future use with Open Financial Exchange. Some FIs might return a user ID and an initial
password in the enrollment response, while others will send them by way of regular mail.
NOTE: Because the server does not know the user ID and
password when the client sends the enrollment request, the <SONRQ> will not contain
a valid user ID or password. The enrollment message accepts standard user identification
information.
Enrollment requests are not subject to synchronization. If the client
does not receive a response, it will simply re-request the enrollment. If a user
successfully enrolls from another client before the first client obtains a response, the
server should respond to subsequent requests from the first client with status code:
The Open Financial Exchange <SONRQ> requires a user ID to uniquely
identify a user to an FI. Many FIs in the United States use social security numbers (SSNs)
as the ID. Others create IDs that are unrelated to the users' SSNs. FIs can have an
existing user IDs that they use for other online activities that they wish to use for Open
Financial Exchange as well. They might also create new IDs specifically for Open Financial
Exchange. Finally, some FIs might assign IDs while others might allow users to create
them.
Because users do not usually know either their Open Financial Exchange
sign-on user ID or their password at time of enrollment, the enrollment response is
designed to return both. The enrollment request allows users to optionally provide a user
ID, which an FI can interpret as their existing online ID or a suggestion for what their
new user ID should be. It is recommended that the enrollment process explains ID syntax to
users.
The enrollment request captures enough information to identify and
authenticate a user as being legitimate and that it has a relationship with the FI.
FIs might require that an account number be entered as part of the
identification process. However, this is discouraged since the account information request
is designed to automatically obtain all account information, avoiding the effort and
potential mistakes of a user-supplied account number.
It is RECOMMENDED that FIs provide detailed specifications for
IDs and passwords along with information about the services available when a user is
choosing an FI.
Tag
Description
<ENROLLRQ>
Enrollment-request aggregate
<FIRSTNAME>
First name of user
<MIDDLENAME>
Middle name of user
<LASTNAME>
Last name of user
<ADDR1>
Address line 1
<ADDR2>
Address line 2
<ADDR3>
Address line 3
<CITY>
City
<STATE>
State or province
<POSTALCODE>
Postal code
<COUNTRY>
3-letter country code from ISO/DIS-3166
<DAYPHONE>
Daytime telephone number
<EVEPHONE>
Evening telephone number
<EMAIL>
Electronic e-mail address
<USERID>
Actual user ID if already known, or preferred user ID if
user can pick
<TAXID>
ID used for tax purposes (such as SSN), may be same as user
ID
<SECURITYNAME>
Mother's maiden name or equivalent
<DATEBIRTH>
Date of birth
<ACCTFROM>
An account description aggregate for one existing account
at the FI, for identification purposes only. Can be <BANKACCTFROM>,
<INVACCTFROM>, etc.
</ACCTFROM>
</ENROLLRQ>
This enrollment request is intended for use only by individuals. Business enrollment
will be defined in a later release.
The main purpose of the enrollment response is to acknowledge the
request. In those cases where FIs permit delivery of an ID and a temporary password, the
response also provides for this. Otherwise the server will send the real response to the
user by way of regular mail, electronic mail, or over the telephone. If enrollment is
successful, but the server does not return the ID and password in the response, a server
is REQUIRED to use status code 10 and provide some information to the user by means of the
<MESSAGE> element in the <STATUS> aggregate about what to expect next.
Tag
Description
<ENROLLRS>
Enrollment-response aggregate
<TEMPPASS>
Temporary password
<USERID>
User ID
<DTEXPIRE>
Time the temporary password expires (if <TEMPPASS>
included)
Account information requests ask a server to identify and describe all
of the accounts accessible by the signed-on user. The definition of all is up to
the FI. At a minimum, it is RECOMMENDED that a server include information about all
accounts that it can activate for one or more Open Financial Exchange services. To give
the user a complete picture of his relationship with an FI, FIs can give information on
other accounts, even if those accounts are available only for limited Open Financial
Exchange services.
Some service providers will not have any prior knowledge of any user
account information. The profile allows these servers to report this, and clients will
then know to ask users for account information rather than reading it from the server.
Clients can perform several tasks for users with this account
information. First, the information helps a client set up a user for online services by
giving it a precise list of its account information and available services for each.
Clients can set up their own internal state as well as prepare service activation requests
with no further typing by users. This can eliminate data entry mistakes in account
numbers, routing transit numbers, and so forth.
Second, FIs can provide limited information on accounts that would not
ordinarily be suitable to Open Financial Exchange services. For example, a balance-only
statement download would be useful for certificates of deposits even though a customer or
an FI might not want or allow CDs to be used for full statement download.
For each account, there is one <ACCTINFO> aggregate returned. The
aggregate includes one service-specific account information aggregate for each available
service on that account. That, in turn, provides the service-specific account
identification. Common to each service-specific account information aggregate is the
<SVCSTATUS> tag, which indicates the status of this service on this account.
A server should return joint accounts (accounts for which more than one
user ID can be used to access the account) for either user. Clients that wish to have a
unified view will aggregate the results and remove duplicates before making specific
requests involving joint accounts.
Requests and responses include a <DTACCTUP> element. Responses
contain the last time a server updated the information. Clients can OPTIONALLY send
this in a subsequent request, and servers are REQUIRED to compare this to the
current modification time and only send information if it is more recent. The server sends
the entire account information response if the client's time is older; there is no attempt
to incrementally update specific account information.
URL to request the logo for the account (actual logos
should be included via multi-part MIME in the response file if requested), URL
<XXXACCTINFO>
Service-specific account information, defined in each
service chapter, one or more allowed
<XXXACCTFROM>
Service-specific account identification
</XXXACCTFROM>
<SVCSTATUS>
AVAIL = Available, but not yet requested
PEND = Requested, but not yet available
ACTIVE = In use
</XXXACCTINFO>
</ACCTINFO>
NOTE: A server uses the <DESC> field to convey the FI's preferred name
for the account, such as "PowerChecking." It should not include the account
number.
Clients inform FIs that they wish to start, modify, or terminate a
service for an account by sending service activation requests. These are subject to data
synchronization, and servers should send responses to inform clients of any changes, even
if the changes originated on the server.
Clients use these records during the initial user sign-up process. Once
a client learns about the available accounts and services (by using the account
information request above, or by having a user directly enter the required information),
it sends a series of service ADD requests.
If a user changes any of the identifying information about an account,
the client sends a service activation request containing both the old and the new account
information. Servers should interpret this as a change in the account, not a request to
transfer the service between two existing accounts, and all account-based information such
as synchronization tokens should continue. If a user or FI is reporting that service
should be moved between two existing accounts, service must be terminated for the old
account and started for the new account. The new account will have reset token histories,
as with any new service.
Each service to be added, changed, or removed is contained in its own
request because the same real-world account might require different <ACCTFROM>
aggregates depending on the type of service.
Service activation requests are subject to the standard data
synchronization protocol. The scope of these requests and the <TOKEN> is the
user-ID. The request and response tags are <ACCTSYNCRQ> and <ACCTSYNCRS>.
Users may request that an FI update the official name, address, phone,
and e-mail information using the <CHGUSERINFORQ>. Only the fields that should be
changed are sent. The response reports all of the current values. For security reasons,
some of the fields in the <ENROLLRQ> cannot be changed online, such as tax ID.
The transaction tag is <CHGUSERINFOTRNRQ> and
<CHGUSERINFOTRNRSRQ>. These methods are subject to synchronization,
<CHGUSERINFOSYNCRQ> and <CHGUSERINFOSYNCRS>.
A server must include the following aggregates as part of the profile
<MSGSETLIST> response, since every server must support at least the account
information and service activation messages. In the <ENROLLPROF> aggregate, servers
indicate how enrollment should proceed: via the client, a given web page, or a text
message directing users to some other method (such as a phone call)..
Tag
Description
<SIGNUPMSGSET>
Signup-message-set-profile-information aggregate
<SIGNUPMSGSETV1>
Opening tag for V1 of the message set profile information
<MSGSETCORE>
Common message set information, defined in the profile
chapter
</MSGSETCORE>
Enrollment options - only one of <CLIENTENROLL>,
<WEBENROLL>, or <OTHERENROLL> is allowed
<CLIENTENROLL>
Client-based enrollment supported
<ACCTREQUIRED>
Y if account number is required as part of enrollment Boolean
</CLIENTENROLL>
<WEBENROLL>
Web-based enrollment supported
<URL>
URL to start enrollment process
</WEBENROLL>
<OTHERENROLL>
Some other enrollment process
<MESSAGE>
Message to give to consumer about what to do next (e.g. a
phone number) A-80
</OTHERENROLL>
<CHGUSERINFO>
Y if server supports client-based user information changes
<AVAILACCTS>
Y if server can provide information on accounts with
SVCSTATUS available, N means client should expect to ask user for specific account
information Boolean
The e-mail message set includes two messages: generic e-mail and generic
MIME requests by way of URLs. In Open Financial Exchange files, the message set name is
EMAILMSGSV1.
Open Financial Exchange allows consumers and FIs to exchange messages.
The message body is in HTML so that FIs can provide some graphic structure to the message.
Keep in mind that, as with regular World Wide Web browsing, an Open Financial Exchange
client might not support some or all of the HTML formatting, so the text of the message
must be clear on its own. Clients can request that graphics (the images referenced in an
<IMG> tag) be sent as part of the response file, or clients can separately request
those elements. If a server sends images, it should use the standard procedure for
incorporating external data as described in Chapter 2. Servers are not required to support
HTML or to send images, even if the client asks.
A user or an FI can originate a message. E-mail messages are subject to
data synchronization so that a server can send a response again if it is lost or if it is
used by multiple clients.
Because e-mail messages cannot be replied to immediately, the response
should just echo back the original message (so that data synchronization will get this
original e-mail message to other clients). When the FI is ready to reply, it should
generate an unsolicited response (<TRNUID>0) and the client will pick this up during
synchronization.
Several services with Open Financial Exchange define e-mail requests and
responses that contain additional information specific to that service. To simplify
implementation for both clients and servers, this section defines a <MAIL> aggregate
that Open Financial Exchange uses in all e-mail requests and responses. For regular
e-mail, the only additional information is an account from aggregate and whether to
include images in the e-mail response or not.
Body of message, HTML-encoded or plain text depending on
<USEHTML>, A-10000
</MSGBODY>
End of message
<INCIMAGES>
Include images in response, Boolean
<USEHTML>
Y if client wants an HTML response, N if client wants plain
text, Boolean
</MAIL>
If using HTML for the message body, clients and servers are REQUIRED to wrap the
desired HTML in an SGML marked section to protect the HTML markup: <![ CDATA [ ... html
... ]]>. See the example.
E-mail is subject to synchronization. The transaction tag is
<MAILTRNRQ> / <MAILTRNRS> and the synchronization tag is <MAILSYNCRQ> /
<MAILSYNCRS>.
Tag
Description
<MAILRQ>
E-mail-message-request aggregate
<MAIL>
Core e-mail aggregate
</MAIL>
</MAILRQ>
In a response, the <TRNUID> is zero if this is an unsolicited message. Otherwise,
it should contain the <TRNUID> of the user's original message. It is RECOMMENDED
that servers include the <MESSAGE> of the user's message as part of the reply
<MESSAGE>. The <MESSAGE> contents can include carriage returns to identify
desired line breaks.
Open Financial Exchange uses data synchronization to collect responses
that could have been lost due to communication problems, or that the servers previously
sent to a different client or data file. All messages sent to the signed-on user ID are
covered by a single <TOKEN>. Note that this synchronization action expects only the
basic <MAILRS> responses. Specialized e-mail is received by means of their own
synchronization requests.
Tag
Description
<MAILSYNCRQ>
E-mail-synchronization-request aggregate
<TOKEN>
Client history marker
<INCIMAGES>
Include images in response, Boolean
<USEHTML>
Y if client wants an HTML response, N if client wants plain
text, Boolean
In this example, a consumer requests information from customer service
about the checking statement just downloaded. This example omits the <OFX> top level
and the signon <SONRQ>. This example uses HTML for the message body, and so it must
protect the HTML content in an SGML CDATA marked section.The request:
<MAILTRNRQ>
<TRNUID>54321
<MAILRQ>
<MAIL>
<USERID>123456789
<FROM>James Hackleman
<TO>Noelani Federal Savings
<SUBJECT>What do I need to earn interest?
<DTCREATED>19960305
<MSGBODY><![ CDATA [<HTML><BODY>I didn't earn any interest this month. Can you please tell me what I need to do to earn interest on this account?</BODY></HTML>
]]></MSGBODY>
<INCIMAGES>N
<USEHTML>Y
</MAIL>
</MAILRQ>
</MAILTRNRQ>The response from the FI:
<MAILTRNRS>
<TRNUID>54321
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<MAILRS>
<MAIL>
<USERID>123456789
<DTCREATED>19960307
<FROM>Noelani Federal Savings
<TO>James Hackleman
<SUBJECT>Re: What do I need to earn interest?
<MSGBODY>><![ CDATA [<HTML><BODY>You need to maintain $1000 in this account to earn interest. Because your balance was only $750 this month, no interest was earned. You could also switch to our new Checking Extra plan that always pays interest. Call us or check our web page http://www.fi.com/check-plans.html for more information.
Sincerely,
Customer Service Department
Original message:
I didn't earn any interest this month. Can you please tell me what I need to do to earn interest on this account?</BODY></HTML>
]]></MSGBODY>
<INCIMAGES>N
<USEHTML>Y
</MAIL>
</MAILRS>
</MAILTRNRS>
Example of Synchronization Involving E-Mail
In the following example the client did not receive the reply to the
message sent in the previous example, so its <TOKEN> is one less than the server's.
The server replies by giving the current <TOKEN> and the missed response.
<MAILSYNCRQ>
<TOKEN>101
</MAILSYNCRQ>
<MAILSYNCRS>
<TOKEN>102
<MAILTRNRS>
<TRNUID>54321
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<MAILRS>
... contents of e-mail message response as shown in previous example
</MAILRS>
</MAILTRNRS>
</MAILSYNCRS>
Some responses contain values that are URLs, intended to be separately
fetched by clients if desired. Clients can use their own HTTP libraries to perform this
fetch outside of the Open Financial Exchange specification. However, to insulate clients
against changes in transport technology, and to allow for fetches that require the
protection of an authenticated signon by a specific user, Open Financial Exchange defines
a transaction roughly equivalent to an HTTP Get. Any MIME type can be retrieved, including
images as well as HTML pages.
The following table lists the components of a request:
Tag
Description
<GETMIMERQ>
Get-MIME-request aggregate
<URL>
URL, URL
</GETMIMERQ>
The response simply echoes back the URL. The actual response, whether HTML, an image,
or some other type, is always sent as a separate part of the file using multi-part MIME.
If either or both of the messages in the e-mail message set are
supported, the following aggregate must be included in the profile <MSGSETLIST>
response.
Tag
Description
<EMAILMSGSET>
E-mail-message-set-profile-information aggregate
<EMAILMSGSETV1>
Opening tag for V1 of the message set profile information
<MSGSETCORE>
Common message set information, defined in the profile
chapter
Open Financial Exchange enables users to automate transactions that
occur on a regular basis. Recurring transactions are useful when a customer has payments
or transfers, for example, that repeat at regular intervals. The customer can create a
"model" at the server for automatic generation of these instructions. The model
in turn creates payments or transfers until it is canceled or expires. After the user
creates a recurring model at the server, the server can relieve the user from the burden
of creating these transactions; it generates the transactions on its own, based on the
operating parameters of the model.
The client must provide the following information to create a model:
Type of transaction generated by the model (payment or transfer)
Frequency of recurring transaction
Total number of recurring transactions to generate
Service-specific information, such as transfer date, payment amount,
payee address
The model creates each transaction some time before its due date,
usually thirty days. This allows the user to retrieve the transactions in advance of
posting. This also gives the user the opportunity to modify or cancel individual
transactions without changing the recurring model itself.
When a model is created, it can generate several transactions
immediately. The model does not automatically return responses for the newly created
transactions. It only returns a response to the request that was made to create the model.
For this reason, clients should send a synchronization request along with the request to
create a model. This allows the server to return the newly created transaction responses,
as well as the response to the request to set up a new model.
The Recurring Instructions aggregate is used to specify the schedule for
a repeating instruction. It is passed to the server when a recurring transfer or payment
model is first created.
Tag
Description
<RECURRINST>
Recurring-Instructions aggregate
<FREQ>
Frequency, see section 10.2.1
<NINSTS>
Number of instructions
If this tag
is absent, the schedule is open-ended, N-3
The following example illustrates the creation of a repeating payment.
The payment repeats on a monthly basis for 12 months. All payments are for $395.The
request:
.
.
.
<RECPMTRQ>
<RECURRINST>
<FREQ>MONTHLY
<NINSTS>12
</RECURRINST>
<PMTINFO>
<BANKACCTFROM>
<BANKID>555432180
<ACCTID>763984
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<TRNAMT>395.00
<PAYEEID>77810
<PAYACCT>444-78-97572
<DTDUE>19971115
<MEMO>Auto loan payment
</PMTINFO>
</RECPMTRQ>
.
.
.
The response includes the <RECSRVRTID>
that the client can use
to cancel or modify the model:
.
.
.
<RECPMTRS>
<RECSRVRTID>387687138
<RECURRINST>
<FREQ>MONTHLY
<NINSTS>12
</RECURRINST>
<PMTINFO>
<BANKACCTFROM>
<BANKID>555432180
<ACCTID>763984
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<TRNAMT>395.00
<PAYEEID>77810
<PAYACCT>444-78-97572
<DTDUE>19971115
<MEMO>Auto loan payment
</PMTINFO>
</RECPMTRS>
.
.
.
Once created, a recurring model independently generates instructions.
Since the client has not directly generated these transactions, the client has no record
of their creation. To enable users to modify and/or cancel pending instructions, the
client must use data synchronization in order to retrieve these transactions.
The client has two purposes for synchronizing state with the server with
respect to recurring models:
Retrieve any added, modified, or canceled recurring models
Retrieve any added, modified, or canceled transactions generated by any
models
The client must be able to synchronize with the state of any models at
the server, as well as the state of any transactions generated by the server.
Once created and retrieved by the customer, recurring payments and
transfers are almost identical to customer-created payments or transfers. As with ordinary
payments or transfers, you can cancel or modify transactions individually. However,
because servers generate these transfers, they are different in the following respects:
Recurring transactions must be retrieved as part of a synchronization
request.
Recurring transactions are related to a model. A server can modify or
cancel transactions if the model is modified or canceled.
A recurring model can be modified or canceled. When a model is modified,
all transactions that it generates in the future will change as well. The client can
indicate whether transactions that have been generated, but have not been sent, should be
modified as well. The actual elements within a transaction that can be modified differ by
service. See the recurring sections within the Banking and Payments chapters for details.
A user can cancel a model immediately or at a future date. If a user
cancels the model immediately, the client cancels any transactions that it has not yet
sent. If the client schedules the cancel for a future date, the client will not cancel
pending transactions.
Canceling a recurring payment model requires the client to pass the
<RECSRVRTID> of the model. The client requests that pending payments also be
canceled. The server cancels the model immediately and notifies the client that both the
model and any scheduled payments were canceled.The request:
The server also cancels any payments that have been generated but not
executed. In the example shown above, the client would not learn of this immediately. To
receive notification that the model and all generated payments were canceled, the client
would need to include a synchronization request in the file. The following example
illustrates this alternate approach.The request file now includes a synchronization
request:
.
.
.
<RECPMTCANCRQ>
<RECSRVRTID>387687138
<CANPENDING>Y
</RECPMTCANCRQ>
<PMTSYNCRQ>
<TOKEN>12345
<BANKACCTFROM>
<BANKID>123432123
<ACCTID>516273
<ACCTTYPE>CHECKING
</BANKACCTFROM>
</PMTSYNCRQ>
.
.
.
The response file now contains two responses
(assuming one payment was pending),
one for the canceled model and one for the canceled payment.
.
.
.
<RECPMTCANCRS>
<RECSRVRTID>387687138
<CANPENDING>Y
</RECPMTCANCRS>
<PMTSYNCRS>
<TOKEN>3247989384
<BANKACCTFROM>
<BANKID>123432123
<ACCTID>516273
<ACCTTYPE>CHECKING
</BANKACCTFROM>
<PMTTRNRS>
<TRNUID>10103
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<PMTCANCRS>
<SRVRTID>1030155
</PMTCANCRS>
</PMTTRNRS>
</PMTSYNCRS>
.
.
.