---
title: SAML resume
description: The GET /{{envID}}/saml20/resume?flowId={{flowID}} operation returns the flow back to the authorization service, to continue the processing of an authorization request after the completion of an authentication flow.
component: pingone-api
page_id: pingone-api:auth:saml-2.0/saml-resume
canonical_url: https://developer.pingidentity.com/pingone-api/auth/saml-2.0/saml-resume.html
section_ids:
  example-request: Example Request
  example-response: Example Response
---

# SAML resume

##

```none
GET {{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}
```

The `GET /{{envID}}/saml20/resume?flowId={{flowID}}` operation returns the flow back to the authorization service, to continue the processing of an authorization request after the completion of an authentication flow.

The request URL includes the `?flowId={{flowID}}` parameter to pass in the flow ID. The response returns a `200 Success` message, and the response data includes an encoded `SAMLResponse` to the user agent to be returned to the SAML requester. After receiving the SAML response, the SAML requester returns an arbitrary HTTP response to the user agent.

> **Collapse: Query parameters**
>
> | Parameter | Description                   |
> | --------- | ----------------------------- |
> | `flowId`  | The ID of the specified flow. |

##

### Example Request

* cURL

* C#

* Go

* HTTP

* Java

* jQuery

* NodeJS

* Python

* PHP

* Ruby

* Swift

```shell
curl --location --globoff '{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}'
```

```csharp
var options = new RestClientOptions("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

```golang
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

```http
GET /{{envID}}/saml20/resume?flowId={{flowID}} HTTP/1.1
Host: {{authPath}}
```

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")
  .method("GET", body)
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}",
  "method": "GET",
  "timeout": 0,
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'GET',
  'url': '{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}',
  'headers': {
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
```

```python
import requests

url = "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}"

payload = {}
headers = {

}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(

));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

```ruby
require "uri"
require "net/http"

url = URI("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```swift
var request = URLRequest(url: URL(string: "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
```

### Example Response

200 OK

```html
<!-- template name: saml20.response.autopost.ftl -->
<html>
    <head>
        <title>Submit Form</title>
    </head>
    <body onload="javascript:document.forms[0].submit()">
        <noscript>
            <p>
                <strong>Note:</strong> Since your browser does not support JavaScript,
                        you must press the Resume button once to proceed.
            </p>
        </noscript>
        <form method="post" action="https://decoder.pingidentity.cloud/saml">
            <input type="hidden" id="SAMLResponse" name="SAMLResponse" value="PHNhbWxwOlJlc3BvbnNlIElEPSJpZC1jMTg3MDA3Ny1lYTNkLTQ1NWItYmNhYy0wMTdiZDY5MTVhMTciIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIEluUmVzcG9uc2VUbz0iSUQtOGExZjA2YTMtZjQ3ZS00NzdiLWJhYzQtMzE4NjZhOWZiMTAxIiBEZXN0aW5hdGlvbj0iaHR0cHM6Ly9kZWNvZGVyLnBpbmdpZGVudGl0eS5jbG91ZC9zYW1sIiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI+aHR0cHM6Ly9hdXRoLnBpbmdvbmUuY29tLzA4MmRiYTg2LWQzNmUtNDEzZS04NWI0LWVlNDk5YTVjZWE1NTwvc2FtbDpJc3N1ZXI+PHNhbWxwOlN0YXR1cz48c2FtbHA6U3RhdHVzQ29kZSBWYWx1ZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnN0YXR1czpTdWNjZXNzIi8+PC9zYW1scDpTdGF0dXM+PHNhbWw6QXNzZXJ0aW9uIElEPSJpZC0yZGI5M2JhNi0zYzg1LTRjZTAtYTE5My03NWM1NThiMTNlZTIiIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sOklzc3Vlcj5odHRwczovL2F1dGgucGluZ29uZS5jb20vMDgyZGJhODYtZDM2ZS00MTNlLTg1YjQtZWU0OTlhNWNlYTU1PC9zYW1sOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNpZC0yZGI5M2JhNi0zYzg1LTRjZTAtYTE5My03NWM1NThiMTNlZTIiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5zNWYyNXk3ZmFTS2dtMHJUTXlKZnQ0OENqRDVvVGpwdVo2VkdTMDZiSVVRPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT5ZSnZheHgrNFU1TjloblREVWs2QUFjNkkxRFlLeVJPZHpWZ0hFUW1jbVhkbW0vWXJwRndyYjRVbXduaEY4UEd2NTgxcDZycDBOSDhOeHpxalZpTHE4YVVjU2E0QStsZjA4UEIxamN0RzAxb0xUS3VEOVhlaThjVURMcGVwL2JRYnduSDNpeERua1ZEa2N2d0h4RDNJS1RFTUJCR1M2bGJpS0NnYTNiYkpydWJHeDh1cUU4NHZwZHZhMVZJcXM3aTloZ2E0ejVSTlpBVkhPdnA0Tkw2SG93K3JORnc2Y3lJNCt2QU12bXU1SU5qek01OEM3Vlh0Wm56cURsa0dsaDh2Qmt0WHlFbkhsMWplVWhOeC81U2xBYmh3dzZPU2trN0VVUC9xY2ZManpIL0F2VEtNbllTaHQyMjdVMlJrTTZFNjNJSXlXangzdVpZb1FybTFiV3RqWWc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRGhEQ0NBbXlnQXdJQkFnSUdBWGZibXhWaU1BMEdDU3FHU0liM0RRRUJDd1VBTUlHQ01Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDZ3dOVUdsdVp5QkpaR1Z1ZEdsMGVURVdNQlFHQTFVRUN3d05VR2x1WnlCSlpHVnVkR2wwZVRGRE1FRUdBMVVFQXd3NlVHbHVaMDl1WlNCVFUwOGdRMlZ5ZEdsbWFXTmhkR1VnWm05eUlFNWxkeTFGYm5aZk1UWXhOREk1TnpFeE1DQmxiblpwY205dWJXVnVkREFlRncweU1UQXlNalV5TXpVeE5EbGFGdzB5TWpBeU1qVXlNelV4TkRsYU1JR0NNUXN3Q1FZRFZRUUdFd0pWVXpFV01CUUdBMVVFQ2d3TlVHbHVaeUJKWkdWdWRHbDBlVEVXTUJRR0ExVUVDd3dOVUdsdVp5QkpaR1Z1ZEdsMGVURkRNRUVHQTFVRUF3dzZVR2x1WjA5dVpTQlRVMDhnUTJWeWRHbG1hV05oZEdVZ1ptOXlJRTVsZHkxRmJuWmZNVFl4TkRJNU56RXhNQ0JsYm5acGNtOXViV1Z1ZERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXpleWRqc29sTUliVFVBeFg4dHNkUmhIMUtqUTBaUS9oakE2RXB0dVB6WWk2QWZZYXdhL1NmL2FiSmxoNTZCOXdCMkNPcEE5cXJ4SjdsbW9Fc0tYbExhNWJNT3Y5amdvdFI4WHpQMWFHdWdDR3NQRWlkYmdzODNpTVZObERvVUkyRGlCZzYvK0pxbzZVZmJMUm52TUNUeTN4bDVHMzJURnFCOUxHS2tHL29YVWhPVTRNc29sWTNSdjh6WXJucVdVbmFxTmQ2ejJBZWdGVnZKREhLb0ZlTXFrYzhoSjhLcmZCWk5WMnFpa0dpMjUyTzRVVGVmWk91MFFpcHBxMEV2VURmc2l0amp0RzBoZmJrNU44d0h4WWdRNVZSNXZWd1dQbkZsKzh3N3RZU21iRllwTTdUM0d6N2M5R2I0SDJBd3JHK204OXJYZ3JvOUU4T1greG1ObVFjQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBT3dpVjRSbllMZnRlYko4djZMTllna3Z6VEZjOE5ob0tXZDJPY2VPd0JZNTJTcGJ6UGVqMThkamRnSExZcERPRk95SU9tS0dJd2pwUWFvaGJUWXM0TnNnUno1OUNiWjB4ZVJhOFRYcElFNW00QTdTK0tjZU5Ob0RZT1hIeGY3dWk0ZGphZGpDWlZUaDRUbFIzeVJrT3VpejZMUzNvNndaVHcxU1FndFE5cU0xQXl5TVlyd0cvZnFzOWcrZHNmL0U2c1J0WVR0RktRSFI3cVV2Y3o1c0ZMSndISk5LSUVkUS9oSFIyUDZybjdyUlBYckVmcTd0OEwyTXhJeFVnNzhtU3UyUHk0QmRXR1hIcFFqQ1VrSngwMEluUlNWSC9JSVo4a0tLZUJ2SkdXRStmaWRtTlo0NGJOWXN5VXZXUzdFY0dUYnczUndHQjZ3d3RkdzNtYVRvQUtBPT08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjxkczpLZXlWYWx1ZT48ZHM6UlNBS2V5VmFsdWU+PGRzOk1vZHVsdXM+ek43SjJPeWlVd2h0TlFERmZ5MngxR0VmVXFORFJsRCtHTURvU20yNC9OaUxvQjlockJyOUovOXBzbVdIbm9IM0FIWUk2a0QycXZFbnVXYWdTd3BlVXRybHN3Ni8yT0NpMUh4Zk0vVm9hNkFJYXc4U0oxdUN6emVJeFUyVU9oUWpZT0lHRHIvNG1xanBSOXN0R2U4d0pQTGZHWGtiZlpNV29IMHNZcVFiK2hkU0U1VGd5eWlWamRHL3pOaXVlcFpTZHFvMTNyUFlCNkFWVzhrTWNxZ1Y0eXFSenlFbndxdDhGazFYYXFLUWFMYm5ZN2hSTjU5azY3UkNLbW1yUVM5UU4reUsyT08wYlNGOXVUazN6QWZGaUJEbFZIbTlYQlkrY1dYN3pEdTFoS1pzVmlrenRQY2JQdHowWnZnZllEQ3NiNmJ6MnRlQ3VqMFR3NWY3R1kyWkJ3PT08L2RzOk1vZHVsdXM+PGRzOkV4cG9uZW50PkFRQUI8L2RzOkV4cG9uZW50PjwvZHM6UlNBS2V5VmFsdWU+PC9kczpLZXlWYWx1ZT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MiPjk0NzM3MDRkLTBlNDQtNDJhZi1iMTAyLWRmZGMyZjE3OThjNTwvc2FtbDpOYW1lSUQ+PHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAyMy0wNS0xNVQxODoyNTo1OS4wMDFaIiBSZWNpcGllbnQ9Imh0dHBzOi8vZGVjb2Rlci5waW5naWRlbnRpdHkuY2xvdWQvc2FtbCIgSW5SZXNwb25zZVRvPSJJRC04YTFmMDZhMy1mNDdlLTQ3N2ItYmFjNC0zMTg2NmE5ZmIxMDEiLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWw6U3ViamVjdD48c2FtbDpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAyMy0wNS0xNVQxODoyMzo1OS4wMDFaIiBOb3RPbk9yQWZ0ZXI9IjIwMjMtMDUtMTVUMTg6MjU6NTkuMDAxWiI+PHNhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDpBdWRpZW5jZT5zYW1sdGVzdDE2ODQxNzUwMzI8L3NhbWw6QXVkaWVuY2U+PC9zYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24+PC9zYW1sOkNvbmRpdGlvbnM+PHNhbWw6QXV0aG5TdGF0ZW1lbnQgQXV0aG5JbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMjMtMDUtMTVUMTg6MjU6NTkuMDAxWiIgU2Vzc2lvbkluZGV4PSJlOTAxNjkzOS0xZDRlLTQ4M2QtYjQ1MC03ZWI0NGE5NTRhYTkiPjxzYW1sOkF1dGhuQ29udGV4dD48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48c2FtbDpBdXRoZW50aWNhdGluZ0F1dGhvcml0eT5odHRwczovL2F1dGgucGluZ29uZS5jb20vMDgyZGJhODYtZDM2ZS00MTNlLTg1YjQtZWU0OTlhNWNlYTU1PC9zYW1sOkF1dGhlbnRpY2F0aW5nQXV0aG9yaXR5Pjwvc2FtbDpBdXRobkNvbnRleHQ+PC9zYW1sOkF1dGhuU3RhdGVtZW50PjxzYW1sOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDpBdHRyaWJ1dGUgTmFtZT0ic2FtbF9zdWJqZWN0IiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4c2k6dHlwZT0ieHM6c3RyaW5nIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPjk0NzM3MDRkLTBlNDQtNDJhZi1iMTAyLWRmZGMyZjE3OThjNTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjwvc2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ+PC9zYW1sOkFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg=="/>
            <input type="hidden" id="RelayState" name="RelayState" value="token"/>
            <noscript>
                <input type="submit" value="Resume"/>
            </noscript>
        </form>
    </body>
</html>
```
