USPS CRID and MID Enrollment:
Complete Setup Guide for v3 API
Before you can create shipping labels with the USPS v3 REST API, you need three things: a Customer Registration ID (CRID), a Mailer ID (MID), and an Enterprise Payment Account (EPA). Then you need to link them together through a portal that USPS barely documents. This is the guide we wish existed when we set it up.
What Are CRID and MID?
USPS uses two identifiers to track who is creating labels and manifests through their API. They serve different purposes and both are required for label creation.
| Identifier | Full Name | Purpose |
|---|---|---|
| CRID | Customer Registration ID | Identifies your business entity to USPS. Tied to your physical address and EIN. Think of it as your USPS business license number. |
| MID | Mailer ID | Identifies you as a mailer for labels and manifests. Comes in 6-digit (high volume, 10K+ pieces/year) or 9-digit (standard) formats. You can have multiple MIDs under one CRID. |
| EPA | Enterprise Payment Account | Your payment account for postage. Links to ACH or debit funding. Required for label creation because someone has to pay for the postage. |
Address validation (GET /addresses/v3/validate), tracking (GET /tracking/v3/tracking), and pricing (POST /prices/v3/total-rates/search) all work with just OAuth credentials. You do not need CRID, MID, or EPA for those endpoints. But the moment you want to create a label or generate a manifest, you need all three linked and authorized.
Why You Need Them (The 403 Problem)
The most common confusion we see from developers: everything works for address validation and tracking, but label creation returns a 403 or 401. Here's why:
- Works without CRID/MID: Address validation, city/state lookup, ZIP code lookup, tracking, pricing, locations, service standards.
- Requires CRID + MID + EPA: Label creation, payment authorization, SCAN forms (manifests), carrier pickup scheduling, package intercept.
The USPS Developer Portal grants you Public Access I by default. That product bundle includes OAuth, addresses, pricing, tracking, and a few other read-only endpoints. It does not include Labels or Payments. Those require separate enrollment and a manual approval from USPS. No self-service option exists.
Step-by-Step: CRID Registration
Your Customer Registration ID is issued through the USPS Business Customer Gateway (BCG). This is not the same as a personal USPS.com account or the USPS Developer Portal.
- 1 Create a BCG business account
Go to
gateway.usps.comand click "Sign Up." Select Business account type. You need your company's legal name, physical address, and EIN (Employer Identification Number). Do not use an SSN — the "business not found" error during registration almost always means you entered an SSN instead of an EIN. - 2 Navigate to Mailing & Shipping Services
Once logged in, go to your BCG dashboard. Look for "Mailing & Shipping Services" in the left navigation or under Quick Actions. This is where all enrollment happens.
- 3 Apply for Customer Registration ID
Select "Customer Registration" from the services list. Fill out the application — it asks for your business address, contact info, and the types of mailing you plan to do. Select "Ship with APIs" or "eVS" if you see those options.
- 4 Wait for approval
CRID issuance is typically 1–3 business days. In many cases it is instant. You will receive an email with your CRID number. It is an 8-digit numeric ID. Keep it — you will use it in every label creation request.
Step-by-Step: MID Registration
Your Mailer ID is also obtained through the BCG portal. You will want at least one MID for label creation. Businesses that also do bulk mailings (presorted marketing mail, etc.) often get a second MID to keep those separate.
- 1 Go to Mailer ID in BCG
In the BCG dashboard, navigate to "Mailing & Shipping Services" and find the "Mailer ID" section. Click "Apply for Mailer ID."
- 2 Choose 6-digit or 9-digit
USPS issues two types of MIDs:
- 6-digit MID: For high-volume mailers sending 10,000+ mail pieces per year. Provides a larger range of tracking number sequences.
- 9-digit MID: For standard volume. This is what most API-only businesses get. Works identically for label creation.
If you are only creating shipping labels via the API, a 9-digit MID is sufficient. You can always request a 6-digit MID later if your volume increases.
- 3 Link MID to CRID
During the MID application, you will be asked to associate it with a CRID. Select the CRID you registered in the previous step. This linkage is what allows USPS to associate labels with your business entity.
- 4 Approval timeline
MID approval is usually same day to 2 business days. You will see the MID appear in your BCG dashboard under "My Mailer IDs." Write down the 9-digit (or 6-digit) number — it goes in the
senderInfo.MIDfield of label requests.
Step-by-Step: EPA (Enterprise Payment Account)
The EPA is your postage payment account. Without it, USPS has no way to charge for the labels you create. You fund it via ACH (bank transfer) or a debit account.
- 1 Navigate to Enterprise Payment System
In BCG, go to "Mailing & Shipping Services" and find "Enterprise Payment System" or "EPS." Click "Enroll" or "Apply."
- 2 Link to your CRID and MID
During EPA enrollment, you will link it to your CRID. The EPA account number is a 10-digit number (e.g.,
1000405525). This goes in thepaymentInfo.accountNumberfield of label requests. - 3 Set up funding
Add a payment method — ACH bank transfer or debit account. USPS will initiate micro-deposits (two small transfers under $1.00) to verify the account. This takes 2–3 business days. You must confirm the exact amounts before the account is active.
- 4 Approval status
Check "USPS Ship Account Management" in your BCG services list. When it shows "Approved," your EPA is active. The account is in good standing once micro-deposits are verified.
COP Claims Linking — The Hidden Step
This is the step that causes the most frustration. You have a CRID, a MID, an EPA, and a Developer Portal app with valid OAuth credentials. Address validation works. Tracking works. But label creation returns 401 Insufficient OAuth scope. Why?
Because your Developer Portal app needs to be linked to your CRID, MID, and EPA through the Certificate of Postage (COP) portal. This is a separate system from the BCG and the Developer Portal. USPS barely mentions it in their documentation.
- 1 Request Labels & Payments API access
This is the critical step. Go to
emailus.usps.com/s/web-tools-inquiryand select "USPS APIs" then "Customer Access." Submit a service request asking for Payments v3, Domestic Labels v3, and Subscriptions-Tracking to be added to your app. Include your app name, CRID, MIDs, and EPA account number. USPS will respond in 1–4 weeks with a Google Forms questionnaire. Fill it out immediately. - 2 Go to COP Navigator
After USPS grants your app Labels & Payments access, go to
cop.usps.com. Sign in with your BCG credentials. Navigate to "My Apps" and find your Developer Portal application. - 3 Refresh Claims
Click "Refresh Claims" to pull your CRID, MID, and EPA into the COP authorization system. After refresh, check "My Authorizations" — you should see your CRID and MIDs listed. If it shows zero authorizations, the Labels & Payments product has not been granted yet (go back to step 1).
- 4 Verify your JWT token
After claims linking, request a new OAuth token and decode it (base64 decode the JWT payload). You should see your CRID, MIDs, and EPA account number embedded in the token claims. If
api_productsstill shows only[Public Access I], the product grant has not propagated yet.
// After COP claims linking, your JWT token includes:
{'{'}
"aud": ["payments", "prices", "labels"],
"payment_accounts": {'{'}
"accounts": "1000405525"
{'}'},
"mail_owners": [{'{'}
"crid": "56982563",
"mids": "904128937, 904128936"
{'}'}],
"company_name": "YOUR COMPANY LLC",
"api_products": "[Public Access, Labels, Payments]"
{'}'}
// If "api_products" only shows "[Public Access I]"
// you need to submit a service request (see Section 6). API Configuration: Using CRID and MID in Requests
Once enrolled, here is how CRID, MID, and EPA appear in actual API calls.
OAuth Token Request
Your OAuth scope must include labels and payments in addition to the standard scopes:
POST https://apis.usps.com/oauth2/v3/token
// Request body (x-www-form-urlencoded)
grant_type=client_credentials
&client_id={'{your_client_id}'}
&client_secret={'{your_client_secret}'}
&scope=addresses prices labels payments tracking
// Note: "labels" and "payments" scopes only work
// AFTER USPS grants your app the Labels & Payments product.
// Default "Public Access I" does NOT include them. Label Creation Request
CRID goes in the request header and in the senderInfo body. MID goes in senderInfo. EPA goes in paymentInfo:
POST https://apis.usps.com/labels/v3/label
// Headers
Authorization: Bearer {'{access_token}'}
Content-Type: application/json
X-USPS-CRID: 56982563
// Request body
{'{'}
"imageInfo": {'{'}
"imageType": "PDF",
"labelType": "4X6LABEL"
{'}'},
"toAddress": {'{'}
"streetAddress": "1600 Pennsylvania Ave NW",
"city": "Washington",
"state": "DC",
"ZIPCode": "20500"
{'}'},
"fromAddress": {'{'}
"streetAddress": "123 Main St",
"city": "New York",
"state": "NY",
"ZIPCode": "10001"
{'}'},
"packageDescription": {'{'}
"weight": 2.5,
"mailClass": "PRIORITY_MAIL",
"processingCategory": "NON_MACHINABLE"
{'}'},
"senderInfo": {'{'}
"MID": "904128937",
"CRID": "56982563"
{'}'},
"paymentInfo": {'{'}
"paymentMethod": "USPS_ACCOUNT",
"accountType": "EPS",
"accountNumber": "1000405525"
{'}'}
{'}'} Manifest / SCAN Form Request
MID and CRID are top-level fields in manifest requests:
POST https://apis.usps.com/scan-forms/v3/scan-form
Authorization: Bearer {'{access_token}'}
Content-Type: application/json
{'{'}
"MID": "904128937",
"CRID": "56982563",
"manifestDate": "2026-03-10",
"trackingNumbers": [
"9400111899223456789012",
"9400111899223456789029"
]
{'}'} Common Enrollment Errors and Fixes
These are the errors we hit and the errors developers report most frequently in USPS GitHub issues. Save yourself the troubleshooting.
| Error | Cause | Fix |
|---|---|---|
| "Business not found" | Entered SSN instead of EIN during BCG registration | Use your company's EIN (Employer Identification Number). If sole proprietor, apply for an EIN at irs.gov first. |
| MID application rejected | Volume threshold not met or incomplete CRID linkage | Apply for a 9-digit MID first (lower volume threshold). Ensure CRID is fully approved before applying. |
| 401 "Insufficient OAuth scope" | App product is "Public Access I" which does not include Labels/Payments | Submit a service request to emailus.usps.com/s/web-tools-inquiry. No self-service path exists. |
| COP shows 0 authorizations | Labels/Payments product not yet granted, or claims not refreshed | Click "Refresh Claims" in COP. If still zero, the product grant is pending — follow up on your service request. |
| COP page won't load | Browser compatibility issue | Use Chrome. COP has known issues with Safari and Firefox. Clear cookies for cop.usps.com if it loops. |
| EPA verification pending | ACH micro-deposits not yet received or confirmed | Wait 2–3 business days for micro-deposits, then confirm exact amounts in BCG. Check your bank's pending transactions. |
| Payment Auth returns 401 on TEM | TEM (testing) environment has same product restrictions as production | The product grant applies to both environments. TEM will also fail until USPS grants Labels/Payments access. |
Complete Enrollment Checklist
Here is the full sequence from zero to label creation. Some steps can run in parallel, but the dependencies are strict where noted.
- 1 BCG business account — Create at gateway.usps.com with EIN. (Day 1)
- 2 CRID — Apply via BCG. (Day 1–3)
- 3 MID — Apply via BCG, link to CRID. (Day 1–3, parallel with CRID)
- 4 EPA — Enroll via BCG, add ACH funding, confirm micro-deposits. (Day 1–5, micro-deposits take 2–3 days)
- 5 Developer Portal app — Create at developers.usps.com. Get Client ID and Client Secret. (Day 1, instant)
- 6 Service request for Labels & Payments — Email USPS to add products to your app. (Day 1–28, depends on USPS response time)
- 7 COP claims linking — After product grant, refresh claims at cop.usps.com. (After step 6)
- 8 Test label creation — Use TEM environment first (
apis-tem.usps.com). Labels are watermarked and not charged. (After step 7)
Total realistic timeline: If everything goes smoothly and USPS responds quickly to your service request, you can be creating labels in 1–2 weeks. If USPS is slow on the product grant, it can take 3–4 weeks. The bottleneck is always step 6.
USPS Escalation Contacts
If your service request goes unanswered, here is the escalation path. Start from the top and work down. Follow up weekly until resolved.
| Priority | Contact | Details |
|---|---|---|
| 1st | Web Form | emailus.usps.com/s/web-tools-inquiry |
| 2nd | Direct Email | [email protected] |
| 3rd | Mailing & Shipping Solutions Center | [email protected] |
| 4th | Phone | 1-800-344-7779 (Mon–Fri 8AM–8:30PM ET) |
| 5th | USPS Ship Support | 877-264-9693 or [email protected] |
Skip the Enrollment Maze
The enrollment process described above takes 1–4 weeks, requires navigating three separate USPS portals (BCG, Developer Portal, COP), and depends on a manual approval that has no SLA. For many developers, that is an unacceptable blocker.
RevAddress handles all USPS enrollment on your behalf. On the Starter and Growth plans, you create labels using our CRID, MID, and EPA — no enrollment required. Get an API key and start creating labels the same day.
If you need your own USPS credentials (compliance requirements, custom reporting, direct USPS relationship), the Pro and Enterprise plans support BYOK (Bring Your Own Keys). You go through the enrollment process above, then plug your CRID, MID, EPA, and OAuth credentials into RevAddress. We handle token management, rate limiting, caching, and retries. You keep full control of your USPS identity.
- Starter plan: Labels through RevAddress credentials. No USPS enrollment needed. Start shipping today.
- Pro / Enterprise: BYOK supported. Your CRID, your MID, your EPA. We manage the infrastructure.
Start creating labels without the wait
RevAddress handles USPS enrollment, OAuth, rate limits, and label generation. Get an API key and ship your first label in minutes.