> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://arkea.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://arkea.ferndocs.com/_mcp/server.

# Get started

Onboarding

# Get started

Five steps from browsing the catalogue to running your first authenticated call in the sandbox.

1

### Explore our APIs

Browse the Open Banking and Cards catalogue and see what each API covers.

[Explore APIs](/open-banking/products)

<path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7z" />

<circle cx="12" cy="12" r="3.2" />

2

### Set up access

Sign in with your partner account to unlock the partner portal, the API reference, and your sandbox key.

[Sign in](/sign-in)

<rect x="2" y="4" width="20" height="16" rx="2" />

<circle cx="8.5" cy="11" r="2.4" />

<path d="M4.6 17c.7-1.7 2.2-2.6 3.9-2.6s3.2.9 3.9 2.6" />

<path d="M15.5 10h4M15.5 13.5h4" />

3

### Authenticate

Exchange your credentials for an access token, then read the PSD2 consent model that governs account access.

[Authentication guide](/open-banking/documentation/getting-started/authentication)

<rect x="4" y="10" width="16" height="10" rx="2" />

<path d="M8 10V7a4 4 0 0 1 8 0v3" />

<path d="M12 14v2.5" />

4

### Read the API specs

Work through the reference for the version you are building against — v1 is GA, v2 adds transactions and bulk payments — and run requests straight from the page.

[API reference](/open-banking/api-reference/accounts/list-accounts)

<path d="M6 3h9l4 4v14H6z" />

<path d="M15 3v4h4" />

<path d="m10.5 12-2 2 2 2" />

<path d="m14 12 2 2-2 2" />

### Request

GET [https://api.getarkea.com/v1/accounts](https://api.getarkea.com/v1/accounts)

```curl
curl https://api.getarkea.com/v1/accounts \
     -H "consentId: cst_5f4e3d" \
     -H "Authorization: Bearer <token>"
```

```typescript
import { ArkeaClient } from "@arkea/sdk";

async function main() {
    const client = new ArkeaClient({
        token: "YOUR_TOKEN_HERE",
    });
    await client.accounts.listAccounts({
        consentId: "cst_5f4e3d",
    });
}
main();

```

```python
from arkea import Arkea

client = Arkea(
    token="YOUR_TOKEN_HERE",
)

client.accounts.list_accounts(
    consent_id="cst_5f4e3d",
)

```

```go
package main

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

func main() {

	url := "https://api.getarkea.com/v1/accounts"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("consentId", "cst_5f4e3d")
	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.getarkea.com/v1/accounts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["consentId"] = 'cst_5f4e3d'
request["Authorization"] = 'Bearer <token>'

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

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.getarkea.com/v1/accounts")
  .header("consentId", "cst_5f4e3d")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.getarkea.com/v1/accounts', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'consentId' => 'cst_5f4e3d',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.getarkea.com/v1/accounts");
var request = new RestRequest(Method.GET);
request.AddHeader("consentId", "cst_5f4e3d");
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "consentId": "cst_5f4e3d",
  "Authorization": "Bearer <token>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.getarkea.com/v1/accounts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

5

### Select your APIs and test in Postman

Pick the APIs your integration needs, expand one to check its endpoints, then open the selected collections in the sandbox workspace.

<path d="M3 7h18v13H3z" />

<path d="M8 7V4h8v3" />

<path d="m10 13 2 2 4-4" />