Ozone

Open Finance Malaysia Developer Portal

Section 5: Discovering Data Providers

Once you have obtained an access token via Client Credentials Grant, you can call the Providers endpoint to discover all Data Providers available in the PayNet ecosystem and their connection details.


Overview

The Providers endpoint returns a list of all Data Providers in the ecosystem, including their authorization server URLs, resource server URLs, and supported use cases. This information is essential for routing consent requests to the correct DP and understanding what data they can provide.


Prerequisites

Before calling the Providers endpoint, ensure you have:

ItemWhere to FindNotes
Access tokenFrom Section 4: Obtaining Access Tokens via Client Credentials GrantToken obtained via Client Credentials Grant with accounts scope
Transport certificate & keyFrom Section 1: Before You Begin - PrerequisitesYour mTLS transport certificate and key
Resource Server URLFrom well-known endpoint response (or check with PayNet)<TODO: Clarify if this is in well-known response or needs to be provided>

Calling the Providers Endpoint

Endpoint

GET {{RESOURCE_SERVER_URL}}/v1/providers

Transport Security

mTLS required - You must present your transport client certificate and key for mutual TLS authentication.

Headers

Authorization: Bearer {{ACCESS_TOKEN}}
x-fapi-interaction-id: 550e8400-e29b-41d4-a716-446655440000

Query Parameters (Optional)

ParameterTypeDescription
page_sizeIntegerNumber of records per request. Default depends on server implementation.
next_page_paramsStringURL-encoded parameter string for pagination. Use when retrieving subsequent pages.

Example cURL Request

curl -X GET "{{RESOURCE_SERVER_URL}}/v1/providers?page_size=20" \
  --cert /path/to/transport-certificate.pem \
  --key /path/to/transport-key.pem \
  -H "Authorization: Bearer {{ACCESS_TOKEN}}" \
  -H "x-fapi-interaction-id: 550e8400-e29b-41d4-a716-446655440000"

Understanding the Response

200 - Success Response

The response contains an array of Provider objects and metadata.

FieldTypeDescription
dataObject[]Array of Provider objects (see below)
metaObjectMeta object containing pagination information with next_page_params for cursor-based pagination

Provider Object

Each provider entry contains:

FieldTypeDescription
provider_idStringUnique identifier for the provider. Use this as the dp_id in future requests that relate to this provider.
nameStringInstitution name (e.g., "PayBank Malaysia", "FinServe Bank")
statusStringCurrent status (e.g., "ACTIVE", "INACTIVE")
provider_typeStringType of provider (e.g., "BANK", "FINTECH")
authorization_server_urlStringBase URL of the provider's Authorization Server (e.g., https://{{PROVIDER_DOMAIN}})
resource_server_urlStringBase URL of the provider's Resource Server for accessing customer data
supported_use_casesString[]Array of supported consent purposes (e.g., "ACCOUNT_INFO", "TRANSACTIONS", "BALANCES")

Example Response

{
  "data": [
    {
      "provider_id": "5e5a3c8f-1234-5678-90ab-cdef12345678",
      "name": "PayBank Malaysia",
      "status": "ACTIVE",
      "provider_type": "BANK",
      "authorization_server_url": "https://{{PROVIDER_DOMAIN}}",
      "resource_server_url": "https://{{PROVIDER_RESOURCE_SERVER}}",
      "supported_use_cases": [
        "ACCOUNT_INFO",
        "TRANSACTIONS",
        "BALANCES"
      ]
    },
    {
      "provider_id": "9f8e7d6c-abcd-4321-87ef-fedcba987654",
      "name": "FinServe Bank",
      "status": "ACTIVE",
      "provider_type": "BANK",
      "authorization_server_url": "https://{{PROVIDER_DOMAIN}}",
      "resource_server_url": "https://{{PROVIDER_RESOURCE_SERVER}}",
      "supported_use_cases": [
        "ACCOUNT_INFO",
        "TRANSACTIONS"
      ]
    }
  ],
  "meta": {
    "next_page_params": "page_size=20&after=eyJjdXJzb3IiOiJsYXN0X2lkIn0="
  }
}

Discovering Provider-Specific Endpoints

For each Data Provider you plan to use, you need to discover their specific OAuth endpoints:

  1. Take the authorization_server_url from the provider's entry
  2. Append /.well-known/openid-configuration to it
  3. Call this well-known endpoint to get the provider's specific auth and resource URLs

Example:

curl -X GET "https://{{PROVIDER_DOMAIN}}/.well-known/openid-configuration"

This returns the provider's own authorization endpoint, token endpoint, and other critical URLs that you'll use when creating consents with that specific provider.


Next Steps

You now have:

  • A list of available Data Providers
  • Their identifiers (provider_id)
  • Their authorization and resource server URLs
  • Their supported use cases (consent types)

Proceed to:



Powered by ozoneapi

© 2026 Open Finance Malaysia Developer Portal. All rights reserved.