Generic REST API
The REST API source is a generic receiver that pulls JSON data from any REST API endpoint. It supports both logs and metrics, with configurable authentication, pagination, time-based offset tracking, and checkpointing so collection can resume after a restart.
Note: Because of the wide range of possible use cases for this source, it offers a best-effort integration with common API patterns. It may not align with every REST API.
Supported Telemetry Types
Linux
✓
✓
Windows
✓
✓
macOS
✓
✓
Use the Choose Telemetry Type selector to collect Logs, Metrics, or both. Metrics extraction is driven by the Metrics field mapping below.
Prerequisites
A REST API endpoint that returns JSON (a standard JSON array/object or newline-delimited JSON).
Any authentication credentials the endpoint requires (API key, bearer token, basic credentials, OAuth 2.0 client credentials, or Akamai EdgeGrid).
For metrics collection, the response must include a field that holds each metric's name.
Configuration

The UI groups parameters into tabs: Connection, Metrics, Authentication, Pagination, and Advanced. The tables below follow that grouping.
Connection
Choose Telemetry Type
Telemetry Selector
[Logs, Metrics]
Telemetry types to collect. Valid values: Logs, Metrics.
URL
String
The base URL for the REST API endpoint. Required.
Response Format
Enum
JSON
Format of the API response body. Valid values: JSON, NDJSON. In NDJSON mode each line is a separate JSON object.
Response Field
String
Name of the field in the response that contains the array of items. If empty, the response is assumed to be a top-level array. Use dot notation for nested fields (e.g. response.data). Only applies when response_format is JSON.
Start Time Parameter Name
String
Query parameter name for the start time (e.g. since, from, start_time). Required when pagination_mode is timestamp.
Start Time Value
Timestamp
Timestamp to start collecting data from. Conditional on start_time_param_name being set. For timestamp pagination, this is the initial start value. If not set, collection starts from the beginning.
End Time Parameter Name
String
Query parameter name for the end time (e.g. until, to, end_time). When set, an end time is sent on every request.
End Time Value
Timestamp
Timestamp to stop collecting data at. Conditional on end_time_param_name being set.
Timestamp Format
Enum
RFC3339
Format for the start and end time query parameters. Accepts Go time layout strings or epoch formats (the field is creatable, so a custom layout can be entered). See Time-Bounding.
Metrics
These fields apply only when Metrics is selected in telemetry_types. Each value names the field in a response item that supplies the corresponding metric attribute. See Metrics field mapping for worked examples.
Name Field
String
Field name in each response item containing the metric name. Required when collecting Metrics. If the field is not found, the metric is dropped and a warning is logged.
Description Field
String
Field name containing the metric description. If unset or not found, defaults to Metric from REST API.
Type Field
String
Field name containing the metric type (gauge, sum, histogram, summary). If unset or not found, defaults to gauge.
Unit Field
String
Field name containing the metric unit. If unset or not found, no unit is set.
Monotonic Field
String
Field name (boolean) indicating whether a sum metric is monotonic. Only applies to sum metrics. Defaults to false if unset or not found.
Aggregation Temporality Field
String
Field name containing the aggregation temporality (cumulative or delta). Defaults to cumulative if unset or not found.
When a field name is configured, that field is automatically excluded from the metric's attributes to avoid duplication.
Authentication
Authentication Mode
Enum
API Key
Authentication mode. Valid values: None, API Key, Bearer Token, Basic, Akamai EdgeGrid, OAuth 2.0.
Each mode exposes its own credential fields, shown only when that mode is selected.
API Key (auth_mode: API Key)
API Key Header Name
String
Header name for API key authentication. Required.
API Key Value
String
API key value. Required. Stored as a sensitive value.
Bearer Token (auth_mode: Bearer Token)
Bearer Token
String
Bearer token value. Required. Stored as a sensitive value.
Basic (auth_mode: Basic)
Username
String
Username for basic authentication. Required.
Password
String
Password for basic authentication. Required. Stored as a sensitive value.
OAuth 2.0 (auth_mode: OAuth 2.0)
Client ID
String
Client identifier assigned during application registration. Required. Stored as a sensitive value.
Client Secret
String
Client secret issued during application registration. Required. Stored as a sensitive value.
Token URL
String
Endpoint URL used to retrieve the OAuth 2.0 access token. Required.
Scopes
Strings
[]
Scope(s) of the access request.
Endpoint Params
Map
{}
Additional parameters to send to the token endpoint.
Akamai EdgeGrid (auth_mode: Akamai EdgeGrid)
The Akamai API requires an enterprise license. This authentication method has not been tested against an Akamai API.
Access Token
String
EdgeGrid access token. Required. Stored as a sensitive value.
Client Token
String
EdgeGrid client token. Required. Stored as a sensitive value.
Client Secret
String
EdgeGrid client secret. Required. Stored as a sensitive value.
Account Switch Key
String
Account switch key used to make requests against a managed account.
Pagination
Pagination Mode
Enum
none
Pagination mode. Valid values: none, offset, page, timestamp.
Pagination Response Source
Enum
Body
Where to read pagination metadata from. Valid values: Body, Header. Use Header when the API returns pagination metadata in HTTP response headers. Conditional on pagination_mode not being none.
Total Record Count Field
String
Name of the field or header containing the total record count. Conditional on pagination_mode not being none.
Page Limit
Integer
0
Maximum number of pages to fetch (0 = no limit). Conditional on pagination_mode not being none.
Zero-Based Index
Boolean
false
Indicates that the requested data starts at index 0. Conditional on pagination_mode not being none.
Offset / Limit (pagination_mode: offset)
Offset Field Name
String
offset
Query parameter name for offset.
Limit Field Name
String
Query parameter name for limit.
Starting Offset
Integer
0
Starting offset value.
Next Offset Field Name
String
Response body field containing the next offset token. When set, the receiver uses token-based (cursor) pagination instead of numeric offsets. Supports nested fields with dot notation (e.g. pagination.next_cursor).
Page / Size (pagination_mode: page)
Page Number Field Name
String
page
Query parameter name for page number.
Page Size Field Name
String
Query parameter name for page size.
Starting Page
Integer
1
Starting page number.
Total Pages Field Name
String
Field name in the response containing the total page count.
Timestamp (pagination_mode: timestamp)
Timestamp pagination sends an advancing start time using the top-level start_time_param_name and timestamp_format fields. The start time advances automatically from response data as pages are consumed, so set start_time_param_name (Connection tab) when using this mode.
Timestamp Field Name
String
Field name in each response item containing the timestamp (e.g. ts, timestamp). Required.
Page Size Field Name
String
Query parameter name for page size (e.g. perPage, limit).
Page Size
Integer
100
Page size to use.
Advanced
Min Poll Interval
Integer
10
Minimum interval between API polls, in seconds. The receiver resets to this interval when data is received. Increase it to avoid hitting API rate limits.
Max Poll Interval
Integer
300
Maximum interval between API polls, in seconds. The receiver uses adaptive polling that backs off when no data is returned, up to this maximum.
Backoff Multiplier
String
2.0
Multiplier for increasing the poll interval when no data or a partial page is returned. Must be greater than 1.0.
Enable Checkpoint
Boolean
true
Enable checkpointing so the receiver resumes from where it left off after a restart. See Checkpointing.
Storage Directory
String
${OIQ_OTEL_COLLECTOR_HOME}/storage
Directory for storing checkpoint state. Conditional on enable_storage being true.
Timeout
Integer
10
HTTP client timeout, in seconds.
Headers
Map
{}
Custom headers to include with each request. Use the sensitive toggle for headers containing secrets.
Example Configuration
Standalone Source
Configuration Tips
Mapping the response body
If the API returns a top-level JSON array, leave
response_fieldempty.If the records are wrapped in an object (for example
{ "data": [ ... ], "total": 2 }), setresponse_fieldto the field that holds the array, using dot notation for nested fields (e.g.result.items).For newline-delimited responses, set
response_formattoNDJSON. Each line is treated as a separate JSON object andresponse_fieldis ignored.
Choosing a pagination mode
offsetsuits APIs that page with numericoffset/limitquery parameters, or cursor APIs when you setpagination_offset_limit_next_offset_field_name.pagesuits APIs that page with a page number and page size.timestampsuits APIs that page by an advancing time window. It requiresstart_time_param_name(Connection tab) andpagination_timestamp_timestamp_field_name.When pagination metadata is returned in HTTP headers rather than the body, set
pagination_response_sourcetoHeader.
Polling and rate limits
The receiver polls adaptively between
min_poll_intervalandmax_poll_interval, backing off bybackoff_multiplierwhen a poll returns no data.Raise
min_poll_intervalif you are hitting the API's rate limit. Lowermax_poll_intervalif you need fresher data when the endpoint is idle.
Time-Bounding
The Connection-tab time fields add start and/or end time query parameters to every request. They work with any pagination mode (or none). When used with timestamp pagination, the start time advances automatically through response data.
start_time_value accepts now (resolved once at receiver start, not dynamically updated) or a fixed timestamp in the configured format. timestamp_format controls how both start and end times are rendered. Supported formats:
RFC3339(2006-01-02T15:04:05Z07:00) - defaultISO8601 Basic(20060102T150405)24-hour datetime(2006-01-02 15:04:05)Epoch Seconds,Epoch Milliseconds,Epoch Microseconds,Epoch Nanoseconds- numeric epoch values
The format field is creatable, so a custom Go time layout can be entered if none of the presets match the API.
Response Format
The receiver expects JSON responses in one of two shapes.
Top-level array (leave response_field empty):
Object with a data field (set response_field: data):
Metrics field mapping
When Metrics is selected, the receiver builds one metric per response item using the field names you map. Given this response:
set the following so each item becomes a metric:
response_field:datametrics_name_field:namemetrics_type_field:kindmetrics_unit_field:unitmetrics_description_field:help
The metric is emitted as queue.depth (gauge, unit {items}). The mapped fields (name, kind, unit, help) are excluded from the metric's attributes; remaining fields such as value supply the data point. If metrics_name_field is not present in an item, that item is dropped and a warning is logged.
Checkpointing
When checkpointing is enabled (enable_storage: true, on by default), the receiver writes its pagination state to a file storage extension at storage_directory. After a restart it resumes from where it left off, preventing duplicate collection. The checkpoint includes the current pagination state (offset, page number, or timestamp) and the number of pages fetched. For timestamp pagination, the advancing start time is persisted so the receiver continues from the most recently observed timestamp.
Each checkpoint is tagged with a fingerprint derived from the config fields that define what data the receiver fetches: url, pagination mode, start_time_value, end_time_value, the offset starting value, and the page starting value. If any of these change between runs, the stored checkpoint is discarded because it tracks state for a different query. Other changes (credentials, polling intervals) do not invalidate the checkpoint.
Troubleshooting
Symptom: No data is collected and the collector logs show authentication failures (401/403). Solution: Confirm auth_mode matches what the API expects and that the credential fields are correct. For API Key auth, verify apikey_header_name is the exact header the API requires (for example Authorization or X-API-Key).
Symptom: The endpoint returns data but no records are produced. Solution: Check response_field. If the records are nested inside an object, set response_field to the field (or dotted path) that holds the array. For newline-delimited responses, set response_format to NDJSON and leave response_field empty.
Symptom: Metrics are dropped with a warning in the collector logs. Solution: The metrics_name_field value must name a field present in every response item. Set it to the field that holds the metric name, and confirm metrics_type_field (if set) resolves to gauge, sum, histogram, or summary.
Symptom: The same records are collected repeatedly after a restart, or pagination never advances. Solution: Ensure enable_storage is on so checkpoints persist. If you intentionally changed the query (URL, pagination mode, or start/end time), the prior checkpoint is discarded by design. For timestamp pagination, verify pagination_timestamp_timestamp_field_name names a field present in each item so the start time can advance.
Symptom: The API returns HTTP 429 (rate limited). Solution: Raise min_poll_interval so the receiver polls less aggressively, and lower pagination_page_limit or the page size to fetch fewer records per cycle.
Related Resources
Last updated
Was this helpful?