# Troubleshooting Capture First

Version: 1.0.1

Start with the message or behavior you can see. Change one thing, then test again with harmless text.

## Airtable says `AUTHENTICATION_REQUIRED`

The request reached Airtable, but the credential wasn't accepted.

Check:

- The header key is exactly `Authorization`.
- The value starts with `Bearer ` and has one space after it.
- You copied the complete token shown when it was created, not a short token ID from the token list.
- The token still exists and hasn't been revoked.

Leave the JSON body alone until the credential is fixed.

## Airtable returns `403` or a permission error

Check that the token has record-write access and access to the correct base. The capture token doesn't need broad workspace access.

## Airtable returns `UNKNOWN_FIELD_NAME`

Check the spelling, spaces, and capitalization of:

- `Raw Thought`
- `Processing Status`

Also confirm `New` exists as a Processing Status choice.

## Airtable says the body is invalid

Rebuild the body as:

```text
Array → Dictionary → fields Dictionary
```

The outer `records` value must be an Array. Its first item must be a Dictionary. That item contains the `fields` Dictionary.

Don't type the JSON braces into a Text field.

## The saved row says `Dictated Text`

The Shortcut is sending ordinary text instead of the variable.

Open the `Raw Thought` value, choose `Select Variable`, and tap the blue output from the Dictate Text action.

## The inner If offers `File Size is Number MB`

Shortcuts guessed the returned dictionary value was a file.

Add `Get Text from Input` after reading the `id`, then make the inner If check whether that Text has any value.

## The actions run outside the blank guard

Press and hold each misplaced block, then drag it above `Otherwise` until it becomes indented inside the first If branch.

The Airtable URL, POST, response parsing, and ID check all belong inside that branch.

## `Thought saved` appears, but no row exists

The success message is probably running without checking `records[0].id`.

Compare your response actions with `shortcut-action-map.md`. The notification belongs inside the inner If that checks the returned ID text.

Until the record exists, treat the capture as unconfirmed.

## A red Shortcuts error appears

Check the Airtable URL and your internet connection. A red error means the Shortcut didn't confirm the save. Fix the cause before retrying, and look for a possible existing row before you submit the same thought again.

## A retry creates a duplicate

Keep both records until you know which one contains the complete thought. V1 favors preserving a thought over deleting a legitimate capture by mistake.

You can merge or archive duplicates later.

## Empty dictation creates a row

Check that every saving action sits inside:

```text
If Dictated Text has any value
```

The `Otherwise` branch should stop the Shortcut.

## The Action Button fires in your pocket

It can happen. Paul's working V1 produced one accidental "butt thought capture," the thought-system version of a butt dial.

Delete the junk record if you're sure it contains nothing useful. If accidental triggers keep happening, change how the phone sits in your pocket or move the Shortcut off the Action Button. Keep the capture path simple unless the problem becomes common.

## Captured At is blank

Confirm the field is a formula based on `CREATED_TIME()`. The Shortcut doesn't send this value.

## An attachment won't upload

Use Airtable's attachment picker for manual records. A local file path can't be saved as ordinary attachment text.

After uploading, open the record again and confirm the filename and attachment count.

## The phone keeps asking for permission

Allow microphone and speech-recognition access for Shortcuts. When iOS asks whether the Shortcut can send data, approve the request only when the displayed host is Airtable's real domain.

## You changed the Shortcut and it stopped working

Return to the smallest known path:

1. Dictate harmless text.
2. Show the raw Airtable response.
3. Confirm one row exists.
4. Rebuild the ID check.
5. Reassign the Action Button only after the manual test passes.

