---
updatedAt: 2026-09-01T22:19:43.000Z
agentTools:
  projectIndex: https://docs.envia.com/llms.txt
---

# Production Readiness Checklist

Use this checklist to confirm your integration is production-ready. Sections are ordered by priority — complete **Critical** items first, then **Recommended**, then **Optional**.

## Critical — complete before going live

### Credentials & environments

* [ ] Created a **production account** at [accounts.envia.com/signup](https://accounts.envia.com/signup)
* [ ] Generated a **production API key** (Dashboard → **Desarrolladores → Acceso de API** → Agregar)
* [ ] Stored production and sandbox keys in **separate** secret stores
* [ ] Configured your application to use the correct base URLs:

| API      | Sandbox                           | Production                    |
| -------- | --------------------------------- | ----------------------------- |
| Shipping | `https://api-test.envia.com/`     | `https://api.envia.com/`      |
| Queries  | `https://queries.test.envia.com/` | `https://queries.envia.com/`  |
| Geocodes | — (single URL, no sandbox)        | `https://geocodes.envia.com/` |

* [ ] Verified that production tokens are **never** used in sandbox and vice versa

### Core shipping flow

* [ ] **Rate quoting** works for all carriers you plan to use
* [ ] **Label creation** returns a tracking number and downloadable PDF
* [ ] **Tracking** returns status and events for created labels
* [ ] **Cancellation** voids labels and returns balance (tested with a sandbox label)
* [ ] If using pickups: **Pickup scheduling** returns a confirmation

## Recommended — strongly advised for a solid integration

### Address validation

* [ ] Customer addresses are validated with the Geocodes API **before** label creation
* [ ] Invalid postal codes are caught and surfaced to the user
* [ ] Address forms adapt to country-specific requirements (using address structure from Queries API)

### Error handling

* [ ] Your application handles **401 Unauthorized** (expired or wrong-environment token)
* [ ] Your application checks the `meta` field in Shipping API responses — some errors return HTTP 200 with `"meta": "error"` in the body
* [ ] Your application handles the different error formats for each API (see [Error Response Formats](https://docs.envia.com/docs/error-codes))
* [ ] Your application handles **5xx** errors with retry logic
* [ ] Error messages are logged for debugging and not exposed raw to end users

### Webhooks

* [ ] Webhook endpoint is publicly reachable via HTTPS
* [ ] Webhook endpoint responds with **2xx within 5 seconds**
* [ ] Registered **separate webhook URLs** for sandbox and production
* [ ] Tested webhook delivery using [Test Webhook](/reference/test-webhook-endpoint)
* [ ] Implemented idempotency (handle duplicate webhook deliveries gracefully)

### Billing

* [ ] Production account has sufficient **balance** to create labels
* [ ] You have a process to monitor and top up balance before it runs out
* [ ] You understand how refunds work for cancelled labels — cancelling a label before the carrier scans it triggers an automatic refund to your account balance

## Optional — additional hardening

### Security

* [ ] API keys are stored in environment variables or a secrets manager, **not** in source code
* [ ] API keys are rotated on a regular schedule
* [ ] Unused or old keys are revoked
* [ ] Webhook payloads are validated before processing

## Testing summary

Before going live, confirm you have successfully completed these end-to-end flows in the sandbox:

1. **Domestic shipment:** Quote → Label → Track → Cancel
2. **International shipment** (if applicable): Quote → Label with customs → Commercial invoice → Track
3. **Pickup scheduling** (if applicable): Create labels → Schedule pickup
4. **Webhook flow:** Register → Receive test event → Process payload

## Ready to go live

Once every item is checked:

1. Switch your application's base URLs to production
2. Use your production API token
3. Create your first live shipment
4. Monitor the first few shipments closely in your dashboard

<Callout icon="🛟" theme="default">
  ## Need Help?

  Have questions or need assistance going to production?
  Our support team is ready to help.

  **[Create a support ticket here](https://envia.atlassian.net/servicedesk/customer/portal/3/group/3/create/10611)** and we'll guide you through the process.
</Callout>

## What to read next

* **Check carrier availability** – See [Supported Carriers](https://docs.envia.com/docs/supported-carriers) for a full list of carriers, services, and label formats.
* **Stay up to date** – The [Changelog](https://docs.envia.com/docs/changelog) lists API changes, new features, and deprecation notices.
* **Explore use cases** – See how other businesses integrate: [E-commerce](https://docs.envia.com/docs/ecommerce-checkout), [Marketplace](https://docs.envia.com/docs/marketplace-multi-seller), or [Warehouse & 3PL](https://docs.envia.com/docs/warehouse-3pl).