text:
L'église Notre-Dame-de-l'Assomption est située à Ascain, dans les Pyrénées-Atlantiques. Elle est dédiée à l'Assomption de la Vierge Marie et dépend du diocèse de Bayonne.

Description
Cette église fut construite au , mais fut détruite et reconstruite aux . Inaugurée en 1626, elle mesure  de long par  de large. Sa nef s'élève à  et son clocher-porche culmine à . Celui-ci possède quatre étages et trois arcs en plein-cintre. La plus grosse des quatre cloches, qui date de 1904, mesure  et pèse .

Sa tribune, qui comporte trois niveaux, date du . L'église est inscrite aux monuments historiques depuis 1988. Le chœur est surélevé et la sacristie se trouve en-dessous. Le retable, de style baroque, est remarquable. On y trouve une statue de la Vierge en son Assomption, entourée de saint Joseph et saint Jean l'Évangéliste et surmontée d'une colombe. De part et d'autre du tabernacle, se trouvent les statues de saint Pierre et saint Paul.

Les retables latéraux contiennent les statues du Sacré-Cœur et une Vierge à l'Enfant. L'étroite porte des cagots se trouve sur le côté gauche, comme la chaire.

L'orgue, construit par la maison paloise Pesce en 1987, dispose de 20 jeux et deux claviers.

On y trouve également un ex-voto long de , en forme de trois-mâts nommé Assomption. Il rappelle le passé portuaire et maritime du village, réputé pour ses chantiers navals.

Galerie d'images

Notes et références

Voir aussi

Articles connexes
 Liste des monuments historiques des Pyrénées-Atlantiques

Liens externes

Monument historique inscrit en 1988
Ascain
Ascain

redpajama_set_name: RedPajamaWikipedia


text:
SCOTUSBLOG looks at ex rel Rigsby and...
SCOTUSBLOG looks at ex rel Rigsby and the #SCOTUS review granted to @StateFarm
By: Magnolia Tribune - June 1, 2016
Today's orders: One new grant, one CVSG, two summary reversals
However, the FCA also requires a whistleblower to file her complaint under seal, where it must remain confidential for at least sixty days. And that, State Farm alleges, did not happen in the Rigsbys' case: before the seal was lifted, it contends, the Rigsbys and their attorney at the time – Dickie Scruggs, a prominent Mississippi trial lawyer who would go on to serve six years in federal prison on bribery charges – intentionally told the news media and a member of Congress about the suit, hoping to pressure State Farm to settle.
State Farm asked the district court to dismiss the case, citing the sisters' "repeated intentional violations of the FCA seal requirement." But the district court allowed the case to go forward, and the Fifth Circuit affirmed.
State Farm then filed a petition for certiorari with the Supreme Court, asking the Justices to take the case and determine what standard should apply to determine whether to dismiss an FCA complaint after a violation of the seal requirement. It contended that the lower courts are divided on what standard should be used: one circuit has established a bright-line rule that mandates dismissal; others look at whether "the violation incurably frustrates the congressional goals served by the seal requirement"; and the Fifth Circuit in this case used a balancing test that focuses on whether the violation actually harms the government.
#SCOTUS to hear @StateFarm case over Hurricane #Katrina fraud claim
Mississippi shines in charitable giving by county #whywelivehere

redpajama_set_name: RedPajamaCommonCrawl


Up for LISTING is a set of GOOD USED Mustang 5 lug rear disc brake conversion kit. This is a complete 79 - 93 5 lug rear disc conversion. This does include new dust shields, outer brake lines and emergency brake cables as seen. Includes everything seen in the pics.
Good used oem 28 spline axles. Used calipers and NEW brake pads. Need more parts other than what is pictured? If you did not get tracking it is probably because your spam filter deleted it.
If you feel that there is ANY reason to leave us LESS than a 5 on detailed feedback, please message me first and lets see if we can do anything to make up for it. UPS picks up here daily. Please don't ask me to drive 5 miles to the post office. PLEASE INCLUDE THE LISTING # WITH ALL QUESTIONS, WE ANSWER QUESTIONS MONDAY-FRIDAY 10.
The item "87 88 89 90 91 92 93 FORD MUSTANG 5 LUG REAR DISC BRAKE CONVERSION KIT FOX" is in sale since Tuesday, April 10, 2012. This item is in the category "eBay Motors\Parts & Accessories\Car & Truck Parts\Brakes & Brake Parts\Discs, Rotors & Hardware".
The seller is "mpsautosalvage" and is located in Statham, Georgia. This item can be shipped to United States, Canada, United Kingdom, Denmark, Romania, Slovakia, Bulgaria, Czech republic, Finland, Hungary, Latvia, Lithuania, Malta, Estonia, Australia, Greece, Portugal, Cyprus, Slovenia, Japan, Sweden, South Korea, Indonesia, Taiwan, Thailand, Belgium, France, Hong Kong, Ireland, Netherlands, Poland, Spain, Italy, Germany, Austria, Mexico, New Zealand, Singapore, Switzerland, Norway, Saudi arabia, Ukraine, United arab emirates, Qatar, Kuwait, Bahrain, Croatia, Malaysia, Bahamas, China, Barbados, Bangladesh, Bermuda, Brunei darussalam, Bolivia, Egypt, French guiana, Guadeloupe, Iceland, Jordan, Cambodia, Cayman islands, Sri lanka, Luxembourg, Monaco, Martinique, Maldives, Nicaragua, Oman, Pakistan, Paraguay, Reunion, Uruguay.


Daily Best™ Ultra is a balanced, convenient, economical one a day multiple vitamin/mineral supplement for adults.
Suggested Use: As a dietary supplement, take one capsule daily with food, or as directed by your healthcare practitioner.
Quatrefolic® is a registered trademark of Gnosis S.p.A. U.S. Patent No. 7,947,662TRAACS® is a registered trademark of Albion Laboratories, Inc.


text:
Palmerston North Girls' High School is a secondary school for girls, located in the suburb of West End in the city of Palmerston North, New Zealand.

Location
The main entrance of the school is located on Fitzherbert Avenue, near the Victoria Esplanade. Adjacent to the north are Huia Street and tennis courts. Behind the school is Manawaroa/Ongley Park.

History
In 1902, Palmerston North High School was a co-ed secondary school created with an initial roll of 84 students (40 boys and 44 girls).  The first classes were held at St Andrews Presbyterian Church Sunday School hall.

In 1912, Palmerston North High School was split into two single-sex schools: Palmerston North Girls' High School and Palmerston North Boys' High School.

School houses
Palmerston North Girls' High School is divided into four houses. On enrolment, students are placed in a house at random, or into a house with family ties if possible. Staff are also placed in the houses. Each house is named after a former principal of the school.

The house names and colours are as follows:

The student councils organise events, many of which contribute to the inter-house competition and points towards the award of the Nash Cup.

Demographics
At the September 2010 Education Review Office (ERO) review, Palmerston North Girls' High School had 1202 students enrolled, including 22 international students. 64 percent of students identified as New Zealand European (Pākehā), 17 percent identified as Māori, three percent as Pacific Islanders, and 16 percent as another ethnicity.

Palmerston North Girls' High School has a socio-economic decile of 8 (step P), meaning it draws its school community from areas of moderate to high socioeconomic advantage when compared to other New Zealand schools. This changed from decile 9 (step Q) at the beginning of 2015, as part of the nationwide review of deciles following the 2013 census.

Notable alumnae

 Rita Angus - painter
 Hannah Rowe - New Zealand White Fern (cricket)
 Georgia Barnett - 2015 Manawatu Sportswoman of the Year and Women's Black Sticks (hockey)
 Hannah Broederlow - New Zealand netball player
 Jessica Clarke - New Zealand model
 Joy Cowley - writer
 Rebecca Hull - New Zealand Women's rugby union player
 Anna Leese - opera singer
 Liana Leota - New Zealand netball player
 Emily Naylor - New Zealand Women's Black Sticks (hockey)
 Kayla Sharland - New Zealand Women's Black Sticks (hockey)

References

External links

Educational institutions established in 1912
Girls' schools in New Zealand
Schools in Palmerston North
Secondary schools in Manawatū-Whanganui
1912 establishments in New Zealand
Alliance of Girls' Schools Australasia


Yesterday's Stage 2 of the Ladies Tour of Qatar was a masterclass in why we love this race, but today's Stage 3 showed us another, equally fabulous, way to race it, with the winds getting over 40 kph, and the first breakaway going at kilometre 3! Just so much excitement, and it's even better because we get to see the race as it happens, and then get a ton of media to love after each stage. Here's my collection of video, photos, reports and more – and if you see things I've missed, please do tell me in the comments or on twitter.
Tomorrow's the final stage, and if you, like me, can't wait to watch it, here's my guide.
3. Lauretta Hanson (Aus) Australia, s.t.
4. Anouska Koster (Ned) Rabo-Liv, s.t.
I have to admit, there will never be enough photos of riders with camels for me, never! So I'm so happy about the rider, team and race social media today!
As always, I am incredibly grateful to the wonderful people who pay me on Patreon to do this kind of women's cycling work. How lucky am I?
Overwhelmed by the LtoQ crowds! Atmosphere? What atmosphere?


Though tools usage is what everybody does, only the experts can tell the difference between a tool and the other.
Most times, some tools come so closely related that they may even be used interchangeably without attention to what their individual "destined" functions are.
With an increasing need for more polished and precise machine parts, using 3 axis machine for a job that requires a 5 axis machine may leave you in a rat race – sure you won't want to run around circles without getting the expected results.
Do You Need To Buy a Machining Center? Get This!
Before going any further with your purchase, you need to know this and get it right. Whether your need may be the 5, 4 or 3 axis machining center (you sure know which suits best for your intended use; optical, aerospace, medical and others), here is a secret you have to keep in mind as a guide.
Spending so much money on a new machining center is never a guarantee that you will get the right tool. Better still, going for a used machining center can be of great value especially when you make such purchase from reliable used machine market place.
Don't forget this - you can save some cool change for another machine from such deal.
So, let's get down to the real gist! Have you been wondering what is the relationship or variation between a 3, 4 or 5 axis machining center? Sit back and be informed because this post is out to settle your curiosity.
The 3 axis CNC machining center came into the picture as a result of the need for a rotary filling machine. The manual technique of milling parts by the 3 axis machining center employs the three Cartesian coordinates of X, Y, and Z axes.
In its little quarters since inception, the 3 axis CNC milling machine has played a significant role with its own peculiar design which is notable of its static milling bed.
The 3 axis machining center is most suitable for the milling of mechanical parts with shallow depth but may be labor-intensive to use when trying to work on narrow cavities or parts that require deeper milling.
Though seen as old fashion currently, the 3 axis machining center is still accurate at its milling process and they have a multifunctional design for various milling jobs such as; milling slots, cutting of sharp edges, and for automatic interactive operations.
Nevertheless, the 3 axis machining center can also be employed in creating machine parts in which the 4 and 5 axis CNC milling machines are used for, but where a more precise and a detailed level of milling is the goal, the 3 axis machining center has its limit of use.
Thinking of an intermediary milling machine between the 3 axis and 5 axis machining center? The 4 axis milling machine bridge the gap.
The 4 axis is similar to the 3 axis in operation due to its static surface on which the cutting pieces move about to mill machine parts. With more features such as an additions cutting axis – the A axis, the 4 axis machining center gives more accurate, detailed, and precise drilling, milling, and engraving of mechanical parts compared to the 3 axis milling machine.
With its additional axis of operation, the 4 axis CNC machining center offers more operational use in addition to what the 3 axis machines can offer. Such operational diversity is visible in its ability to work on various materials like; foam, aluminum, composite board, wood, PCB and even alloy.
Being a multi-use CNC machining center, the 4 axis milling machines are suitable for the manufacture of various parts for different industries such as; medical equipment parts, art and sculpting, the design of advertising prototype, and teaching tools among others.
The bottom line remains, the 4 axis machining center's precise and operational competence is obviously higher than its 3 axis milling counterpart.
As far as 'now' is concerned, the 5 axis CNC machining center is the most advanced milling machine with a faster speed, more precise and clean machine parts production.
Its functioning ability is extremely different and superior with an impeccable machine parts creation when compared to the 3 axis and 4 axis milling machines.
Just as the name implies, the 5 axis CNC milling machine is designed to move in the 3 Cartesian directions; X, Y, and Z in addition to two other directions; A and B axes. In a single operation, what direction you wish to trim your parts from is never a hard task to accomplish with the 5 axis milling machine.
Unlike the 3 axis and 4 axis machining center that has a fixed bed with movable cutting pieces, the 5 axis CNC milling machine has both a movable bed surface and movable cutting pieces which helps it to carve, drill, or mill machine parts efficiently.
The abilities in the flexibility of operation with the 5 axis CNC machining center is visible in its application in the production of aerospace products, artificial bones, oil and gas machine parts, car moulds, medical parts, titanium creations (which can be used for both artistic an practical purposes), door frames, and even military grade products.
Worried about designs that seem impossible or materials that looks as though nothing can pierce or mill them? You have no problem then because, with the 5 axis CNC machining center, the most tedious and complex designs so far in the world have been successfully created and produced using the 5 axis milling machines. Also, drilling to any depth is carried out effortlessly with the 5 axis milling machine.
If high product turnaround, precision (with a reduced tool vibration) and excellent milling accuracy are what you desire, the 5 axis CNC milling machine can be likened to a jack of all trade – as far as mechanical parts production is concerned.
To whom much is given much is expected. While the 3 axis machine is simpler to operate with a shorter machining time, the 5 axis machining center takes a longer preparation and machining time with less material handling.Do you need professional guidance?
Do you need professional guidance?
So, with this post, we have perfectly played our part of the game, now the ball is in your court to decide which machining type to purchase based on your job demands and budget.
For smaller budgets with high machine value, buying a used machining center can be a wise alternative to make.
In need of professional advice and guidance? Feel free to call on us because we are always glad and available to be of help.


This letter was probably written early in 1931. With other members of the Old Vic Company, Gielgud had gone to Harrow School to read the role of Hamlet, with boys playing the minor parts.
The climax came when in the play scene, I looked up to say "Begin murderer, leave thy damnable faces'' to be greeted by a minute Siamese boy - coal black - very small with enormous spectacles and an Eton collar, I hadn't noticed him before. It appeared afterwards that he is a Prince and the leading light of the Shakespeare Society but I nearly died of inward laughter, and interpolated hysterical chuckles for a whole page after. Also we were very pleased at pushing in all the bawdy lines fortissimo which had been removed from the school edition. Can you imagine? "Vixen like" for "like a whore''!!!
Musical Chairs was an unsolicited play sent to JG by an old primary-school friend, Ronald Mackenzie. After try-out performances at the Arts Theatre in 1931, it opened at the Criterion Theatre on 1 April 1932.
Thank you very much for writing as you did. I was very upset at the time, because as you know I had always admired you and your work so very much and also because in a way I have always thought my success in the theatre only began after the Vortex time - this play was my own discovery and I had much to do with the casting and getting it produced, so naturally I was very anxious you of all people should like it. But you are quite right, of course. I act very badly in it sometimes, more especially I think when I know people who matter are in front. And such a small theatre as the Criterion is difficult for me, who am used to the wastes of the Old Vic and His Majesty's. If I play down, they write and say I'm inaudible and if I act too much, the effect is dire. Now and again one can strike the happy mien and give a good performance. But then, it is no use trying to excuse oneself. I played ever so much better today after reading your letter, and I am really glad when I get honest criticism, though sometimes it's a bit hard to decide whom to listen to and whom to ignore. One day you must produce me in a play, and I believe I might do you credit. Anyway, I think it was like you to write like that, and I do appreciate it.
After the success of Hamlet at the New Theatre in 1935, JG made a short regional tour, visiting Manchester, Glasgow, Edinburgh and Leeds. Franklin Dyall took over from Frank Vosper as Claudius.
We had a hectic first night - the production is almost impossible to set up, light, rehearse changes and do supers and orchestra as well, all in a few hours. The staff did wonders really, but it was rather a garbled performance as you can imagine. No room on the apron at all, music all over the place, Dyall frightful, nervous, fluffy and inaudible, and soldiers of minute size - Mancunian dwarfs, I imagine, doing everything wrong conceivable and almost eclipsed (fortunately) under those large hats.
I'm so sorry but I can't possibly read your play for a fortnight or so, as I have already a pile of manuscripts on hand and in addition I have to finish my autobiography [Early Stages] by the end of the month. If you care to send it back to me then of course I shall be pleased to read it.
Mr Lion did send back his play, which was about Franz Liszt.
Alas, I have an unreasoning hatred for biographical plays about musical geniuses. I think their music is so much more interesting than their idiosyncrasies, and one can never convince an audience of the talent, only of the tiresomeness. So I must send you back your play anyway I am bound to Dear Octopus until June, and have two alternative schemes for next autumn. Thank you all the same for thinking of me.
Have had my tunic made longer and abandoned the boots in favour of chain mail as [critic] Alan Dent says my knees are not suited to the exhibition of high tragedy and I fancy he speaks some truth.
I cannot resist entering into your argument apropos of the time problem in Shakespeare for Granville-Barker [British actor, director and author] once gave me a magnificent disquisition on the subject. I cannot quote his brilliantly lucid words with certainty, but this is the gist of them.
We were rehearsing the great scene in Lear, and after the cursing of Goneril, "Hear, Nature, hear," Lear leaves the stage, to return a few lines later with the words "What, fifty of my followers at a clap, within a fortnight?" I asked (like Lady Bracknell, merely for information) "Who has told Lear about the sacking of his followers? Oswald, perhaps, off stage?" "That," said Barker, "is the kind of mistake you actors make, worrying about such realistic off-stage happenings. Shakespeare never wrote in this convention. The absence and reappearance, with time and action meticulously accounted for both by actors and audience, of characters in plays was not used by dramatists until the school of Ibsen. Shakespeare wishes to show the audience that Lear, though capable of the mighty curse, leaves Goneril's house already shaken and mentally weakened by the scene he has gone through, and so he brings him back on to the stage with a weaker tearful speech before his final exit." I'll warrant the old actors cut the return altogether, and waited for a big hand and an exit after the curse. Someone has, of course, told Lear and no matter who.
The same applies to Macbeth. Exactly when the two of them planned the murder, how long before the play opens they had talked about it ("What beast was't then that made you break this enterprise to me?") - these points will not be important except to the actors' peace of mind and the student's speculation. It is easy enough for the players to show by their manner and make-up (and Shakespeare was there to tell them just how much to show) that some time has gone by between the murder and their entrance as King and Queen. Similarly, time must pass to allow Macduff to get to England and return with Malcolm. Again, the Macbeths have time (in their dressing rooms) to get older before the audience sees them again. These things are pure theatre, Shakespeare always wrote for swift performance, and what the audience saw before their eyes he knew they would accept. If we had not studied the plays for three hundred years in such detail these things would not trouble us.
I had the most enchanting letter from Larry Olivier and also one from Ralph [Richardson]. They are both touchingly sincere and generous in saying they feel embarrassment in being recognised over me* and I must say the fact that they should feel that way towards me and the knowledge that I have so many good friends in the theatre is a great satisfaction to me. I should like to have the honour because I know how much it would please you - but otherwise I think it is the standard of work more than actual achievement in terms of spectacular success that counts, though indeed I've had my share of the latter too, one way and another. But I used to be rather jealous - and should still be indeed if someone like [British actor and manager Donald] Wolfit was put over me - but I am not at all so when it concerns Ralph and Larry, whom I genuinely admire and respect and whose quality I know from working with them.
*Richardson was knighted in January 1947 and Olivier in May the same year.
I saw an interesting play called The Streetcar Named Desire in which Jessica Tandy has made a great success. Very fine direction with an imaginative set - three rooms and a staircase also but quite different from ours, with transparent backings that occasionally show the street behind the walls - subtle noises and music. Very unpleasant and brutal, but awfully well acted, and the direction and writing, in a kind of counterpoint of violence contrasts with nostalgic tenderness, very effective and original. Without the subtle handling they give it, it would be merely pathological gloom and ugliness, but it has a kind of weird beauty and pathos, like Debussy's or Poulenc's music.
Now this week on top of everything else, I have been hauled in to re-direct The Heiress which opens on Monday at Brighton with Peggy Ashcroft and Ralph Richardson. They didn't decide to get rid of the director, after the usual heartbreak and hysteria, until four days ago, and I've had exactly four nights and three days to do a completely new production as regards moves, furniture and business. I must say the cast behaved magnificently, and I even dare be confident that the play now has a good chance which is rather exciting, and I think it might even be another Barretts [of Wimpole Street]. Peggy gives a most touching and moving performance and the only weakness is the young man, James Donald, who is a dour Scottish character, very unskilled and stubborn as a mule, and if I get a good result from him in the end shall really think I am something of a wizard.
I saw The Heiress twice before leaving London. It was very well played - [James] Donald very much surer and with much charm and attack. I bullied Ralph [Richardson] a bit about his opening scene and tried to persuade him not to pick Peggy's handkerchief at the party as if he was Fagin teaching the Artful Dodger.
In 1950, JG was starring in British playwright Christopher Fry's The Lady's Not for Burning in New York.
Wednesday was a thrilling night, and I shall be able to tell my stepchildren that I played for a whole year to not an empty seat. There's comfort for the fireside in the dog days to come. All the reporters clamour for details of your life and personal behaviour, till I tell them I am getting bored describing you as a dear and modest and ideal to work with.
I made one or two little cuts in Boston, and I do hope you wouldn't mind too badly. The first cut was tricky the first night. Richard [Burton] will drop the last three words of his sentences and gets too flat in his opening speech - Penny [Munday] and E[sme Percy] have come up splendidly, and Nora [Nicholson] has had a personal success, she is miles better than she was in London. I'm so delighted for her.
New York is a terrifying city but hectically beautiful in many ways. The kindness and welcome are overwhelming, but there is too much money, food and drink and too much respect for success, while endeavour and failure are just ignored, or swept away as if there wasn't any time or place for them.
Dear Christopher, thank you for the play and all it has given me in pleasure and worth. Your success will always be among my favourite theories that good things will always achieve recognition in the theatre and the people here are hungrier even than ours for new beauties, only sometimes the trash theatre, sold and fed them in such relentless streams, cloy up their spirits with vulgarity.
I was so delighted and touched to get your letter, and I feel I must seem very ungrateful not to fall in immediately with your plan of doing The School [for Scandal] next year. The difficulty is that I have been working since our Measure [for Measure] at Stratford with Peter Brook on a project for Winter's Tale for the Festival and he is very much in demand, as you know, and has kept himself free for June in order to do this production with me as soon as I am free.
I feel I want to do a new part when I next appear in London rather than one I have played before, and the reputation of my performances as Joseph [Surface] (a legend largely created by you!) is one I should hate to risk spoiling by trying to do it again and perhaps make a mess of it. Much as I should adore to work again with you - and Viv [Vivien Leigh] - I can't help feeling that a revival of something already done is somehow a confession of weakness - that is why I turned down the idea of The Importance which everybody thought at first to be the obvious and easy choice.
If you and I and Ralph could have done Julius Caesar, I would have been keen on that, because the play also has not been done in London for a long time, but Ralph seems to be committed elsewhere and I did Cassius too recently. Although originally I thought it would be a good play to have us all work together for the fun it would be, it is also true that too many stars in one play will not be a good plan, for nobody would be able to get in, and there would be one great attraction and a lot of second rate ones at the other theatres. Whereas if each of us who can command an audience (one hopes!) put on a new show at three or four theatres, it will make the Festival more varied and divide the amount of work for the supporting actors to greater advantage. Does this make sense to you or do you think me very selfish? I would so love to have seen you and had a real talk about the whole thing - it was very tiresome being at Stratford when the meetings were held at the beginning of the year, and I only got second hand accounts of what plans were afoot.
I hope Viv's play [A Streetcar Named Desire] turned into as splendid a picture as she hoped. How did she get on with Brando, I wonder?
My love to you and please don't think too badly of me for saying no to your offer. I do appreciate your suggesting it and wanting to work with me again.
As you will see from the other notice, the Hamlet was done last night and I was very disappointed with it. I cut it to quite a tolerable 1½ hour version, but by the time the producer had done with it another ten minutes had to go and what with "commercials'' from the sponsors and narrations from Horatio to make the action clear, the veriest skeleton was left - just the three big soliloquies and a smattering of the other scenes - the nunnery scene reduced to three or four lines and so on. Impossible to put over the character in such a truncated form - no humour left, no Rosencrantz and Guildenstern or Osric, all the sentimental moments overemphasised and so on. I really hated the whole thing and wished I had never agreed to it. Masses of treacly music was played almost throughout by a large orchestra and the whole thing vulgarised for popular appeal. The passion for interviews and snippety bits of so-called straight acting to fill out programmes is nauseating and cheap and I cannot bring myself to do it again.
I'm in the throes of [directing] Twelfth Night at Stratford, which opens April 12th. Then I go to Venice for ten days' respite before we rehearse Much Ado and Lear. Noguchi [Isamu Noguchi, Japanese artist] has done such exciting decor for the latter, and I only hope the director [George Devine] can devise the production to be worthy of it.
Olivier is brilliant as Malvolio, though he is very ultra-realistic in his approach, and his gift of mimicry (as opposed to creative acting) sticks in my gizzard at times. His execution is so certain and skilled that it is difficult to convince him that he can be wrong in his own exuberance and should occasionally curb and check it in the interests of the general line and pattern of the play. The truth is he is a born autocrat, and must always be right. He has little respect for the critical sensitivity of others; on the other hand he is quite brilliant in his criticism of my directing methods and impatient with my hesitance and (I believe) necessary flexibility. He wants everything cut and dried at once, so that he may perfect with utter certainty of endless rehearsal and repetition but he is good for me all the same, and perhaps I may still make a good thing of that divine play, especially if he will let me pull her little ladyship [Vivien Leigh as Viola] (who is brainier than he is but not a born actress) out of her timidity and safeness. He dares too confidently (and will always carry an undiscriminating audience with him) while she hardly dares at all and is terrified of overreaching her technique and doing anything that she has not killed the spontaneity of by over practice. It is an interesting problem, the pair of them Lynn and Alfred [Lunt, actors], I suppose, in parvo.
I can't begin to tell you how deeply I was touched by your sweet letter. Such generosity and thoughtfulness, above all, when you have so much to occupy and absorb you. What a lucky man I am to possess such a friend and I always seem to be making unwarrantable demands of friendship and receiving them back a hundred fold. I am ashamed of my own weakness in being so downed by bad notices and I confess to having been very low over the weekend when the last hope of the weeklies failed to console my wounded vanity but to have your sympathy and understanding has healed me as nothing else could, and I faced the audience tonight with defiant and glaring imperturbability and really felt I played better and found myself again. George [Devine] thought so too, and sends you his love and thanks with mine. I shall always remember, with so much else that I have to be grateful to you and Viv for, this sweet and infinitely thoughtful gesture of yours.
Bravo for Brazen.* I loved your performance, as usual, and much of the play, though it is a bit cumbersome here and there. Liked Colin Blakely so much, also Lynn Redgrave, [John] Stride and of course Maggie [Smith], who is brilliant. [Robert] Stephens plays well but somehow seems to lack charm, needed for so long a part. Lovely decor. I didn't come round, thinking you would want to get away to Brighton.
In 1965, JG was starring in Albee's Tiny Alice in New York.
You probably saw the London Times notice yesterday, and the one by Alan Brien in last Sunday's Telegraph - both bad. The reviews continue very poor, except for two raves from Boston critics - odd! - but the management here seem to be delighted and prophesy a six month run - I should be inclined to give it three but we shall see.
The play going wonderfully well. They say it will last till June. I would think April nearer the mark, but the audiences seem raptly attentive and the advance is excellent. A lady screamed out "Oh, it's all a lot of S---!'' the other night and was escorted with her husband from the theatre without more ado. I thought she was drunk, but I hear that friends of [Edward] Albee were sitting near them and they said she was so excited by my hallucination scene that she had a tiny frisson and screamed out at the climax! Who shall say?
Irene [Worth, actress] wears the most alarming underclothes when she strips for me in the play - a sort of armoured, flesh coloured corset and thigh length pink combinations. I shut my eyes and lunge to death every night, but I must say we giggle a lot about it. So difficult not to knock her down when I bury my face in her stomach, and not to trip over my riding boots while I am doing it. Her clothes, incidentally, are I think most disappointing - only Molyneux and Valentine as professional couturiers ever seem to bring it off on the stage. The negligee makes her look like Lady Dracula, and in the get-up for the last act, with a short skirt and hooded cloak, she looks like a Blue Cross nurse who has mislaid her collecting box. The sets are horrid too, only so high and vast that everyone thinks them beautiful and impressive. A ghastly carpet and awful poor French furniture. The walls are pickled oak, the whole effect like a particularly gloomy reading room at the Athenaeum, and the Cardinal's garden has enough creeper to smother Walt Disney. Well, well.


Associations minnows Tarrawanna Blueys SC are through to Round 7 of Football NSW's preliminary qualifying after they downed Kirrawee Kangaroos 2-1 in a big night of FFA Cup action across the country.
With games also being played in Northern NSW, Canberra, Northern Territory and Queensland on Wednesday, it was a night which also saw FNSW giants Sydney United 58 FC crash out and an 11-goal thriller in Alice Springs.
Sydney United, who are four-time FFA Cup participants and have progressed to the Round of 16 three times, fell on Wednesday night to Rockdale City Suns FC.
Rockdale had taken the lead in the 24th minute via a Bai Antoniou strike before Sydney United hit back soon after half-time thanks to Yianni Perkatis. But with time ticking away, Rockdale struck in the 86th minute to knock out their NSW National Premier League 1 rivals.
Elsewhere, Marconi Stallions FC survived an early scare against SD Raiders FC to progress 4-1, scoring four goals in 10 minutes to come from behind.
In the match between Football South Coast Association clubs Kirrawee Kangaroos and Tarrawanna Blueys, the Blueys survived a nervy ending to hang on and progress thanks to two goals in the opening 16 minutes.
And in Northern Territory, Alice Springs Celtic FC defeated Stormbirds SC 6-5.


text:
PowerAuth Web Flow server communicates with the Data Adapter via a REST API. This chapter defines the REST API implemented by Data Adapter and consumed by the Web Flow Server.

Following topics are covered in this chapter:
- [Status codes and error handling](#status-codes-and-error-handling)
- [Service status](#service-status)
- [User lookup](#user-lookup)
- [User authentication](#user-authentication)
- [User information](#user-information)
- [Decorate form data](#decorate-form-data)
- [Form data change notification](#formdata-change-notification)
- [Operation change notification](#operation-change-notification)
- [Generate authorization SMS](#generate-sms-authorization-code)
- [Verify authorization SMS code](#verify-authorization-sms-code)
- [Verify authorization SMS code and password](#verify-authorization-sms-code-and-password)
- [Initialize OAuth 2.0 consent form](#initialize-oauth-20-consent-form)
- [Create OAuth 2.0 consent form](#create-oauth-20-consent-form)
- [Validate OAuth 2.0 consent form](#validate-oauth-20-consent-form)
- [Save OAuth 2.0 consent form](#save-oauth-20-consent-form)
- [Execute an AFS action](#execute-an-afs-action)

You can access the generated REST API documentation in deployed Data Adapter:

```
http[s]://[host]:[port]/powerauth-data-adapter/swagger-ui.html
```

## Status codes and error handling

PowerAuth compliant Data Adapter uses a unified format for error response body, accompanied with an appropriate HTTP status code. Besides the HTTP error codes that application server may return regardless of server application (such as 404 when resource is not found or 503 when server is down).

All error responses that are produced by the Data Adapter should have following body:

```json
{
    "status": "ERROR",
    "responseObject": {
        "code": "ERROR_CODE",
        "message": "ERROR_MESSAGE_I18N_KEY"
    }
}
```

Expected error messages are explained in details in individual sections.

## Service Status

Get a system status response, with basic information about the running application.

Method
GET

Resource URI
/api/service/status

#### **Response**

```json
{
  "status": "OK",
  "responseObject": {
    "applicationName": "powerauth-data-adapter",
    "applicationDisplayName": "PowerAuth Data Adapter",
    "applicationEnvironment": "ENV1",
    "version": "0.22.0",
    "buildTime": "2019-06-21T12:49:22.959+0000",
    "timestamp": "2019-06-21T13:05:49.740+0000"
  }
}
```

- `applicationName` - Application name.
- `applicationDisplayName` - Application display name.
- `applicationEnvironment` - Application environment.
- `version` - Version of Data Adapter.
- `buildTime` - Time when the powerauth-data-adapter.war file was built.
- `timestamp` - Response timestamp.

## User Lookup

Performs a lookup of user account. The specified username is converted into a user ID. The username and user ID values
may be identical, however in typical deployments they are different.

		Method
		POST

		Resource URI
		/api/auth/user/lookup

The list of expected status codes during authentication:

| Code | Description |
|------|-------------|
| 200  | OK response - user details were successfully retrieved |
| 400  | `INPUT_INVALID` - username has invalid format |
| 400  | `USER_NOT_FOUND` - user account does not exist |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

```json
{
  "requestObject": {
    "username": "user1234",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "7662c638-9dc9-484c-a119-145b3685e623",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {}
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### Response - user account exists

```json
{
  "status": "OK",
  "responseObject": {
    "id": "12345678",
    "givenName": "John",
    "familyName": "Doe",
    "organizationId": "RETAIL",
    "accountStatus": "ACTIVE"
  }
}
```

### Response - user account exists, however the account is not active (e.g. blocked)

```json
{
  "status": "OK",
  "responseObject": {
    "id": "12345678",
    "givenName": "John",
    "familyName": "Doe",
    "organizationId": "RETAIL",
    "accountStatus": "NOT_ACTIVE"
  }
}
```

### Response - user account does not exist

```json
{
  "status": "ERROR",
  "responseObject": {
    "code": "USER_NOT_FOUND",
    "message": "login.userNotFound",
    "validationErrors": null,
    "remainingAttempts": null
  }
}
```

Note that in SCA steps the implementations should hide this error, because the error could reveal which usernames are valid
and which are not.

### Response - invalid input

```json
{
  "status": "ERROR",
  "responseObject": {
    "code": "INPUT_INVALID",
    "message": "login.username.empty",
    "validationErrors": [
      "login.username.empty.objectRequest.requestObject.username",
      "login.username.empty.requestObject.username",
      "login.username.empty.username",
      "login.username.empty.java.lang.String",
      "login.username.empty"
    ],
    "remainingAttempts": null
  }
}
```

## User Authentication

Performs an authentication operation with user ID and password. This method is not SCA compliant.

		Method
		POST

		Resource URI
		/api/auth/user/authenticate

The list of expected status codes during authentication:

| Code | Description |
|------|-------------|
| 200  | OK response - user was successfully authenticated |
| 400  | `INPUT_INVALID` - username and/or password has invalid format, unsupported authentication type |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 401  | `AUTHENTICATION_FAILED` - provide reason in the message in case it is available |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "password": "s3cret",
    "authenticationContext": {
      "passwordProtection": "NO_PROTECTION",
      "cipherTransformation": "",
      "smsAuthorizationResult": null
    },
    "operationContext": {
      "id": "447fbd89-6f46-46da-a573-ade4f3409c94",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {}
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### User Password Encryption and Decryption

The `NO_PROTECTION` password protection type is used for plain text password in request (sent by default).

The password can be optionally encrypted. In this case the `passwordProtection` parameter provides information about
type of password encryption and the `cipherTransformation` parameter contains information about used cipher.

It is expected that the remote system which handles password verification decrypts the password and it is not required to decrypt
the password in the Data Adapter itself. The following code sample decrypts the encrypted password for `PASSWORD_ENCRYPTION_AES` authentication type:

```java

// Get encryption key from the configuration and extract cipher transformation
// and encrypted password from the request.
String secretKeyBase64 = configuration.getSecretKey();
String cipherTransformation = request.getCipherTransformation();
String encryptedPassword = request.getPassword();

String originalPassword = decryptPassword(secretKeyBase64, cipherTransformation, encryptedpassword);

// ...

// Decryption method (missing the 'throws' clause).
private String decryptPassword(String secretKeyBase64, String cipherTransformation, String encryptedPassword) {
    // Read secret key from configuration
    byte[] secretKeyBytes = BaseEncoding.base64().decode(secretKeyBase64);
    SecretKey secretKey = new SecretKeySpec(secretKeyBytes, "AES");

    // Extract IV and encrypted password and convert them to bytes
    String[] parts = encryptedPassword.split(":");
    if (parts.length != 2) {
        throw new IllegalArgumentException("Invalid request");
    }
    String ivBase64 = parts[0];
    byte[] ivBytes = BaseEncoding.base64().decode(ivBase64);
    String encryptedPasswordBase64 = parts[1];
    byte[] encryptedPasswordBytes = BaseEncoding.base64().decode(encryptedPasswordBase64);

    // Decrypt password using specified cipher transformation, extracted IV and encrypted password bytes
    Cipher cipher = Cipher.getInstance(cipherTransformation);
    cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(ivBytes));
    byte[] decryptedPasswordBytes = cipher.doFinal(encryptedPasswordBytes);
    return new String(decryptedPasswordBytes, StandardCharsets.UTF_8);
}

// ...

// Verify that decrypted password matches expected password
```

### Response - authentication succeeded

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "authenticationResult": "SUCCEEDED",
    "userDetail": {
      "id": "12345678",
      "givenName": "John",
      "familyName": "Doe",
      "organizationId": "RETAIL",
      "accountStatus": "ACTIVE"
    },
    "errorMessage": null,
    "remainingAttempts": null,
    "showRemainingAttempts": false
  }
}
```

### Response - authentication failed

This message should be sent when the Data Adapter receives a correct message, however the username and password combination is invalid.

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "authenticationResult": "FAILED",
    "userDetail": null,
    "errorMessage": "login.authenticationFailed",
    "remainingAttempts": null,
    "showRemainingAttempts": false
  }
}
```

### Response - input validation errors

This error should be returned when username or password format is invalid - either it contains unsupported characters or it is empty or too long. This error is also used when authentication type is not supported.

The sample response below is returned when password is empty.

- Status Code: `400`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "ERROR",
  "responseObject": {
    "code": "INPUT_INVALID",
    "message": "login.password.empty",
    "validationErrors": [
      "login.password.empty.objectRequest.requestObject.password",
      "login.password.empty.requestObject.password",
      "login.password.empty.password",
      "login.password.empty.java.lang.String",
      "login.password.empty"
    ],
    "remainingAttempts": null
  }
}
```

For more information, see classes `AuthenticationRequestValidator` and `DefaultExceptionResolver`.

### Response - internal error

This error should be used for all unexpected errors.

- Status Code: `500`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "ERROR",
  "responseObject": {
    "code": "ERROR_GENERIC",
    "message": "Exception occurred at ...",
    "validationErrors": null,
    "remainingAttempts": null
  }
}
```

## User Information

Fetches user details based on user ID.

		Method
		POST

		Resource URI
		/api/auth/user/info

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - user details have been successfully retrieved |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `USER_NOT_FOUND` - user account does not exist |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL"
  }
}
```

### Response - user info successfully retrieved

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "id": "12345678",
    "givenName": "John",
    "familyName": "Doe",
    "organizationId": "RETAIL",
    "accountStatus": "ACTIVE"
  }
}
```

## Decorate Form Data

Retrieve form data and decorate it (optional).

### Request parameters

		Method
		POST

		Resource URI
		/api/operation/formdata/decorate

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - form data was successfully decorated |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `USER_NOT_FOUND` - user account does not exist |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "371526cc-5dee-414e-8418-5ee1c5ef2d67",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### Response

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "formData": {
      "title": {
        "id": "operation.title",
        "message": "Confirm Payment"
      },
      "greeting": {
        "id": "operation.greeting",
        "message": "Hello,\nplease confirm following payment:"
      },
      "summary": {
        "id": "operation.summary",
        "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
      },
      "config": [],
      "banners": [],
      "parameters": [
        {
          "type": "AMOUNT",
          "id": "operation.amount",
          "label": "Amount",
          "valueFormatType": "AMOUNT",
          "formattedValues": {
            "amount": "100.00",
            "currency": "CZK"
          },
          "amount": 100,
          "currency": "CZK",
          "currencyId": "operation.currency"
        },
        {
          "type": "KEY_VALUE",
          "id": "operation.account",
          "label": "To Account",
          "valueFormatType": "ACCOUNT",
          "formattedValues": {
            "value": "238400856/0300"
          },
          "value": "238400856/0300"
        },
        {
          "type": "KEY_VALUE",
          "id": "operation.dueDate",
          "label": "Due Date",
          "valueFormatType": "DATE",
          "formattedValues": {
            "value": "Jun 29, 2019"
          },
          "value": "2019-06-29"
        },
        {
          "type": "NOTE",
          "id": "operation.note",
          "label": "Note",
          "valueFormatType": "TEXT",
          "formattedValues": {
            "value": "Utility Bill Payment - 05/2019"
          },
          "note": "Utility Bill Payment - 05/2019"
        },
        {
          "type": "BANK_ACCOUNT_CHOICE",
          "id": "operation.bankAccountChoice",
          "label": null,
          "bankAccounts": [
            {
              "number": "12345678/1234",
              "accountId": "CZ4012340000000012345678",
              "name": "Běžný účet v CZK",
              "balance": 24394.52,
              "currency": "CZK",
              "usableForPayment": false,
              "unusableForPaymentReason": null
            },
            {
              "number": "87654321/4321",
              "accountId": "CZ4043210000000087654321",
              "name": "Spořící účet v CZK",
              "balance": 158121.10,
              "currency": "CZK",
              "usableForPayment": false,
              "unusableForPaymentReason": null
            },
            {
              "number": "44444444/1111",
              "accountId": "CZ4011110000000044444444",
              "name": "Spořící účet v EUR",
              "balance": 1.90,
              "currency": "EUR",
              "usableForPayment": false,
              "unusableForPaymentReason": "Low account balance"
            }
          ],
          "enabled": true,
          "defaultValue": "CZ4012340000000012345678"
        }
      ],
      "userInput": {
      }
    }
  }
}
```

## FormData Change Notification

Notification of Data Adapter about formData change.

### Request parameters

		Method
		POST

		Resource URI
		/api/operation/formdata/change

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - notification was successfully received |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "371526cc-5dee-414e-8418-5ee1c5ef2d67",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "formDataChange": {
      "type": "BANK_ACCOUNT_CHOICE",
      "bankAccountId": "CZ4012340000000012345678"
    }
  }
}
```

### Response

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK"
}
```

## Operation Change Notification

Notification of Data Adapter about operation change.

### Request parameters

		Method
		POST

		Resource URI
		/api/operation/change

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - notification was successfully received |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Request

Possible operation changes are: `DONE`, `CANCELED` and `FAILED`.

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "c02c5ea8-d4da-4499-9a27-aa4ded70921b",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "operationChange": "DONE"
  }
}
```

### Response

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK"
}
```

## Generate SMS Authorization Code

### Generate SMS authorization code - request parameters

		Method
		POST

		Resource URI
		/api/auth/sms/create

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - SMS message has been successfully created |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Create SMS - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "accountStatus": "ACTIVE",
    "operationContext": {
      "id": "371526cc-5dee-414e-8418-5ee1c5ef2d67",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "lang": "en"
  }
}
```

### Success response - SMS has been successfully created

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "messageId": "d056ec42-2349-43a1-9af4-cc502d924f76",
    "smsDeliveryResult": "SUCCEEDED",
    "errorMessage": null
  }
}
```

### Error response - SMS could not be sent

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "messageId": "d056ec42-2349-43a1-9af4-cc502d924f76",
    "smsDeliveryResult": "FAILED",
    "errorMessage": null
  }
}
```

## Verify Authorization SMS Code

### Verify SMS code - request parameters

		Method
		POST

		Resource URI
		/api/auth/sms/verify

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - SMS authorization code has been successfully verified |
| 400  | `INPUT_INVALID` - request validation errors  |
| 401  | `SMS_AUTHORIZATION_FAILED` - the SMS authorization code is invalid |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Verify SMS - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "accountStatus": "ACTIVE",
    "messageId": "617178ab-f315-4223-a602-9d4893b4f99f",
    "authorizationCode": "77038183",
    "operationContext": {
      "id": "371526cc-5dee-414e-8418-5ee1c5ef2d67",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### Success response - SMS authorization code has been successfully verified

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "smsAuthorizationResult": "SUCCEEDED",
    "errorMessage": null,
    "remainingAttempts": null,
    "showRemainingAttempts": false
  }
}
```

### Error response - SMS authorization code verification failed

```json
{
  "status": "OK",
  "responseObject": {
    "smsAuthorizationResult": "FAILED",
    "errorMessage": "smsAuthorization.failed",
    "remainingAttempts": 4,
    "showRemainingAttempts": false
  }
}
```

## Verify Authorization SMS Code and Password

### Verify SMS code and password - request parameters

		Method
		POST

		Resource URI
		/api/auth/sms/password/verify

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - SMS authorization code has been successfully verified |
| 400  | `INPUT_INVALID` - request validation errors  |
| 401  | `SMS_AUTHORIZATION_FAILED` - the SMS authorization code is invalid |
| 401  | `AUTHENTICATION_FAILED` - password verification failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

The password can be optionally encrypted. In this case the `passwordProtection` parameter provides information about
type of encryption and the `cipherTransformation` parameter contains information about used cipher.

See chapter [User Password Encryption and Decryption](./Data-Adapter-REST-API-Reference.md#user-password-encryption-and-decryption) for additional details.

### Verify SMS and password - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "accountStatus": "ACTIVE",
    "password": "s3cret",
    "authenticationContext": {
      "passwordProtection": "NO_PROTECTION",
      "cipherTransformation": "",
      "smsAuthorizationResult": null
    },
    "messageId": "617178ab-f315-4223-a602-9d4893b4f99f",
    "authorizationCode": "77038183",
    "operationContext": {
      "id": "371526cc-5dee-414e-8418-5ee1c5ef2d67",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### Success response - SMS authorization code and password have been successfully verified

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "smsAuthorizationResult": "SUCCEEDED",
    "userAuthenticationResult": "SUCCEEDED",
    "errorMessage": null,
    "remainingAttempts": null,
    "showRemainingAttempts": false
  }
}
```

### Error response - SMS authorization code and/or password verification failed

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "smsAuthorizationResult": "FAILED",
    "userAuthenticationResult": "FAILED",
    "errorMessage": "login.authenticationFailed",
    "remainingAttempts": null,
    "showRemainingAttempts": false
  }
}
```

## Initialize OAuth 2.0 Consent Form

### Initialize consent form - request parameters

		Method
		POST

		Resource URI
		/api/auth/consent/init

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - consent form has been successfully initalized |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Create consent form - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "7d92fce2-c1f2-4d5b-b522-61da0749fdf7",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    }
  }
}
```

### Response - consent form has been successfully created

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "consentHtml": "I consent that I have initiated this payment request and give consent to complete the operation.",
    "options": [
      {
        "id": "CONSENT_INIT",
        "descriptionHtml": "I consent that I have initiated this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      },
      {
        "id": "CONSENT_PAYMENT",
        "descriptionHtml": "I give consent to complete this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      }
    ]
  }
}
```

## Create OAuth 2.0 Consent Form

### Create consent form - request parameters

		Method
		POST

		Resource URI
		/api/auth/consent/create

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - consent form has been successfully created |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Create consent form - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "7d92fce2-c1f2-4d5b-b522-61da0749fdf7",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "lang": "en"
  }
}
```

### Response - consent form has been successfully created

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "consentHtml": "I consent that I have initiated this payment request and give consent to complete the operation.",
    "options": [
      {
        "id": "CONSENT_INIT",
        "descriptionHtml": "I consent that I have initiated this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      },
      {
        "id": "CONSENT_PAYMENT",
        "descriptionHtml": "I give consent to complete this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      }
    ]
  }
}
```

## Validate OAuth 2.0 Consent Form

### Validate consent form - request parameters

		Method
		POST

		Resource URI
		/api/auth/consent/validate

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - consent form has been successfully validated (however it may contain validation errors) |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 400  | `CONSENT_DATA_INVALID` - invalid consent data |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Validate consent form - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "7d92fce2-c1f2-4d5b-b522-61da0749fdf7",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "lang": "en",
    "options": [
      {
        "id": "CONSENT_INIT",
        "descriptionHtml": "I consent that I have initiated this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      },
      {
        "id": "CONSENT_PAYMENT",
        "descriptionHtml": "I give consent to complete this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": null
      }
    ]
  }
}
```

### Response - consent form has been successfully validated

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "consentValidationPassed": true,
    "validationErrorMessage": null,
    "optionValidationResults": []
  }
}
```

### Response - consent form options validation failed

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "consentValidationPassed": false,
    "validationErrorMessage": "Please fill in the whole consent form.",
    "optionValidationResults": [
      {
        "id": "CONSENT_INIT",
        "validationPassed": false,
        "errorMessage": "Confirm this option to complete the operation."
      },
      {
        "id": "CONSENT_PAYMENT",
        "validationPassed": false,
        "errorMessage": "Confirm this option to complete the operation."
      }
    ]
  }
}
```

## Save OAuth 2.0 Consent Form

### Save consent form - request parameters

		Method
		POST

		Resource URI
		/api/auth/consent/save

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - consent form has been successfully saved |
| 400  | `INPUT_INVALID` - request validation errors |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 400  | `CONSENT_DATA_INVALID` - invalid consent data |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Save consent form - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "4a04667b-8a1a-46af-813c-cf71ffcde478",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": ["pisp"],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "options": [
      {
        "id": "CONSENT_INIT",
        "descriptionHtml": "I consent that I have initiated this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": "CHECKED"
      },
      {
        "id": "CONSENT_PAYMENT",
        "descriptionHtml": "I give consent to complete this payment operation.",
        "required": true,
        "defaultValue": "NOT_CHECKED",
        "value": "CHECKED"
      }
    ]
  }
}
```

### Response - consent form has been successfully saved

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "saveSucceeded": true
  }
}
```

### Response - the processing was correct however consent form could not be saved at this time

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "saveSucceeded": false
  }
}
```

## Execute an AFS action

### Execute an AFS action - request parameters

		Method
		POST

		Resource URI
		/api/afs/action/execute

The list of expected status codes:

| Code | Description |
|------|-------------|
| 200  | OK response - AFS action was successfully executed |
| 400  | `OPERATION_CONTEXT_INVALID` - invalid operation context |
| 400  | `REMOTE_ERROR` - communication with remote system failed |
| 500  | Server errors - provide error details in the message, this is only for unexpected errors |

### Execute an AFS action - request

- Headers:
	- `Content-Type: application/json`

```json
{
  "requestObject": {
    "userId": "12345678",
    "organizationId": "RETAIL",
    "operationContext": {
      "id": "47a74437-83f9-4567-8c9e-270bea98d9de",
      "name": "authorize_payment",
      "data": "A1*A100CZK*Q238400856/0300**D20190629*NUtility Bill Payment - 05/2019",
      "formData": {
        "title": {
          "id": "operation.title",
          "message": "Confirm Payment"
        },
        "greeting": {
          "id": "operation.greeting",
          "message": "Hello,\nplease confirm following payment:"
        },
        "summary": {
          "id": "operation.summary",
          "message": "Hello, please confirm payment 100 CZK to account 238400856/0300."
        },
        "config": [],
        "banners": [],
        "parameters": [
          {
            "type": "AMOUNT",
            "id": "operation.amount",
            "label": "Amount",
            "valueFormatType": "AMOUNT",
            "formattedValues": {
              "amount": "100.00",
              "currency": "CZK"
            },
            "amount": 100,
            "currency": "CZK",
            "currencyId": "operation.currency"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.account",
            "label": "To Account",
            "valueFormatType": "ACCOUNT",
            "formattedValues": {
              "value": "238400856/0300"
            },
            "value": "238400856/0300"
          },
          {
            "type": "KEY_VALUE",
            "id": "operation.dueDate",
            "label": "Due Date",
            "valueFormatType": "DATE",
            "formattedValues": {
              "value": "Jun 29, 2019"
            },
            "value": "2019-06-29"
          },
          {
            "type": "NOTE",
            "id": "operation.note",
            "label": "Note",
            "valueFormatType": "TEXT",
            "formattedValues": {
              "value": "Utility Bill Payment - 05/2019"
            },
            "note": "Utility Bill Payment - 05/2019"
          }
        ],
        "userInput": {
          "smsFallback.enabled": "true",
          "operation.bankAccountChoice": "CZ4012340000000012345678",
          "operation.bankAccountChoice.disabled": "true"
        }
      },
      "applicationContext": {
        "id": "democlient",
        "name": "Demo application",
        "description": "Web Flow demo application",
        "originalScopes": [
          "pisp"
        ],
        "extras": {
          "applicationOwner": "Wultra"
        }
      }
    },
    "afsRequestParameters": {
      "afsType": "THREAT_MARK",
      "afsAction": "APPROVAL_INIT",
      "clientIpAddress": "",
      "stepIndex": 1,
      "username": null,
      "authInstruments": [],
      "authStepResult": null,
      "operationTerminationReason": null
    },
    "extras": {
      "cookie1": "123xyz",
      "cookie2": "abc67890"
    }
  }
}
```

### Response - AFS action was successfully executed

- Status Code: `200`
- Headers:
	- `Content-Type: application/json`

```json
{
  "status": "OK",
  "responseObject": {
    "afsResponseApplied": true,
    "afsLabel": "1FA",
    "authStepOptions": {
      "smsOtpRequired": true,
      "passwordRequired": false
    },
    "extras": {}
  }
}
```

redpajama_set_name: RedPajamaGithub


Defined by a line following the old county boundaries running from the Clyde estuary to the River Tay, the Lowlands is deemed anything South of this to the Scottish Border. A region of few distilleries, this area has always been known for its unrivalled lightness and soft nature, and it is for this reason that the distilleries here have been fondly named 'The Lowland Ladies."
The most famous whiskies from the lowlands are Auchentoshan, Glenkinchie and the silent distilleries of Rosebank and Ladyburn. On the outskirts of Glasgow, Auchentoshan exudes a delicate lowland character and is renowned for being a great entry into Scotch. Glenkinchie is on Edinburgh's doorstep and produces a fantastically light and ethereal dram. Rosebank and Ladyburn are rare and highly coveted and if you are lucky enough to get your hands on them then they will no doubt reward generously as both names are synonymous with quality.