Skip to content
Latchkey

GitHub Actions "Input required and not supplied: token"

An action declared token as a required input, but it arrived empty - usually a secret that does not exist, is named wrong, or was not passed to a reusable workflow.

What this error means

An action fails at startup with "Input required and not supplied: token". The action never runs because its required token input resolved to an empty string.

Actions log
Error: Input required and not supplied: token

Common causes

Secret missing or misnamed

with: token: ${{ secrets.MY_TOKEN }} resolves to empty when the secret does not exist or is spelled differently than defined.

Secret not passed to a reusable workflow or fork

A reusable workflow only sees secrets explicitly passed (or inherited). On a fork pull_request, secrets are unavailable, so the token input is empty.

How to fix it

Supply a real token input

Pass a defined secret (or the built-in GITHUB_TOKEN) to the action’s token input.

.github/workflows/ci.yml
- uses: some/action@v1
  with:
    token: ${{ secrets.GITHUB_TOKEN }}

Make sure the secret reaches the job

  1. Confirm the secret name matches exactly what is stored in repo/org/environment settings.
  2. For reusable workflows, forward the secret via the secrets: block or secrets: inherit.
  3. Remember fork pull_request runs get no secrets - gate token-using steps accordingly.

How to prevent it

  • Reference secret names exactly as defined.
  • Forward secrets explicitly to reusable workflows.
  • Guard token-dependent steps so fork PRs do not run them with empty secrets.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →