# USCIS API

> USCIS returns case status and processing times through a workflow and API.

Get processing times returns completion times and inquiry date cutoffs for a form, optionally filtered by category or office. Check case status returns a case’s current status and explanation from a USCIS receipt number.

- Page: https://fous.com/tools/uscis
- Handle: `@uscis`
- Category: [Government](https://fous.com/tools/category/government)
- Source website: https://uscis.gov
- Last verified: Sep 29, 2026

## Methods

### Check case status

Operation `check_case_status`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Check the current USCIS case status from a receipt number. Returns the status, full explanation, form type if stated, and the date of the action when stated in the explanation.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `receipt_number` | string | yes | `"ioe 0903-589664"` | USCIS receipt number from your notice, such as IOE0903589664. Spaces, dashes and lowercase letters are accepted. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "receipt_number"
  ],
  "properties": {
    "receipt_number": {
      "type": "string",
      "description": "USCIS receipt number from your notice, such as IOE0903589664. Spaces, dashes and lowercase letters are accepted.",
      "examples": [
        "ioe 0903-589664",
        "IOE-0903589664"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "receipt_number": "ioe 0903-589664"
    },
    {
      "receipt_number": "IOE-0903589664"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `form_type` | string or null | `"N-400"` | Form code, such as N-400, when mentioned in the explanation. |
| `page_link` | string | `"https://egov.uscis.gov/"` | USCIS Case Status Online page. |
| `explanation` | string |  | Full plain-language status explanation from USCIS. |
| `status_title` | string | `"Request for Initial Evidence Was Sent"` | Current case status title. |
| `receipt_number` | string | `"IOE0903589664"` | Normalized USCIS receipt number. |
| `last_action_date` | string or null | `"2018-10-31"` | Date of the status action from the explanation, if stated. |

**Example input**

```json
{
  "receipt_number": "ioe 0903-589664"
}
```

**Example output**

```json
{
  "form_type": "N-400",
  "page_link": "https://egov.uscis.gov/",
  "explanation": "On October 31, 2018, we sent a request for initial evidence for your Form N-400, Application for Naturalization, Receipt Number IOE0903589664. The request for evidence explains what we need from you. …",
  "status_title": "Request for Initial Evidence Was Sent",
  "receipt_number": "IOE0903589664",
  "last_action_date": "2018-10-31"
}
```

### Get processing times

Operation `get_processing_times`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find USCIS case processing times for a form, optionally by category and office. Times show when 80% of cases were completed; inquiry dates are the published receipt-date cutoffs. Some service centers are grouped as Service Center Operations.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `form` | string | yes | `"N-400 citizenship"` | Form number or what the form is for, e.g. I-485 green card through family. |
| `office` | string | no | `"Dallas TX"` | Field office or service center, e.g. Dallas TX or Texas Service Center. Leave blank for all offices. |
| `category` | string | no | `"Based on a pending I-485 adjustment application"` | Form category in words, e.g. family-based adjustment applications. Leave blank for all categories. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "form"
  ],
  "properties": {
    "form": {
      "type": "string",
      "description": "Form number or what the form is for, e.g. I-485 green card through family.",
      "examples": [
        "N-400 citizenship",
        "I-485 green card through family",
        "I-765 work permit"
      ]
    },
    "office": {
      "type": "string",
      "default": "",
      "description": "Field office or service center, e.g. Dallas TX or Texas Service Center. Leave blank for all offices.",
      "examples": [
        "Dallas TX",
        "Texas Service Center"
      ]
    },
    "category": {
      "type": "string",
      "default": "",
      "description": "Form category in words, e.g. family-based adjustment applications. Leave blank for all categories.",
      "examples": [
        "Based on a pending I-485 adjustment application"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "form": "N-400 citizenship",
      "office": "Dallas TX"
    },
    {
      "form": "I-485 green card through family",
      "office": "Dallas TX"
    },
    {
      "form": "N-400 citizenship"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `processing_times` | array |  |  |
| `processing_times[].form` | string | `"N-400"` |  |
| `processing_times[].time` | string or null | `"13 months"` |  |
| `processing_times[].months` | number or null | `13` |  |
| `processing_times[].office` | string | `"Dallas TX"` |  |
| `processing_times[].category` | string | `"Application for Naturalization"` |  |
| `processing_times[].page_link` | string | `"https://egov.uscis.gov/processing-times"` |  |
| `processing_times[].case_inquiry_date` | string or null | `"2025-05-28"` |  |
| `processing_times[].last_updated_date` | string or null | `"2026-09-17"` |  |

**Example input**

```json
{
  "form": "N-400 citizenship",
  "office": "Dallas TX"
}
```

**Example output**

```json
{
  "processing_times": [
    {
      "form": "N-400",
      "time": "13 months",
      "months": 13,
      "office": "Dallas TX",
      "category": "Application for Naturalization",
      "page_link": "https://egov.uscis.gov/processing-times",
      "case_inquiry_date": "2025-05-28",
      "last_updated_date": "2026-09-17"
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@uscis",
  "visibility": "public",
  "operation": "check_case_status",
  "version": 1,
  "input": {
    "receipt_number": "ioe 0903-589664"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@uscis\",\n  \"visibility\": \"public\",\n  \"operation\": \"check_case_status\",\n  \"version\": 1,\n  \"input\": {\n    \"receipt_number\": \"ioe 0903-589664\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@uscis",
  "visibility": "public",
  "operation": "check_case_status",
  "version": 1,
  "input": {
    "receipt_number": "ioe 0903-589664"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/uscis`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `check_case_status`: Check case status. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_processing_times`: Get processing times. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-uscis https://api.fous.com/mcp/tools/uscis --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare processing times across offices.
- Find the inquiry date cutoff for a form.
- Check a case’s current status using its receipt number.
- Identify the form type mentioned in a case explanation.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this USCIS tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a USCIS account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from uscis.gov when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### How long is USCIS taking to process a form?

Get processing times returns estimates for a form, optionally filtered by office or category. The times show when 80% of cases were completed.

### What is the current status of a USCIS case?

Check case status returns the current status and full explanation when you provide a receipt number.

### When can I inquire about a delayed case?

Get processing times returns the published receipt-date cutoff for a form, optionally filtered by office or category.

## Related

- [CBP API](https://fous.com/tools/cbp.md): US Customs and Border Protection travel information.
- [US State Department API](https://fous.com/tools/us-state-department.md): US State Department provides current travel advisories, entry rules, embassy and consulate contacts, and published monthly visa bulletin dates; guidance may be incomplete; consular agencies are excluded.
- [USPS API](https://fous.com/tools/usps.md): USPS provides latest available package tracking, standardized U.S. addresses with ZIP+4, recommended cities for five-digit ZIP Codes, and estimated domestic postage and delivery dates.
- [IRS API](https://fous.com/tools/irs.md): IRS provides tax information and public organization records, including charity status and current-directory forms, instructions, and publications with revision and posting dates.
- [TSA Wait Times API](https://fous.com/tools/tsa-wait-times.md): Security wait time estimates at US airports.
- [Congress.gov API](https://fous.com/tools/congress-gov.md): Congress.gov returns federal bills and resolutions matching topic, Congress, status, or chamber, and provides an individual bill’s status, summary, titles, actions, and related bills; summaries may be unavailable.
- [US Census Bureau API](https://fous.com/tools/us-census-bureau.md): US Census Bureau returns statistics from varying Census years, population estimates through July 1, and address geographies using Census vintages that may differ from representation.
- [OSHA API](https://fous.com/tools/osha.md): Public workplace safety inspection and enforcement records.
- [All Government tools](https://fous.com/tools/category/government)
