# POST /portal_sessions/ — Create Client Portal API Session

> Product: **Pabbly Subscription Billing** (v1)
> Base URL: `https://payments.pabbly.com/api/v1`
> Auth: Basic via `Authorization` header
> Canonical: `/subscription-billing/client-portal/create-client-portal-api-session`

This API is used to create the portal session and generate get the signin link of the client portal. This link can be passed to the customer so that they can login directly into the account. A POST request API which is fired with the customer Id in the form data. In response you will get the access URL and the other details like create date, and token Id.

**Body parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| customer_id | string | Yes | Customer Id for which you want to generate the portal session. |
| redirect_url | string | No | Enter the Url where you want to redirect your customer for sign-in |

**Example request body:**

```json
{
	"customer_id":"5e5f50647c5aeb3675f416aa",
	"redirect_url":"https://www.pabbly.com/" 
}
```

**Response (200)** — Create Client Portal API Session:

```json
{
    "status": "success",
    "message": "Portal token created successfully",
    "data": {
        "user_id": "5b961bc55dfff7797d9cd897",
        "createdAt": "2020-03-04T07:19:13.685Z",
        "updatedAt": "2020-03-04T07:19:13.685Z",
        "id": "5e5f56717c5aeb3675f416d1",
        "token": "$2b$10$cWjR3h0yWV8a9IdetMa4fewxGicrO6rxr19hAKxkeSw.nIM137aIS",
        "status": "created",
        "customer_id": "5e5f50647c5aeb3675f416aa",
        "access_url": "https://payments.pabbly.com/portal/access/test1234?tk=$2b$10$cWjR3h0yWV8a9IdetMa4fewxGicrO6rxr19hAKxkeSw.nIM137aIS",
        "expires_at": "2020-03-05T07:19:13.131Z"
    }
}
```

**Code examples:**

_cURL_

```curl
curl -X POST https://payments.pabbly.com/api/v1/portal_sessions/ \
  -u {{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}} \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "5e5f50647c5aeb3675f416aa",
    "redirect_url": "https://www.pabbly.com/"
  }'
```

_Ruby_

```ruby
require 'net/http'
require 'json'

uri = URI('https://payments.pabbly.com/api/v1/portal_sessions/')
request = Net::HTTP::Post.new(uri)
request.basic_auth '{{YOUR_API_KEY}}', '{{YOUR_SECRET_KEY}}'
request['Content-Type'] = 'application/json'
request.body = "{\"customer_id\":\"5e5f50647c5aeb3675f416aa\",\"redirect_url\":\"https://www.pabbly.com/\"}"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(request)
end

data = JSON.parse(response.body)
```

_Python_

```python
import requests
from requests.auth import HTTPBasicAuth

response = requests.post(
    'https://payments.pabbly.com/api/v1/portal_sessions/',
    auth=HTTPBasicAuth('{{YOUR_API_KEY}}', '{{YOUR_SECRET_KEY}}'),
    json={
    'customer_id': '5e5f50647c5aeb3675f416aa',
    'redirect_url': 'https://www.pabbly.com/'
},
)

data = response.json()
```

_PHP_

```php
<?php
$ch = curl_init('https://payments.pabbly.com/api/v1/portal_sessions/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_USERPWD, '{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"customer_id":"5e5f50647c5aeb3675f416aa","redirect_url":"https://www.pabbly.com/"}');

$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
```

_Java_

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

String credentials = Base64.getEncoder().encodeToString("{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}".getBytes());

HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder()
    .uri(URI.create("https://payments.pabbly.com/api/v1/portal_sessions/"))
    .header("Authorization", "Basic " + credentials)
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("{\"customer_id\":\"5e5f50647c5aeb3675f416aa\",\"redirect_url\":\"https://www.pabbly.com/\"}"));

HttpRequest request = builder.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
```

_Node.js_

```node
const credentials = Buffer.from('{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}').toString('base64');

const response = await fetch('https://payments.pabbly.com/api/v1/portal_sessions/', {
  method: 'POST',
  headers: {
    'Authorization': `Basic ${credentials}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "customer_id": "5e5f50647c5aeb3675f416aa",
    "redirect_url": "https://www.pabbly.com/"
  }),
});

const data = await response.json();
```

_Go_

```go
package main

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

func main() {
    payload := strings.NewReader("{\"customer_id\":\"5e5f50647c5aeb3675f416aa\",\"redirect_url\":\"https://www.pabbly.com/\"}")
    req, _ := http.NewRequest("POST", "https://payments.pabbly.com/api/v1/portal_sessions/", payload)
    req.Header.Set("Content-Type", "application/json")
    req.SetBasicAuth("{{YOUR_API_KEY}}", "{{YOUR_SECRET_KEY}}")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}
```

_.NET_

```dotnet
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}"));

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://payments.pabbly.com/api/v1/portal_sessions/");
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {credentials}");
request.Content = new StringContent("{\"customer_id\":\"5e5f50647c5aeb3675f416aa\",\"redirect_url\":\"https://www.pabbly.com/\"}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();
Console.WriteLine(data);
```

