{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/product/embedded-flows/sidebars.yaml","api-docs-api-reference/@latest/index.yaml":"api-docs-api-reference/@latest/index.yaml"},"props":{"metadata":{"markdoc":{"tagList":["cards","card","admonition","embedded-journeys-demo","openapi-code-sample","example-box"]},"type":"markdown"},"seo":{"title":"Embedded Flows","siteUrl":"https://docs.wise.com","projectTitle":"Wise Platform","description":"Use Wise-hosted Embedded Flows when integrating Wise Platform into your product."},"dynamicMarkdocComponents":["openapi"],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"embedded-flows","__idx":0},"children":["Embedded Flows"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Embedded Flows are Wise-hosted flows for partners integrating Wise Platform into their own products. They reduce the engineering uplift of implementing Wise-specific frontend patterns, such as the dynamic flows used by recipient creation, so you can integrate, test, and prove value earlier."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With a standard API integration, your team usually builds the full user-facing experience and connects each screen to specific Wise Platform endpoints. With Embedded Flows, your backend requests the flow you need along with the return URL, and receives a URL in the response you can redirect your customer to or embed directly in your application via iframe or mobile WebView."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"implementation-guides","__idx":1},"children":["Implementation guides"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Choose an implementation guide for step-by-step instructions:"]},{"$$mdtype":"Tag","name":"Cards","attributes":{"columns":3,"cardMinWidth":180},"children":[{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Web","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"filled","iconVariant":"filled","to":"/guides/product/embedded-flows/web"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Embed the flow in an iframe and listen for optional window messages."]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"iOS","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"filled","iconVariant":"filled","to":"/guides/product/embedded-flows/ios"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Load the flow in a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WKWebView"]}," and bridge flow messages to native code."]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Android","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"filled","iconVariant":"filled","to":"/guides/product/embedded-flows/android"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Load the flow in a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WebView"]}," and bridge flow messages to your app."]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Web SDK coming soon"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A web SDK is planned to make iframe setup, resizing, events, and theme updates easier. Until then, handle iframe or WebView integration directly in your product."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"styling","__idx":2},"children":["Styling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can apply limited styling to the flows so they reflect your application's brand colours and logo. Currently, you must contact your Wise solutions engineer to have these updated for your brand."]},{"$$mdtype":"Tag","name":"EmbeddedJourneysDemo","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"hosted-recipient-creation-flow","level":2,"__idx":3},"children":["Example flow: recipient creation "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All Embedded Flows use the following pattern: your backend requests a flow URL, your frontend opens it, and your product handles the result."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This example uses ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/link-requests/recipientembeddedlinkrequestcreate"},"children":["hosted recipient creation"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RECIPIENT"]},") to show how the pieces fit together."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Workflow summary:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create a short-lived flow URL from your backend."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the URL in an iframe, mobile WebView, pop-up, or full-page redirect."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Handle completion, cancellation, or errors in your frontend or redirect handler."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use webhooks to reconcile the resource created or changed by the flow."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-request-a-flow-url","__idx":4},"children":["Step 1: Request a flow URL"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/link-requests/recipientembeddedlinkrequestcreate"},"children":["Recipient creation link request endpoint"]}," from your backend."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this example, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redirectUrl"]}," tells Wise where to return the user once the flow is complete and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["targetCurrency"]}," starts the recipient flow for EUR. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redirectUrl"]}," must match the redirect URL allowlist configured for your integration."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create recipient embedded link request"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-api-reference/@latest/index.yaml","operationId":"recipientEmbeddedLinkRequestCreate","parameters":{"path":{"profileId":14966143}},"requestBody":{"redirectUrl":"https://partner.example/recipient-return","targetCurrency":"EUR"},"environments":{},"environment":"https://api.wise-sandbox.com","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X POST \\\n  https://api.wise.com/2026Q3/profiles/14966143/embedded-flows/link-requests/recipients \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \\\n  -d '{\n    \"redirectUrl\": \"https://partner.example/recipient-return\",\n    \"targetCurrency\": \"EUR\"\n  }'"},{"lang":"javascript","title":"JavaScript","source":"const profileId = '14966143';\nconst resp = await fetch(\n  `https://api.wise.com/2026Q3/profiles/${profileId}/embedded-flows/link-requests/recipients`,\n  {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'X-External-Correlation-Id': 'f47ac10b-58cc-4372-a567-0e02b2c3d479',\n      Authorization: 'Bearer <YOUR_JWT_HERE>'\n    },\n    body: JSON.stringify({\n      redirectUrl: 'https://partner.example/recipient-return',\n      targetCurrency: 'EUR'\n    })\n  }\n);\n\nconst data = await resp.json();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const profileId = '14966143';\n  const resp = await fetch(\n    `https://api.wise.com/2026Q3/profiles/${profileId}/embedded-flows/link-requests/recipients`,\n    {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-External-Correlation-Id': 'f47ac10b-58cc-4372-a567-0e02b2c3d479',\n        Authorization: 'Bearer <YOUR_JWT_HERE>'\n      },\n      body: JSON.stringify({\n        redirectUrl: 'https://partner.example/recipient-return',\n        targetCurrency: 'EUR'\n      })\n    }\n  );\n\n  const data = await resp.json();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\nprofile_id = \"14966143\"\nurl = \"https://api.wise.com/2026Q3/profiles/\" + profile_id + \"/embedded-flows/link-requests/recipients\"\n\npayload = {\n  \"redirectUrl\": \"https://partner.example/recipient-return\",\n  \"targetCurrency\": \"EUR\"\n}\n\nheaders = {\n  \"Content-Type\": \"application/json\",\n  \"X-External-Correlation-Id\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n  \"Authorization\": \"Bearer <YOUR_JWT_HERE>\"\n}\n\nresponse = requests.post(url, json=payload, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var payload = String.join(\"\\n\"\n      , \"{\"\n      , \" \\\"redirectUrl\\\": \\\"https://partner.example/recipient-return\\\",\"\n      , \" \\\"targetCurrency\\\": \\\"EUR\\\"\"\n      , \"}\"\n    );\n\n    var host = \"https://api.wise.com\";\n    var profileId = \"14966143\";\n    var pathname = \"/2026Q3/profiles/%7BprofileId%7D/embedded-flows/link-requests/recipients\";\n    var request = HttpRequest.newBuilder()\n      .POST(HttpRequest.BodyPublishers.ofString(payload))\n      .uri(URI.create(host + pathname ))\n      .header(\"Content-Type\", \"application/json\")\n      .header(\"X-External-Correlation-Id\", \"f47ac10b-58cc-4372-a567-0e02b2c3d479\")\n      .header(\"Authorization\", \"Bearer <YOUR_JWT_HERE>\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Text;\nusing System.Text.Json;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-External-Correlation-Id\", \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\n        {\"Authorization\", \"Bearer <YOUR_JWT_HERE>\"},\n      }\n    };\n\n    string json = JsonSerializer.Serialize(new\n    {\n      redirectUrl = \"https://partner.example/recipient-return\",\n      targetCurrency = \"EUR\"\n    });\n\n    using StringContent postData = new(json, Encoding.UTF8, \"application/json\");\n      var ProfileId = \"14966143\";\n    using HttpResponseMessage request = await client.PostAsync(\"https://api.wise.com/2026Q3/profiles/\" + ProfileId + \"/embedded-flows/link-requests/recipients\", postData);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst profileId = \"14966143\";\n$curl = curl_init();\n\n$payload = array(\n  \"redirectUrl\" => \"https://partner.example/recipient-return\",\n  \"targetCurrency\" => \"EUR\"\n);\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer <YOUR_JWT_HERE>\",\n    \"Content-Type: application/json\",\n    \"X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n  ],\n  CURLOPT_POSTFIELDS => json_encode($payload),\n  CURLOPT_URL => \"https://api.wise.com/2026Q3/profiles/\" . profileId . \"/embedded-flows/link-requests/recipients\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"bytes\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  profileId := \"14966143\";\n  reqUrl := \"https://api.wise.com/2026Q3/profiles/\" + profileId + \"/embedded-flows/link-requests/recipients\"\n  var data = []byte(`{\n    \"redirectUrl\": \"https://partner.example/recipient-return\",\n    \"targetCurrency\": \"EUR\"\n  }`)\n  req, err := http.NewRequest(\"POST\", reqUrl, bytes.NewBuffer(data))\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"Content-Type\", \"application/json\")\n  req.Header.Add(\"X-External-Correlation-Id\", \"f47ac10b-58cc-4372-a567-0e02b2c3d479\")\n  req.Header.Add(\"Authorization\", \"Bearer <YOUR_JWT_HERE>\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'json'\nrequire 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nprofile_id = '14966143'\nurl = URI('https://api.wise.com/2026Q3/profiles/' + profile_id + '/embedded-flows/link-requests/recipients')\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest['Content-Type'] = 'application/json'\nrequest['X-External-Correlation-Id'] = 'f47ac10b-58cc-4372-a567-0e02b2c3d479'\nrequest['Authorization'] = 'Bearer <YOUR_JWT_HERE>'\nrequest.body = {\n  redirectUrl: 'https://partner.example/recipient-return',\n  targetCurrency: 'EUR'\n}.to_json\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\nbody = '{\n   \"redirectUrl\": \"https://partner.example/recipient-return\",\n   \"targetCurrency\": \"EUR\"\n}'\n\nprofile_id = \"14966143\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.wise.com/2026Q3/profiles/\" %&% profile_id %&% \"/embedded-flows/link-requests/recipients\"\n\ndata_req <- POST(\n  url,\n  add_headers(\"Content-Type\" = \"application/json\", \"X-External-Correlation-Id\" = \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"Authorization\" = \"Bearer <YOUR_JWT_HERE>\"),\n  body = body,\n  encode = \"json\",\n  verbose()\n)\n\ncontent(data_req)"},{"lang":"json","title":"Payload application/json","source":"{\n  \"redirectUrl\": \"https://example.com/return\",\n  \"targetCurrency\": \"USD\"\n}"}]},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wise returns a unique URL for this flow. Open this URL for the user before it expires."]},{"$$mdtype":"Tag","name":"ExampleBox","attributes":{"title":"Response","type":"code"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"url\": \"https://wise-sandbox.com/embedded-flows?embeddedLinkRequestId=ea5eb6ca-3af7-4e88-a2e2-6a68dd92f198#token=0d0bdc88-bcf4-43dd-85be-7ca65441db20\",\n  \"expiresAt\": \"2026-06-15T13:23:20.265Z\"\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-open-the-flow","__idx":5},"children":["Step 2: Open the flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Render the returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}," in your chosen surface. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/product/embedded-flows/web"},"children":["Embed on web"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/product/embedded-flows/ios"},"children":["Embed on iOS"]},", or ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/product/embedded-flows/android"},"children":["Embed on Android"]}," for platform-specific steps."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your frontend should handle these flow messages:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Message"},"children":["Message"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When it is sent"},"children":["When it is sent"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Typical use"},"children":["Typical use"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ready"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The flow is ready to be shown."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Hide a loading state or make the iframe visible."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["resize"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The flow content height changes."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Update the iframe height."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["done"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The user completes the flow."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Close the iframe or move the user to the next step."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The flow cannot continue, or the user cancels."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Show a retry option or return the user to your previous step."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the user cancels inside an embedded iframe or WebView, the flow sends:"]},{"$$mdtype":"Tag","name":"ExampleBox","attributes":{"title":"Cancellation message","type":"code"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"type\": \"error\",\n  \"code\": \"cancelled\"\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the flow is opened as a standalone page and the user cancels, Wise redirects to your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redirectUrl"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status=cancelled"]},". A successful standalone completion redirects with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status=success"]},", and other errors redirect with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status=error"]},"."]},{"$$mdtype":"Tag","name":"ExampleBox","attributes":{"title":"Standalone cancellation redirect","type":"code"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"https://partner.example/recipient-return?status=cancelled\n","lang":"text"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-reconcile-with-webhooks","__idx":6},"children":["Step 3: Reconcile with webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For recipient creation, ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/webhook"},"children":["subscribe to the webhook"]}," and listen for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipients#state-change"]},". The event is available in schema version ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["4.0.0"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/webhook-event/eventrecipientsstatechange"},"children":["Recipient state change reference"]}," for the full schema."]},{"$$mdtype":"Tag","name":"ExampleBox","attributes":{"title":"Recipient state-change event","type":"code"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"data\": {\n    \"resource\": {\n      \"id\": \"700525176\",\n      \"occurred_at\": \"2026-06-15T13:18:20.265Z\",\n      \"data\": {\n        \"recipientId\": 700525176,\n        \"profileId\": 14966143,\n        \"currency\": \"EUR\",\n        \"state\": \"CREATE\",\n        \"clientId\": \"hosted-kyc-test-client\"\n      }\n    }\n  },\n  \"subscription_id\": \"ced03af9-be76-46ac-ada8-7fe935792290\",\n  \"event_type\": \"recipients#state-change\",\n  \"schema_version\": \"4.0.0\",\n  \"sent_at\": \"2026-06-15T13:18:20.265Z\"\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.resource.data.recipientId"]}," as the created or changed recipient ID. Webhooks typically include a trimmed subset of data, so use the recipient ID with requests like ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/recipient/recipientget"},"children":["Get account by ID"]}," when you need full recipient details. Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.resource.occurred_at"]}," when reconciling event order, and return any ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," response to acknowledge delivery."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Embedded Flows section in the API reference includes the request and response details for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /profiles/{profileId}/embedded-flows/link-requests/recipients"]},". The ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/webhook-event/eventrecipientsstatechange"},"children":["Recipient state change reference"]}," includes the webhook event emitted after recipient creation changes state."]}]},"headings":[{"value":"Embedded Flows","id":"embedded-flows","depth":1},{"value":"Implementation guides","id":"implementation-guides","depth":2},{"value":"Styling","id":"styling","depth":2},{"value":"Example flow: recipient creation","id":"hosted-recipient-creation-flow","depth":2},{"value":"Step 1: Request a flow URL","id":"step-1-request-a-flow-url","depth":3},{"value":"Step 2: Open the flow","id":"step-2-open-the-flow","depth":3},{"value":"Step 3: Reconcile with webhooks","id":"step-3-reconcile-with-webhooks","depth":3}],"frontmatter":{"seo":{"description":"Use Wise-hosted Embedded Flows when integrating Wise Platform into your product.","title":"Embedded Flows"},"markdown":{"lastUpdatedBlock":{"hide":true}}},"lastModified":"2026-08-26T11:05:25.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/product/embedded-flows","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}