> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firstrespondershub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import and manage codes

> Upload access codes, search by exact value, understand statuses, and keep unused codes in stock

**Access codes** is your unused-code shelf. You import the list you bought from the vendor. The platform then holds one unused set for each student and marks it **Sent** after it goes out.

## Where to find it

Go to [**Program Dashboard → Courses → Access codes**](https://www.firstrespondershub.com/program-dashboard/credentials/inventory).

Only **program owners** can open this page.

You can also jump here from a course's **Student access** page.

## What you are importing

Each import row is **one student worth of unique fields**.

* For AHA, that is usually one Course URL.
* For Jones & Bartlett, that is usually one 10-digit Access Code.
* For a custom login, that might be username **and** password on the same row.

Shared fields (Course ID, course website) are **not** in the spreadsheet. You set those on the course.

<Tip>
  Keep leading zeros. A code like `0123456789` must stay `0123456789`. The importer does not turn codes into numbers.
</Tip>

## Add inventory

1. Click **Add inventory**.
2. Select the course (the left list shows how many codes are **available** for each course).
3. Optionally enter a **Batch name** so you can tell orders apart later. Example: `Spring 2026 J&B order`.
4. Choose how to add codes:

<Tabs>
  <Tab title="Paste codes">
    Use this when there is **one** unique field (AHA URLs, or a single access-code column).

    Paste **one code or URL per line**, then continue to preview.
  </Tab>

  <Tab title="Upload CSV or Excel">
    Use this when you have columns, or more than one unique field.

    1. Upload the file.
    2. **Map column for {field}** so each unique field matches a column.
    3. Continue to preview.
  </Tab>
</Tabs>

5. Review the preview. Fix any rejected rows (bad URLs, duplicates).
6. Click **Commit import**.

You should see a toast such as **Imported 40 packets**. If students were already waiting because you were out of stock, you may also see **fulfilled N waiting delivery(ies)**. Those waiting students get a code as soon as stock exists (and then follow the course's send timing).

### What the importer skips

* Duplicate values already in the file
* Values that already exist in stock (unless the old one is **Already used** or **Archived**)
* Invalid URLs, for URL fields

If an AHA batch looks like it mixed two different courses (the URLs do not match), you will see a warning. Check the file before you commit.

## Statuses you will see

| Status                 | Meaning                                                                            |
| ---------------------- | ---------------------------------------------------------------------------------- |
| **In stock**           | Unused. Ready for the next student.                                                |
| **Held for a student** | Reserved for someone who enrolled or bought, but not sent yet.                     |
| **Sent**               | The student has this code (email and/or dashboard).                                |
| **Needs verification** | Taken back after a refund of a **sent** code. A person must check it before reuse. |
| **Already used**       | Burned. Do not give it to anyone else.                                             |
| **Entered by hand**    | A team member typed this set for one student.                                      |
| **Archived**           | Removed from active stock on purpose.                                              |

The top of the page also shows **Waiting for codes**. That is how many students enrolled or bought while you were out of stock.

## Search, edit, and archive

* **Search by exact code** — paste the full code or URL. Partial search is not used, so you do not accidentally match the wrong student.
* **Edit values** — only while the set is **In stock**.
* **Archive** — hide an unused set so it is not given out (for example, a code your vendor voided).
* **View history** — see every status change for that set.

## After a refund: return to stock

If a **sent** code comes back, it usually lands in **Needs verification**. Open it and choose:

* **Mark available** — put it back **In stock**
* **Mark burned** — mark it **Already used**

If someone marked a code **Already used** by mistake, use **Return to stock**.

Full refund behavior is in [Refunds and unused codes](/student-access/refunds-and-unused-codes).

## Consumption (will we run out?)

The inventory page can show a short forecast:

* **Paid seats (30d)** — how many paid seats used codes in the last 30 days
* **Daily rate** — average per day
* **Available** — unused codes right now
* **Projected exhaustion** — roughly when you will hit zero at that rate

This is a planning aid, not a promise. Set [stock alerts](/student-access/activity-and-alerts) if you want an email before you run out.

## Tips that save support tickets

* Import **before** you open enrollment, so the first students are not stuck on **Waiting for codes**.
* Name each batch after the vendor order (`AHA Heartsaver Mar 2026`).
* Never email a leftover code from the spreadsheet. Let the platform assign it so the status stays correct.
* If a student says "this code is already used," search the exact code here. You will see who it was held for or sent to.
