Skip to main content

Provider Management API

This document describes the Provider Management endpoints for configuring market data providers that supply digital asset rates.

Endpoints​


Create Provider​

Creates a new market data provider configuration.

Endpoint: POST /providers

Request Body​

{
"name": "string",
"slug": "string",
"isDefault": boolean,
"config": {}
}
FieldTypeRequiredDescription
namestringYesProvider display name (e.g., "CoinMarketCap")
slugstringYesUnique provider identifier slug (e.g., "coinmarketcap")
isDefaultbooleanNoWhether this is a default provider (default: false)
configobjectNoProvider-specific configuration (API keys, settings, etc.)

Response​

Status: 201 Created

{
"id": "456e8400-e29b-41d4-a716-446655440000",
"name": "CoinMarketCap",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "***",
"priority": 1
},
"createdAt": "2025-11-20T10:30:00.000Z",
"updatedAt": "2025-11-20T10:30:00.000Z"
}

Examples​

Create Default Provider​

curl -X POST "https://api.ledgerlink.ai/v1/providers" \
-H "Content-Type: application/json" \
-d '{
"name": "CoinMarketCap",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "your-api-key-here",
"priority": 1
}
}'

Response:

{
"id": "456e8400-e29b-41d4-a716-446655440000",
"name": "CoinMarketCap",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "***",
"priority": 1
},
"createdAt": "2025-11-20T10:30:00.000Z",
"updatedAt": "2025-11-20T10:30:00.000Z"
}

Create Non-Default Provider​

curl -X POST "https://api.ledgerlink.ai/v1/providers" \
-H "Content-Type: application/json" \
-d '{
"name": "Pyth Network",
"slug": "pyth",
"isDefault": false
}'

Error Responses​

400 Bad Request​

{
"statusCode": 400,
"message": ["name must be a string", "slug must be a string"],
"error": "Bad Request"
}

Causes:

  • Missing required fields (name or slug)
  • Invalid data types
  • Slug already exists (must be unique)

500 Internal Server Error​

{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}

List Providers​

Retrieves a paginated list of all configured providers.

Endpoint: GET /providers

Query Parameters​

ParameterTypeRequiredDescription
namestringNoFilter by name (case-insensitive, partial match)
slugstringNoFilter by slug (exact match)
isDefaultbooleanNoFilter by default status
limitnumberNoMaximum results per page (default: 10)
offsetnumberNoNumber of results to skip (default: 0)
sortBystringNoSort field: name, slug, createdAt, updatedAt (default: createdAt)
sortOrderstringNoSort direction: asc or desc (default: asc)

Response​

Status: 200 OK

{
"data": [
{
"id": "456e8400-e29b-41d4-a716-446655440000",
"name": "CoinMarketCap",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "***",
"priority": 1
},
"createdAt": "2025-11-20T10:30:00.000Z",
"updatedAt": "2025-11-20T10:30:00.000Z",
"assetProviders": [],
"categoryProviders": []
},
{
"id": "567e8400-e29b-41d4-a716-446655440001",
"name": "Pyth Network",
"slug": "pyth",
"isDefault": true,
"config": {},
"createdAt": "2025-11-20T11:00:00.000Z",
"updatedAt": "2025-11-20T11:00:00.000Z",
"assetProviders": [],
"categoryProviders": []
}
],
"pageInfo": {
"limit": 10,
"offset": 0,
"total": 2
}
}

Examples​

List All Providers​

curl -X GET "https://api.ledgerlink.ai/v1/providers"

List Default Providers Only​

curl -X GET "https://api.ledgerlink.ai/v1/providers?isDefault=true"

Filter by Name​

curl -X GET "https://api.ledgerlink.ai/v1/providers?name=coin"

Error Responses​

400 Bad Request​

{
"statusCode": 400,
"message": "Invalid query parameters",
"error": "Bad Request"
}

500 Internal Server Error​

{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}

Get Provider​

Retrieves a specific provider by ID with full relationship data.

Endpoint: GET /providers/:id

Path Parameters​

ParameterTypeRequiredDescription
idstringYesProvider UUID

Response​

Status: 200 OK

{
"id": "456e8400-e29b-41d4-a716-446655440000",
"name": "CoinMarketCap",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "***",
"priority": 1
},
"createdAt": "2025-11-20T10:30:00.000Z",
"updatedAt": "2025-11-20T10:30:00.000Z",
"assetProviders": [
{
"assetId": "123e4567-e89b-12d3-a456-426614174000",
"providerId": "456e8400-e29b-41d4-a716-446655440000",
"asset": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Bitcoin",
"code": "BTC"
}
}
],
"categoryProviders": [
{
"categoryId": "789e4567-e89b-12d3-a456-426614174000",
"providerId": "456e8400-e29b-41d4-a716-446655440000",
"category": {
"id": "789e4567-e89b-12d3-a456-426614174000",
"name": "Cryptocurrency"
}
}
]
}

Example​

curl -X GET "https://api.ledgerlink.ai/v1/providers/456e8400-e29b-41d4-a716-446655440000"

Error Responses​

404 Not Found​

{
"statusCode": 404,
"message": "Provider not found",
"error": "Not Found"
}

500 Internal Server Error​

{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}

Update Provider​

Updates an existing provider's configuration.

Endpoint: PUT /providers/:id

Path Parameters​

ParameterTypeRequiredDescription
idstringYesProvider UUID

Request Body​

{
"name": "string",
"slug": "string",
"isDefault": boolean,
"config": {}
}

All fields are optional. Only provided fields will be updated.

Response​

Status: 200 OK

{
"id": "456e8400-e29b-41d4-a716-446655440000",
"name": "CoinMarketCap Pro",
"slug": "coinmarketcap",
"isDefault": true,
"config": {
"apiKey": "***",
"priority": 1,
"timeout": 5000
},
"createdAt": "2025-11-20T10:30:00.000Z",
"updatedAt": "2025-11-20T15:45:00.000Z"
}

Example​

curl -X PUT "https://api.ledgerlink.ai/v1/providers/456e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"name": "CoinMarketCap Pro",
"config": {
"apiKey": "new-api-key",
"priority": 1,
"timeout": 5000
}
}'

Error Responses​

404 Not Found​

{
"statusCode": 404,
"message": "Provider not found",
"error": "Not Found"
}

400 Bad Request​

{
"statusCode": 400,
"message": "Invalid input data",
"error": "Bad Request"
}

Delete Provider​

Soft deletes a provider from the system.

Endpoint: DELETE /providers/:id

Path Parameters​

ParameterTypeRequiredDescription
idstringYesProvider UUID

Response​

Status: 200 OK

{
"success": true,
"message": "Provider successfully deleted"
}

Example​

curl -X DELETE "https://api.ledgerlink.ai/v1/providers/456e8400-e29b-41d4-a716-446655440000"

Error Responses​

404 Not Found​

{
"statusCode": 404,
"message": "Provider not found",
"error": "Not Found"
}

400 Bad Request​

{
"statusCode": 400,
"message": "Cannot delete provider with active mappings",
"error": "Bad Request"
}

Causes:

  • Provider has active asset or category mappings
  • Provider is currently in use

Notes​

  • This is a soft delete - the provider is marked as deleted but remains in the database
  • Deleted providers are excluded from list queries
  • Consider removing asset and category mappings before deleting
  • Deleting a provider may impact rate fetching for associated assets

Provider Fields Reference​

FieldTypeDescription
idstring (UUID)Unique provider identifier
namestringProvider display name
slugstringUnique provider slug (used in code)
isDefaultbooleanWhether this provider is used by default
configobjectProvider-specific configuration
createdAtstring (ISO 8601)Creation timestamp
updatedAtstring (ISO 8601)Last update timestamp
assetProvidersarrayAsset mappings (when included)
categoryProvidersarrayCategory mappings (when included)

Supported Providers​

Link Quote currently supports the following market data providers:

CoinMarketCap​

Slug: coinmarketcap

Description: Professional cryptocurrency market data provider with comprehensive coverage.

Configuration:

{
"config": {
"apiKey": "your-cmc-api-key",
"priority": 1
}
}

Features:

  • Real-time pricing for thousands of digital assets
  • Historical data access
  • High reliability and uptime
  • Professional-grade API

Requirements:

  • CoinMarketCap API key (Basic, Hobbyist, Startup, Standard, or Enterprise plan)

Pyth Network (Hermes)​

Slug: pyth

Description: Decentralized oracle network providing real-time on-chain price feeds.

Configuration:

{
"config": {
"priority": 2
}
}

Features:

  • Sub-second price updates
  • Decentralized data sources
  • On-chain verification
  • High-frequency trading support

Requirements:

  • No API key required
  • Connects to Hermes price service

Default Providers​

Providers marked with isDefault: true are used when:

  1. An asset does not exist in the database
  2. An asset has no specific provider mappings
  3. An asset's category has no provider mappings

Example Provider Selection Logic:

Rate Request for "BTC"
↓
1. Check if asset "BTC" exists
↓
2. If exists → Use asset-specific providers (if any)
↓
3. If no asset providers → Use category providers (if any)
↓
4. If no category providers → Use default providers
↓
5. Fetch rates from all selected providers in parallel
↓
6. Return average of successful responses

Need Help? Contact helpdesk@ledgerlink.ai for assistance.