# Flux Field level and bands for a ticker

`GET https://api.skylit.ai/v1/underlying/{ticker}/flux-field`

API: Flowseeker. Credits: 1.

Skylit's proprietary Flux Field for the underlying: a level with an
inner, an outer and an extreme band around it, the same series the
Flux Field indicator draws on Skylit charts. Price above the level
means aggressive buyers are in control; a tag of the outer band is
stretched, and the extreme band is reached only on outsized moves.
Reclaiming or losing the level or the inner band frames trend entries
and exits.

One point per regular-hours minute (`resolution=1min`) or per trading
day (`resolution=1d`, the session's last value). Minutes without
qualifying options activity carry no point. Off-hours and on a
holiday the latest session is returned.

## Authentication

Send your Skylit API key as a bearer token: `Authorization: Bearer <key>`. No other header is accepted.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `ticker` | path | string | yes | Underlying ticker symbol (uppercase, e.g. `SPY`, `AAPL`). |
| `interval` | query | string | no | Trading days covered, ending with `date`: `1D` to `30D` at `resolution=1min`, `1D` to `252D` (one year) at `resolution=1d`. Data covers the last 365 calendar days, so a window reaching further back (an older `date`) returns only the days inside it. (default `1D`) |
| `resolution` | query | string | no | One point per minute (`1min`) or per trading day (`1d`). (one of `1min`, `1d`; default `1min`) |
| `anchor` | query | string | no | Where the level restarts: every session, or the start of each week, month, quarter or year (carried across sessions). Defaults to `session` at `resolution=1min` and `month` at `resolution=1d`. (one of `session`, `week`, `month`, `quarter`, `year`) |
| `date` | query | string (date) | no | Last trading day covered. Defaults to the current or latest session. |
| `limit` | query | integer | no | Return only the most recent N points of the window (default: all). The bands are computed over the whole window either way. (min 1) |

## Example request

```bash
curl "https://api.skylit.ai/v1/underlying/SPY/flux-field" \
  -H "Authorization: Bearer $SKYLIT_API_KEY"
```

## Responses

### 200

Flux Field points, oldest first.

Shape (placeholder values):

```json
{
  "data": {
    "ticker": "SPY",
    "interval": "1D",
    "resolution": "1min",
    "anchor": "session",
    "points": [
      {
        "time": 0,
        "level": 0,
        "inner": {
          "upper": 0,
          "lower": 0
        },
        "outer": {
          "upper": 0,
          "lower": 0
        },
        "extreme": {
          "upper": 0,
          "lower": 0
        },
        "price": 0
      }
    ]
  },
  "meta": {
    "timestamp": "string",
    "requestId": "d7574836",
    "nextCursor": "string",
    "nextEndTime": "string",
    "warnings": [
      {
        "code": "string",
        "message": "string",
        "affectedFields": [
          "string"
        ]
      }
    ]
  }
}
```

### 400

Request validation failed.

invalidParam:

```json
{
  "error": {
    "code": "INVALID_PARAMETER",
    "message": "Invalid value 'bogus' for 'timeframe'. Allowed: 5m, 15m, 1h, 4h, 1d."
  }
}
```

### 401

Missing or invalid API key.

missingKey:

```json
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}
```

### 402

The account's shared Skylit credit balance is lower than this route's cost. Top up to continue. Carries `X-Credits-Remaining: 0`.

Headers: `X-Credits-Remaining`.

outOfCredits:

```json
{
  "error": {
    "code": "insufficient_credits",
    "message": "Out of credits. Top up to continue making requests."
  }
}
```

### 403

Unknown, revoked or expired API key (the gateway's `forbidden`), the account's API access is suspended (`account_suspended`) or blocked (`account_blocked`). Not retryable.

badKey:

```json
{
  "error": {
    "code": "FORBIDDEN",
    "message": "Access to this API has been disallowed"
  }
}
```

accountSuspended:

```json
{
  "error": {
    "code": "account_suspended",
    "message": "API access has been suspended for this account. Contact support."
  }
}
```

### 404

Unknown ticker or contract (`SYMBOL_NOT_FOUND`), or no data for the requested window. Not charged.

unknownSymbol:

```json
{
  "error": {
    "code": "SYMBOL_NOT_FOUND",
    "message": "Unknown ticker 'ZZZZQ'."
  }
}
```

noData:

```json
{
  "error": {
    "code": "NOT_FOUND",
    "message": "No trades found for AAPL on 2026-05-27 with timeframe 1d"
  }
}
```

### 429

Either the key exceeded its requests-per-minute limit (`X-RateLimit-Limit`; no `Retry-After`, wait until `X-RateLimit-Reset`), or the account is over one of the API's own limits, such as the query budget (queries running at once, fresh queries per second): `TOO_MANY_CONCURRENT_QUERIES` or `RATE_LIMITED` with `Retry-After`. Not charged; retry after the wait.

tooFast:

```json
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded."
  }
}
```

queryBudget:

```json
{
  "error": {
    "code": "TOO_MANY_CONCURRENT_QUERIES",
    "message": "This account already has 16 queries running on the shared query engine across all servers (limit ch.concurrent.customer). Cached answers are not affected. Retry after Retry-After; to backfill a day, follow meta.nextCursor instead of splitting time windows. See https://www.skylit.ai/docs/api-reference/rate-limits-and-retries",
    "retry_after": 1,
    "docs_url": "https://www.skylit.ai/docs/api-reference/errors#too_many_concurrent_queries"
  }
}
```

### 500

Unexpected server error (`INTERNAL_ERROR`, `DATABASE_ERROR`). Not charged; safe to retry with exponential backoff.

internal:

```json
{
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Internal server error"
  }
}
```

### 503

Underlying data source temporarily unavailable, the credit balance could not be verified (`credit_check_failed`), or the API is paused for maintenance (`api_paused`, with a `Retry-After` header and a `retry_after` field in seconds). Not charged; safe to retry.

ingestionLag:

```json
{
  "error": {
    "code": "UNAVAILABLE",
    "message": "Live feed is degraded; please retry in a few seconds."
  }
}
```

creditCheckFailed:

```json
{
  "error": {
    "code": "credit_check_failed",
    "message": "Could not verify credit balance. Please retry."
  }
}
```

### 504

The request did not complete within 25 seconds. Not charged; narrow the window or retry.

tooSlow:

```json
{
  "error": {
    "code": "GATEWAY_TIMEOUT",
    "message": "The request took too long and was not completed. It was not charged; narrow the request or retry."
  }
}
```
