e-Manifest
June 30, 2018, the United States Environmental Protection Agency (USEPA or EPA) launched a national system for tracking hazardous waste shipments electronically, this system, known as "e-Manifest," modernizes the nation’s paper-intensive process for tracking hazardous waste from cradle to grave while saving valuable time, resources, and dollars for industry and states.
e-Manifest is a component of EPA's Resource Conservation and Recovery Act (RCRA) information system, called RCRAInfo. e-Manifest can be accessed by its users in two ways:
-
Through their favorite web browser at https://rcrainfo.epa.gov/
-
Via the RCRAInfo RESTful application programming interface (API)
e-Manifest data is also publicly available 90-days after the manifest completed, or uploaded in the case of a paper manifest, on RCRAInfo Web.
Content
This book contains the developer documentation and technical guidance for the e-Manifest services.
For general information on e-Manifest, please visit www.epa.gov/e-manifest.
The e-Manifest Program also maintains a comprehensive list of FAQs.
Getting Started
If you're just getting started, you'll likely want to complete these prerequisites
- Register in the RCRAInfo test environment (Pre-Production).
- Subscribe to the e-Manifest mailing lists
For more up-to-date information on e-Manifest, visit https://www.epa.gov/e-manifest
The Manifest
The Uniform Hazardous Waste Manifest (AKA "manifest" or EPA form 8700-22) is a form required by EPA for all hazardous waste generators who transport hazardous waste for off-site treatment, recycling, storage or disposal (TSD). When completed, the form contains information on the type and quantity of the waste being transported, instructions for handling the waste, and signature lines of all parties involved in the shipment.
Paper Manifests
The paper manifesting process is completed on NCR paper often referred to as carbon-copy paper. When the waste reaches its destination, the designated receiving facility submits the paper manifest to the e-Manifest system using one of the available submission methods.
Only registered manifest printers can print paper manifest. You can print paper copies of electronic and hybrid manifest from the e-Manifest system to carry onboard with the transporter for DOT purposes. EPA established this procedure, in part, to ensure that each manifest has a unique identifying string called the Manifest Tracking Number (MTN) in box 4.
Electronic Manifests
An Electronic manifest is the electronic format of the uniform hazardous waste manifest obtained and completed through the e-Manifest system. It is the legal equivalent. All electronic manifest use the letters "ELC" as the suffix to their manifest tracking number.
Electronic manifests can be JSON encoded, contain all the information of a paper manifest, and have the added benefit of being able to contain additional information that is not possible on a paper manifest.
Click to see example JSON encoded electronic manifest
{
"createdDate": "2021-10-20T15:12:35.046+00:00",
"updatedDate": "2023-06-01T18:26:52.793+00:00",
"manifestTrackingNumber": "100032713ELC",
"status": "Signed",
"discrepancy": false,
"submissionType": "FullElectronic",
"originType": "Service",
"shippedDate": "2023-02-10T05:42:05.246+00:00",
"receivedDate": "2023-06-01T18:21:18.642+00:00",
"generator": {
"epaSiteId": "VATESTGEN001",
"name": "VA TEST GEN 2021",
"modified": true,
"registered": true,
"mailingAddress": {
"address1": "123 VA TEST GEN 2021 WAY",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"siteAddress": {
"address1": "123 VA TEST GEN 2021 WAY",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"contact": {
"phone": {
"number": "555-555-5555"
},
"email": "Testing@EPA.GOV"
},
"emergencyPhone": {
"number": "888-888-8888"
},
"electronicSignaturesInfo": [
{
"humanReadableDocument": {
"name": "human-readable.html",
"size": 174777,
"mimeType": "TEXT_HTML"
}
}
],
"gisPrimary": false,
"canEsign": true,
"limitedEsign": true,
"hasRegisteredEmanifestUser": true
},
"transporters": [
{
"epaSiteId": "VATESTRAN02",
"name": "VA TEST TRAN 2021",
"modified": true,
"registered": true,
"mailingAddress": {
"address1": "321 VA TEST TRAN 2021 ROAD",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"siteAddress": {
"address1": "321 VA TEST TRAN 2021 ROAD",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"contact": {
"phone": {
"number": "888-999-8888"
}
},
"electronicSignaturesInfo": [
{
"signer": {
"firstName": "John",
"lastName": "Doe",
"userId": "jdoe12345"
},
"signatureDate": "2023-02-10T05:42:05.246+00:00",
"humanReadableDocument": {
"name": "human-readable.html",
"size": 181426,
"mimeType": "TEXT_HTML"
},
"signerRole": "Industry",
"signatureMethod": "QuickerSign"
}
],
"gisPrimary": false,
"canEsign": true,
"limitedEsign": true,
"hasRegisteredEmanifestUser": true,
"order": 1
}
],
"designatedFacility": {
"epaSiteId": "VATESTTSDF03",
"name": "VA TEST TSDF 2021",
"modified": true,
"registered": true,
"mailingAddress": {
"address1": "234 VA TEST TSDF 2021 DRIVE",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"siteAddress": {
"address1": "234 VA TEST TSDF 2021 DRIVE",
"city": "ARLINGTON",
"state": {
"code": "VA",
"name": "VIRGINIA"
},
"country": {
"code": "US",
"name": "UNITED STATES"
},
"zip": "22202"
},
"contact": {
"phone": {
"number": "555-555-5555"
},
"email": "Testing@EPA.GOV"
},
"electronicSignaturesInfo": [
{
"signer": {
"firstName": "Jane",
"lastName": "foo",
"userId": "janefoo12345"
},
"signatureDate": "2023-06-01T18:21:18.642+00:00",
"humanReadableDocument": {
"name": "human-readable.html",
"size": 179135,
"mimeType": "TEXT_HTML"
},
"signerRole": "Industry",
"signatureMethod": "QuickSign"
},
{
"humanReadableDocument": {
"name": "human-readable.html",
"size": 179162,
"mimeType": "TEXT_HTML"
}
}
],
"gisPrimary": false,
"canEsign": true,
"limitedEsign": true,
"hasRegisteredEmanifestUser": true
},
"wastes": [
{
"dotHazardous": true,
"dotInformation": {
"idNumber": {
"code": "NA1993"
},
"printedDotInformation": "NA1993, Waste Diesel fuel, 3, III"
},
"quantity": {
"containerNumber": 13,
"containerType": {
"code": "DM",
"description": "Metal drums, barrels, kegs"
},
"quantity": 481,
"unitOfMeasurement": {
"code": "G",
"description": "Gallons"
}
},
"hazardousWaste": {
"federalWasteCodes": [
{
"code": "D001",
"description": "IGNITABLE WASTE"
}
],
"tsdfStateWasteCodes": [],
"generatorStateWasteCodes": []
},
"additionalInfo": {
"comments": [
{
"label": "Profile #",
"description": "E654321",
"handlerId": "VATESTRAN02"
}
],
"handlingInstructions": "This Manifest is for testing purposes and does not match reality it's more to show what you can do."
},
"lineNumber": 1,
"br": false,
"managementMethod": {
"code": "H040",
"description": "INCINERATION"
},
"pcb": false,
"discrepancyResidueInfo": {
"wasteQuantity": false,
"wasteType": false,
"residue": false
},
"epaWaste": true
},
{
"dotHazardous": false,
"wasteDescription": "PCB contaminated bags",
"quantity": {
"containerNumber": 12,
"containerType": {
"code": "BA",
"description": "Burlap, cloth, paper, or plastic bags"
},
"quantity": 132,
"unitOfMeasurement": {
"code": "K",
"description": "Kilograms"
}
},
"hazardousWaste": {
"federalWasteCodes": [],
"tsdfStateWasteCodes": [],
"generatorStateWasteCodes": []
},
"additionalInfo": {
"handlingInstructions": "This Manifest is for testing purposes and does not match reality it's more to show what you can do."
},
"lineNumber": 2,
"br": false,
"managementMethod": {
"code": "H040",
"description": "INCINERATION"
},
"pcb": true,
"pcbInfos": [
{
"loadType": {
"code": "BulkWaste"
},
"dateOfRemoval": "2018-04-18T16:00:00.000+00:00",
"weight": 432,
"bulkIdentity": "Bulk Waste ID2"
},
{
"loadType": {
"code": "BulkWaste"
},
"dateOfRemoval": "2018-03-18T16:00:00.000+00:00",
"weight": 432,
"bulkIdentity": "Bulk Waste ID"
}
],
"discrepancyResidueInfo": {
"wasteQuantity": false,
"wasteType": false,
"residue": false
},
"epaWaste": false
}
],
"additionalInfo": {
"handlingInstructions": "On the Manifest level. This Manifest is for testing purposes and does not match reality it's more to show what you can do."
},
"rejection": false,
"residue": false,
"import": false,
"containsPreviousRejectOrResidue": false,
"correctionInfo": {
"active": true
}
}
Electronic vs Paper Manifest Content
Electronic manifests generally contain the same information as their paper counterparts, however there are a few noteable differences.
Also see EPA's [Instructions for completing the hazardous waste manifest](https://www.epa.gov/hwgenerators/uniform-hazardous-waste-manifest-instructions-sample-form-and-continuation-sheet
one-to-many relationships
-
Waste Codes: A waste stream can have many applicable waste codes. On paper manifests, generators are required to enter up to six (6) waste codes on a waste line. Electronic manifest are not constrained by space, all applicable waste codes can be appended to the applicable waste line.
-
Transporters: Paper manifests have space for up to three (3) transporters before a continuation sheet must be used. When more than three transporters are listed on an electronic manifest, the e-Manifest system will automatically generate a continuation sheet for printing purposes.
Additional Fields
As e-Manifest continues to be developed, additional fields that benefit the e-Manifest stakeholders and EPA may be added.
- Biennial Report: the
"BrInfo
field contains data related to the Biennial Report. Users can elect to provide this information on the manifest and use of this data in the BR module to make reporting easier.
Values
Since electronic manifests are not constrained by the physical space available on a piece of paper, the values of many fields have a more rich (i.e., useful) representation than their paper counterparts. Some values are also confined to certain manifest submission types (e.g, electronic manifests vs Data + Image).
-
status: The status field is managed by the e-Manifest system. Since paper manifests are completed outside the e-Manifest system and uploaded after the TSDF receives the shipment, paper manifests can only be assigned a subset of the available statuses.
Green boxes are shared by electronic/hybrid and paper manifests.
-
Codes: Items such as waste codes, management method codes, and units of measurements can contain additional information on the electronic representation. For example, federal waste codes on a paper manifests are listed as a letter and three numbers (e.g.,
'D001'
) waste code on an electronic manifest, are represented by an object containing the code and a description.{ "code": "D001", "description": "IGNITABLE WASTE" }
More Information
For more up-to-date information on e-Manifest, visit https://www.epa.gov/e-manifest
e-Manifest Terminology
Regulation and Governments
EPA / US EPA
- EPA and/or US EPA refers to the United States Environmental Protection Agency, the primary federal environmental regulator in the United States of America. www.epa.gov
Region
- EPA maintains ten regional offices to more closely manage regional issues. EPA Regional Website
State
- State commonly refers to the primary environmental agency of a given US state, such as the New York Department of Conservation, the Indiana Department of Environmental Management, or the California Department of Toxic Substances Control.
RCRA / Subtitle C
- The Resource Conservation and Recovery Act (RCRA) is the primary United States federal law that governs solid and hazardous waste. Subtitle C of RCRA addresses hazardous waste and is the framework for the nation’s "cradle-to-grave" management program from its generation to treatment, storage, or disposal. EPA: About RCRA
Hazardous Waste
- Hazardous waste is waste with properties that make it dangerous or capable of having a harmful effect on human health or the environment. EPA: About Hazardous Waste
Parties to the Manifest
Handler
- A handler represents the hazardous waste operations of an entity (such as a person, company, or government) at a fixed location.
Site
- A site is a fixed location at which hazardous waste activity is conducted. It may also be called a facility.
Site ID
- Handlers are assigned a twelve-character alphanumeric Site ID by the State or EPA. They start with a two-letter prefix representing the State or Region that assigned them. They are unique to the site. Some states may issue site IDs unique to each handler. EPA: About Site IDs
Generator
- A generator is the handler that produced the hazardous waste. There is only one generator per manifest. EPA: About Generators
Transporter
- A transporter is a handler that moves the hazardous waste to the TSDF. There may be multiple transporters on a manifest. EPA: About Transporters
Broker
- A broker is a handler that prepares a manifest and the shipment on behalf of other handler customers.
Treatment, Storage, or Disposal Facility (TSDF) / Receiving Facility / Designated Facility
- A TSDF, also known as a Receiving Facility or the Designated Facility, is the handler to whom the hazardous waste is shipped. They are responsible for treating, storing, or disposing of the waste according to state and federal law. The terms designated receiving facility, TSD, TSDF are interchangeable EPA: About Permitted TSDFs
Alternate Facility
- In certain cases, the TSDF listed on the manifest cannot accept the shipment of waste. The shipment may be sent to an Alternate TSDF according to state and federal law.
Technology
RCRAInfo
- RCRAInfo is the web application used by EPA, states, and industry to report and track RCRA-regulated hazardous waste activity. RCRAInfo.epa.gov
e-Manifest
- e-Manifest is the national program used to facilitate the transmission and record keeping of the uniform manifest form, which accompanies shipments of hazardous waste. The technical elements of e-Manifest are housed within RCRAInfo. EPA: e-Manifest
Services
- Services refer to the e-Manifest Application Programming Interfaces (APIs) developed and maintained by the EPA. Services Documentation
The Manifest
The Uniform Manifest Form
- The manifest is a standard EPA form that accompanies a shipment of hazardous waste, detailing the location and identity of the generator, transporter(s), and TSDF, the type of waste(s), what will happen to the waste at its destination, and when custody was exchanged along the route. The manifest was previously exclusively a multipart paper document, but it can now be completed electronically. At the conclusion of a shipment, the manifest information must be provided to EPA via RCRAInfo’s e-Manifest module.
Waste Line
- A waste line is a listing on the manifest of the type of waste, its volume or weight, the type of container it occupies, and its waste codes. Each manifest will have at least one waste line.
Waste Code
- Each waste line is labeled with waste codes, which are four-character alphanumeric values noting the type of waste or its hazardous characteristics. Waste codes can be issued by state or federal regulation. [EPA: Defining Hazardous Waste] https://www.epa.gov/hw/defining-hazardous-waste-listed-characteristic-and-mixed-radiological-wastes)
Management Method
- The management method is a four-character alphanumeric value noting the process by which the TSDF will treat, store, or dispose of the waste on the manifest. Each waste line will have a management method code.
Rejection
- Rejection is the process of a TSDF refusing to accept a shipment of waste and that waste being sent to either an alternate facility or back to the generator. It may be in whole or in part.
Where to go to learn more:
For more up-to-date information on e-Manifest, visit https://www.epa.gov/e-manifest
User Registration
EPA allows industry and states to access the RCRAInfo Pre-Production environment to try new features, and test things. You may see this site referred to as the "test" environment.
- For testing, use RCRAInfo Pre-Production
- For Production, use RCRAInfo
You will need to create a separate account for each environment.
Registration Process
The registration process for both environments is identical, the general process includes creating a user account, then requesting access to the EPA sites that you are working for.
- Visit the RCRAInfo pre-production site
- Click on the "Register" link and select "Industry User"
- Register, verify your email, and log in
Obtain Site Access
If your state is participating in approving e-Manifest test users, you may request access to your handler ID(s). Otherwise, please register to use one of our test sites:
Site ID | Site Name | State | Zip | Type of Site | Notes |
---|---|---|---|---|---|
VA988177803 | HEATING AND OIL | Virginia | 22033 | Generator only | |
VATEST000001 | TEST TRANSPORTER 1 OF VA | Virginia | 22202 | Generator, Transporter | |
VATEST000002 | TEST TRANSPORTER 2 OF VA | Virginia | 22202 | Generator, Transporter | |
VAD000532119 | TEST TSDF OF VA | Virginia | 22202 | Generator, TSDF | Can be used for testing web services |
VATEST000003 | TEST TSDF OF VA TWO | Virginia | 22202 | Generator, TSDF | Can be used for testing web services |
VATEST000004 | TEST GENERATOR OF VA | Virginia | 22202 | Generator only |
-
On the My Sites page, click on the "Add Existing Site" button
-
Search for your EPA ID number in the Site ID box or a test site and then select that facility. (For example: VA000532119)
-
Request a role for each module for this site. The roles are:
- Site Manager (can use our web services)
- Certifier
- Preparer
- Viewer
The Site Manager role is the equivalent to having the Certifier role in each RCRAInfo module, and also has the ability to add and remove users from the site, and generate an API ID and key.
After you submit your request, the request will go to your state or an EPA administrator. Please understand this is not an instant access process and the administrator will need to manually activate your request during normal business hours.
Obtaining an API ID and Key
If you want to register for an API ID and key to test the services, you may create one by clicking on the 'Tools' menu and selecting API. You can use the Swagger page to test without your API ID and key.
For more up-to-date information on e-Manifest, visit https://www.epa.gov/e-manifest
Web Services
RCRAInfo exposes a set of web services that allow industry and regulators to interact with the system programmatically. These services implement a RESTful design and can be categorized by the resource exposed and the type of user accessing The service. The services are secured using a token-based authentication system.
- [All users] Authentication services
- [All users] e-Manifest Lookup Services
- [All users] Lookup Services
- [All users] Site Services
- [All users] User Services
- [Industry users] e-Manifest Services
- [Industry users] e-Manifest UI Link Services
- [Regulator users] CM&E Evaluation Services
- [Regulator users] e-Manifest Services
- [Regulator users] Handler Services
- [Regulator users] User Services
Base URL
Developers can access the services on both the Production and Pre-Production environments using the following base URLs:
Production
- Hostname:
https://rcrainfo.epa.gov
- Base Path:
/rcrainfoprod/rest
- example:
https://rcrainfo.epa.gov/rcrainfoprod/rest/api/v1/lookup/federal-waste-codes
Pre-Production
- Hostname:
https://rcrainfopreprod.epa.gov
- Base Path:
/rcrainfo/rest
- example:
https://rcrainfopreprod.epa.gov/rcrainfo/rest/api/v1/lookup/federal-waste-codes
The RCRAInfo Production services should not be used for testing. Conversely, actions performed in the Pre-Production environment will not be reflected in the Production environment, cannot be used to satisfy regulatory requirements. e-Manifest user fees cannot be paid through the Pre-Production environment.
We use the pre-production environment when referencing services URLs in this documentation.
Tools for Testers
-
Sample JSON for submitting manifests to EPA, including:
-
A valid example showing a Data+Image manifest
-
A valid example showing an Image Only manifest
-
A valid example demonstrating Quicker Sign which allows users to sign electronic manifests in their own systems
-
An invalid example with several errors
-
-
Swagger page for testing and documenting the services
- You must be registered as a site manager for a TSDF site to access this site. See "Accessing the Test Environment" below.
-
Sample Client for accessing the services
-
Python emanifest package for accessing the services
Please note: The test environment for the most part mirrors the handler information in our production environment. When testing, please also make sure your site information is up-to-date. If it is not, please use myRCRAid or your state’s paper notification process to update your site in the production environment.
Accessing the Test Environment
See the Registration page for information on how to register for the test environment.
Authentication and User Authorization
Users looking to use the RCRAInfo API need to register and obtain the necessary permissions for the site they're looking to operate as. For information on registration and permission levels, see the chapter on registration.
After registration, you can use our Pre-production Open API (swagger) page.
API ID and Keys
The system uses a combination of API ID and API key for user authentication and authorization. The API ID and key (credentials) are generated by the RCRAInfo. An API ID/key pair is unique to a user, however the same API ID/key pair is used for all EPA sites that the user has (Site Manager) access to.
Site Managers are the only permission level that can generate API credentials in RCRAInfo. API ID/key pairs do not expire, however keys can be regenerated at any time from within RCRAInfo if the key is lost, compromised, or need to be rotated. An API ID/key pair is terminated is the user account is deactivated or no longer has Site Manager level access for any EPA site. API ID are static.
Security Tokens
The RCRAInfo web services use (Bearer) token authentication. A bearer token is a JSON Web Token (JWT) that is
generated by RCRAInfo and is used to authorize users to protected resources. A client must first obtain a security token
through the Authentication (auth) service; all requests must send this token in
the Authorization
header when making requests to protected resources.
An example HTTP request to the federal waste codes service would look like the following...
GET /rcrainfo/rest/api/v1/lookup/federal-waste-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Token Expirations and Refreshing
The auth service also returns an expiration date-time for the security token. A token expires 20 minutes after creation. Currently, RCRAinfo does not provide refresh tokens or a method to obtain a new tokens without performing a complete authentication (i.e., using the Authentication Service again).
The expiration datetime follows the ISO 8601 profile, the international standard for representing dates and times. Times
are expressed in Coordinated Universal Time (UTC) using
the time zone offset designator ("+hh:mm") down to the
millisecond "expiration": "2023-05-10T19:10:05.923+00:00"
.
Authenticate Service
Authenticates the user and returns the Security Token. The Security token is used on all subsequent calls and is submitted in the HTTP header using the Authorization in the Key with a value of Bearer.
parameters
API ID
: API ID generated through the RCRAInfo web application. This is not the user's username.API key
: API key generated through the RCRAInfo web application. Keys can be regenerated when necessary.
Examples
Pre-Production
GET /rcrainfo/rest/api/v1/auth/myApiID/myApiKey HTTP/1.1
Host: rcrainfopreprod.epa.gov
Accept: application/json
See also Pre-production Open API (swagger) page
Production
GET /rcrainfoprod/rest/api/v1/auth/myApiID/myApiKey HTTP/1.1
Host: rcrainfo.epa.gov
Accept: application/json
/**
* Main.java
* makes a request to the Pre-production Auth endpoint and prints the response to std out
* open JDK 19
*/
package org.example;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) {
String baseURL = "https://rcrainfopreprod.epa.gov/rcrainfo/rest/api/v1/auth/";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseURL + "/" + "myApiID" + "/" + "apiKey"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
For a python example, check out the emanifest package on PyPI (source hosted on USEPA/e-manifest repo).
For a TypeScript example, check out the emanifest package on NPM (source hosted in USEPA/e-manifest repo)
Completed Response Example
{
"token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI2ZjdhOTg0OC0zNWE1LTQ4NzQtOTI4Zi0xMmZjM2RlZjFhMzMiLCJhcGlUb2tlbkNsYWltIjoie1xuICBcImFwaUlkXCIgOiBcIjZmN2E5ODQ4LTM1YTUtNDg3NC05MjhmLTEyZmMzZGVmMWEzM1wiLFxuICBcInByb2ZpbGVcIiA6IHtcbiAgICBcInVzZXJJZFwiIDogXCJEQVZJRERVTkRVQVwiLFxuICAgIFwic3RhdHVzXCIgOiBcIkFjdGl2ZVwiLFxuICAgIFwibGFzdExvZ2luRGF0VwiIDogXCIyMDE3LTA2LTIyVDIyOjU2OjA5LjAwMCswMDAwXCIsXG4gICAgXCJzZWN1cml0eUFncmVlbWVudERhdGVcIiA6IG51bGwsXG4gICAgXCJwYXNzd29yZFJlc2V0RGF0ZVwiIDogbnVsbCxcbiAgICBcInBhc3N3b3JkU3RhdHVzXCIgOiBcIkFjdGl2ZVwiLFxuICAgIFwiY29udGFjdFwiIDoge1xuICAgICAgXCJ0aXRsZVwiIDogXCJhc2RmYXNkZlwiLFxuICAgICAgXCJmaXJzdE5hbWVcIiA6IFwiRGF2aWRcIixcbiAgICAgIFwibWlkZGxlSW5pdGlhbFwiIDogXCJKXCIsXG4gICAgICBcImxhc3ROYW1lXCIgOiBcIkR1bmR1YVwiLFxuICAgICAgXCJwaG9uZVwiIDogXCIzMDEtMzUxLTk5MjJcIixcbiAgICAgIFwicGhvbmVFeHRlbnNpb25cIiA6IFwiNzk1OThcIixcbiAgICAgIFwib3JnYW5pemF0aW9uXCIgOiB7XG4gICAgICAgIFwiaWRcIiA6IDEyLFxuICAgICAgICBcInRleHRcIiA6IFwiQ0dJXCIsXG4gICAgICAgIFwiY2R4T3JnYW5pemF0aW9uSWRcIiA6IDE3MDk2LFxuICAgICAgICBcIm9yZ2FuaXphdGlvblR5cGVcIiA6IFwiQ0RYXCJcbAgICAgIH0sXG4gICAgICBcImNvbnRyYWN0b3JcIiA6IGZhbHNlLFxuICAgICAgXCJhZGRyZXNzMVwiIDogXCIxMzI5IEUgU1QgU0VcIixcbiAgICAgIFwiYWRkcmVzczJcIiA6IG51bGwsXG4gICAgICBcImNpdHlcIiA6IFwiRkFJUkZBWFwiLFxuICAgICAgXCJzdGF0ZVwiIDoge1xuICAgICAgICBcInJlZ2lvblwiIDogXCIwM1wiLFxuICAgICAgICBcImRlZmF1bHRUaGlyZENoYXJhY3RlclwiIDogXCJSXCIsXG4gICAgICAgIFwiaRcIiA6IDE1LFxuICAgICAgICBcImNvZGVcIiA6IFwiVkFcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiIDogXCJWSVJHSU5JQVwiLFxuICAgICAgICBcIm5hbWVcIiA6IFwiVklSR0lOSUFcIixcbiAgICAgICAgXCJhY3RpdmVcIiA6IHRydWUsXG4gICAgICAgIFwidXNhZ2VcIiA6IFwiMVwiLFxuICAgICAgICBcInVzZXJJZFwiIDogbnVsbCxcbiAgICAgICAgXCJsYXN0Q2hhbmdlXCIgOiBcIjIwMTctMDItMTNcIixcbiAgICAgICAgXCoZWxwTm90ZXNcIiA6IFwiIFwiLFxuICAgICAgICBcImFjdGl2aXR5TG9jYXRpb25cIiA6IFwiSFFcIlxuICAgICAgfSxcbiAgICAgIFwiemlwXCIgOiBcIjIyMDMzXCIsXG4gICAgICBcImxlZ2FjeVVzZXJJZFwiIDogbnVsbCxcbiAgICAgIFwiZW1haWxcIiA6IFwiZGF2aWRAZHVuZHVhLmNvbVwiLFxuICAgICAgXCJ1c2VyT3JnYW5pemF0aW9uSWRcIiA6IDU1MDY2LFxuICAgICAgXCJ1c2VyUm9sZUlkXCIgOiAxMTk4MDQsXG4gICAgICBcImlkXCIgOiAyLFxuICAgICAgXCJjcmVhdGVkRGF0ZVwiIDogXCIyMDE3LTA2LTE5VDIyOjM4OjUxLjAwMCswMDAwXCIsXG4gICAgICBcInVwZGF0ZWREYXRlXCIgOiBcIjIwMTctMDYtMjJUMjI6NTY6MDkuMDAwKzAwMDBcIlxuICAgIH0sXG4gICAgXCJwcm9maWxlVHlwZVwiIDogXCJDRFhcIixcbiAgICBcInNwb25zb3JcIiA6IG51bGwsXG4gICAgXCJpZFwiIDogMixcbiAgICBcImNyZWF0ZWREYXRlXCIgOiBcIjIwMTctMDYtMTlUMjI6Mzg6NTEuMDAwKzAwMDBcIixcbiAgICBcInVwZGF0ZWREYXRlXCIgOiBudWxsXG4gIH0sXG4gIFwicGVybWlzc2lvbnNcIiA6IFsgXSxcbiAgXCJzaXRlUGVybWlzc2lvbnNcIiA6IFsgeyB9LCB7IH0gXVxufSIsImV4cCI6MTQ5ODI1OTc0NX0xw_PGyN6for1GHwf6zqp0OJS10hwK8jEgRyRI0JpFUducwDKj5paWRTEsCky_06pryEve3Yw2w1bbBzqGdSnnw",
"expiration": "2023-06-23T23:15:45.095+0000"
}
Sequence of Steps
- System will check if one of the credentials is empty or incorrect. If so, the following error will be generated:
E_SecurityApiInvalidCredentials: Invalid API ID/Key Specified
- System will check if API ID was disabled by the Administrator. If so following error will be generated:
E_SecurityApiInvalidStatus: API ID Status Invalid
- If the System detects 3 unsuccessful attempts for authentication then following error will be generated:
E_SecurityApiIDLocked: API ID is locked. If API id was locked the User shall request API ID/API key re-generation
- The System will generate JWT and token expiration Date. Security Token contains User Profile and User Role Information in encrypted format. Security Token expiration time is 20 minutes.
- If successful the system will return JSON containing following information:
- token
- expiration
- If failed Authentication the System will return JSON containing the following field:
code
: Error code which designated for automated processingmessage
: "Human readable" Error message corresponding to the error codeerrorId
: Unique error id for auditing and tracking purposeerrorDate
: Error Date/Time for auditing and tracking purpose
Errors
Code | Message |
---|---|
E_SecurityApiInvalidCredentials | Invalid API Id/Key Specified |
E_SecurityApiInvalidStatus | API Id Status Invalid |
E_SecurityApiIdLocked | API Id is Locked |
E_SystemError | Message describing system error |
An example JSON body would contain the following information:
{
"code": "E_SecurityInvalidCredentials",
"message": "Invalid API Id was specified.",
"errorId": "470c188a-82ce-488e-8e85-3e1b71c72ab8",
"errorDate": "2023-05-11T12:27:59.332+00:00"
}
Security Token Validation
After a security token is obtained, it must be validated before it can be used to access protected resources. The following steps are taken to validate a security token:
-
The System will validate the Security Token
1.1 If Web Security Token is invalid, the system stops the submission and generates the following error:
E_SecurityApiTokenInvalid: Invalid Security Token
1.2. If Web Security Token expired, the system stops the submission and generates the following error:
E_SecurityApiTokenExpired: Security Token is Expired
1.3. If Account was inactivated after the token was issued, the system stops the submission and generates the following error:
E_SecurityApiInvalidStatus: This API ID is no longer active
User Authorization
The system will perform User Authorization for protected resources afterSecurity Token Validation. Depending on the service, additional user authorization checks may apply (see below).
Base User Authorization
the following checks are performed for all protected resources:
-
For all requests, the system will perform base user authorization.
1.1. System will check if the User has Site Manager (Industry) permissions for any Site. If the User does not have permission the System will stop processing and generate the following error:
E_IndustryPermissions: The user does not have industry permissions for any Site
-
The System will validate the Security Token
1.1 If Web Security Token is invalid, the system stops the submission and generates the following error:
E_SecurityApiTokenInvalid: Invalid Security Token
1.2. If Web Security Token expired, the system stops the submission and generates the following error:
E_SecurityApiTokenExpired: Security Token is Expired
1.3. If Account was inactivated after the token was issued, the system stops the submission and generates the following error:
E_SecurityApiInvalidStatus: This API ID is no longer active
Manifest Services User Authorization
-
For requests include an
Image
or"DataImage5Copy"
submission type, the user must be authorized for the site that is required to submit the manifest to EPA.2.1. If rejection = false and user is not authorized for the designatedFacility.epaSiteId, the following error is generated:
E_DesignatedFacilityAuthorizationSave: User is not authorized for the Designated Facility. Cannot create Image or DataImage5Copy manifests.
2.2 If
rejection
is true,rejectionInfo.transporterOnSite
is true,alternateDesignatedFacilityType
is "Tsdf" and user is not authorized forrejectionInfo.alternateDesignatedFacility.epaSiteId
, the following error is generated:E_AltFacilityAuthorizationSave: User is not authorized for the Alternate Designated Facility. Cannot create Image or DataImage5Copy manifests.
2.3. If
containsPreviousRejectOrResidue
is true,additionalInfo.newManifestDestination
isOriginalGenerator
and user is not authorized forgenerator.epaSiteId
, the following error is generated:E_GeneratorAuthorizationSave: User is not authorized for the Generator. Cannot create Image or DataImage5Copy manifests
-
If the user is associated with a Broker site and the manifest submission type is "Image", then the System will stop the processing and generates the following error:
E_BrokerAuthorizationSave: Brokers are not authorized to create Image manifests
-
For the Delete, Correct, and Revert services, the system will check if the user has industry permissions for the TSDF, the Generator, or the Alternate TSDF, any of the listed Transporters, of Broker sites on the manifest. If the user does not have permissions, teh system will stop the processing and generate the following error:
E_SitePermissions: The user does not have Industry Permissions for either the TSDF Site or Generator Site or Alternate TSDF site, any Transporter site, or Broker site specified in provided JSON
e-Manifest
The following pages document the available manifest services, for use with paper and electronic manifests, as well as some auxiliary information on things such as handling attachments, manifest schema validation performed by RCRAInfo.
In addition, the following services are available for states:
Manifests Save Service
The Save Service creates the new Manifest. The service accepts Manifest data in JSON format compliant with manifest JSON schema. The following submission types are supported for this release:
FullElectronic
DataImage5Copy
Image
Hybrid
For the FullElectronic
and Hybrid
submission types, the Manifest can be submitted at either Pending
or Scheduled
status. If the manifest was created in Pending
status the transition to Scheduled
status will be done via the
update
service. The transition to the statuses after Scheduled
for these submission types will be done automatically by
e-Manifest.
For the DataImage5Copy
and Image
submission types, the Manifest will be assigned the ReadyForSignature
status.
The
transition to the next status for these submission type will be done automatically by e-Manifest.
Manifests with the Mail
origin type cannot be saved via the Save service.
For the DataImage5Copy
and Image
submission types, the service requires receiving the scanned compressed
document
attachment (Printed/Paper, Signed, Scanned Manifest form-2050). Manifest attachment shall be passed as a multipart
binary content. (See sample client implementation for details
at: https://github.com/USEPA/e-manifest/tree/master/Services-Information/sample-client)
For the "DataImage5Copy
and "Image
submission types, if the
Manifest contains an attachment, the
following metadata
JSON elements shall be presented in the Manifest JSON:
{
"printedDocument": {
"name": "user provided document name.pdf",
"size": 23455,
"mimeType": "APPLICATION_PDF"
}
}
where size
is the number of bytes of the PDF document.
The service will validate the submitted JSON and if:
- No Errors or Warnings were found: Service will save the manifest and return generated Manifest Tracking Number
- Only Warnings were found: Service will save the manifest and return generated Manifest Tracking Number and Warning Report containing all found Warnings
- Error(s) were found: Service won't save the manifest and return Error Report containing all found errors.
- Error(s) and Warnings were found. Service won't save the manifest and return Error and Warning Report containing all found errors and warnings
Parameters
- manifest JSON schema
- attachment (optional)
- Security Token
Examples
POST /rcrainfo/rest/api/v1/emanifest/manifest/save HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"manifestTrackingNumber": "123456789ELC",
"discrepancy": false,
"submissionType": "FullElectronic",
"generator": {
"epaSiteId": "VATESTGEN001",
"name": "VA TEST GEN 2021",
"..." : "..."
},
}
See manifest JSON schema.
Sequence of Steps
-
If the User is authenticated and authorized, the system processes the request
-
The system validates the provided Manifest JSON and Attachment Document according to the rules described in "Manifest entities and fields validation for Save service". If no errors or warnings were generated during the validation process, the service perform the following steps:
- 4.1 Generate a Manifest Tracking Number (MTN) for the provided manifest data
- 4.2 Store the provided manifest information and attachment document (if applicable) in the e- Manifest database
- 4.3 Return the MTN to the requestor
-
If a warning is generated during the validation process, the service performs the following steps:
- 5.1 Generate an MTN for the provided manifest data
- 5.2 Store the provided manifest information and an attachment document in the e-Manifest database
- 5.3 Return the MTN and Warning(s) report to the requestor
-
If an error is generated during the validation process, the service performs following steps:
- 6.1 Generate Error Report with all errors found during validation process
- 6.2 Return Error Report to the requestor
-
If any errors and warnings were generated during validation process, the service performs the following steps:
- Generate an Error/Warning report with all errors and warnings found during validation process
- Return Error/Warning report to the requestor
Response
see the crud-emanifest-return.json
Manifest Retrieve Service
Returns the Manifest’s latest version data associated with the provided Manifest Tracking Number. The service always returns Manifest data and optionally returns Manifest attachments. For the "Image" manifests submitted via mail the service will return the manifest version according to the following rules:
- If PPC status of the latest manifest version is either
PendingDataEntry
orDataQaCompleted
this version will be returned by the service. - If PPC status of the latest manifest version is either
Draft
orDataEntryInProgress
orPendingDataQc
orPendingDataQa
the manifest version will not be returned.
For the Image
manifests submitted by industry the service will return the latest version of the manifest which has
either manifest status ReadyForSignature
, Signed
or Corrected
and PPC status PendingDataEntry
or DataQaCompleted
If the Manifest contains an attachment(s) and the attachment option is specified, the following documents will be returned:
-
PDF Document containing printed, scanned, and manually signed Manifest form (Printed Document). Note that this document is not available for
FullElectronic
orHybrid
submission types. -
HTML Document(s) containing human-readable representation of the Manifest data signed electronically - Copy Of Record document (COR). Note that the system generates this Document(s) at the time when the users (Generator, Transporters, TSDF) are electronically signing the manifest. In order to identify what party the COR document was generated by, the following naming convention is used:
- COR document generated when Generator signed the manifest :
<cor-g.html>
- COR document generated when Generator signed the manifest for rejection (If shipment was returned back to the
original Generator):
<cor-g-reject.html>
- COR document generated when Transporter(s) signed the manifest:
<cor-t-{transporter order}.html>
- COR document generated when TSDF signed the manifest:
<cor-tsdf.html>
- COR document generated when Generator signed the manifest :
-
PDF Document containing form 8700-22 representation of the Manifest Data. Following document metadata JSON elements will be presented in Manifest JSON if the Manifest contains attachments:
-
Printed Document metadata example:
{ "printedDocument": { "name": "user provided document name.pdf", "size": 500, "mimeType": "APPLICATION_PDF" } }
-
COR Document (Human Readable Document) signed by TSDF metadata example:
{ "humanReadableDocument": { "name": "cor-tsdf.html", "size": 500, "mimeType": "TEXT_HTML" } }
-
Form 2050 Document metadata example:
{ "formDocument": { "name": "form-8700-22.pdf", "size": 7000, "mimeType": "APPLICATION_PDF" } }
All documents will zipped and zip file will be returned as a multipart binary content. See our documentation on manifest attachments for more information.
-
Parameters
- Security Token
- Manifest Tracking Number
Example
Retrieve manifest without attachments:
GET /rcrainfo/rest/api/v1/emanifest/manifest/123456789ELC HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Retrieve manifest with attachments:
GET /rcrainfo/rest/api/v1/emanifest/manifest/123456789ELC/attachments HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: multipart/mixed
Sequence of Steps
-
The system will process the request
- 3.1. The system will check if the provided Manifest Tracking Number is valid and in the system.
- 3.1.1. Manifest Tracking Number shall be compliant with following rules:
- Nine numeric characters + valid three-character Manifest Tracking Suffix.
- 3.1.2. If provided Manifest Tracking Number does not have valid format, the processing
will be stopped and the system will generate the following error:
E_InvalidManifestTrackingNumber: Provided Manifest Tracking Number has an invalid format.
- 3.1.3. If Manifest with provided Manifest Tracking Number is not in the system, the
processing will be stopped, and the system will generate the following error:
E_ManifestTrackingNumberNotFound: Provided Manifest Tracking Number was not found
- 3.1.1. Manifest Tracking Number shall be compliant with following rules:
- 3.2. The system will obtain the Manifest for the provided Manifest Tracking Number.
- 3.3. The system will check if the user has Industry Permissions for the Generator Site ID or TSDF Site ID provided on the manifest.
- 3.4. If the User does not have permission, the System will stop the processing and will generate
the following error:
E_SitePermissions: The user does not have Industry Permissions for the Generator Site or TSDF Site
- 3.5. The System generates JSON containing obtained Manifest
- 3.1. The system will check if the provided Manifest Tracking Number is valid and in the system.
-
On success, the system returns the following response:
- generated JSON containing obtained Manifest
- if the attachment endpoint was used and manifest contains attachments, all or some following documents will be
zipped and returned as a multipart binary content:
- Printed Document
- COR document(s)
- Form 2050
-
If any system errors were encountered during processing, the system will return:
- error: containing error code, error message, error id, and error date
Manifest Update Service
The Update service updates an existing Manifest. The service requires that the industry system submits a complete
Manifest JSON in order to update a manifest. Individual Manifest fields cannot be updated via this service, only the
entire manifest (see the manifest correct service docs for making post-shipment corrections). The update
service accepts Manifest data in JSON format compliant with the manifest JSON schema
and can also accept a Manifest attachment for the DataImage5Copy
and Image
submission types (Scanned Signed
Paper Manifest Image pdf). Manifest JSON must contain the Manifest Tracking Number generated for that manifest by
the Save Manifest service. The Save manifest service must be invoked prior to the Update Manifest service
for any manifest. The following submission types are supported:
FullElectronic
DataImage5Copy
Image
Hybrid
ForFullElectronic
andHybrid
submission types, the Manifest can be updated with "Pending" or Scheduled
statuses. For
these submission types the transition to the next statuses after Scheduled
will be done by e-Manifest.
For DataImage5Copy
and Image
submission types the Manifest status shall not be submitted. For this submission type
the status transition will be done by e-Manifest.
Signed manifests of any submission types cannot be Updated via Update service. Image
Manifests submitted via mail
cannot be updated via Update service at any time.For the DataImage5Copy
and Image
submission types the service
supports receiving the scanned document attachment (Printed, Signed, Scanned Manifest form-2050). Manifest attachment
shall be passed as a multipart binary content. (See sample client implementation for details). For
the DataImage5Copy"
submission type if the Manifest contains an attachment the following metadata JSON elements shall
be presented in the Manifest JSON:
{
"printedDocument": {
"name": "user provided document name.pdf",
"size": 23455,
"mimeType": "APPLICATION_PDF"
}
}
Service will check if the manifest is locked. The manifest is locked for update when Manifest is in a queue for signing.
Service will validate submitted JSON (see sectionManifest entities and fields validation for Update service) and if:
- No Errors or Warnings were found: The service will update the manifest and return the existing Manifest Tracking Number
- Only Warnings were found: The service will update the manifest and return the existing Manifest Tracking Number and Warning Report containing all found Warnings
- Error(s) were found: The service won't update the manifest and returns Error Report containing all found errors.
- Error(s) and Warnings were found. The service won't update the manifest and returns Error Report containing all found errors and warnings.
Examples
POST /rcrainfo/rest/api/v1/emanifest/manifest/update HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"manifestTrackingNumber": "123456789ELC",
"status": "Scheduled",
"discrepancy": false,
"submissionType": "FullElectronic",
"generator": {
"epaSiteId": "VATESTGEN001",
"name": "VA TEST GEN 2021",
"..." : "..."
},
}
See manifest JSON schema.
Sequence of Steps
-
If the user was authenticated and authorized, the system will check if manifest is locked for update.
- 3.1. If the manifest is in the signing queue, it is locked for update. The following error will be
generated:
E_ManifestLockedAsyncSign
: Manifest is locked because it is in the queue for signing. Manifest cannot be updated.
- 3.2. If the manifest is in the change biller process by EPA, it is locked for update. The following
error will be generated:
E_ManifestLockedEpaChangeBiller
: Manifest is locked because EPA is changing the biller. Manifest cannot be updated.
- 3.1. If the manifest is in the signing queue, it is locked for update. The following error will be
generated:
-
The system will process the request
- 4.1. The system will validate the provided Manifest JSON and Attachment Document
- 4.1.1. The system will validate the e-Manifest fields according to the rules described in section Manifest entities and fields validation for Update service
- 4.2. If no errors or warnings are generated during the validation process, the service will perform
the following steps:
- 4.2.1. Update existing Manifest with provided Manifest information
- 4.2.2. Create or Update Attachment Document into e-Manifest database
- 4.2.3. Return Manifest Tracking Number to the Requestor.
- 4.3. If only warnings are generated during the validation process, the service will perform
following steps:
- 4.3.1. Update existing Manifest with provided Manifest information
- 4.3.2. Create or Update Attachment Document into e-Manifest database
- 4.3.3. Return Manifest Tracking Number and Warning(s) Report to the Requestor
- 4.4. If an error is generated during the validation process the system will perform the following
steps:
- 4.4.1. Generate Error Report with all errors found during validation process
- 4.4.2. Return Error Report to the Requestor.
- 4.5. If any errors and warnings were generated during the validation process the system will perform
following steps
- 4.5.1. Generate Error/Warning Report with all errors and warnings found during validation process
- 4.5.2. Return Error/Warning Report to the Requestor.
- 4.1. The system will validate the provided Manifest JSON and Attachment Document
Manifest Delete Service
The Delete service allows certain manifests to be removed from the system by Manifest Tracking Number (MTN). Depending on the manifest submission type, the manifest can be deleted in the following statuses:
FullElectronic
: can be deleted only if in thePending
orScheduled
statusHybrid
: can be deleted only if in thePending
orScheduled
statusDataImage5Copy
: can be deleted only if in theReadyForSignature
or "MtnValidationFailed" statusImage
: can be deleted only iforiginType
=Web
orService
and status is in theReadyForSignature
orMtnValidationFailed
status
Service will check if the manifest is locked. The manifest is locked for delete when Manifest is in a queue for signing.
Parameters
- Security Token
- Manifest Tracking Number
Examples
DELETE /rcrainfo/rest/api/v1/emanifest/manifest/delete/123456789ELC HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
-
The system will check if the provided manifest tracking number is valid and exists in the system.
3.1 The system will check if the provided MTN is valid and exists in the system. Manifest Tracking Number shall be compliant with following rules:
- Nine numeric characters + valid three character Manifest Tracking Suffix - If the provided Manifest Tracking Number does not have valid format the processing will be stopped and system generates the following error: - `E_InvalidManifestTrackingNumber: Provided Manifest Tracking Number has invalid format` - If the provided Manifest Tracking Number does not have a valid suffix the processing will be stopped and system generates the following error: - `E_InvalidManifestTrackingNumberSuffix: Provided Manifest Tracking Number has invalid` - If the Manifest Tracking Number is not in the system the processing will stop and the system generates the following error: - `E_ ManifestTrackingNumberNotFound: Provided Manifest Tracking Number was not found`
3.2 The system will check if the manifest can be deleted.
- If the manifest submission type is
FullElectronic
orHybrid
or not selected and manifest status is notPending
ofScheduled
the system will stop the processing and generate the following error:E_IncorrectStatusForDelete: Manifest with submission type of [Full Electronic/Hybrid] can be deleted only in Pending or Scheduled status
- If Manifest submission type is
DataImage5Copy
and Manifest status is notReadyForSignature
the system will stop the processing and generates the following error:E_IncorrectStatusForDelete: Manifest with submission type of DataImage5Copy can be deleted only in ReadyForSignature or MtnValidationFailed status
- If Manifest submission type is "Image" following applies
- If manifest origin type is
"Web
or"Service
and Manifest status is not"ReadyForSignature
the system will stop the processing and generates the following error:E_IncorrectStatusForDelete: Manifest with submission type of Image can be deleted only in ReadyForSignature or MtnValidationFailed status
- If manifest origin type is "Mail" the system will stop the processing and generates the following error:
E_IncorrectOriginForDelete: Manifest with origin type of Mail cannot be deleted
- If manifest origin type is
- If the manifest submission type is
-
The system will delete the manifest.
-
On success the system returns JSON containing the following information:
- Manifest Tracking Number
- Operation Status:
"Deleted
- Date: Date/Time of the operation
-
If any system errors were encountered during processing, the system will return:
- error containing error code, error message, and error id and date
Manifest Sign Service
Intro
The Manifest signature service exposes the ability to create electronic signatures through the RCRAInfo APIs.
The service performs a "quicker sign" signature for the specified handler, by siteId
and siteType
, that is party to
the manifest(s). Quicker signatures are only available for electronic manifests. If siteType
is Transporter
, the
transporter order must be specified to indicate which transporter performs the signature.
Parameters
- Security Token
- Quicker Sign JSON
passed in the body of the request, JSON encoded.
siteId
: required, the RCRAInfo site ID of the handler to sign the manifestsiteType
: required, the RCRAInfo site type of the handler to sign the manifestGenerator
Transporter
TSDF
RejectionInfo_AlternateTsdf
transporterOrder
: required only ifsiteType
isTransporter
, the order of the transporter signing the manifestprintedSignatureName
: required, the name of the person signing the manifestprintedSignatureDate
: required, the date of the signature for the person that signed the manifest. YYYY-MM-DDThh:mm:ss.sTZD date/time format shall be provided. The printed signature dates will be set to noon of the date entered. The date and time stamp of the signature of the user submitting the signature are captured in the system.manifestTrackingNumbers
: required, an array of manifest tracking numbers to sign
Examples
An example of the JSON body of a site signing 2 manifest as the transporter.
{
"siteId": "VATESTRAN02",
"siteType": "Transporter",
"transporterOrder": 1,
"printedSignatureName": "John Trucker Smith",
"printedSignatureDate": "2021-10-27T03:19:25.443+0000",
"manifestTrackingNumbers": ["200030073ELC", "100030074ELC"]
}
Completed Response Example
A successful signature will return a report including information like the following
{
"reportId": "6XedXX88-2YYb-4zOe-9pj1-2iuy2c20zed7",
"date": "2023-02-06T23:16:20.380+00:00",
"operationStatus": "Completed",
"manifestReports": [
{
"manifestTrackingNumber": "100034662ELC"
}
],
"signerReport": {
"printedSignatureName": "John Smith",
"printedSignatureDate": "2023-02-06T12:00:00.000+00:00",
"electronicSignatureDate": "2023-02-06T23:16:20.795+00:00",
"firstName": "Jane",
"lastName": "Doe",
"userId": "JANEDOERCRA",
"warnings": [
{
"field": "printedSignatureDate",
"message": "Printed Signature Date is set to noon UTC of the day of the provided date",
"value": "2023-02-06T19:55:58.971Z"
}
]
},
"siteReport": {
"siteId": "VATESTTSDF03",
"siteType": "Tsdf"
}
}
Sequence of Steps
-
The system will process the request
-
3.1. The system will check for valid Site Type Enumerated values. If the value provided does not match the values in the quicker sign schema, then the service generates the following error:
E_SystemError: Instance value (\"TSDF\") not found in enum (possible values:[\"Generator\",\"Transporter\",\"Tsdf\",\"RejectionInfo_AlternateTsdf\"]): TSDF
-
3.2 If the site type is set to Transporter, the system will check for a value in the
transporterOrder
field. If the field is null, the service will generate the following error:Transporter Order is required when site type is Transporter
-
3.3. the system will check the Manifest Tracking Number(s) exist. If the value provided does not match an existing manifest, then the service generates the following error in the Manifest Reports object (other errors and warnings in this section are truncated):
{ "reportId": "6XedXX88-2YYb-4zOe-9pj1-2iuy2c20zed7", "date": "2023-02-06T23:34:38.886+00:00", "operationStatus": "Failed", "manifestReports": [ { "manifestTrackingNumber": "300034662ELC", "errors": [ { "field": "manifestTrackingNumber", "message": "Manifest not found", "value": "300034662ELC" } ] } ] }
(the other errors and warning in this section are truncated)
- 3.4. The system will check if the Site ID and provided Manifest Tracking Number(s) in the array are available for
the signature.
- 3.4.1. If the provided Manifest Tracking Number is not ready for signature, has been signed by the site, or
has a different site type than what was submitted, the processing will be stopped and system generates the
following error:
E_SystemError: "Manifest is not ready to be quick signed by handler Site ID
- 3.4.1. If the provided Manifest Tracking Number is not ready for signature, has been signed by the site, or
has a different site type than what was submitted, the processing will be stopped and system generates the
following error:
- 3.5. The system will check if the Printed Signature Name field has data in it, if the field is null the system
generates the following error in the Signer Report object in the response:
Printed Signature Name is required
- 3.6. The system will check the length of the Printed Signature Name field, if the field exceeds 80 character the
system truncates the field to 80 and generates the following warning in the Signer Report object in the response:
Printed Signature Name must be 80 characters or less
- 3.7. The system will check for a valid Printed Signature Date field format. If the value provided does not match
the date format in the quicker sign schema, the system will stop the processing and the service generates the
following error:
E_SystemError: "String \"202-02-06T19:55:58.971+0000\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.SSSZ]: 202-02- 06T19:55:58.971+0000
- 3.8. The system will check the time stamp of the Printed Signature Date field, if the field is not set to noon UTC
the system will set the field to noon UTC and generates the following warning in the Signer Report object in the
response:
Printed Signature Date is set to noon UTL of teh day of teh provided date
- 3.9. The system will compare the date of the signature with the previous signature on the manifest. if the date
provided is before the date of the previous signature the system generates the following error in the Signer
Report object in the response:
Specified paper signature date can't be before %s's paper signature date
- 3.10. The system will Quicker Sign the manifest(s)
-
-
On success, the system returns JSON containing
- Operation Status: "Completed"
- Date: Date/Time of the operation
- manifestReports: The manifests signed from the submission
- signerReport: Information on the user and the printed signer that signed the manifest(s)
- siteReport: The site that signed the manifest(s)
-
If at least one manifest but not all the manifests were signed the system returns JSON containing:
- Operation Status: "PartiallyCompleted"
- Date: Date/Time of the operation
- manifestReports: The manifests signed from the submission and manifests not signed as well as the errors as to why they were not signed
- signerReport: Information on the user and the printed signer that signed the manifest(s)
- siteReport: The site that signed the manifest(s)
-
If any system error were encountered during processing, the system will return:
- Operation Status: "Failed"
- Date: Date/Time of the operation
- manifestReports: If applicable the errors encountered
- signerReport: If applicable the errors encountered
- siteReport: If applicable the errors encountered
Manifest Correct Service
Introduction
The Correct Manifest Service creates and updates a Manifest Correction (a new version of the manifest will be either
created or updated by the service). If the current manifest status is either Signed
or Corrected
then a new
version of the Manifest Correction will be created and automatically receives the status of UnderCorrection
. If the
current manifest status is UnderCorrection
then the current Manifest Correction version can be updated with the same
service. Note, there is only one version with the UnderCorrection
status at any given time and this version is
viewable and editable by all registered handlers on the manifest.
For the Image manifests submitted via the Industry application or save service, the Correct service will create a new version either before the manifest was processed by the by Paper Processing Center (PPC) or after the manifest was processed by PPC. If the manifest is currently being processed by PPC the service will return an error.
For manifests submitted by mail (Image
no longer accepted since 2021) the Correct service will create a new version
only after the manifest was processed by PPC. The service will not create new version if the manifest was not processed
by PPC or is currently being processed by PPC.
The service accepts Manifest data in JSON format compliant with the manifest JSON schema.
All submission types are supported by this service. For the "DataImage5Copy"
and Image
submission types, the
service supports (but does not mandate) receiving the scanned compressed document attachment (Printed/Paper, Signed,
Scanned Manifest form-2050). If a user wishes to send a manifest attachment, it shall be passed as a multipart binary
content. (See sample client implementation for details at:
https://github.com/USEPA/e-manifest/tree/master/Services-Information/sample-client For the "DataImage5Copy"
and Image
submission types, if the Manifest contains an attachment the following metadata JSON elements shall be
presented in the Manifest JSON:
{
"printedDocument": {
"name": "user_provided_document_name.pdf",
"size": 23455,
"mimeType": " APPLICATION_PDF"
}
}
where size
is the number of bytes of the PDF document.
The service will validate the submitted JSON (see details in section "Manifest entities and fields validation for Create Correction service") and if:
- No Errors or Warnings were found: The service will create or update the manifest correction and return the Manifest Tracking Number, operation status, and operation date.
- Only Warnings were found: The service will create or update the manifest correction and return the Manifest Tracking Number, operation status, current version, operation date and Warning Report containing all found warnings.
- Error(s) were found: The service will not create or update the manifest correction and return Error Report containing all found errors.
- Error(s) and Warnings were found. Service will not create or update the manifest correction and return Error and Warning Reports containing all found errors and warnings.
Parameters
- manifest JSON schema
- attachment (optional)
- Security Token
Examples
PUT /rcrainfo/rest/api/v1/emanifest/manifest/correct HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"manifestTrackingNumber": "123456789ELC",
"status": "Signed",
"discrepancy": false,
"submissionType": "FullElectronic",
"generator": {
"epaSiteId": "VATESTGEN001",
"name": "VA TEST GEN 2021",
"..." : "..."
},
}
See manifest JSON schema.
and crud-emanifest-return.json
Completed Response Examples
Correction created response without warnings
{
"manifestTrackingNumber": "100001380ELC",
"reportId": "43f52e98-4b01-4b61-8c42-3d6ab42c5bf3",
"date": "2018-10-09T15:18:56.145+0000",
"operationStatus": "CorrectionCreated"
}
correction updated response without warning
{
"manifestTrackingNumber": "100001380ELC",
"reportId": "33f561fc-2142-48b5-97eb-c6de0899814f",
"date": "2018-10-09T15:21:09.306+0000",
"operationStatus": "CorrectionUpdated"
}
Response with Warnings and Response with Errors are identical to the Save and Update services Warning and Error Responses
Sequence of Steps
-
The system will check if the manifest is locked for corrections.
3.1. If manifest is in the signing queue, it is locked for correct. The following error will be generated
- `E_ManifestLockedAsyncSign: Manifest is locked because it is in the queue for signing. Manifest cannot be corrected.`
3.2. If the manifest is in teh Change Biller process by EPA, it is locked for corrections. The following error will
- `E_ManifestLockedEpaChangeBiller: Manifest is Locked because EPA is Changing Biller. Manifested cannot be corrected.`
-
The system will process the request.
4.1. The system will validate the provided Manifest JSON and Attachment Document according to the Manifest Save Service
4.2 If no errors or warnings were generated during the validation process, the service will perform the following steps:
- If the current manifest status is either
Signed
orCorrected
, then the service creates a new manifest version with the provided Manifest information. The service assigns theUnderCorrection
status to the new manifest version. - If the current manifest status is
UnderCorrection
, then the service updates the existing Manifest with the provided Manifest information. - Returns manifest Tracking Number, operation status, and operation date and warning(s) report to the requester.
4.3. If a warning is generated during the validation process, the service performs the following steps:
- Generate an Error/Warning Report with all errors and warnings found during validation process.
- Return Error/Warning report to the requester.
- If the current manifest status is either
Manifest Revert Service
Description
The Revert Manifest service deletes the manifest version in the UnderCorrection
status by provided Manifest Tracking
Number. Service will check if the manifest is locked. The manifest is locked for revert when Manifest is in a queue for
signing.
Parameters
- Security Token
- Manifest Tracking Number
Sequence of Steps
-
If the User is authenticated and authorized, the system will check if the manifest is locked for corrections.
-
3.1. If manifest is in the signing queue, it is locked for correct. The following error will be generated
E_ManifestLockedAsyncSign: Manifest is locked because it is in the queue for signing. Manifest cannot be corrected.
-
3.2. If the manifest is in teh Change Biller process by EPA, it is locked for corrections. The following error will
E_ManifestLockedEpaChangeBiller: Manifest is Locked because EPA is Changing Biller. Manifested cannot be corrected.
-
-
The system will process the request.
-
4.1 The system will check if the provided MTN is valid and exists in the system. Manifest Tracking Number shall be compliant with following rules:
-
Nine numeric characters + valid three character Manifest Tracking Suffix
-
If the provided Manifest Tracking Number does not have valid format the processing will be stopped and system generates the following error:
E_InvalidManifestTrackingNumber: Provided Manifest Tracking Number has invalid format
-
If the provided Manifest Tracking Number does not have a valid suffix the processing will be stopped and system generates the following error:
E_InvalidManifestTrackingNumberSuffix: Provided Manifest Tracking Number has invalid
-
If the Manifest Tracking Number is not in the system the processing will stop and the system generates the following error:
E_ ManifestTrackingNumberNotFound: Provided Manifest Tracking Number was not found
-
-
4.2 The system will check if the manifest ca be reverted. if no
UnderCorrection
version of the manifest exists, the system will stop processing and generate the following error:E_NoVersionForUnderCorrectionStatus: Manifest does not contain the Version in 'UnderCorrection' status
-
4.3 The system reverts the manifest (Deletes Manifest version in
UnderCorrection
status)
-
-
On success the system returns JSON containing the following information:
- Manifest Tracking Number
- Operation Status:
Reverted
- Date: Date/Time of the operation
- Current Version Number
-
If an error is generated during the validation process, the system will return the following information:
- Error: containing error code, error message, and error id and date
Completed Response Example
{
"manifestTrackingNumber": "100001380ELC",
"operationStatus": "Reverted",
"currentVersionNumber": 2,
"date": "2017-07-27T19:13:28.628+0000"
}
Validation Error Return example
{
"code": "E_ManifestTrackingNumberNotFound ",
"message": "Provided Manifest Tracking Number was not Found",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
Manifest Search Service
Returns a list of manifests matching the search criteria. The service can be used by both industry and states.
Parameters
-
The following service parameters will be passed as JSON compliant to the JSON schema defined in search-manifest.json.
-
stateCode
: Valid State Code. This is one of two Mandatory Parameters. EitherstateCode
orsiteId
shall be provided. -
siteId
: TSDF, Generator, or Transporter Site ID. This is one of two Mandatory Parameters. EitherstateCode
orsiteId
shall be provided. -
siteType
: The type of the site (Generator, Transporter, TSDF, Alternate TSDF) which will be used for the search. If the site location address state code is equal to the providedstateCode
then this search criteria is a match. One of the following values may be provided:Generator
Transporter
Tsdf
RejectionInfo_AlternateTsdf
If a parameter is not provided then the search will be performed for all Generators and Transporters and TSDFs. This is an optional Parameter.
-
status
: Manifest Status. Following values can be provided:Pending
Scheduled
InTransit
ReadyForSignature
Signed
SignedComplete
Corrected
UnderCorrection
If the parameter is provided the manifests which are in the provided status will match the search criteria. If this parameter is not provided manifests which are in any of the above statuses will match the search criteria. This is an optional parameter.
-
transporterOrder
: Transporter Order. Integer value representing the order of a transporter on the manifest.If the parameter is provided the manifests for which the given transporter matches the search criteria will be returned. If this parameter is not provided manifests will match the other search criteria. This is an optional parameter.
-
correctionRequestStatus
: Correction Request Status. Following values can be provided:NotSent
Sent
IndustryResponded
Cancelled
If the parameter is provided the manifests which are in the provided status will match the search criteria. If this parameter is not provided manifests which are in any of the above statuses will match the search criteria. This is an optional parameter.
-
comments
: Comments. Dictionaries can be provided matching the following format:{label (str), description (str), handlerId (str)}
Providing the
handlerId
is optional. If the parameter is provided the manifests which match the search criteria will be returned. If this parameter is not provided manifests will match the other search criteria. This is an optional parameter. -
dateType
: type of the Date which will be used for the date range search. The following values can be provided:ShippedDate
ReceivedDate
CertifiedDate
UpdatedDate
The service will perform a date range search when the date type,
startDate
andendDate
parameters are provided. This is an optional parameter. -
startDate
: Starting date/time of the date range search. YYYY-MM-DDThh:mm:ss.sTZD date/time format shall be provided. This is an optional parameter. -
endDate
: Ending date/time of the date range search. YYYY-MM-DDThh:mm:ss.sTZD date/time format shall be provided. This is an optional parameter.
-
Examples
POST /rcrainfo/rest/api/v1/emanifest/search HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"stateCode": "VA",
"status": "Pending",
"dateType": "UpdatedDate",
"startDate": "2023-08-01T00:00:00.0-05:00",
"endDate": "2023-08-31T23:59:59.0-05:00"
}
Completed Response Examples
The following example searched for all manifests where the Generator site address state code is equal to "MD" and have "Scheduled" status:
{
"stateCode": "MD",
"status": "Scheduled",
"siteType": "Generator"
}
The following example searches for all manifests where either the Generator or Transporter(s) or TSDF site address state code is equal to "TX" and have been shipped in the Date range between March 6, 2018 9:57:33pm and March 15, 2018 9:14: 44pm:
{
"stateCode": "TX",
"dateType": "CertifiedDate",
"startDate": "2018-03-06T21:57:33",
"endDate": "2018-03-15T21:14:44"
}
The following example to search for all manifests where siteId
is
provided and the manifest status is Signed
{
"siteId": "VATESTGEN001",
"status": "Signed"
}
Completed Response Example
["100035794ELC", "100035671ELC", "100035735ELC", "100035569ELC", "100035664ELC"]
Sequence of Steps
-
The system will process the request.
- 3.1. If
stateCode
is not provided andsiteId
is not provided, the service will stop processing and generates the following error:E_SearchParameterRequiredStateCodeorSiteId: Missing required search parameter State Code or Site ID
- 3.2. If an invalid
stateCode
is provided, the service will stop processing and generates the following error:E_InvalidStateCode: Invalid State Code is Provided
- 3.3. If provided Site ID is invalid, the system will stop processing and generate the following error:
E_InvalidSiteId: Provided Site ID has invalid format
- 4.1. If Site with provided Site ID is not registered in RCRAInfo, the system will stop processing and generate the
following error:
E_SiteIsNotFound: Site with Provided Site ID is not Found
- 4.2. If the provided status is invalid, the system will stop processing and generate a schema error.
- 4.3. If the provided
dateType
is invalid, the system will stop processing and generate a schema error. - 4.4. If the provided
startDate
is invalid, the system will stop processing and generate a schema error. - 4.5. If the provided
endDate
is invalid, the system will stop processing and generate a schema error.
- 3.1. If
-
System returns the response
- 5.1. If the System found manifests for the provided search criteria, it returns JSON containing the list of obtained Manifest Tracking Numbers
- 5.2. If no manifests were found for the provided State code, the system returns JSON containing:
-
empty list
- 6.1. If any system errors were encountered during the processing, the system returns JSON containing:
-
error
: containing error code, error message, error id
Manifest User Interface (UI) Link service
The e-Manifest UI service exposes one endpoint that can be used to generate a link (URL) to the RCRAInfo user interface (specifically the e-Manifest module). This service provides a method to streamline the manifest signing process for users that do not have an independent system to manage manifests.
It can be used for the following use cases:
- Link to View a manifest
- Link to Sign a manifest
- Link to Edit a manifest
- Link to display manifest dashboard
- Link to bulk sign manifest(s)
Parameters
-
The following parameters can be passes in JSON format in the body of the request:
page
specifies the type of the page the link should direct users to. This is a required parameter the options include:Sign
View
Edit
Dashboard
BulkSign
BulkQuickSign
epaSiteId
: the EPA site ID of either the generator, transporter(s) or TSDF participating in the manifest. This is a required parameter.manifestTrackingNumber
: the tracking number of the manifest. This is a required parameter if the providedpage
value is eitherView
,Edit
, orSign
. This parameter may not be provided if thepage
value is equal toDashboard
,BulkSign
, orBulkQuickSign
.filter
: An array of manifest tracking number(s) which should be displayed on the manifest Dashboard or bulk sign page. This parameter may not be provided if thepage
value is equal toView
,Edit
, orSign
.view
: A string value specifying the view the page should take in the UI. This parameter may not be provided if thepage
value is equal toView
,Edit
, orSign
. Values includeIncoming
,Outgoing
,All
,Transporting
,Broker
, andCorrectionRequests
if the providedpage
value isDashboard
. Values includeOriginal
,Corrections
, andCorrectionRequests
if the providedpage
value isBulkSign
. Values includeIncoming
,Outgoing
, andTransporting
if the providedpage
value isBulkQuickSign
.
Examples
POST /rcrainfo/rest/api/v1/links/emanifest HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"page": "View",
"epaSiteId": "VATESTGEN001",
"manifestTrackingNumber": "100035836ELC"
}
Sequence of Steps
-
The system will process the request
- 3.1. If page is not provided then the service generates following error:
{ "errors": [ { "message": "Object has missing required properties ([\"page\"])", "field": "" } ] }
- 3.2. If provided page is invalid then the service generates following error:
{ "errors": [ { "message": "Instance value (\"provided value\") not found in enum (possible values: [\"Dashboard\",\"BulkSign\",\"View\",\"Edit\",\"Sign\"])", "field": ".page", "value": "provided value" } ] }
- 3.3. If
epaSiteId
is not provided then the service generates following error:
{ "errors": [ { "message": "Object has missing required properties ([\"epaSiteId\"])", "field": "" } ] }
- 3.4. If provided
epaSiteId
has invalid format then the service generates following error:
{ "errors": [ { "message": "Regex \"^([A-Z][A-Z][A-Za-z0-9]{2,10})$\" does not match input string\"AK96903307420\"", "field": ".epaSiteId" } ] }
- 3.5. If provided
epaSiteId
is not registered then the service generates following error:
{ "errors": [ { "message": "Site with provided epa site id is not registered", "field": "epaSiteId" } ] }
- 3.6. If provided
page
is equal to "View" or "Sign" or "Edit" andmanifestTrackingNumber
is not provided then the service generates following error:
{ "errors": [ { "message": "Value is not provided", "field": "manifestTrackingNumber" } ] }
- 3.7. If provided
page
is equal to "View" or "Sign" or "Edit" and themanifestTrackingNumber
provided has an invalid format then the service generates following error:
{ "errors": [ { "message": "Regex \"^[0-9]{9}[A-Z]{3}$\" does not match input string \"provided mtn\"", "field": ".manifestTrackingNumber" }, { "message": "Invalid Field Format. 9 digits followed by 3 upper case letters is expected", "field": "manifestTrackingNumber" } ] }
- 3.8. If provided
page
is equal to "View" or "Sign" or "Edit" and themanifestTrackingNumber
is not found then the service generates following error:
{ "errors": [ { "message": "Provided Manifest Tracking Number is not found", "field": "manifestTrackingNumber" } ] }
- 3.9. If provided
page
is equal to "View" or "Sign" and manifest with provided epa site id andmanifestTrackingNumber
is not found then the service generates following error:
{ "errors": [ { "message": "Provided site id is not participating in the manifest", "field": "manifestTrackingNumber" } ] }
- 3.10. If provided
page
is equal to "Sign" and manifest is in "Pending" status then the service generates following error:
{ "errors": [ { "message": "Provided manifest is not ready to be signed", "field": "manifestTrackingNumber" } ] }
- 3.11. If provided
page
is equal to "Dashboard" or "BulkSign" and provided filter elements has invalid format then the service generates following error:
{ "errors": [ { "message": "Regex \"^[0-9]{9}[A-Z]{3}$\" does not match input string\"100024600EBLC\"", "field": ".filter[i]" }, { "message": "Invalid Field Format. 9 digits followed by 3 upper case letters is expected", "field": ".filter" } ] }
-
On success, the service returns the URL for the manifest page
-
If any validation errors were found the service returns an error report
-
If any system errors were encountered during processing, the system will r
e-Manifest Billing Service
These services to retrieve e-Manifest user fee billing information.
Bill Service
The service returns bill information either by the combination of the billing account and bill id or by the combination of the billing account and month and the year of the bill.
Parameters
- Security Token
- The following service parameters will be passed as JSON compliant to the JSON schema defined
in bill-request.json
- Billing Account AND Bill ID or
- Billing Account AND Month/Year
If billId
and monthYear
is provided the service validates provided billId
and returns data based on billId
.
If billId
is not valid the service validates the request by the provided monthYear
.
Examples
POST /rcrainfo/rest/api/v1/emanifest/manifest/bill HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"billingAccount": "123456789",
"billId": "123456789",
}
Completed Response Example
-
Supplying both
billingAccount
and thebillId
{ "billingAccount": "VATESTTSDF001", "billId": "123456789" }
-
Supplying both
billingAccount
and themonthYear
{ "billingAccount": "VATESTTSDF001", "monthYear": "01/2021" }
-
If
monthYear
is provided along withbillingAccount
andbillId
, themonthYear
argument is ignored.{ "billingAccount": "VATESTTSDF001", "billId": "123456789", "monthYear": "01/2021" }
Response Schema
See bill.json for the response schema.
Sequence of Steps
-
The system will process the request
- 3.1. If Billing account of the facility (EPA Site ID) is not provided the schema validation exception will be
returned:
Object has missing required properties (["billingAccount"]): null
- 3.2. If no additional parameters provided (either
billId
ormonthYear
) the processing will be stopped and system will generate the following error:E_NoAdditionalParametersProvided: No additional parameters are provided
- 3.3. If the provided
billingAccount
(EPA Site ID) is invalid the processing will be stopped and system will generate the following error:E_InvalidBillingAccount: Provided Billing Account has invalid format
- 3.4. If the provided
billingAccount
is not registered the processing will be stopped and system will generate the following error:E_NoBillingAccount: Billing account doesn't exist
- 3.5. If the provided
billingAccount
is not active the processing will be stopped and system will generate the following error:E_BillingAccountNotActive: Billing Account is not active
- 3.6. If the User does not have permission to the site with provided billing account the system will stop the
processing and generates the following error:
E_BillingAccountPermissions: The user does not have Industry Permissions to the site with provided billing account
- 3.7. If
billingAccount
was found and thebillId
is either erroneous or was not provided and the monthYear is either erroneous or was not provided the system will generate JSON containing the following information:- billingAccount: provided billing account
- report: see details in the report table
- 3.8. If the billStatus is "Active" the processing will be stopped and system will generate the following error:
E_BillStatusActive: Bill Status is Active. Cannot be viewed by the industry
- 3.1. If Billing account of the facility (EPA Site ID) is not provided the schema validation exception will be
returned:
-
The service will generate JSON containing:
-
billingAccount
: EPA Site ID -
billId
: unique bill id -
monthYear
: Contains month number and year of the requested bill if provided. -
report: Contains service report. Following reports are possible:
- The service returning bill by
monthYear
. ValidmonthYear
is provided, bill id is not provided - The service returning bill by bill id. Valid bill id is provided, valid
monthYear
is provided - The service returning bill by
monthYear
. Invalid bill id is provided, valid monthYear is provided - The service returning bill by
monthYear
. provided bill id is not found, validmonthYear
is provided - The service returning bill by bill id. Valid bill id is provided, invalid
monthYear
is provided - The service returning bill by bill id. Valid bill id is provided, provided
monthYear
is out of date range billStatus
: Following values can be returned: "Active", "Unpaid", "InProgress", "ReadyForPayment", "Paid", "SentToCollections", "Credit", "ZeroBalance"totalAmount
: if thebillStatus
is Credit then a negative value will be returned. If thebillStatus
is ZeroBalance then 0 value will be returnedcurrentAmount
: The amount for manifests invoiced for the current billing periodpreviousAmount
: The total for all manifests not paid or sent to collections from billing periods before the current periodpreviousInterestAmount
: The total of interest fees occurred on the previous amounts for all manifests not paid or sent to collections from billing periods before the current periodpreviousPenaltyAmount
: for invoices that are being sent to collections, the penalty amount for that invoicepreviousLateFeeAmount
: Total of the flat fee, penalty, and interest charges for all manifests and invoices not paid or sent to collections from billing periods before the current perioddueDate
: The date the invoice is duepaidBy
: Contains the bill payee user id, for invoices that were marked as paid by the EPA, this element is not returnedpaymentType
: Contains bill status, Following values can be returned: "Credit", "Ach", for invoices that were marked as paid by the EPA, this element is not returnedcreatedDate
: The date the first manifest for this invoice was signed and placed on the invoiceupdatedDate
billItems
containing the following information:manifestTrackingNumber
amount
: Amount charged for each manifestsubmissionType
: "FullElectronic", "Hybrid", "DataImage5Copy", "Image"originType
: "Web", "Services", "Mail"certifiedDate
: Date the manifest was certified and placed on this invoicegeneratorSiteId
: The site ID of the generator on the manifest
- late fees (when applicable) containing the following information:
lateFeeBillId
: Bill ID which Late Fee is calculated forinterestAmount
: the total interest amount for thislateFeeBillId
penaltyAmount
: the total penalty amount for thislateFeeBillId
lateFeeAmount
: the total interest, penalty, and flat fee amounts for thislateFeeBillId
flatFeeAmount
: the total flat fee amount for thislateFeeBillId
status
: the status of the invoice; please note that invoices sent to collection will be marked as inactive
- revisions (when applicable) containing the following information:
amount
: Amount of adjustment on the invoiceamountType
:Current
,LateFee
adjustmentType
:Increase
,Decrease
,FullPayment
publicComments
:createdDate
- The service returning bill by
-
-
On success, the system returns JSON generated in section 4
-
If any system errors were encountered during processing, the system will return:
- error: containing error code, error message, error id, and
Bill History Service
The service returns billing summary information either by the provided billing account or by the combination of the billing account and date range. Following information will be returned about all bills for the provided billing account:
billingAccount
: EPA Site IDstartMonthYear
: Contains month number and year for the date range start, if provided in the request. If onlystartMonthYear
provided the service return bill history from the start until current mm/yyyy. If invalidstartMonthYear
is provided bill history from inception to theendMonthYear
is returned.endMonthYear
: Contains month number and year for the date range end. If onlyendMonthYear
provided the service return bill history from inception to theendMonthYear
. If invalidendMonthYear
is provided bill history fromstartMonthYear
to the current date is returned.billsInfo
: contains individual bills for the billing account. For each bill it contains following informationbillId
: unique bill idbillStatus
: Following values can be returned:Active
,Unpaid
,InProgress
,ReadyForPayment
,Paid
,SentToCollections
,Credit
,ZeroBalance
. Industry will not see bills where billStatus = ActivetotalAmount
: if thebillStatus
is Credit then negative value will be returned. If thebillStatus
isZeroBalance
then 0 value will be returnedpaidBy
: Contains the bill payee user idpaymentType
: Contains bill status, Following values can be returned:Credit
,Ach
,OutOfBand
dueDate
createdDate
updatedDate
Parameters
- Security Token
- The following service parameters will be passed as JSON compliant to the JSON schema defined
in bill-history-request.json
billingAccount
: Billing account of the facility (EPA Site ID). Required parameter. If date range parameters are not provided the service return bill history from inception to the current datestartMonthYear
: Contains month number and year for the date range start. Format 'mm/yyyy'. If onlystartMonthYear
provided the service return bill history from the start until current mm/yyyy. If invalidstartMonthYear
is provided bill history from inception to theendMonthYear
is returned.endMonthYear
: Contains month number and year for the date range end. Format 'mm/yyyy'. If onlyendMonthYear
provided the service return bill history from inception to theendMonthYear
. If invalidendMonthYear
is provided bill history fromstartMonthYear
to the current date is returned.
Examples
POST /rcrainfo/rest/api/v1/emanifest/manifest/get-bill-history HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
{
"billingAccount": "VATESTTSDF001",
"startMonthYear": "01/2021",
"endMonthYear": "02/2021"
}
See bill-history.json for the response schema.
Sequence of Steps
-
The system will process the request
- 3.1. If the provided billingAccount is invalid, the processing will be stopped, and the system will
generate the following error:
- E_InvalidBillingAccount: Provided Billing Account has an invalid format
- 3.2. If the User does not have permission to the site with the provided billing account, the system
will stop the processing and generates the following error:
- E_BillingAccountPermissions: The user does not have Industry Permissions to the site with provided billing account
- 3.3. If the provided billingAccount is not registered, the processing will be stopped, and the system
will generate the following error:
- E_NoBillingAccount: Billing account doesn't exist
- 3.4. If the provided billingAccount is not active, the processing will be stopped, and the system will
generate the following error:
- E_BillingAccountNotActive : Billing Account is not active
- 3.1. If the provided billingAccount is invalid, the processing will be stopped, and the system will
generate the following error:
-
If the provided Billing Account is valid, the service will generate bill history depending on date range parameters according to the following:
- 4.1. If date range parameters are not provided or invalid date range parameters are provided,
the service generates bill history from inception to the current date. If invalid dates are provided,
the service will specify the invalid dates in the generated JSON response as follows:
- invalid date, returning bill history since inception date (07/2018)
- invalid date, returning bill history to [current MM/current YYYY]
- 4.2. If a valid startMonthYear is provided and endMonthYear is not provided or valid startMonthYear provided and endMonthYear is invalid, the service generates bill history from the start until the current mm/yyyy. If an invalid endMonthYear is provided, the service will specify the invalid endMonthYear in the generated JSON response (identical to 4.1)
- 4.3. If an invalid startMonthYear is provided and valid endMonthYear is provided or startMonthYear is not provided and valid endMonthYear is provided, the service generates bill history from inception to the endMonthYear. If an invalid startMonthYear is provided, the service will specify the invalid startMonthYear in the generated JSON response (identical to 4.1).
- 4.1. If date range parameters are not provided or invalid date range parameters are provided,
the service generates bill history from inception to the current date. If invalid dates are provided,
the service will specify the invalid dates in the generated JSON response as follows:
-
The service will generate JSON containing:
- billingAccount: EPA site ID
- billId: unique bill id
- If invalid dates are provided, the service will specify the invalid dates
- billStatus: Following values can be returned: "Active", "Unpaid", "InProgress", "ReadyForPayment", "Paid", "SentToCollections", "Credit", "ZeroBalance". Industry will not see bills where billStatus = Active
- totalAmount: if the billStatus is Credit then a negative value will be returned. If the billStatus is ZeroBalance then 0 value will be returned
- paidBy: Contains the bill payee user id, for invoices that were marked as paid by the EPA, this element is not returned
- paymentType: Contains bill status, Following values can be returned: "Credit", "Ach", for invoices that were marked as paid by the EPA, this element is not returned.
- dueDate
- createdDate: The date the first manifest for this invoice was signed and placed on the invoice
- updatedDate
-
On success, the system returns JSON generated in section 4
-
If any system errors were encountered during processing, the system will return:
- error: containing error code, error message, error id, and error date
Bill Search Service
The service searches bill information either by the single parameter or by combination of several parameters. The service uses database paging for performance. If any optional parameters are invalid the service returns JSON with warnings. It can be used by OCFO users and Industry users.
Parameters
-
The following service parameters will be passed as JSON compliant to the JSON schema defined in bill-search-request.json
-
billingAccount
: optional parameter, billing account of the facility (EPA Site ID): -
billStatus
: optional parameter, one of the following values shall be provided:Unpaid
InProgress
ReadyForPayment
Paid
SentToCollections
Credit
ZeroBalance
-
startDate
: Required parameter, retrieves bills based on the value ofbill.updatedDate
. -
endDate
: Required parameter, retrieves bills based on the value ofbill.updatedDate
. -
amountChanged
: optional parameter, if provided value is true the service will check conditions for retrieving bills where totalAmount has been changed from the original calculated amount at the beginning of the month. -
pageNumber
: optional parameter, the system will return bills for the requested page. IfpageNumber
is not provided or invalid the system will return bills for the 1st page.
Examples
POST /rcrainfo/rest/api/v1/emanifest/manifest/search-bill HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
{
"billingAccount": "VATESTTSDF001",
"billStatus": "Unpaid",
"startDate": "2021-10-01T00:00:00.000-0400",
"endDate": "2021-12-01T00:00:00.000-0400",
"amountChanged": true,
"pageNumber": 3
}
Sequence of Steps
-
- If security token is for a state account and the user does not have billing admin permission,
the system stops the processing and generates the following error:
{ "error": "E_BillingAdminPermissions", "message": "The user does not have billing administration permission" }
- If security token is for a state account and the user does not have billing admin permission,
the system stops the processing and generates the following error:
-
The System will validate Security Token
-
3.1. If the Web Security Token is invalid, the system stops the processing and generates the following error:
- E_SecurityApiTokenInvalid: Invalid Security Token
-
3.2. If the Web Security Token expired, the system stops the processing and generates the following error:
- E_SecurityApiTokenExpired: Security Token is Expired
-
3.3. If Account was Inactivated after the token was issued, the system stops the processing and generates the following error:
- E_SecurityApiInvalidStatus: This API Id is no longer active
-
3.4. If security token is for a state account and the user does not have billing admin permission, the system stops the processing and generates the following error:
- E_BillingAdminPermissions: The user does not have billing administration permission
-
-
The system will perform User Authorization.
-
4.1. If the Industry User does not have industry permissions for any Site, the system will stop the processing and generates the following error:
- E_IndustryPermissions: The industry user does not have industry permissions for any Site
-
4.2. The System will check if the Security token is for the Industry account or if the Security token is for a state account with Billing Admin permission (OCFO/Compass).
-
4.2.1 If the Security token is for a state account with Billing Admin permission (OCFO/Compass) the system will return data for all billingAccounts meeting specified search criteria.
-
4.2.2 If the Security token is for an industry the system will return data only for billingAccounts that the account has access to and that meet specified search criteria.
-
-
-
The system will process the request
-
5.1. If provided billingAccount is invalid, not registered, not active, or not found, the service will do the following
- 5.1.1. The service will return an empty "bills" array.
- 5.1.2. If the provided billingAccount is invalid, the service will return the following
warning:
{ "message": "Provided billingAccount is invalid", "field": "billingAccount", "value": "[value of billingAccount] " }
- 5.1.3. If provided billingAccount is not active, the service will return the following warning:
{ "message": "Provided billingAccount is not active ", "field": "billingAccount", "value": "[value of billingAccount] " }
- 5.1.4. If provided billingAccount is not found, the service will return the following warning:
{ "message": "Provided billingAccount is not found ", "field": "billingAccount", "value": "[value of billingAccount] " }
- 5.1.5. If the service was invoked by the Industry user, the service will list all valid billing
accounts. The service will return following warning(s):
{ "message": " Valid billing account ", "field": "billingAccount", "value": "[value of billingAccount] " }
-
5.2. If startDate and endDate are provided, the system will check if startDate and endDate are valid, and will determine the time range for the bills to return.
- 5.2.1. The startDate is valid if startDate is later than emanifest start date and earlier than Current date and startDate is earlier than endDate.
- 5.2.2. The startDate is invalid if startDate is later than Current date or startDate is earlier than emanifest start date.
- 5.2.3. The endDate is valid if endDate is later than emanifest start date and earlier than Current date and endDate later than startDate.
- 5.2.4. The endDate is invalid if endDate is later than Current date or endDate is earlier than emanifest start date.
- 5.2.5. If the startDate is valid and endDate is invalid the service will return bills in the time range between startDate and Current date.
- 5.2.6. If the endDate is valid and startDate is invalid the service will return bills in the time range between emanifest start date and endDate.
- 5.2.7. If the endDate is invalid and startDate is invalid the service will return bills in the time range between emanifest start date and current Date.
-
5.3. If startDate is not provided, the system will stop the processing and generates the following error:
- E_SearchParameterRequiredStartDate: Missing required search parameter startDate
-
5.4. If endDate is not provided, the system will stop the processing and generates the following error:
- E_SearchParameterRequiredEndDate: Missing required search parameter endDate
-
5.5. If startDate and endDate are not provided, the system will stop the processing and generates the following error:
- E_SearchParameterRequiredStartDateEndDate: Missing required search parameters startDate and endDate
-
5.6. If provided startDate is later than provided endDate, the system will stop the processing and generates the following error:
- E_StartDateLaterThanEndDate: Provided StartDate is later than EndDate
-
5.7. If StartDate is earlier than emanifest start date, the system will return the following warning in the return JSON:
- E_ StartDateEarlierThanEmanifestStart: Provided StartDate is earlier than emanifest start
-
5.8. If EndDate is earlier than emanifest start date, the system will return the following warning in the return JSON:
- message "Provided EndDate is earlier than emanifest start date" - field: endDate - value: [value of endDate]
-
5.9. If EndDate is later than Current date, the system will return the following warning in the return JSON:
- message "Provided EndDate is later than Current date" - field: endDate - value: [value of endDate]
-
9.10. If StartDate is later than Current date system will return the following warning in the return JSON:
- message "Provided StartDate later than Current date - field: StartDate - value: [value of StartDate]
-
9.11. If the provided pageNumber is larger than totalNumberOfPages or less than one , the system will return the following warning in the return JSON
- "message": "Provided pageNumber must be equal or greater than one. pagenumber is set to 1" - field: pageNumber - value: [value of page number]
-
-
The service will generate JSON containing one or multiple Bills. If the provided value of amountChanged is true, Bill.totalAmountChanged is true and bill.updatedDate is in the time range specified by startDate and endDate, the service will include the bill in the returned JSON. The response will contain the following information:
totalNumberOfBills
: Total Number Of Bills for provided search criteriatotalNumberOfPages
: Total Number Of Pages for provided search criteriacurrentPageNumber
: Current Page Number for provided search criteriasearchedParameters
: valid parameters used in searchfield
: parameter field namevalue
: parameter value
warnings
: validation errors for optional parametersmessage
: validation messagefield
: parameter field namevalue
: parameter value
Each bill will contain the following information:
billingAccount
: EPA site IDbillId
: bill idbillStatus
: Following values can be returned: "Unpaid", "InProgress", "ReadyForPayment", "Paid", "SentToCollections", "Credit", "ZeroBalance"totalAmount
: if the billStatus is Credit then a negative value will be returned. If the billStatus is ZeroBalance then 0 value will be returnedcurrentAmount
: The amount for manifests invoiced for the current billing periodpreviousAmount
: The total for all manifests not paid or sent to collections for billing periods before the current periodpreviousInterestAmount
: The total of interest fees occurred on the previous amounts for all manifests not paid or sent to collections for billing periods before the current periodpreviousPenaltyAmount
: for invoices that are Unpaid after four months, the penalty amount for that invoicepreviousLateFeeAmount
: Total of the flat fee, penalty, and interest charges for all manifests and invoices not paid from billing periods before the current perioddueDate
The date the invoice is duepaidBy
: Contains the bill payee user id, for invoices that were mark as paid by the EPA, this element is not returnedpaymentType
: Contains payment type , Following values can be returned: "Credit", "Ach", for invoices that were mark as paid by the EPA, this element is not returnedcreatedDate
: The date the invoice was createdtotalAmountChanged
: Indicates if the totalAmount has been changed from the original calculated amount at the beginning of the month.updatedDate
: The date the invoice was last updatedlateFees
(when applicable) containing the following information:lateFeeBillId
: Bill Id which Late Fee is calculated forinterestAmount
: the total interest amount for this lateFeeBillIdpenaltyAmount
: the total penalty amount for this lateFeeBillIdlateFeeAmount
: the total interest, penalty, and flat fee amounts for this lateFeeBillIdflatFeeAmount
: the total flat fee amount for this lateFeeBillIdstatus
: the status of the invoice, please note that invoices sent to collection will be marked as inactive
revisions
: (when applicable) containing the following information:amount
: Amount of adjustment on the invoiceamountType
: "Current", "LateFee"adjustmentType
: "Increase", "Decrease", "FullPayment"publicComments
:createdDate
RecalculationInfo
: (when applicable) containing the following information:recalculationReason
: "OriginalSiteBill", "NewSiteBill", "SoftDelete"
-
On success, the system returns JSON generated in section 4
-
If any system errors were encountered during processing, the system will return:
- error: containing error code, error message, error id, and error date
Manifest Data Services
The manifest data services is category of auxiliary manifest service that can be used to retrieve data for constructing the manifest form and additional information.
Site IDs Service
Returns the list of all site IDs for the provided State Code and Site Type (Generator, Transporter, TSDF, Broker).
Parameters
- Security Token
- State Code
- Site Type. One of the following values:
Generator
Transporter
Tsdf
Broker
Example
The following HTTP request will return the list of all site IDs for the state of California and Transporter Site Type:
GET /rcrainfo/rest/api/v1/emanifest/site-ids/CA/Transporter HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Completed Response Example
["CAD009999999", "CAD009999995", "CAD009999998", "CAD009999997"]
Site Manifest Tracking Numbers Service
Returns the list of Manifest Tracking Numbers for all Manifests stored in the system for the provided site ID. The service won’t return Manifests which are in Draft status.
Parameters
- Security Token
- Site ID to pull manifest tracking numbers for
Example
The following example will return the list of all Manifest Tracking Numbers for the site with site ID VATESTGEN001
GET /rcrainfo/rest/api/v1/emanifest/manifest-tracking-numbers/VATESTGEN001 HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Completed Response Example
["111111111ELC", "222222222ELC", "333333333ELC", "444444444ELC"]
Correction Details Service
The service returns information about all manifest correction versions by manifest tracking number. The system will
create new manifest versions for both the industry corrections and for the Paper Processing Center (PPC) data
processing. PPC data processing will be performed on Image
manifests which were submitted by Industry via Web or
Services and on Image
manifests which were submitted by mail. Depending on the manifest status the service can return
the following information about the manifest:
- If the manifest status is before
Signed
then no manifest versions associated with the manifest will be returned - If the manifest status is
Signed
and neitherCorrected
norUnderCorrection
versions were created then the service will return information about theSigned
version of the manifest. - If the manifest status is
Corrected
then the service will return information aboutSigned
version and allCorrected
versions of the manifest. - If the manifest status is
UnderCorrection
then the service will return information about theSigned
version of the manifest, theUnderCorrection
version and allCorrected
versions of the manifest (if anyCorrected
versions were created).
Depending on the on manifest Paper Processing Center (PPC) status the service can return the following information about the manifest versions associated with the PPC processing:
- If ppc status is
Draft
orDataEntryInProgress
orPendingDataQc
orPendingDataQa
then no manifest versions associated with PPC processing will be returned If PPC status is eitherPendingDataEntry
orDataQaCompleted
then the service will return information about the manifest version(s) created for PPC processing.
Parameters
- Security Token
- Manifest Tracking Number
Example
GET /rcrainfo/rest/api/v1/emanifest/manifest/get-manifest-correction-details/123456789ELC HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Completed Response Example
{
"manifestTrackingNumber": "111111111ELC",
"emanifestVersions": [
{
"status": "UnderPpcDataEntry",
"versionNuber": 3,
"createdDate": "2018-19-25T17:53:54.944+0000",
"updatedDate": "2018-20-25T17:53:54.944+0000",
"updatedBy": "x"
},
{
"status": "UnderCorrection",
"epaSiteId": "OH000023465",
"createdDate": "2018-09-25T17:53:54.944+0000",
"updatedDate": "2018-10-25T17:53:54.944+0000",
"updatedBy": "c"
},
{
"status": "Corrected",
"versionNumber": 2,
"active": false,
"electronicSignature": {
"signer": {
"firstName": "b",
"lastName": "b",
"userId": "b"
},
"signatureDate": "2018-09-25T17:53:54.944+0000",
"humanReadableDocument": {
"name": "human-readable.html",
"size": 1231,
"mimeType": "TEXT_HTML"
}
},
"epaSiteId": "MD0000206060",
"createdDate": "2018-09-25T17:53:54.944+0000",
"updatedDate": "2018-09-25T17:53:54.944+0000",
"updatedBy": "b"
},
{
"status": "Signed",
"versionNumber": 1,
"active": false,
"electronicSignature": {
"signer": {
"firstName": "a",
"lastName": "a",
"userId": "a"
},
"signatureDate": "2018-09-25T17:53:54.944+0000",
"humanReadableDocument": {
"name": "human-readable.html",
"size": 1346671,
"mimeType": "TEXT_HTML"
}
},
"epaSiteId": "AK9690330742",
"createdDate": "2018-06-25T17:53:54.944+0000",
"updatedDate": "2018-08-25T17:53:54.944+0000",
"updatedBy": "a"
}
]
}
Manifest Correction Version Services
The Get Manifest Correction Version service returns the data associated with a specific Manifest correction version based on the provided input parameters. The service also will return the manifest version(s) created via the PPC processing. The following fields in the returned JSON specify correction details:
status
: The following values can be returned:Signed
: version signed by the TSDFCorrected
: version was corrected and electronically signed by either a TSDF or Generator or Transporter userUnderCorrection
: version is under correction and has not been electronically signed
ppcStatus
: The following values can be returned:PendingDataEntry
: this status will be returned for the Image manifests submitted by industry or mail manifests which have not been processed by the PPCDataQaCompleted
: this status will be returned for the Image manifests which have been processed by the PPC
correctionInfo
: contains the following correction information:- versionNumber: Contains Manifest version number. Manifest versions will be created only for the manifest which are
in the
Corrected
orSigned
statuses. If the version is in theUnderCorrection
status the version number is not assigned. electronicSignature
: containingsigner
: container user information of the signerfirstName
lastName
userId
signatureDate
humanReadableDocument
: containingname
: "human-readable.html"size
mimeType
: "TEXT_HTML"
active
: indicates if the Manifest version is active or outdated for the industry.ppcActive
: Indicates if the Manifest version is active or outdated for the PPC.epaSiteId
: EPA Site ID associated with the user who signed the version.
- versionNumber: Contains Manifest version number. Manifest versions will be created only for the manifest which are
in the
The service optionally returns Manifest attachments. If the Manifest contains an attachment(s) and the attachment option is specified, the following documents will be returned:PDF Document containing printed, scanned and manually signed Manifest form (Printed Document). Note that this document is not available for the “FullElectronic” or “Hybrid” submission types.
HTML Document(s) containing human readable representation of the Manifest data signed electronically - Copy Of Record document (COR). Note that the system generates this Document(s) at the time when the users (Generator, Transporters, TSDF) are electronically signing the manifest. In order to identify what party the COR document was generated by the following naming convention is used:
- COR document generated when Generator signed the manifest : <cor-g.html>
- COR document generated when Generator signed the manifest for rejection (If shipment was returned back to the original Generator): <cor-g-reject.html>
- COR document generated when Transporter(s) signed the manifest: <cor-t-{transporter order}.html>
- COR document generated when TSDF signed the manifest: <cor-tsdf.html>
PDF Document containing form 8700-22 representation of the Manifest Data. The following document metadata JSON elements will be presented in Manifest JSON if the Manifest contains attachments:
-
Printed Document metadat example
{ "printedDocument": { "name": "user provided document name.pdf", "size": 500, "mimeType": "APPLICATION_PDF" } }
-
COR Document (Human Readable Document) signed by TSDF metadata example:
{ "humanReadableDocument": { "name": "cor-tsdf.html", "size": 1231, "mimeType": "TEXT_HTML" } }
-
Form 2050 Document metadata example:
{ "formDocument": { "name": "form-8700-22.pdf", "size": 1231, "mimeType": "APPLICATION_PDF" } }
All documents will zipped and zip file will be returned as a multipart binary content. See sample client implementation for details
Parameters
- Security Token
- Manifest Tracking Number
- status
- ppcStatus
- versionNumber
Example
POST /rcrainfo/rest/api/v1/emanifest/manifest/correction-version/attachments HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
{
"manifestTrackingNumber": "111111111ELC",
"status": "UnderCorrection",
"ppcStatus": "DataQaCompleted",
"versionNumber": 2,
}
Request JSON Schema
emanifest-correction-version.json
e-Manifest Services for states
The way that industry and regulators use the e-Manifest is, in large part, the same. States authenticate in the same method described in the Authentication section and use the same security tokens to access the services. However, there are a few categories of services that are specific to states.
All the services described in this section can be tested in the Open API (swagger) page for which you can find the at the following URL: https://rcrainfopreprod.epa.gov/rcrainfo/secured/swagger.
Compliance Monitoring & Enforcement (CM&E) Services
This category of endpoints contains services that are used by states to monitor and enforce compliance.
Manifest Services
Regulators use the Manifest Services to search and view manifests. They cannot create, update, delete, or sign manifests
through the services, like industry. All endpoints in this start with /api/v1/state/emanifest
as opposed to
/api/v1/emanifest
for industry.
Handler Services
This category contains one endpoint that is used to get the details of a hazardous waste handler. It takes 2 parameters, supplied in the URL path:
- The handler ID: the unique EPA ID of the handler
- details requested: a boolean, cast as a string (e.g.,
true
orfalse
), that indicates whether to return greater amounts of the handler's details
User Services
Manifest Attachments
The e-Manifest system allows users to upload/download manifests and continuation sheets in PDF format, for both electronic and paper manifests. This is used for various purposes, including:
- Uploading scanned copies of paper manifests prior to submitting (certifying) them
- Downloading the scanned copy of paper manifests for viewing or printing
- Downloading electronic manifests in PDF format that can be used for DOT shipping paper requirements
- Downloading electronic manifests in PDF format that can be signed by the generator for hybrid manifests
Overview
Manifest attachments are passed in the body of HTTP request/responses as part of multipart binary content. For example, when invoking the Get Manifest Attachment service, the body of the response will contain two parts, passed as a multipart/mixed MIME type:
- The JSON encoded manifest data
- A .zip file containing the manifest attachment in PDF format
The two parts of the multipart entity are separated by a boundary string, which is specified in the Content-Type
header, like so:
Content-Type: multipart/mixed; boundary=Bounday_example_12345
When uploading to (e.g., the Save Manifest service) the .zip file must contain only 1 one PDF file
Multipart/mixed MIME Type
For more information on the multipart/mixed MIME type, see RFC 2046 (particularly section 5.1).
As a simplified example, An HTTP response with a manifest attachment response will look like the following:
HTTP/1.1 200 OK
Content-Type: multipart/mixed; boundary=Boundary_example_12345
--Boundary_example_12345
Content-type: application/json
{
"manifestTrackingNumber": "123456789ELC",
"createdDate": "2018-01-01T00:00:00Z",
"...": "..."
}
--Boundary_example_12345
Content-Type: application/octet-stream
Content-Disposition: form-data; filename="f4e5db60b4589127020486266855753.tmp"; modification-date="Thu, 24 Aug 2023 00:32:06 GMT"; size=1029434; name="attachments.zip"
<binary data...>
--Boundary_example_12345--
Note the hyphens (--
) at the beginning of the boundary string are required (and end on the final boundary).
Example Implementations
The USEPA/e-manifest repository contains a couple working implementations for parsing and using the contents of Manifest Attachments transmitted as part multipart/mixed responses:
- The emanifest JavaScript package, an API client library that abstracts the RCRAInfo services. A example of manually parsing the multipart/mixed response can be found in emanifest-js/src/parse.ts
- The sample Java client.
- The emanifest Python package, an API client library. It uses the request tool belt package to parse the multipart/mixed response.
Attachment Validation
The e-Manifest system does not accept attachments for electronic manifests (they are not required for the electronic
manifesting process). The following validation rules apply to manifest attachments uploaded for paper manifests
submitted as DataImage5Copy
or Image
using the Save or update Manifest services:
-
For the
DataImage5Copy
andImage
submission type an attachment contains the scanned copy of the printed manifest (form 8700-22) and accompanying continuation sheets (form 8700-22a) signed by the Generator, Transporter(s), Designated Facility, and Alternate Designated Facility (if applicable). -
The scanned document must be zipped and submitted as a part of the Save and Update Manifest service. The zipped manifest attachment must be passed as a multipart binary content. The attachment may be submitted at the ReadyForSignature status. If the manifest contains an attachment, then attachment metadata elements shall be provided
-
If the document is already stored as a part of the manifest and document is not provided, the service generates no errors or warnings.
-
If the document is not stored and the status is ReadyForSignature, the document is mandatory.
-
If an attachment is provided, the service checks if the attachment is a zip file (The services only accept one PDF file within the zip file for the
printedDocument
element). If a non-zipped attachment is provided, the service generates the following error:{ "message": "Attached document is not compressed(zipped). Service accepts compressed (zip) attachments only", "field": "Emanfiest.printedDocument.name", "value": "name of the attached document" }
-
If a zipped attachment is provided, the service will unzip the document and perform the following steps:
- 6.1. If the zip file contains more than one document the service generates the following error:
{ "message": "Zip contains more than one document", "field": "Emanifest.printedDocument" }
- 6.2. If the attachment contained in the zip file is not a PDF, the service generates the following error:
{ "message": "Attachment Document is not a PDF", "field": "Emanifest.printedDocument" }
-
If an attachment is not provided and Emanifest.printedDocument metadata is provided, the service generates a warning
{ "message": "no attachment provided", "field": "Emanifest.printedDocument.name" }
-
If the following attachment metadata is not provided:
{ "printedDocument": { "name": "name provided by the user.pdf", "size": 100, "mimeType": "APPLICATION_PDF" } }
where size the number of bytes, the service generates the following error:
{ "message": "Attachment Document metadata is not provided", "field": "Emanifest.printedDocument" }
-
If one or more metadata fields is not provided, the service generates the following warning:
{ "message": "Attachment Document metadata is not provided", "field": "Emanifest.printedDocument" }
-
If metadata is provided, but some of the fields values do not match the zipped content, the service generates the following warning(s):
{ "message": "Attachment Document name/size does not match the actual file name/size", "field": "Emanifest.printedDocument", "value": "Emanifest.printedDocument.name/size value" }
-
If an incorrect MIME type is provided, the service generates the following error:
{ "message": "Instance value <provided mime type> not found in enum (possible values: [APPLICATION_PDF, TEXT_HTML])", "field": "Emanifest.printedDocument.mimeType", "value": "Emanifest.printedDocument.mimeType value" }
Manifest Field Validations
The following validations are performed on the manifest fields:
Generator information validation for the Image submission type manifests
The manifest fee will be determined based on the Generator signature date (if provided).
-
Generator information and Generator signature date can be provided for Image submission type manifests for the save and update services. See modification details in sections Facility Information Validation for
Image
submission type, Generator site ID and Site Information Validation and Paper Signature Info Validation. If Generator information and Generator printed signature date is provided and data is valid, the following applies-
1.1. The save and update services will store this data as a part of the manifest
-
1.2. The services will set
Emanifest.provideImageGeneratorInfo = true
-
1.3. The manifest fee will be determined based on the Generator printed signature date upon electronic signature from the receiving facility
-
-
If Generator information and Generator printed signature date is not provided or some of the provided data is invalid, the following applies
- 2.1. The save and update services will generate the following warning:
{ "message": "Not all required Generator site and signature information is provided so system cannot determine which price to charge for this manifest. To ensure that this manifest is billed accurately, please update the manifest with all required generator site and signature information.", "field": "Emanifest.generator" }
-
2.2. The save and update services will also generate warning(s)
-
2.3. The services will not store Generator information as a part of the manifest data
-
2.4. The services will set
Emanifest.provideImageGeneratorInfo = false
-
2.5. The manifest fee will be determined based on the receiving facility electronic signature date
Facility Information Validation for "Image" submission type
-
For the Image submission type, one of the following facility EPA site IDs must be provided: Designated Facility EPA site ID, Generator EPA site ID, or Alternate Designated Facility site ID
-
The following Facility EPA site IDs shall be provided for the following scenarios:
- Original Manifest, no Full Rejection: Designated Facility EPA site ID shall be provided.
- Original Manifest, Full Rejection to Alternate Designated Facility: Alternate Designated Facility EPA site ID shall be provided.
- Original Manifest, Full Rejection to the Generator: Designated Facility EPA site ID shall be provided.
- New Manifest shipping waste back to original Generator (New Manifest is the manifest created as a "result" of the Original manifest rejection or residue): Generator Facility EPA site ID shall be provided. This EPA site ID shall contain the Original Designated Facility site ID.
- New Manifest shipping rejected waste to another Designated Facility: Designated Facility EPA site ID shall be provided.
-
If one of the following IDs:
Emanifest.designatedFacility.epaSiteID
andEmanifest.generator.epaSiteId
andEmanifest.rejectionInfo.alternateDesignatedFacility.siteId
is not provided then the service will return an authorization error. -
If the provided EPA SiteIDis not registered, then the service will return an authorization error.
-
If
Emanifest.designatedFacility.epaSiteId
orEmanifest.generator.epaSiteId
orEmanifest.rejectionInfo.alternateDesignatedFacility.siteId
is provided, the following applies-
5.1. If any of the following Site information is provided then the service generates the following warning:
-
Site Name
-
Site Address
-
Mailing Address
{ "message": "Registered site was found. Provided site information will be ignored and replaced with registered information", "field": "Emanifest.designatedFacility.name /siteAddress/mailingAddress", "value": "name/siteAddress/mailingAddress" }
-
5.2. Validation of the Contact information is identical to #2 in section
-
5.3. Designated Facility (TSDF)/Generator site ID and Site Information Validation
-
5.4. If
Emanifest.wastes
are provided then the service generates the following warning:
{ "message": "Provided Value will be Ignored.", "field": "Emanifest.wastes" }
- 5.5. If
Emanifest.residue == true
then the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.residue = false will be assigned", "field": "Emanifest.residue", "value": "residue value" }
- 5.6. If
Emanifest.import == true
then the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.import = false will be assigned", "field": "Emanifest.import", "value": "import value" }
-
5.7. The service stores following information as a part of the manifest data:
-
Emanifest.residue = false
-
Emanifest.import = false
-
-
If
Emanifest.designatedFacility.epaSiteId
orEmanifest.generator.epaSiteId
is provided then the following applies- 6.1. If
Emanifest.rejection == true
, the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.rejection = false will be assigned", "field": "Emanifest.rejection", "value": " rejection value" }
- 6.2. If any of the
Emanifest.rejectionInfo
fields are provided, the service generates the following warning:
{ "message": "Provided Value will be Ignored.", "field": "Emanifest.rejectionInfo.{field}", "value": "field value" }
- 6.1. If
-
If
Emanifest.designatedFacility.epaSiteId
orEmanifest.rejectionInfo.alternateDesignatedFacility.siteId
is provided, the following applies- 7.1. If
Emanifest.containsPreviousRejectOrResidue == true
, the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.containsPreviousRejectOrResidue = false will be assigned", "field": "Emanifest.containsPreviousRejectOrResidue", "value": "containsPreviousRejectOrResidue value" }
- 7.1. If
-
If
Emanifest.rejectionInfo.alternateDesignatedFacility.siteId
is provided, the following applies- 8.1. If
Emanifest.rejection == false
, the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.rejection = true will be assigned", "field": "Emanifest.rejection", "value": "rejection value" }
- 8.2. If
Emanifest.rejectionInfo.transporterOnSite == false
, the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.rejectionInfo.transporterOnSite = true will be assigned", "field": "Emanifest.rejectionInfo.transporterOnSite", "value": "rejectionInfo.transporterOnSite value" }
- 8.3. If
Emanifest.rejectionInfo.rejectionType == "PartiaReject"
, the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.rejectionInfo.rejectionType = 'FullReject' will be assigned", "field": "Emanifest.rejectionInfo.rejectionType", "value": "rejectionInfo.rejectionType value" }
- 8.4. If
Emanifest.rejectionInfo.alternateDesignatedFacilityType == "Generator"
the service generates the following warning:
{ "message": "Provided Value will be Ignored. Emanifest.rejectionInfo.alternateDesignatedFacilityType = 'Tsdf' will be assigned", "field": "Emanifest.rejectionInfo.alternateDesignatedFacilityType", "value": "rejectionInfo.alternateDesignatedFacilityType value" }
- 8.5. If rejectionInfo.newManifestTrackingNumbers are provided, the service generates the following warning:
{ "message": "Provided Value will be Ignored. New Manifest(s) are not created if Transporter is On Site", "field": "Emanifest.rejectionInfo.newManifestTrackingNumbers", "value": "rejectionInfo.newManifestTrackingNumbers value" }
-
8.6. The service stores following information as a part of the manifest data:
Emanifest.rejection = true
Emanifest.rejectionInfo.transporterOnSite = true
Emanifest.rejectionInfo.rejectionType = "FullReject"
Emanifest.rejectionInfo.alternateDesignatedFacilityType = "Tsdf"
- 8.1. If
Transporter Information Validation
-
If
submissionType
isFullElectronic
orHybrid
, then the Transporter is valid if the Transporter is registered in RCRAInfo and the Transporter has at least one User with the e-Manifest Certifier Role and this user has a Received ESA.- 1.1. If the Transporter site ID is not provided, the service generates schema validation error.
- 1.2. If the Transporter site ID has an invalid format, the service generates schema validation error.
- 1.3. If the Transporter site ID is not registered, the service generates the following error:
{ "message": "For FullElectronic submission type registered Transporter Site Id must be provided", "field": "Emanifest.transporter.epaSiteId", "value": "SiteIDvalue" }
- 1.4. If the Transporter site ID is registered and there are no users with the e-Manifest Certifier role for the
provided Transporter, the service generates the following error:
{ "message": "Site doesn't have any users with Certifier role or with ESA status 'Received", "field": "Emanifest.transporter.epaSiteId", "value": "SiteIDvalue" }
- 1.5. If the Transporter site ID is registered and there are no users with a received ESA, the service generates
the following error:
{ "message": "Site doesn't have any users with Certifier role or with ESA status 'Received", "field": "Emanifest.transporter.epaSiteId", "value": "SiteIDvalue" }
-
If
submissionType
isDataImage5Copy
, then registered and non-registered Transporters are valid.-
2.1. If the Transporter is registered in RCRAInfo as a Transporter, then only the
epaSiteId
must be provided. All the site information will be obtained from RCRAInfo. If other site information is provided it will be ignored with warnings. -
2.2. If the Transporter is not registered in RCRAInfo, then the following site information must be provided:
- Site Address
- Site Name
- Contact phone
-
2.3. If site ID AND Site Information are not provided, the system generates errors.
{ "message": "Value is not provided", "field": "Emanifest.transporter.epaSiteId" }
{ "message": "Value is not provided", "field": "Emanifest.transporter.siteAddress" }
{ "message": "Mandatory field is not provided", "field": "Emanifest.transporter.name" }
{ "message": "Value is not provided", "field": "Emanifest.transporter.contact.phone.number" }
-
2.4. If site ID is provided AND Site Information is not provided, the system performs the following steps:
- Validate site ID format.
- If site ID is not valid, the service generates the following error:
{ "message": "Provided Value is not Valid. Does not match format of: Two Letter Activity Location Code + Up to 10 alphanumeric characters", "field": "Emanifest.transporter.epaSiteId" }
- If the site ID is valid, the system will search in RCRAInfo by site ID.
- If the site is found, the system obtains Site Information from RCRAInfo and stores it into the Manifest.
- If the site is not found, the service generates the following error:
{ "message": "Site with the provided EPA Site ID is not registered", "field": "Emanifest.transporter.epaSiteId" }
-
2.5. If the site ID is provided AND Site Information is provided, the site information will be ignored with warnings, and the system will perform the following steps:
-
Validate provided site ID.
-
If site ID is not valid, the service generates an error:
{ "message": "Provided value is not valid. Does not match format of: Two Letter Activity Location Code + Up to 10 alphanumeric characters", "field": "Emanifest.transporter.epaSiteId", "value": "SiteIDvalue" }
-
If site ID is valid, check if the site is registered.
-
If the site is not registered, the service generates a warning:
{ "message": "Site with provided EPA Site ID is not registered", "field": "Emanifest.transporter.epaSiteId", "value": "SiteIDvalue" }
-
-
2.6. If site ID is not provided AND Site Information is provided, the system will perform the following steps:
-
Validate the provided Site Information.
-
Validate the Site Name.
-
If the Site Name is not valid, the service generates the following error:
{ "message": "Provided Value is not Valid", "field": "Emanifest.transporter.name", "value": "site name value" }
-
Validate the mandatory site address fields:
address1
(50 Character maximum)city
(25 Character maximum)state.code
(2 Character State Abbreviation)zip
(14 Character maximum)
-
If any of the mandatory location address fields are not provided or invalid, the service generates the following error:
{ "message": "Value is not Provided/Provided Value is not Valid", "field": "Emanifest.transporter.siteAddress.address1/city/state/zip", "value": "address1/city/state/zip value" }
-
-
2.7. If
Emanifest.submissionType
isHybrid
orFullElectronic
andEmanifest.status > Scheduled
and provided transporter information is different from currently stored, the service generates the following warning:{ "message": "Provided Transporter information will be ignored. Transporter Information cannot be updated if the manifest status is InTransit or thereafter", "field": "Emanifest.transporter.epaSiteId" }
-
Designated Facility (TSDF)/Generator Site Information Validation
-
If
submissionType
isFullElectronic
andstatus >= Scheduled
then the following applies- 1.1. If
Emanifest.generator.epaSiteId
is not provided then the service generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.generator.epaSiteId" }
- 1.2. If
Emanifest.generator.epaSiteId
has an incorrect format then the service generates the following error:
{ "message": "Invalid Field Format", "field": "Emanifest. generator.epaSiteId", "value": " epa siteIDvalue" }
- 1.3. If
Emanifest.generator.epaSiteId
is not registered in RCRAInfo then the service generates the following error:
{ "message": "Provided Generator FacilityIDis not registered in RCRAInfo", "field": "Emanifest. generator.epaSiteId", "value": " epa siteIDvalue" }
- 1.1. If
-
If
submissionType
isFullElectronic
orHybrid
andstatus >= Scheduled
, orsubmissionType
isDataImage5Copy
then the following applies- 2.1. If
Emanifest.designatedFacility.epaSiteId
is not provided then the service generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.designatedFacility.epaSiteId" }
- 2.2. If
Emanifest.designatedFacility.epaSiteId
has an incorrect format then service generates the following error:
{ "message": "Invalid Field Format", "field": "Emanifest.designatedFacility.epaSiteId", "value": "epa siteID value" }
- 2.3. If
Emanifest.designatedFacility.epaSiteId
is not registered in RCRAInfo then service generates the following error:
{ "message": "Provided Designated FacilityIDis not registered in RCRAInfo", "field": "Emanifest.designatedFacility.epaSiteId", "value": "epa siteID value" }
- 2.4. If the Site Contact Phone number is not provided and registered in RCRAInfo Site does not contain the Site Contact Phone Number, the system generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.designatedFacility.contact.phone.number" }
-
2.5. If the Site Contact Phone number is provided, the system will check the format.
- If the provided phone number has a valid format the system will store site contact phone number into e-Manifest database
- If the provided phone number has an incorrect format the system generates the following warning:
{ "message": "String \"{provided phone value}\" is too long (length: { provided phone value length}, maximum allowed: 12)", "field": "Emanifest.designatedFacility.contact.phone.number", "value": "number value" }
-
2.6. If the Site Contact Phone Extension is provided, the system will check the format.
-
2.6.1 If provided phone extension has a valid format, the system will store the site contact phone extension into e-Manifest database
-
2.6.2 If the provided phone has an incorrect format, the system generates the following warning:
{ "message": "String \"{provided phone extension value}\" is too long (length: {provided phone value length}, maximum allowed: 6 )", "field": "Emanifest.designatedFacility.contact.phone.extension", "value": "extension value" }
-
-
2.7. If any of the following TSDF Site Information entities were provided:
- Site Name
- Site Address
- Mailing Address
The system generates the following warning:
{ "message": "Registered site was found. Provided site information will be ignored and replaced with registered information", "field": "Emanifest.designatedFacility.name/siteAddress", "value": "name/siteAddress" }
-
2.8. If the user is authorized to use the e-Manifest Save service for the provided Generator SiteID (It means that TSDF acts as Generator), then the provided SiteID was already validated during authorization and the system will perform following steps:
-
2.9. If the Site Contact Phone number is not provided in the JSON and site the is registered in RCRAInfo, the system checks if the site has a Contact Phone value registered for the site. If the Contact Phone is not registered in the system for that site, the system generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.designatedFacility.contact.phone.number" }
-
2.10. If the Site Contact Phone number is provided and registered in RCRAinfo the system checks that the phone number is in the correct format.
-
2.10.1. If the provided phone number has a valid format, the system will store site contact phone number into the e-Manifest database
-
2.10.2. If provided phone number has an incorrect format, the system will store registered in RCRAInfo Contact Phone number into e-Manifest database and generate the following warning:
{ "message": "String \"{provided phone value}\" is too long (length: { provided phone value length}, maximum allowed: 12)", "field": "Emanifest.designatedFacility.contact.phone.number", "value": "number value" }
-
-
2.11. If the Site Contact Phone number is provided and registered in RCRAinfo site does not contain Contact Phone.
- If the provided phone number has valid format, the system will store site contact phone number into e-Manifest database
- If provided phone number has incorrect format, the system generates the following error:
{ "message": "String \"{provided phone value}\" is too long (length: { provided phone value length}, maximum allowed: 12)", "field": "Emanifest.designatedFacility.contact.phone.number", "value": "number value" }
-
2.12. Validate emergency phone
- If emergency phone number is not provided, the system generates the following error:
{ "message": "Mandatory Field is not provided", "field": "Emanifest.designatedFacility.emergencyPhone.number" }
- If emergency phone number is provided and has an invalid format, the system generates the following error:
{ "message": "String \"{provided phone value}\" is too long (length: { provided phone value length}, maximum allowed: 12)", "field": "Emanifest.designatedFacility.emergencyPhone.number ", "value": "phone number value" }
- If emergency phone extension is provided and has an invalid format, the system generates the following warning:
{ "message": "String \"{provided phone value}\" is too long (length: { provided phone value length}, maximum allowed: 6)", "field": "Emanifest.generator.emergencyPhone.extension ", "value": "extension value" }
- 2.13. If Site Name, Site Location, Site Mailing Address are provided, the system generates the following warning:
{ "message": "Provided Values will be Ignored. RCRAInfo values will be used", "field": "Emanifest.generator.name/mailingAddress/siteAddress ", "value": "name/mailingAddress/siteAddress value" }
-
2.14. If the contact email was provided, the system will check the format
- If provided contact email has a valid format the system will store site contact email into e-Manifest database
- If the provided contact email has an incorrect format the system generates the following warning:
{ "message": "Invalid Field format. Valid email format is expected.", "field": "Emanifest.designatedFacility.contact.email", "value": "email value" }
- 2.1. If
New Manifest Information Validation
-
If the New Manifest is created for shipping the waste to another TSDF or back to the Generator
- If
Emanifest.status >= "ReadyForSignature"
andEmanifest.containsPreviousRejectOrResidue
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.containsPreviousRejectOrResidue" }
- If
Emanifest.containsPreviousRejectOrResidue == true
andEmanifest.additionalInfo.newManifestDestination
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.additionalInfo.newManifestDestination" }
- If
Emanifest.containsPreviousRejectOrResidue == true
andEmanifest.additionalInfo.originalManifestTrackingNumbers
are not valid the service generates the following warning:{ "message": "Invalid value provided. Provided Field will be ignored.", "field": "Emanifest.additionalInfo.originalManifestTrackingNumbers", "value": "provided value" }
- If
Emanifest.additionalInfo.newManifestDestination == "OriginalGenerator"
andEmanifest.rejection == true
the service generates the following errors:{ "message": "New Manifest cannot be rejected if shipped back to the original Generator", "field": "Emanifest.additionalInfo.newManifestDestination", "value": "newManifestDestination value" }
{ "message": "New Manifest cannot be rejected if shipped back to the original Generator", "field": "Emanifest.rejection", "value": "rejection value" }
- If
Generator Site Information Validation
-
If
submissionType
isFullElectronic
then the Generator is valid if the Generator SiteIDis registered in RCRAInfo and the Generator has at least one User with the e-Manifest Certifier Role and this user has a Received ESA. -
If
submissionType
isFullElectronic
the following applies- 2.1. If the Generator SiteIDis not provided, the service generates the following error:
{ "message": "Mandatory Field is not Provided. For FullElectronic submission type registered Generator SiteID must be provided", "field": "Emanifest.designatedFacility.epaSiteId" }
- 2.2. If the Generator SiteID has an invalid format the service generates the following error:
{ "message": "Invalid Field Format. For FullElectronic submission type registered Generator SiteID must be provided", "field": "Emanifest.generator.epaSiteId", "value": "SiteIDvalue" }
- 2.3. If the Generator SiteIDis not registered in RCRAInfo the service generates the following error:
{ "message": "Provided Generator FacilityIDis not registered in RCRAInfo", "field": "Emanifest.generator.epaSiteId", "value": "SiteIDvalue" }
- 2.4. If the Generator SiteIDis registered in RCRAInfo and there are no users with the e-Manifest Certifier role for the provided Generator the service generates the following error:
{ "message": "Site doesn't have any users with Certifier role or with ESA status Received", "field": "Emanifest.designatedFacility.epaSiteId", "value": "SiteIDvalue" }
- 2.5. If the Generator with the provided SiteIDis registered and there are no users with a received ESA, the service generates the following error:
{ "message": "Site doesn't have any users with Certifier role or with ESA status Received", "field": "Emanifest.designatedFacility.epaSiteId", "value": "SiteIDvalue" }
-
If
submissionType
isDataImage5Copy
orHybrid
, then registered and non-registered Generators are valid and the following cases are possible for the Generator SiteID and Generator Information:-
3.1. If the Generator is registered in RCRAInfo and service requester does not intend to provide different (than registered) Site Information, then only the epaSiteId shall be provided. All site information will be obtained from RCRAInfo.
-
3.2. If the Generator is registered in RCRAInfo and service requester intends to provide different (than registered) Site Information, then the following site information entities must be provided:
- Site ID
- Site Name
- Site Address (all fields)
- Mailing Address (all fields)
- Contact Phone
- Provided Site Information will be validated and if valid will be stored in e-Manifest.
-
3.3. If Generator is not registered in RCRAInfo, then following site information must be provided:
- Site Name
- Site Address (all fields)
- Mailing Address (all fields)
- Contact phone
Requester also can provide SiteID which is an optional field for this case. If site ID is provided, the system will check if there is a registered Generator for the provided site ID
-
3.4. For all above cases Emergency Phone Number must be provided
-
3.5. If the manifest status is InTransit or thereafter then Generator information cannot be updated.
-
3.6. If different from currently stored Generator information is provided, the service generates the following warning:
{ "message": "Provided Generator information will be ignored. Generator Information cannot be updated if the manifest status is InTransit or thereafter", "field": "Emanifest.generator" }
- 3.7. If the site ID is not provided AND any of the mandatory Site information entities are not provided, the service generates the following error(s):
{ "message": "Mandatory Field is not provided", "field": "Emanifest.generator.epaSiteId" }
{ "message": "Mandatory Field is not provided", "field": "Emanifest.generator.siteAddress" }
{ "message": "Mandatory Field is not provided", "field": "Emanifest.generator.mailingAddress" }
-
3.8. If the site ID is provided AND site address information is not provided, the system performs the following steps:
- If site ID is not valid the service generates the following error:
{ "message": "Provided Value is not Valid. Does not match format of: Two Letter Activity Location Code + Up to 10 alphanumeric characters", "field": "Emanifest.generator.epaSiteId ", "value": "EPA siteIDvalue" }
- If site ID is valid and found in RCRAInfo, the system will obtain the Site information from RCRAInfo and store it
into the Manifest. System sets modified= false,
registered = true
- If the site ID is not found, the service generates the following error:
{ "message": "Provided Value is not Found", "field": "Emanifest.generator.epaSiteId", "value": "SiteIDvalue" }
-
3.9. If the site ID is provided and the Site Information entities are provided, the system performs the following steps:
- If the site name is not provided, the service generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.generator.name" }
- If the site name is not valid (exceeds maximum length), the service generates the following error:
{ "message": "Provided Value is not Valid. Exceeded maximum length of 80", "field": "Emanifest.generator.name", "value": "name value" }
-
Validate the mandatory location address fields:
- address1 (50 Character maximum)
- city (25 Character maximum)
- state.code (2 Character State abbreviation)
- zip (14 Character maximum)
-
If any of the mandatory location address fields are not provided or invalid, the service generates the following error:
{ "message": "Value is not Provided/Provided Value is not Valid", "field": "Emanifest.generator.siteAddress.address1/city/state/zip", "value": "address1/city/state/zip value" }
- Validate the mailing address fields. If country is not provided, the service generates the following warning:
{ "message": "Field not Provided. Other mailing address fields will be validated assuming this site is located in the US", "field": "Emanifest.generator.mailingAddress.country" }
-
If the provided
country == US
then Following address fields must be provided: -
address1 (50 Character maximum)
-
city (25 Character Maximum)
-
state.code (2 Character State Abbreviation)
-
zip (14 Character Maximum)
If any of the mandatory mailing address fields are not provided or invalid, the service generates the following error:
{ "message": "Value is not Provided/Provided Value is not Valid", "field": "Emanifest.generator.mailingAddress.address1/city/state/zip", "value": "address1/city/state/zip provided value" }
-
If provided
country == Canada
or Mexico then following applies address fields must be provided:- address1 (50 Character maximum)
- city (25 Character Maximum)
- zip (50 Character Maximum)
If any of the mandatory mailing address fields are not provided or invalid, the service generates the following error:
{ "message": "Value is not Provided/Provided Value is not Valid", "field": "Emanifest.generator.mailingAddress.address1/city/zip", "value": "address1/city/zip provided value" }
- If provided state.code is not valid, the service generates following warning:
{ "message": "Provided Value is not Valid", "field": "Emanifest.generator.mailingAddress.state.code", "value": "address1/city/zip provided value" }
-
If provided country != "United States", "Canada" or "Mexico" then following fields must be provided:
- address1 (50 Character maximum)
- city (25 Character Maximum)
- zip (50 Character Maximum) If any of the mandatory mailing address fields are not provided or invalid, the service generates the following error:
{ "message": "Value is not Provided/Provided Value is not Valid", "field": "Emanifest.generator.mailingAddress.address1/city/zip", "value": "address1/city/zip provided value" }
3.10. Validate provided site ID
- If site ID is not valid, the service generates the following warning:
{ "message": "Provided value is not valid. Two Letter Activity Location Code + Up to 10 alphanumeric characters", "field": "Emanifest.generator.epaSiteId", "value": "SiteIDvalue" }
-
If the site ID is valid the system checks if the site is registered
-
If the site is registered, the system validates if the provided site address state code matches site ID activity location.
-
If the state code does not match the site ID activity location, the service generates the following error:
{ "message": "Location State Code is different than Site Id Activity Location", "field": "Emanifest.generator.siteAddress.state.code", "value": "site address state code value" }
-
If the site is not registered, the service generates a warning:
{ "message": "Site with provided EPA Site ID is not registered", "field": "Emanifest.generator.epaSiteId", "value": "SiteIDvalue" }
- Store provided Site Information (if no other manifest errors were found)
-
Paper Signature Info Validation
-
If
submissionType
isFullElectronic
and any (Transporter(s), designatedFacility) of the paperSignature Information (printedName or signatureDate) is provided, the service generates a warning:{ "message": "Provided Field will be ignored. Paper Signature Information is not applicable for FullElectronic/Image submission type", "field": "Emanifest. transporter/designatedFacility.paperSignatureInfo", "value": "printedName or signatureDate value" }
-
If
submissionType
isHybrid
andEmanifest.status > Scheduled
andgenerator.PaperSignature
is provided, the service generates the following warning:{ "message": "Provided value will be ignored. Generator paper signature Date/Printed Name shall not be provided after Scheduled status.", "field": "emanifest.generatorPaperSignature.signatureDate/printedName", "value": " value" }
-
If
submissionType
isImage
, the following applies:- 3.1. If Generator Printed Name is not provided, the service generates a warning:
{ "message": "Field is not Provided", "field": "Emanifest.generator.paperSignature.printedName" }
- 3.2. If the Generator Printed Name is provided, validate the format. If an invalid format is provided, the service generates the following warning:
{ "message": "String \"{provided printed name value}\" is too long (length: { provided printed name length}, maximum allowed: 255)", "field": "Emanifest.generator.paperSignature.printedName", "value": "value" }
- 3.3. If the Generator Signature Date is not provided, the service generates the following warning:
{ "message": "Field is not Provided", "field": "Emanifest.generator.paperSignatureInfo.signatureDate" }
- 3.4. If Generator Signature Date is provided, validate format. If format is invalid the service generates the following warning:
{ "message": "String \"{provided signature date}\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.SSSZ]", "field": "Emanifest.generator.paperSignatureInfo. signatureDate", "value": "value" }
- 3.5. If provided Generator Signature Date is later than
Emanifest.createdDate
the service generates the following warning:
{ "message": "Provided Generator Signature Date is later than manifest created Date", "field": "Emanifest.generator.paperSignatureInfo.signatureDate", "value": "value" }
-
If
submissionType
is "DataImage5Copy
", the following applies:- 4.1. If Generator/Transporter/designatedFacility Printed Names are not provided, the service generates a warning:
{ "message": "Field is not Provided", "field": "Emanifest.generator/transporter/designatedFacility.paperSignature.printedName" }
- 4.2. If the Generator/Transporter/designatedFacility Printed Names are provided, validate the format. If an invalid format is provided, the service generates the following error:
{ "message": "String \"{provided printed name value}\" is too long (length: { provided printed name length}, maximum allowed: 255)", "field": "Emanifest.generator/transporter/designatedFacility.paperSignature.printedName", "value": "value" }
- 4.3. If the Generator/Transporter/designatedFacility Signature Dates are not provided, the service generates the following error
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.generator/transporter/designatedFacility.paperSignatureInfo.signatureDate" }
- 4.4. If Generator/Transporter/TSDF Signature Dates are provided, validate format. If format is invalid the service generates the following error (for this example: TSDF is used)
{ "message": "String \"{provided signature date}\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.SSSZ]", "field": "Emanifest.generator/transporter/designatedFacility.paperSignatureInfo.signatureDate", "value": "value" }
-
The system will perform the following validation for consecutive of Signature Dates for
DataImage5Copy
:-
5.1. If the signature dates for Generator, all Transporters, and designated Facility are provided and have a valid format, and more than one transporter is provided, the system performs the following steps:
-
Check if Generator signatureDate <= First Transporter signature date (Transporter.order will be used to determine consecutive of transporters). If not, the service generates the following error:
{ "message": "Transporter Signature date must be on or after Generator Signature date", "field": "Emanifest.generator.paperSignatureInfo.signatureDate", "value": "Generator Signature Date value" }
{ "message": "Generator Signature Date must be earlier or the same date as the first Transporter Signature Date", "field": "Emanifest.transporter.paperSignatureInfo.signatureDate", "value": "Transporter Signature Date value" }
- Check the order of the Transporters signature dates. If there is more than one Transporter provided, check if signature dates of transporters are in order or the same. For example, if there are two transporters and the signature date of transporter which has order = 2 is earlier than signature date of transporter with order = 1, the service generates the following error:
{ "message": "Signature Date of previous transporter must be before this transporter's signature date", "field": "Emanifest.transporters[1].paperSignatureInfo.signatureDate", "value": " Second Transporter Signature Date value " }
- Check if the Designated Facility signature date >= Last Transporter signature date. If not, the service generates the following error:
{ "message": "Signature of designated facility must be on or after the last transporter's signature date", "field": "Emanifest.designatedFacility.paperSignatureInfo.signatureDate", "value": "Designated Facility Signature Date value " }
- If any of the Signature Dates > current date the service generates the following error:
{ "message": "Generator/Transporter/Designated Facility Signature Date cannot be in the future", "field": "Emanifest.generator/transporter/designatedFacility.paperSignatureInfo.signatureDate", "value": "Signature Date value" }
-
5.2. If
Emanifest.rejectionInfo.rejectionType = "FullReject"
andEmanifest.rejectionInfo.transporterOnsite == true
the following applies -
If
Emanifest.rejectionInfo.alternateDesignatedFacilityType == "Tsdf"
the following applies -
If
Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.signatureDate
is not provided, the service generates the following error:
{ "message": "Mandatory field is not provided", "field": "Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.signatureDate" }
- If
Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.printed
Name is not provided, the service generates the following error:
{ "message": "Mandatory field is not provided", "field": "Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.printedName" }
- If
Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.signatureDate
is invalid the service generates the following error:
{ "message": "String \"{provided signature date}\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.SSSZ]", "field": "Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.signatureDate", "value": "value" }
- If
Emanifest.rejectionInfo.alternateDesignatedFacility.paperSignatureInfo.signatureDate < Emanifest.designatedFacility.paperSignatureInfo.signatureDate
then the service generates the following error:
{ "message": "Signature of alternate designated facility must be on or after the designated facility’s signature date", "field": "Emanifest.designatedFacility.paperSignatureInfo.signatureDate", "value": "Alternate Designated Facility Signature Date value " }
-
If
Emanifest.rejectionInfo.alternateDesignatedFacilityType == "Generator"
the following applies -
If Emanifest.rejectionInfo.generator.paperSignatureInfo.signatureDate is not provided, the service generates the following error:
{ "message": "Mandatory field is not provided", "field": "Emanifest.rejectionInfo.generator.PaperSignatureInfo.signatureDate" }
- If Emanifest.rejectionInfo.generator.paperSignatureInfo.printedName is not provided, the service generates the following error:
{ "message": "Mandatory field is not provided", "field": "Emanifest.rejectionInfo. generator.paperSignatureInfo.printedName" }
- If Emanifest.rejectionInfo.generator.paperSignatureInfo.signatureDate is invalid the service generates the following error:
{ "message": "String \"{provided signature date}\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.SSSZ]", "field": "Emanifest.rejectionInfo.generator.paperSignatureInfo.signatureDate", "value": "value" }
- If Emanifest.rejectionInfo.generator.paperSignatureInfo.signatureDate < Emanifest.designatedFacility.paperSignatureInfo.signatureDate then the service generates the following error:
{ "message": "Invalid Value. Generator Signature Date must be the same or later than Designated Facility Signature Date", "field": " Emanifest.rejectionInfo. generator.paperSignatureInfo.signatureDate", "value": "value" }
-
Waste Validation
-
If the waste field is not provided for a manifest with status >=
Scheduled
. The service generates the following error:{ "message": "Mandatory Field is not Provided", "field": "Emanifest.waste" }
-
If the waste element is provided, the system will perform the following steps:
-
2.1. If
waste.dotHazardous
is not provided, the service generates the following error:{ "message": "Object has missing required properties (['dotHazardous'])", "field": "Emanifest.wastes.{i}.dotHazardous" }
-
2.2. If
waste.epaWaste
is not provided, the service generates the following error:{ "message": "Object has missing required properties (['epaWaste'])", "field": "Emanifest.waste.{i}.epaWaste" }
-
2.3. If
waste.pcb
is not provided, the service generates the following error:{ "message": "Object has missing required properties (['pcb'])", "field": "Emanifest.waste.{i}.pcb" }
-
2.4. If
waste.pcb
is true, then the system will validatepcbInfos
. See details in PCB Information Validation section. -
2.5. If
waste.br
is not provided, the service generates the following error:{ "message": "Object has missing required properties (['br'])", "field": "Emanifest.waste.{i}.br" }
-
2.6. If the
waste.br
is true, the system will validatebrInfo
. See details in Biennial Report Information Validation section. -
2.7. Validate
dotInformation/wasteDescription
.-
If the element
dotHazardous
is true, the waste must containdotInformation
. -
If the element
dotHazardous
is false, the waste must containwasteDescription
. -
If the element
dotHazardous
is true, anddotInformation
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.dotInformation" }
-
If the element
dotHazardous
is true anddotInformation
is provided, the service will validate thedotInformation
fields. See section DOT Information fields validation for details. -
If the element
dotHazardous
is false anddotInformation
is provided, the service generates the following warning:{ "message": "For non-hazardous Waste Dot Information will be ignored.", "field": "Emanifest.waste.dotInformation" }
-
If the element
dotHazardous
is false and the elementwasteDescription
is not provided, then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.wasteDescription" }
-
If the element
dotHazardous
is false and the elementwasteDescription
is provided, then the service validateswasteDescription
. IfwasteDescription
is not valid, the service generates the following error:{ "message": "Invalid Field format. Value of no longer than 500 characters is expected", "field": "Emanifest.waste.wasteDescription", "value": "wasteDescription value" }
-
If the element
dotHazardous
is true and the elementwasteDescription
is provided, the service generates the following warning:{ "message": "For hazardous Waste, wasteDescription will be ignored.", "field": "Emanifest.waste.wasteDescription" }
-
-
2.8 Validate Management Method Code. See section Management Method Code Validation for details
-
2.9 Validate Waste.consentNumber
- 2.9.1 if Emanifest.import is true, Waste.consentNumber can be provided at any status.
- 2.91. if Emanifest.import is false, Waste.consentNumber shall not be provided.
-
2.10 Validate DOT Information. See that section for further details
-
2.11 Validate Containers and Quantity. See that section for further details
-
2.12 Validate Hazardous Waste Codes. See that section for further details
-
2.13Validate Instructions and Additional Information. See that section for further details
-
2.14 Validate Biennial Report Information. See that section for further details
-
DOT Information Fields Validation
The system will perform the following steps on the DOT Information fields:
- Validate ID Number
- There are Proper Shipping Names which do not have corresponding ID Numbers in the DOT specifications. For these Proper Shipping Names the Emanifest requires ID Number value of "NOID"
- If dotInformation.IdNumber is not provided, the service generates the following error:
{ "message": "Mandatory Field is Not Provided", "field": "Emanifest.wastes.dotInformation.idNumber " }
- If dotInformation.IdNumber is provided and not found in Id Number Lookup, the service generates the following error:
{ "message": "Provided Value is not Found", "field": "Emanifest.wastes.dotInformation.IdNumber", "value": "value ofIDNumber" }
- Validate Printed Dot Information.
- If printedDotInformation is not provided, the service generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.wastes.dotInformation.printedDotInformation " }
- If printedDotInformation exceeds the 500-character limit, the service generates the following error:
{ "message": "Invalid Field Format. Printed Dot Information exceeds the 500 character length", "field": "Emanifest.wastes.dotInformation.printedDotInformation ", "value": "value of printedDotInformation" }
Containers and quantity fields validation
- Containers and Quantity fields are mandatory
- If the quantity entity is not provided, the system generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.waste.quantity" }
- If any of the Containers and Quantity fields are not provided, the service generates the following error:
{ "message": "Mandatory Field is not Provided", "field": "Emanifest.waste.quantity.containerNumber/containerType/quantity/quantityUnitOfMeasurement" }
- If the element containerNumber is provided, the service validates containerNumber format. If
format is not valid the service generates the following error:
{ "message": "Numeric instance is greater than the required maximum (maximum: 9999, found:{provided container number})", "field": "Emanifest.wastes.quantity.containerNumber", "value": "value of container number" }
- If the element containerType code is provided, the service validates the containerType code. If
containerType code is not valid the service generates the following error:
{ "message": "Instance value (\"AB\") not found in enum (possible values: [\"BA\",\"DT\",\"CF\",\"DW\",\"CM\",\"HG\",\"CW\",\"TC\",\"CY\",\"TP\",\"DF\",\"TT\",\"DM\"])", "field": "Emanifest.wastes.quantity.containerType.code", "value": "value of container type code " }
- If the element quantity is provided, the service validates the quantity format. If the format is not valid the
service generates the following error:
{ "message": " Numeric instance is greater than the required maximum (maximum: 99999999999, found: {provided quantity})", "field": "Emanifest.wastes.quantity.quantity ", "value": "value of quantity " }
- If the quantityUnitOfMeasurement code is provided, the service validates the quantityUnitOfMeasurement code. If the quantityUnitOfMeasurement code is not valid, the service generates the following error:
{
"message": "Instance value (\"{provided code}\") not found in enum (possible values: [\"P\",\"T\",\"K\",\"M\",\"G\",\"L\",\"Y\",\"N\"])",
"field": "Emanifest.wastes.quantity.quantityUnitOfMeasurement.code ",
"value": "value of container type"
}
Waste Additional Information Validation
-
All Additional Information fields are optional. If any of the fields are invalid, they will be ignored with a warning.
-
Handling Instructions Validation.
- If handling instructions is invalid, the service generates the following warning:
{ "message": "Invalid Field format. Text can be no longer than 4000 characters", "field": "Emanifest.wastes.additionalInformation.handlingInstructions", "value": "value of handling instructions" }
-
Comments Validation
-
3.1. handlerId validation
- If the handler Id is not provided, then the comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Field is not Provided", "field": "Emanifest.wastes[i].additionalInfo.comments.handlerId" }
- If the handlerId has an invalid format provided, then the comment will be ignored and generate the
following warning:
{ "message": "Comment will be ignored, due to an invalid Site ID format being submitted", "field": "Emanifest.wastes[i].additionalInfo.comments.handlerId", "value": "Handler ID value" }
- If the provided handlerId does not match the Generator or TSDF or any of Transporter site IDs in the
manifest, the comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Provided handlerId does not match Generator or TSDF or any of Transporter Site IDs", "field": "Emanifest.wastes[i].additionalInfo.comments.handlerId", "value": "Handler ID value" }
- If the handler Id is not provided, then the comment will be ignored and generate the following warning:
-
3.2. Label validation
-
If the label element is not provided, then the comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Field is not Provided", "field": "Emanifest.wastes[i].additionalInfo.comments.label" }
-
If the label element has an invalid format provided, then the comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Invalid Value. Text can be no longer than 250 characters.", "field": "Emanifest.wastes[i].additionalInfo.comments.label", "value": "Label value" }
-
-
3.3. Description validation
-
If the description element is not provided, then the comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Field is not Provided", "field": "Emanifest.wastes[i].additionalInfo.comments.description" }
-
If the description element has an invalid format, the provided comment will be ignored and generate the following warning:
{ "message": "Comment will be ignored. Invalid Value. Text can be no longer than 250 characters.", "field": "Emanifest.wastes[i].additionalInfo.comments.description", "value": "Description value" }
-
-
3.4. If originalManifestTrackingNumbers are provided then the service generates the following warning:
{ "message": "originalManifestTrackingNumbers will be ignored. This field shall not be provided for the Waste.additionalInfo", "field": "Emanifest.wastes[i].additionalInfo.originalManifestTrackingNumbers", "value": "originalManifestTrackingNumbers value" }
-
3.5. If newManifestDestination is provided then the service generates the following warning:
{ "message": "newManifestDestination will be ignored. This field shall not be provided for the Waste.additionalInfo", "field": "Emanifest.wastes[i].additionalInfo.newManifestDestination", "value": "newManifestDestination value" }
-
PCB Information Validation
-
If
pcb == false
and any of thepcbInfos
entities or fields are provided, the service generates the following warning:{ "message": "Provided value will be ignored. PcbInfos provided but pcb flag equals false", "field": "Emanifest.waste.pcbInfos", "value": "pcbsInfo value" }
-
If
pcb == true
andpcbInfos
are not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided", "field": "Emanifest.waste.pcbInfos" }
-
If at least one
PcbInfos
element is provided, then the service validates pcbInfo fields-
3.1. Validate
PcbInfos.loadType.code
- If
PcbInfos.loadType
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided", "field": "Emanifest.wastes.pcbInfos.loadType.code" }
- If
pcbInfos.loadType.code
is provided, the service validates it against LoadType lookup. If the field is not valid, the service generates the following error:{ "message": "Invalid Field Format. One of the following values is expected: 'Container', 'ArticleInContainer', 'ArticleNotInContainer', 'BulkWaste'", "field": "Emanifest.waste.pcbInfos.loadType.code", "value": "loadType.code value" }
- If
-
3.2. Validate
pcbInfos.articleContainerId
- If
pcbInfos.loadType.code
isContainer
,ArticleInContainer
, orArticleNotInContainer
andPcbInfos.articleContainerId
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided. Fields must be provided if PCB load type is 'Container', 'ArticleInContainer', or 'ArticleNotInContainer'", "field": "Emanifest.waste.pcbInfos.articleContainerId" }
- If
pcbInfos.articleContainerId
is provided, the service checks the field length. If the field is invalid, the service generates the following error:{ "message": "Invalid Field Format. Text no longer than 255 characters is expected", "field": "Emanifest.waste.pcbInfos.articleContainerId", "value": "articleContainerId value" }
- If
pcbInfos.loadType.code
is "BulkWaste" andarticleContainerId
is provided, then the service generates the following warning:{ "message": "Field will be ignored", "field": "Emanifest.waste.pcbInfos.articleContainerId", "value": "articleContainerId value" }
- If
-
3.3. Validate
PcbInfo.dateOfRemoval
- If
pcbInfos.dateOfRemoval
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.pcbInfos.dateOfRemoval" }
- If
PcbInfos.dateOfRemoval
is provided, the service validates field format. If the field format is invalid, the service generates the following error:{ "message": "Invalid Field Format.", "field": "Emanifest.waste.pcbInfos.dateOfRemoval", "value": "dateOfRemoval value" }
- If
-
3.4. Validate
pcbInfos.weight
- If
pcbInfos.weight
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.pcbInfos.weight" }
- If
PcbInfos.weight
is provided, the service validates field format. If the field format is invalid, the service generates the following error:{ "message": "Invalid Field Format. Value containing no more than 11 whole digit(s) and 6 decimal digit(s) is expected", "field": "Emanifest.waste.pcbInfo.weight", "value": "weight value" }
- If
-
3.5. Validate
PcbInfos.wasteType
- If
pcbInfos.loadType
is "Container" or "ArticleInContainer" andwasteType
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.pcbInfos.wasteType" }
- If
PcbInfos.loadType
is "BulkWaste" andwasteType
is provided, the service generates the following warning:{ "message": "Field will be ignored", "field": "Emanifest.waste.pcbInfos.wasteType", "value": "containerType value" }
- If
PcbInfos.wasteType
is provided, the service checks the field length. If the field is invalid, the service generates the following error:{ "message": "Invalid Field Format. Text no longer than 255 characters is expected", "field": "Emanifest.waste.pcbInfos.wasteType", "value": "containerType value" }
- If
-
3.6. Validate
PcbInfos.bulkIdentity
- If
PcbInfos.loadType
is "BulkWaste" andbulkIdentity
is not provided, the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.waste.pcbInfos.bulkIdentity" }
- If
PcbInfos.loadType
is "Container" or "ArticleInContainer" andbulkIdentity
is provided, the service generates the following warning:{ "message": "Field will be ignored", "field": "Emanifest.waste.pcbInfos.bulkIdentity", "value": "bulkIdentity value" }
- If
PcbInfos.bulkIdentity
is provided, the service checks the field length. If the field is invalid, the service generates the following error:{ "message": "Invalid Field Format. Text no longer than 255 characters is expected", "field": "Emanifest.waste.pcbInfos. bulkIdentity", "value": "bulkIdentity value" }
- If
-
Management Method Code Validation
-
If
submissionType
isDataImage5Copy
the following applies- 1.1. If
epaWaste
istrue
andWaste.managementMethod.code
is not provided, the service generates the following error:{ "message": "Field is Not Provided", "field": "Emanifest.wastes.managementMethod.code" }
- 1.2. If the
Waste.managementMethod.code
is provided, validate if the code is in the lookup. If the provided code is not found, the service generates the following error:{ "message": "Provided Value not Found", "field": "Emanifest.wastes.managementMethod.code", "value": "code value" }
- 1.1. If
-
If
submissionType
isFullElectronic
orHybrid
the following applies-
2.1. If
Emanifest.status
isScheduled,
InTransit,
orReadyForSignature,
the following applies- If the
Waste.managementMethod.code
is provided, validate if the code is in the lookup. If the provided code is not found, the service generates a warning:{ "message": "Provided Value not Found", "field": "Emanifest.wastes.managementMethod.code", "value": "code value" }
- If the
-
2.2. If
Emanifest.status
is "Signed," the following applies- If the
Waste.managementMethod.code
is provided, then the service updatesEmanifest.validationStatus
totrue
- If the
Waste.managementMethod.code
is not provided, the service generates the following error:{ "message": "Field is Not Provided", "field": "Emanifest.wastes.managementMethod.code" }
- If the
Waste.managementMethod.code
is provided, validate if the code is in the lookup. If the provided code is not found, the service generates the following error:{ "message": "Provided Value not Found", "field": "Emanifest.wastes.managementMethod.code", "value": "code value" }
- If the
-
Rejection Information Validation
-
If an Original Manifest is rejected then
Emanifest.rejection
shall be specified astrue
. -
Emanifest.rejection
andRejectionInfo
shall be provided at theReadyForSignature
status. If provided for earlier statuses these fields will be ignored.- 2.1 If
Emanifest.status < "ReadyForSignature"
and eitherEmanifest.rejection
orRejectionInfo
fields are provided then the service generates the following warning:{ "message": "Provided Field will be ignored. Rejection information shall be provided at ReadyForSignature status", "field": "Emanifest.rejection", "value": "provided value" }
- 2.1 If
-
If
submissionStatus >= "ReadyForSignature"
andEmanifest.rejection
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.rejection" }
-
Emanifest.containsPreviousRejectOrResidue
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.containsPreviousRejectOrResidue" }
-
If
Emanifest.rejection == true
then the following applies-
5.1. If
RejectionInfo.rejectionComments
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo. rejectionComments" }
-
5.2. If
RejectionInfo.rejectionComments
are not valid then the service generates the following error:{ "message": "String \"{provided rejection comments value}\" is too long (length: { provided rejection comments length}, maximum allowed: 255)", "field": "Emanifest.RejectionInfo.rejectionComments", "vale": "rejectionComments value" }
-
5.3. If
RejectionInfo.transporterOnSite
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo.transporterOnSite" }
-
5.4. If
RejectionInfo.transporterOnSite
is provided and not valid then the service generates the following error:{ "message": "Invalid Field Format. Boolean value is expected", "field": "Emanifest.RejectionInfo.transporterOnSite", "value": "transporterOnSite value" }
-
5.4. If
Emanifest.submissionType == "DataImage5Copy"
andRejectionInfo.transporterOnSite == true
the following applies -
If
RejectionInfo.rejectionType == "PartialReject"
then the service setsRejectionInfo.rejectionType = "FullReject"
and generates the following warning:{ "message": "Provided value will be Ignored. If Transporter is On Site rejection type must be 'FullReject'", "field": "Emanifest.RejectionInfo.rejectionType", "value": "rejectionType value" }
-
e-Manifest sets
rejectionInfo.rejectionType = "FullReject"
in the e-Manifest database -
If
RejectionInfo.newManifestTrackingNumbers
is provided then the service generates the following warning:{ "message": "Provided Field will be Ignored. New Manifest(s) are not created if Transporter is On Site", "field": "Emanifest.RejectionInfo.newManifestTrackingNumbers" }
-
If
RejectionInfo.alternateDesignatedFacilityType
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo.alternateDesignatedFacilityType" }
-
If
RejectionInfo.alternateDesignatedFacilityType == "Generator
then the following applies-
If
generatorPaperSignatureInfo.printedName
is not provided then the service generates the following warning:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo.generatorPaperSignature.printedName " }
-
If
generatorPaperSignature.printedName
has an invalid format then the service generates the following warning:{ "message": "String \"{provided printed name value}\" is too long (length: {provided printed name length}, maximum allowed: 255)", "field": "Emanifest.RejectionInfo.generatorPaperSignature.printedName ", "value": "printedName value" }
-
If
generatorPaperSignature.signatureDate
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo.generatorPaperSignature.signatureDate " }
-
If
generatorPaperSignature.signatureDate < Emanifest.designatedFacility.paperSignature.signatureDate
then the service generates the following error:{ "message": "Invalid Value Provided. Generator signature date (signing as alternate Facility) shall be on or later than TSDF signature", "field": "Emanifest.RejectionInfo.generatorPaperSignature.signatureDate ", "value": "signatureDate value" }
-
If
generatorPaperSignature.signatureDate
is greater than current Date then the service generates the following error:{ "message": "Invalid Value Provided. Generator signature date (signing as alternate Facility) cannot be in the future", "field": "Emanifest.RejectionInfo.generatorPaperSignature.signatureDate ", "value": "signatureDate value" }
-
-
If
RejectionInfo.alternateDesignatedFacilityType == "Tsdf"
the following applies-
If
RejectionInfo.alternateDesignatedFacility.epaSiteId
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo. alternateDesignatedFacility.epaSiteId" }
-
If
RejectionInfo.alternateDesignatedFacility.epaSiteId
has an invalid format then the service generates the following error:{ "message": "Provided Value is not Valid. Does not match the format of: Two Letter Activity Location Code + Up to 10 alphanumeric characters", "field": "Emanifest.RejectionInfo.alternateDesignatedFacility.epaSiteId", "value": "epaSiteId value" }
-
If
epaSiteId
is valid, the system will search RCRAInfo by site ID. If the site ID is found the system will obtain the Site information from RCRAInfo and store it into the Manifest. -
If the
epaSiteId
is not found, the service generates the following error:{ "message": "Provided Value is not Found", "field": "Emanifest.RejectionInfo.alternateDesignatedFacility.epaSiteId", "value": "epaSiteId value" }
-
5.5. If
Emanifest.submissionType
isFullElectronic
orHybrid
and providedRejectionInfo.transporterOnSite == true
then the service generates the following warning:
{ "message": "Provided Value will be ignored", "field": "Emanifest.rejectionInfo.transporterOnSite", "value": "transporterOnSite value" }
-
-
5.6. If
RejectionInfo.transporterOnSite == false
the following applies-
If
RejectionInfo.rejectionType
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.RejectionInfo.rejectionType" }
-
If
RejectionInfo.newManifestTrackingNumber(s)
is provided and not valid, the service generates the following error:{ "message": "Invalid Field Format. 9 digits followed by 3 upper case letters is expected", "field": "Emanifest.RejectionInfo.newManifestTrackingNumbers", "value": "newManifestTrackingNumber value" }
-
If
manifestTrackingNumber
has a valid format, the service checks if the providedmanifestTrackingNumber
suffix is valid. If the suffix is invalid, the service generates the following error:{ "message": "Invalid Manifest Tracking Number Suffix is Provided", "field": "Emanifest.RejectionInfo.newManifestTrackingNumber", "value": "manifestTrackingNumber value" }
-
If any of the following fields are provided:
RejectionInfo.alternateDesignatedFacilityType
RejectionInfo.generatorPaperSignature
RejectionInfo.alternateDesignatedFacility
the service generates the following warning:
{ "message": "Provided Field will be Ignored. alternateDesignatedFacilityType/generatorPaperSignature/alternateDesignatedFacility not applicable if Transporter is Off Site", "field": "Emanifest.RejectionInfo.alternateDesignatedFacilityType/generatorPaperSignature/alternateDesignatedFacility", "value": "alternateDesignatedFacilityType/generatorPaperSignature/alternateDesignatedFacility value" }
-
-
-
If
Emanifest.rejection == false
and If any of the followingRejectionInfo
fields are provided:- RejectionInfo.rejectionType
- RejectionInfo.transporterOnSite
- RejectionInfo.alternateDesignatedFacilityType
- RejectionInfo.generatorPaperSignature
- RejectionInfo.alternateDesignatedFacility the service generates the following warning:
{ "message": "Provided Field will be Ignored. {Field} not applicable if Manifest is not Rejected", "field": "Emanifest.RejectionInfo.rejectionType /transporterOnSite/alternateDesignatedFacilityType/generatorPaperSignature/alternateDesignatedFacility", "value": "rejectionType/transporterOnSite/alternateDesignatedFacilityType/generatorPaperSignature/alternateDesignatedFacility value" }
Discrepancy Information Validation
-
If
status >= ReadyForSignature
andDiscrepancyResidueInfo.wasteQuantity
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.discrepancyResidueInfo.wasteQuantity" }
-
If
status >= ReadyForSignature
andDiscrepancyResidueInfo.wasteType
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.discrepancyResidueInfo.wasteType" }
-
If
DiscrepancyResidueInfo.wasteQuantity == true
orDiscrepancyResidueInfo.wasteType == true
andDiscrepancyResidueInfo.discrepancyComments
is not provided then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.discrepancyResidueInfo.discrepancyComments" }
-
If
DiscrepancyResidueInfo.discrepancyComments
has an invalid format then the service generates the following error:{ "message": "String \"{provided discrepancyComments value}\" is too long (length: {provided discrepancyComments value length}, maximum allowed: 255)", "field": "Emanifest.discrepancyResidueInfo.discrepancyComments", "value": "discrepancyComments value" }
-
If
DiscrepancyResidueInfo.wasteQuantity == false
andDiscrepancyResidueInfo.wasteType == false
andDiscrepancyResidueInfo.discrepancyComments
is provided then the service generates the following warning:{ "message": "Provided Field will be Ignored.", "field": "Emanifest.discrepancyResidueInfo.discrepancyComments", "value": "discrepancyComments value" }
-
If
DiscrepancyResidueInfo.wasteQuantity == true
orDiscrepancyResidueInfo.wasteType == true
then the service setsEmanifest.discrepancy = true
-
If
DiscrepancyResidueInfo.wasteQuantity == false
andDiscrepancyResidueInfo.wasteType == false
then the service setsEmanifest.discrepancy
Residue Information Validation
-
If
status >= ReadyForSignature
andDiscrepancyResidueInfo.residue
is not provided, then the service generates the following error:{ "message": "Mandatory Field is not Provided.", "field": "Emanifest.discrepancyResidueInfo.residue" }
-
If
DiscrepancyResidueInfo.residue == true
andDiscrepancyResidueInfo.residueComments
is provided, the service validates ifDiscrepancyResidueInfo.residueComments
has valid format. IfDiscrepancyResidueInfo.residueComments
has invalid format, the service generates the following error:{ "message": "String \"{provided residueComments value}\" is too long (length: {provided residueComments value length}, maximum allowed: 255)", "field": "Emanifest.discrepancyResidueInfo.residueComments", "value": "residueComments value" }
-
If
DiscrepancyResidueInfo.residue == false
andDiscrepancyResidueInfo.residueComments
is provided, then the service generates the following warning:{ "message": "Provided Field will be Ignored.", "field": "Emanifest.discrepancyResidueInfo.residueComments", "value": "residueComments value" }
-
If
DiscrepancyResidueInfo.residue == true
then the service setsEmanifest.residue = true
-
If
DiscrepancyResidueInfo.residue == true
then theEmanifest.residueNewManifestTrackingNumber(s)
can be provided.-
5.1. If no
Emanifest.residueNewManifestTrackingNumber(s)
is provided, the service generates the following warning:{ "message": "One of the Waste has residue. Manifest Tracking Number(s) for shipping waste to another Facility(ies) is not provided", "field": "Emanifest.residueNewManifestTrackingNumber", "value": "residueNewManifestTrackingNumber value" }
-
5.2. If
Emanifest.residueNewManifestTrackingNumber(s)
are provided then the service validates the format ofresidueNewManifestTrackingNumber(s)
. If it has an invalid format, the service generates the following warning:{ "message": "Field will be ignored. Invalid Field Format. 9 digits followed by 3 upper case letters is expected", "field": "Emanifest.residueNewManifestTrackingNumbers", "value": "residueNewManifestTrackingNumbers value" }
-
5.3. If the
residueNewManifestTrackingNumber
has a valid format, the service checks if the providedresidueNewManifestTrackingNumber
suffix is valid. If the suffix is invalid, the service generates the following warning:{ "message": "Field will be ignored. Invalid Manifest Tracking Number Suffix is Provided", "field": "Emanifest.residueNewManifestTrackingNumber", "value": "residueNewManifestTrackingNumber value" }
-
Biennial Report Validation
JSON
-
If the
Waste.br == true
and the Waste.brInfo is not provided or empty, then the following applies- 1.1. The system generates the following warning:
{ "message": "If brInfo is not Provided/Provided brInfo contains no fields, provided br shall be false", "field": "Emanifest.waste.br", "value": "Emanifest.waste.br value" }
- 1.2. The system sets
Waste.br = false
and stores it as a part of the manifest
- 1.1. The system generates the following warning:
-
If the
Waste.br == true
and none of the providedWaste.brInfo
fields are valid, then the following applies- 2.1. The system generates the following warning:
{ "message": "None of the provided brInfo are valid, provided br will be set to false", "field": "Emanifest.waste.br", "value": "Emanifest.waste.br value" }
- 2.2. The system sets
Waste.br = false
and stores it as a part of the manifest
- 2.1. The system generates the following warning:
-
If
Waste.br == false
or not provided and at least one of the provided Waste.brInfo fields is valid, then the following applies:- 3.1. The system generates the following warning:
{ "message": "Provided brInfo is valid, provided br will be set to true", "field": "Emanifest.waste.br", "value": "Emanifest.waste.br value" }
- 3.2. The system sets
Waste.br = true
and stores it as a part of the manifest
- 3.1. The system generates the following warning:
-
If
Waste.br == true
and Waste.brInfo fields are provided, then the following applies: -
Source Codes
-
5.1. Validate Source Code
- If the Source Code is not provided, the service generates the following warning:
{ "message": "Field is not Provided", "field": "Emanifest.waste.brInfo.sourceCode.code" }
- If the Source Code is not provided, the service generates the following warning:
-
5.2. Validate Form Code
- If Form Code is not provided, the service generates the following warning:
{ "message": "Field is not Provided", "field": "Emanifest.waste.brInfo.formCode.code" }
- If Form Code is not provided, the service generates the following warning:
-
5.3. Validate Waste Minimization Code
- If Waste Minimization is not provided, the service generates the following warning:
{ "message": "Field is not Provided", "field": "Emanifest.waste.brInfo.wasteMinimization.code" }
- If Waste Minimization is not provided, the service generates the following warning:
-
5.4. Validate Density and Density Units Of Measurement
-
If
Waste.UnitOfMeasurement.code
is notG
,L
,Y
, orN
(volumes), then the following applies:-
If Density is provided, the service generates the following warning:
{ "message": "Provided field will be ignored. Density shall be provided only if the quantity units of measurement is the volume (G, L, N, Y)", "field": "Emanifest.waste.brInfo.density", "value": "density value" }
-
If Density Units Of Measurement is provided, the service generates the following warning:
{ "message": "Provided field will be ignored. Units Of Measurement shall be provided only if the quantity units of measurement is the volume (G, L, N, Y)", "field": "Emanifest.waste.brInfo.densityUnitOfMeasurement", "value": "densityUnitOfMeasurement value" }
-
If
Waste.UnitOfMeasurement.code
isG
,L
,Y
, orN
(volumes), then the following applies:-
The service will store the provided density and the
densityUnitOfMeasurement.code
if both are valid. -
The service will not store the valid density if
densityUnitOfMeasurement.code
is not provided or provideddensityUnitOfMeasurement.code
is not valid. -
The service will not store the valid
densityUnitOfMeasurement.code
if density is not provided or provided density is not valid. -
If Density and
densityUnitOfMeasurement.code
are not provided, the system will generate a warning:{ "message": "Density and densityUnitOfMeasurement.code are not provided. Both fields – Density and densityUnitOfMeasurement.code fields shall be provided", "field": "Emanifest.waste.brInfo.density densityUnitOfMeasurement.code" }
-
-
If either Density or
densityUnitOfMeasurement.code
is not provided, the system will generate a warning:{ "message": "Density.densityUnitOfMeasurement.code is not provided. Both fields – Density and densityUnitOfMeasurement.code fields shall be provided", "field": "Emanifest.waste.brInfo.density" }
-
If provided Density is invalid, the service generates the following warning:
{ "message": "Invalid Field Format. Numeric value containing no more than 3 whole digit(s) and 2 decimal digit(s) expected", "field": "Emanifest.waste.brInfo.density", "value": "density value" }
-
If provided
densityUnitOfMeasurement.code
is not valid, the service generates the following warning:{ "message": "Invalid Field Format. Numeric value 1 ('lbs/gal') or 2 ('sg') shall be provided", "field": "Emanifest.waste.brInfo.densityUnitOfMeasurement.code", "value": "code value" }
-
-
-
Site Services
The following pages document the available site services.
The site services allow third-party applications to gather information about sites registered in the e-Manifest system. The site services are read-only and do not allow third-party applications to create, update, or delete sites. User looking to update information about their site can do so through the RCRAInfo UI, if their state has opted into using the RCRAInfo myRCRAid module, or through their state.
Site Search Service
Returns a list of sites that match the search criteria.
epaSiteId
: valid activity location, at least 2 charactersname
: site name, any number of characters not exceeding 80 charactersstreetNumber
: optional parameter, any number of characters not exceeding 12 charactersaddress1
: optional parameter, cannot exceed 50 characterscity
: cannot exceed 25 charactersstate
: 2 character state codezip
: valid zip codesiteType
: optional, one of enum values["Generator", "Transporter", "TSDF", "Broker"]
pageNumber
: optional, defaults to 1,
Notes
- The system will perform exact search if provided site id contains exactly 12 characters. Any additional parameters will be ignored.
- If at least one of the following parameters is valid, the service will perform non-exact search by individual
parameters or any combination of them (any optional parameters can be added). Response will contain warnings for any
invalid parameters.
epaSiteId
: if less than 12 charactersname
streetNumber
: if streetNumber is provided and address1 is not provided the service will not use streetNumber for the search, the service will return an erroraddress1
: if address1 is provided and neither valid city nor valid zip are provided the service will not use address1 for the search, the service will return an errorcity
state
zip
Parameters
- Site Search JSON (schema)
- Security Token
Examples
POST /rcrainfo/rest/api/v1/site-search HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"epaSiteId":"VATEST",
"name":"VA TEST",
"streetNumber":"123",
"address1":"VA TEST GEN 2021 WAY",
"city":"Arlington",
"state":"VA",
"zip":"22202",
"siteType":"Generator"
}
Completed Response Example
Valid site ID 12 character - exact search
{
"epaSiteId": "VATESTGEN001"
}
Valid site ID, siteType, and pageNumber
{
"epaSiteId": "VATESTTSD",
"siteType": "Tsdf",
"pageNumber": 1
}
note, pageNumber"
is optional and defaults to 1
Valid state code and name
{
"state": "VA",
"name": "VA TEST"
}
Valid zip and name
{
"zip": "22202",
"name": "VA TEST"
}
Valid site ID, zip, and name
{
"epaSiteId": "VATESTGEN",
"zip": "22202",
"name": "VA TEST"
}
Invalid site ID
{
"epaSiteId": "VATESTGEN"
}
If epaSiteId"
is less than 12 characters, additional parameters are required or the service will return an error.
Sequence of Steps
-
The system will process the request.
-
3.1 The service checks if required parameters were provided
-
3.2 If none of following required parameters are provided:
epaSiteId"
name"
streetNumber"
address1"
city"
state"
zip"
the process will stop and the service will return the following error:E_SearchParameterRequired: Missing required search parameters: epaSiteId, name, streetNumber , address1, city, state, zip
-
3.3. If all following required parameters are invalid:
epaSiteId
state
zip
and none of the following parameters are provided:
name
city
streetNumber
address1
the processing will be stopped and the system will generate the following error:
E_InvalidSiteIdStateZip: Provided Site ID, State, Zip have an invalid format
-
3.4. If the provided Site ID is invalid and none of the required search parameters are provided:
name
,streetNumber
,address1
,city
,state
,zip
, the processing will be stopped, and the system will generate the following error:E_InvalidSiteId: Provided Site ID has an invalid format
-
3.5. If the provided State Code is invalid and none of the required search parameters are provided:
name
,streetNumber
,address1
,city
,site id
,zip
, the processing will be stopped, and the system will generate the following error:E_InvalidStateCode: Provided State Code is invalid
-
3.6. If the provided Zip is invalid and none of the required search parameters are provided:
name
,streetNumber
,address1
,city
,site id
,state
, the processing will be stopped, and the system will generate the following error:E_InvalidZip: Provided Zip is invalid
-
3.7. If the provided State Code is invalid and provided Site ID is invalid and none of the required search parameters are provided:
name
,address1
,city
,zip
, the processing will be stopped, and the system will generate the following error:E_InvalidStateCodeSiteId: Provided State Code and Site ID are invalid
-
3.8. If the provided State Code is invalid and provided Zip is invalid and none of the required search parameters are provided:
name
,streetNumber
,address1
,city
,site id
, the processing will be stopped, and the system will generate the following error:E_InvalidStateCodeZip: Provided State Code and Zip are invalid
-
3.9. If the provided Zip is invalid and provided Site ID is invalid and none of the required search parameters are provided:
name
,streetNumber
,address1
,city
,State
, the processing will be stopped, and the system will generate the following error:E_InvalidZipSiteId: Provided Zip and Site ID are invalid
-
3.10. If
streetNumber
is provided andaddress1
is not provided and none of the other parameters are provided, the service will return an error:E_Address1NotProvided: Street number is not used for the search because address1 is not provided
-
3.11. If
address1
is provided and neither a valid city nor a valid zip are provided, the service will return an error:E_CityZipNotProvided: Address1 is not used for the search because neither City nor Zip are provided
-
-
The System returns the response
- 4.1. If sites were found, the system returns:
- JSON containing a list of sites, provided search parameters, and any encountered validation warnings
- 4.2. If no sites were found, the system returns JSON containing the following information:
- An empty list and any encountered validation warnings
- 4.3. If any authentication, authorization, validation, or system error was encountered during processing, the system will return an appropriate error code.
- 4.1. If sites were found, the system returns:
Site Details Service
Returns Site Information by the Site ID. The following site information will be included:
- Site ID
- Mailing Address
- Site Address
- Contact First Name
- Contact Middle Initial
- Contact Last Name
- Contact phone number
- Contact email
- If at least one user at the site can electronically sign a manifest
- Site type: one of the following values will be returned
Tsdf
Generator
Transporter
Broker
- If the site is registered for multiple types of activities, see details for the return in the Sequence of Steps section
Parameters
- Security Token
- Site ID: 12 character string
Examples
GET /rcrainfo/rest/api/v1/site-details/VATESTGEN001 HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Where there URL parameter represented by VATESTGEN001
is the Site ID that is being requested.
Completed Response Example
{
"epaSiteId": "CA99999996",
"name": "Site name",
"mailingAddress": {
"streetNumber": "1234",
"address1": "street name",
"city": "JBER",
"state": {
"code": "CA"
},
"country": {
"code": "US"
},
"zip": "99506-3221"
},
"siteAddress": {
"streetNumber": "1234",
"address1": "street name",
"city": "JBER",
"state": {
"code": "CA"
},
"country": {
"code": "US"
},
"zip": "99506-3221"
},
"contact": {
"firstName": "john",
"middleInitial": "A",
"lastName": "HUGHES",
"phone": {
"number": "907-552-3745"
},
"email": "JOHN.@MMM.COM"
},
"canEsign": true,
"siteType": "Tsdf",
"federalGeneratorStatus": "LQG"
}
Sequence of Steps
-
The system will process the request
- 3.1. The system will check if Site with provided Site ID is valid and registered in RCRAInfo.
- 3.1.1. If the provided Site ID is invalid, the processing will be stopped, and the system will generate the
following error:
E_InvalidSiteId: Provided Site ID has an invalid format. Site ID shall be compliant with the following format: Two Letter Activity Location Code + Single alphanumeric Character + Up to 9 alphanumeric characters.
- 3.1.2. If the provided Site ID is not registered in RCRAInfo, the processing will be stopped, and the system
will generate the following error:
E_SiteIdNotFound: Site with the provided Site ID is not found.
- 3.1.1. If the provided Site ID is invalid, the processing will be stopped, and the system will generate the
following error:
- 3.1. The system will check if Site with provided Site ID is valid and registered in RCRAInfo.
-
The System returns the response
- 4.1. If the site was found, the system returns generated JSON containing the following information:
- Site type: "Generator"/"Tsdf"/"Transporter"/"Broker". For cases
where the site is registered for multiple types (e.g., Tsdf and Broker), the following applies:
- If the site is registered as a Broker and as a Generator, then
Broker
will be returned. - If the site is registered as a Broker and as a Tsdf, then
Tsdf
will be returned. - If the site is registered as a Broker and as a Transporter, then
Transporter
will be returned. - If the site is registered as a Generator and as a Tsdf, then
Tsdf
will be returned. - If the site is registered as a Generator and as a Transporter, then
Transporter
will be returned.
- If the site is registered as a Broker and as a Generator, then
- e-Sign status: If the site has at least one active Certifier user.
- Site information: containing site name, location address, mailing address, contact first name, middle initial, last name, phone number, phone extension, email (see the site schema).
- Site type: "Generator"/"Tsdf"/"Transporter"/"Broker". For cases
where the site is registered for multiple types (e.g., Tsdf and Broker), the following applies:
- 4.2. If any errors were encountered during processing, the system returns JSON containing:
- Error: containing code, message, error ID, and date.
- 4.1. If the site was found, the system returns generated JSON containing the following information:
Site Exists Service
This service checks for the existence of the provided EPA Site ID and, if "result": true
, if the site has a registered
user in the e-Manifest system. The service returns the provided EPA Site ID and "return": false
if the provided EPA Site ID does not have a registered user in the e-Manifest system or provided EPA Site ID
is invalid. It is recommended to invoke the service before invoking search manifest services.
Parameters
- Security Token
- Site ID: 12 character string
Examples
GET /rcrainfo/rest/api/v1/site-exists/VATESTGEN001 HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Completed Response Example
{
"epaSiteId": "VATESTGEN001",
"result": true
}
Sequence of Steps
-
The system will process the request
- 3.1. If the site with the provided EPA Site ID is registered in the e-Manifest system, the service will generate
JSON containing:
- EPA Site ID
- Result: true
- 3.2. If the site with the provided EPA Site ID is not registered in the e-Manifest system or the provided EPA Site
ID is invalid, the service will generate JSON containing:
- EPA Site ID
- Result: false
- 3.3. The service returns generated JSON
- 3.1. If the site with the provided EPA Site ID is registered in the e-Manifest system, the service will generate
JSON containing:
-
If authentication, authorization, or system errors were encountered during processing, the system will return:
error
: containing error code, error message, error id, and error date
Lookup Services
The Lookup Services are a set of services that can be used by industry and regulators to retrieve information directly related to RCRA.
State waste codes by state
Returns the list of State Waste Codes and State Waste Code Descriptions by State Code.
Parameters
- state waste code: 2 character state code (e.g., AL, AK, AZ, etc.)
GET /rcrainfo/rest/api/v1/lookup/state-waste-codes/{stateCode} HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request
- 2.1. The system will check if provided State Code is valid. If the provided State Code is invalid the system will
stop the processing and generate the following error:
E_InvalidStateCode: Provided State Code is invalid
- 2.2 If no state waste codes are defined for the provided State Code the system will stop the processing and
generate the following error:
E_StateCodesUndefined: State Waste Codes are Not Defined for this State
- 2.1. The system will check if provided State Code is valid. If the provided State Code is invalid the system will
stop the processing and generate the following error:
- The system will return the response. If successful, the response body will contain JSON encoded list of state waste code for the requested state.
Completed Response Example
[
{
"code": " PCB5",
"description": "state defined - polychlorinated biphenyls article container "
},
{
"code": "020L",
"description": "Part 121,Liquid Industrial Waste of Michigan's Natural Resources and Environmental"
},
{
"code": "040U",
"description": " Clonitralid (Chemical Abstract Services Number 1420-04-8)"
},
{
"code": "051U ",
"description": "Diazinon (Chemical Abstract Services Number 333-41-5)"
}
]
Error response example
{
"code": "E_InvalidStateCode ",
"message": "Provided State Code was not Found",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
Federal waste codes
Returns the list of Federal Waste Codes and Federal Waste Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/federal-waste-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of federal waste codes.
Completed Response Example
[
{
"code": "D001",
"description": "IGNITABLE WASTE"
},
{
"code": "D002",
"description": "CORROSIVE WASTE"
},
{
"code": "D003",
"description": "REACTIVE WASTE"
},
{
"code": "D004",
"description": "ARCENIC"
}
]
Density units of measure
- List of EPA Density Units of Measure codes and descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/density-uom HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of density units of measurement.
Completed Response Example
[
{
"code": "1",
"description": "lbs/gal"
},
{
"code": "2",
"description": "sg"
}
]
Form codes
Returns the list of Form Codes and Form Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/form-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of form codes.
Completed Response Example
[
{
"code": "W101",
"description": "VERY DILUTE AQUEOUS WASTE CONTAINING MORE THAN 99% WATER"
},
{
"code": "W200",
"description": "STILL BOTTOMS IN LIQUID FORM "
},
{
"code": "W001",
"description": "LAB PACKS FROM ANY SOURCE NOT CONTAINING ACUTE HAZARDOUS WASTE"
},
{
"code": "W002",
"description": "CONCENTRATED HALOGENATED (E.G.CHLORINATED) SOLVENT"
}
]
Management method codes
Returns the list of Management Method Codes and Management Method Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/managment-method-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of management method codes.
Completed Response Example
[
{
"code": "H061",
"description": "FUEL BLENDING"
},
{
"code": "H040",
"description": "INCINERATION"
},
{
"code": "H020",
"description": "SOLVENTS RECOVERY"
},
{
"code": "H132",
"description": "LANDFILL OR SURFACE IMPOUNDMENT"
}
]
Waste minimization codes
Returns the list of Waste Minimization Codes and Waste Minimization Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/waste-minimization-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of waste minimization codes.
Completed Response Example
[
{
"code": "X",
"description": "No waste minimization efforts were implemented"
},
{
"code": "N",
"description": "Efforts economically or technically impracticable"
},
{
"code": "S",
"description": "Began to ship waste off-site for recycling"
},
{
"code": "R",
"description": "Recycling on-site was implemented"
},
{
"code": "Y",
"description": "Waste minimization efforts were successful"
},
{
"code": "A",
"description": "Cont. initiative to reduce qty and/or toxicity"
},
{
"code": "B",
"description": "Cont. initiative to recycle waste on- or off-site"
},
{
"code": "C",
"description": "Impl. new initiative to reduce qty and/or toxicity"
}
]
Port of entry codes
Returns the list of import Ports of Entry by City, State name, and State code
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/ports-of-entry HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of ports of entry where waste can be imported.
Completed Response Example
[
{
"cityPort": "ANCHORAGE",
"state": {
"code": "AK",
"name": "ALASKA"
}
},
{
"cityPort": "PELICAN",
"state": {
"code": "AK",
"name": "ALASKA"
}
}
]
Lookup Services
The Lookup Services are a set of services that can be used by industry and regulators to retrieve information directly related to RCRA.
State waste codes by state
Returns the list of State Waste Codes and State Waste Code Descriptions by State Code.
Parameters
- state waste code: 2 character state code (e.g., AL, AK, AZ, etc.)
GET /rcrainfo/rest/api/v1/lookup/state-waste-codes/{stateCode} HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request
- 2.1. The system will check if provided State Code is valid. If the provided State Code is invalid the system will
stop the processing and generate the following error:
E_InvalidStateCode: Provided State Code is invalid
- 2.2 If no state waste codes are defined for the provided State Code the system will stop the processing and
generate the following error:
E_StateCodesUndefined: State Waste Codes are Not Defined for this State
- 2.1. The system will check if provided State Code is valid. If the provided State Code is invalid the system will
stop the processing and generate the following error:
- The system will return the response. If successful, the response body will contain JSON encoded list of state waste code for the requested state.
Completed Response Example
[
{
"code": " PCB5",
"description": "state defined - polychlorinated biphenyls article container "
},
{
"code": "020L",
"description": "Part 121,Liquid Industrial Waste of Michigan's Natural Resources and Environmental"
},
{
"code": "040U",
"description": " Clonitralid (Chemical Abstract Services Number 1420-04-8)"
},
{
"code": "051U ",
"description": "Diazinon (Chemical Abstract Services Number 333-41-5)"
}
]
Error response example
{
"code": "E_InvalidStateCode ",
"message": "Provided State Code was not Found",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
Federal waste codes
Returns the list of Federal Waste Codes and Federal Waste Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/federal-waste-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of federal waste codes.
Completed Response Example
[
{
"code": "D001",
"description": "IGNITABLE WASTE"
},
{
"code": "D002",
"description": "CORROSIVE WASTE"
},
{
"code": "D003",
"description": "REACTIVE WASTE"
},
{
"code": "D004",
"description": "ARCENIC"
}
]
Density units of measure
- List of EPA Density Units of Measure codes and descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/density-uom HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of density units of measurement.
Completed Response Example
[
{
"code": "1",
"description": "lbs/gal"
},
{
"code": "2",
"description": "sg"
}
]
Form codes
Returns the list of Form Codes and Form Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/form-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of form codes.
Completed Response Example
[
{
"code": "W101",
"description": "VERY DILUTE AQUEOUS WASTE CONTAINING MORE THAN 99% WATER"
},
{
"code": "W200",
"description": "STILL BOTTOMS IN LIQUID FORM "
},
{
"code": "W001",
"description": "LAB PACKS FROM ANY SOURCE NOT CONTAINING ACUTE HAZARDOUS WASTE"
},
{
"code": "W002",
"description": "CONCENTRATED HALOGENATED (E.G.CHLORINATED) SOLVENT"
}
]
Management method codes
Returns the list of Management Method Codes and Management Method Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/managment-method-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of management method codes.
Completed Response Example
[
{
"code": "H061",
"description": "FUEL BLENDING"
},
{
"code": "H040",
"description": "INCINERATION"
},
{
"code": "H020",
"description": "SOLVENTS RECOVERY"
},
{
"code": "H132",
"description": "LANDFILL OR SURFACE IMPOUNDMENT"
}
]
Waste minimization codes
Returns the list of Waste Minimization Codes and Waste Minimization Code Descriptions
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/waste-minimization-codes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of waste minimization codes.
Completed Response Example
[
{
"code": "X",
"description": "No waste minimization efforts were implemented"
},
{
"code": "N",
"description": "Efforts economically or technically impracticable"
},
{
"code": "S",
"description": "Began to ship waste off-site for recycling"
},
{
"code": "R",
"description": "Recycling on-site was implemented"
},
{
"code": "Y",
"description": "Waste minimization efforts were successful"
},
{
"code": "A",
"description": "Cont. initiative to reduce qty and/or toxicity"
},
{
"code": "B",
"description": "Cont. initiative to recycle waste on- or off-site"
},
{
"code": "C",
"description": "Impl. new initiative to reduce qty and/or toxicity"
}
]
Port of entry codes
Returns the list of import Ports of Entry by City, State name, and State code
Parameters
none
GET /rcrainfo/rest/api/v1/lookup/ports-of-entry HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of ports of entry where waste can be imported.
Completed Response Example
[
{
"cityPort": "ANCHORAGE",
"state": {
"code": "AK",
"name": "ALASKA"
}
},
{
"cityPort": "PELICAN",
"state": {
"code": "AK",
"name": "ALASKA"
}
}
]
e-Manifest Lookup Services
The e-Manifest Lookup Services are a set of services that can be used by industry and regulators to retrieve information relevant to manifests, such as the list of possible waste codes (federal or state), DOT hazard classes, acceptable units of measurement, and more.
Hazardous classes
Returns the list of all Hazard Classes
Parameters
none
GET /rcrainfo/rest/api/v1/emanifest/lookup/hazard-classes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of DOT hazard classes.
Completed Response Example
[
"1.2H",
"1.2J",
"1.2K",
"1.2L",
"1.3C",
"1.3G",
"1.3H",
"1.3J",
"1.3K",
"1.3L",
"1.4B",
"1.4C"
]
Hazard class by shipping name and ID number
- Retrieve DOT Hazard Classes by DOT Proper Shipping name and ID Number
Parameters
- Proper Shipping Name
- ID Number
GET /rcrainfo/rest/api/v1/emanifest/lookup/hazard-class-by-shipping-name-id-number/{shippingName}/{idNumber} HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of DOT hazard classes.
Completed Response Example
["2.2", "2.3"]
Printed tracking number suffixes
Returns the list of all Printed Manifest Tracking Number suffixes (e.g., ELC, JJK, FLE, etc.) and the Owner Companies
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/printed-tracking-number-suffixes HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of manifest tracking number suffixes.
Completed Response Example
[
{
"code": "ELC",
"description": "Electronic Manifest"
},
{
"code": "CTN",
"description": "Nutmeg Environmental"
},
{
"code": "DAT",
"description": "Databar Inc."
},
{
"code": "FLE",
"description": "The Flesh Company"
},
{
"code": "GBF",
"description": "Genoa Business Forms"
},
{
"code": "GRR",
"description": "Giant Resource Recovery"
},
{
"code": "JJK",
"description": "J.J. Keller & Associates, Inc."
},
{
"code": "MWI",
"description": "RR Donnelley"
},
{
"code": "PSC",
"description": " PSC, LLC "
}
]
Container types
Returns the list of all Container Types and Container Type Descriptions.
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/container-types HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of container types.
Completed Response Example
[
{
"code": "BA",
"description": "Burlap, cloth, paper, or plastic bags"
},
{
"code": "DT",
"description": "Dump truck"
},
{
"code": "CF",
"description": "Fiber or plastic boxes, cartons, cases"
},
{
"code": "DW",
"description": "Wooden drums, barrels, kegs"
}
]
Quantity units of measure
Returns the list of Quantity UOM Codes and Descriptions
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/quantity-uom HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of quantity units of measurement .
Completed Response Example
[
{
"code": "P",
"description": "Pounds"
},
{
"code": "K",
"description": "Kilogram"
},
{
"code": "M",
"description": "Metric Tons (1000 Kilograms) "
},
{
"code": "G",
"description": "Gallons"
},
{
"code": "L",
"description": "Liters"
},
{
"code": "Y",
"description": "Cubic Yards "
}
]
Load Types
List of Polychlorinated biphenyl (PCB) load type
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/load-types HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of PCB load types.
Completed Response Example
[
{
"code": "ArticleInContainer",
"description": "Article in Container"
},
{
"code": "ArticleNotInContainer",
"description": "Article Not in Container"
},
{
"code": "BulkWaste",
"description": "Bulk Waste"
},
{
"code": "Container",
"description": "Container"
}
]
Proper shipping names
Returns the list of all DOT Proper Shipping Names. Proper Shipping Name Comments and Technical Name Indicators
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/proper-shipping-names HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of all DOT proper shipping names.
Completed Response Example
[
{
"psn": "1,1,1-Trifluoroethane or Refrigerant gas, R 143a",
"technicalNameIndicator": false
},
{
"psn": "1,1-Difluoroethane or Refrigerant gas R 152a",
"technicalNameIndicator": false
},
{
"psn": "1,1-Difluoroethylene or Refrigerant gas R 1132a",
"technicalNameIndicator": false
},
{
"psn": "Carbamate pesticides, liquid, toxic, flammable",
"psnComments": ["flash point not less than 23 degrees C"],
"technicalNameIndicator": true
}
]
Proper shipping names by ID number
Returns list of DOT Proper Shipping names by DOT ID Number
Parameters
- ID Number
GET /rcrainfo/rest/api/v1/emanifest/lookup/proper-shipping-names-by-id-number HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
-
The system will process the request
- 2.1 The system will check if provided ID Number has valid format.
- 2.2 Provided ID Number shall be compliant with the following format:
- length: 6 characters
- first 2 characters either "UN" of "NA"
- last 4 characters are numeric
- 2.3 if ID number is invalid, will return error
E_InvalidIdNumber: Invalid Id Number
- 2.4 If no ID number is found in the system, will return error
E_IdNumberNotFound: Id Number not found
-
return the response. If successful, the response body will contain JSON encoded list of all DOT proper shipping names.
Completed Response Example
[
"Chemical kit",
"Compounds, cleaning liquid",
"Compounds, tree killing, liquid or Compounds, weed killing, liquid"
]
Validation Error Response Example
{
"code": " E_InvalidIdNumber ",
"message": "Invalid Id Number",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
ID numbers
Returns a list of DOT ID Numbers
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/id-numbers HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of all DOT ID numbers.
Completed Response Example
[
"UN2035",
"UN1030",
"UN1959",
"UN2517",
"UN2044",
"UN1001",
"UN1950",
"UN1950",
"UN1011"
]
ID numbers by shipping name
Returns the list of ID Numbers by the Proper Shipping Name.
Parameters
- Proper Shipping Name
GET /rcrainfo/rest/api/v1/emanifest/lookup/proper-shipping-names-by-id-number HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
-
The system will process the request
- 2.1 if provided shipping name exceeds 300 characters, the system will return error
E_InvalidProperShippingName: Invalid Proper Shipping Name
- 2.2 f no ID Numbers were found the system stops processing and generates the following error:
E_ProperShippingNameNotFound: Proper Shipping Name Not Found
- 2.1 if provided shipping name exceeds 300 characters, the system will return error
-
return the response. If successful, the response body will contain JSON encoded list of all DOT ID numbers.
Completed Response Example
["UN1339", "UN1340", "UN1341"]
Validation Error Response Example
{
"code": " E_InvalidProperShippingName ",
"message": "Invalid Proper Shipping Name",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
Packing groups
Returns list of all DOT Packing Groups
Parameters
None
GET /rcrainfo/rest/api/v1/emanifest/lookup/packing-groups HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
- Security Token Validation.
- User Authorization.
- The system will process the request return the response. If successful, the response body will contain JSON encoded list of all DOT Packing Groups.
Completed Response Example
["I", "II", "III"]
Packing groups by shipping name and ID
Returns list of DOT Packing Groups by DOT Proper Shipping name and ID Number
Parameters
- Proper Shipping Name
- ID Number
GET /rcrainfo/rest/api/v1/emanifest/lookup/packing-groups-by-shipping-name-id-number/{shippingNmae}/{idNumber} HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Accept: application/json
Sequence of Steps
-
The system will process the request
- 2.1 f the size of provided Proper Shipping Name exceeds 300 characters the system stops processing and generate
the following error:
E_InvalidProperShippingName: Invalid Proper Shipping Name
- 2.2 The system will check if provided ID Number has valid format via the following rules:
- length: 6 characters
- first 2 characters either "UN" of "NA"
- last 4 characters are numeric
E_InvalidIdNumber: Invalid Id Number
- 2.3 The system will obtain the Packing Group for the provided shipping name and ID number:
- 2.4 If Proper Shipping Name was not found the system stops processing and generates following error:
E_ProperShippingNameNotFound: Proper Shipping Name Not Found
- 2.5 If ID Number was not found the system stops processing and generates following error:
E_IdNumberNotFound: ID Number Not Found
- 2.6 If combination of Proper Shipping Name and ID Number was not found the system stops processing and generates
following error:
E_CombinationProperShippingNameIdNumberNotFound: combination of Proper Shipping Name and Id Number was not found
- 2.1 f the size of provided Proper Shipping Name exceeds 300 characters the system stops processing and generate
the following error:
-
return the response. If successful, the response body will contain JSON encoded list of the appropriate DOT packing group.
Completed Response Example
["I", "II"]
Validation Error Response Example
{
"code": "E_CombinationProperShippingNameIdNumberNotFound",
"message": "Combination of Proper Shipping Name and Id Number was not found",
"errorId": "9v7a9808-s35a5-4874-928f-12fc3def4b56",
"date": "2017-06-23T23:15:45.095+0000"
}
User Services
The user services are a set of endpoints retrieve information about users, which can be used by both industry and regulators, and an authentication service that can be used by only state regulators.
User Search
A service that allows user to search for other users by user ID, siteId(s). example HTTP request
POST /rcrainfo/rest/api/v1/users/user-search HTTP/1.1
Host: rcrainfopreprod.epa.gov
Authorization: Bearer theSecurityTokenObtainedFromTheAuthService
Content-Type: application/json
{
"userId": "user1",
"siteIds": ["site1", "site2"]
}
Both fields, userId
and siteIds
are optional. If you know the user ID, this service can essentially be used as a GET
request to retrieve the user's information, such as what site's they have access to and the permissions in RCRAInfo they
have for each site.
Example HTTP Response
{
"totalNumberOfUsers": 1,
"totalNumberOfPages": 1,
"currentPageNumber": 1,
"warnings": [],
"searchedParameters": [
{
"field": "userId",
"value": "myUserId123"
}
],
"users": [
{
"userId": "myUserId123",
"firstName": "John",
"lastName": "Doe",
"email": "foobar@gmail.com",
"phone": {
"number": "555-555-5555"
},
"esaStatus": "Received",
"lastLoginDate": "2023-08-09T18:15:30.849+00:00",
"sites": [
{
"siteId": "VAB000535062",
"siteName": "TEST BROKER 5-28-2020",
"permissions": [
{
"module": "SiteManagement",
"level": "Active"
},
{
"module": "AnnualReport",
"level": "Certifier"
},
{
"module": "BiennialReport",
"level": "Certifier"
},
{
"module": "eManifest",
"level": "Certifier"
},
{
"module": "myRCRAid",
"level": "Certifier"
},
{
"module": "WIETS",
"level": "Certifier"
}
]
},
{
"siteId": "VATESTGEN001",
"siteName": "VA TEST GEN 2021",
"permissions": ["..."]
}
]
}
]
}
If, a value for siteIds
is provided, and userId
list blank, the user search service will find all users that have
access to a site.
Example HTTP Response
{
"totalNumberOfUsers": 8,
"totalNumberOfPages": 1,
"currentPageNumber": 1,
"warnings": [],
"searchedParameters": [
{
"field": "siteIds",
"value": "[VATESTGEN001]"
}
],
"users": [
{
"userId": "myUserId123",
"firstName": "John",
"lastName": "Doe",
"email": "foobar@gmail.com",
"phone": {
"number": "555-555-5555"
},
"esaStatus": "Received",
"lastLoginDate": "2023-08-09T18:15:30.849+00:00",
"sites": ["..."]
}
]
}
State Regulator Authentication
This service is available for state regulators only.
Please contact the RCRAInfo team with questions.
Reference Material
API Client Libraries
The e-Manifest maintains two API client library packages, both called emanifest, one for Python and one for JavaScript/TypeScript.
These packages simplify the process of using the RCRAInfo/e-Manifest web services by abstracting away the details of authentication, parsing and uploading multipart/mixed payloads, and provide an idiomatic interface for interacting with the services.
emanifest (Python)
The emanifest
python package can be downloaded from the Python Packaging Index (PyPI).
Documentation and the source files can be found in the emanifest-py directory of the USEPA/e-manifest repository on GitHub.
emanifest (JavaScript)
The emanifest
JavaScript/TypeScript package can be downloaded from the Node Package Manager (NPM). THe package also
bundles type declarations for TypeScript users.
Documentation and the source files can be found in the emanifest-js directory of the USEPA/e-manifest repository on GitHub.
Remote Signer Policy
The Remote Signer memorandum is a policy issued by EPA that describes how users can sign manifests through a "remote signer". The Remote Signer, an individual with sufficient permissions to sign electronic manifests for their site, is authorized to execute the electronic signature in e-Manifest on behalf of the field personnel who has first-hand knowledge of the hazardous waste shipment. The field personnel does not need to be a registered user in RCRAInfo.
The Remote Signer policy allows field personnel to sign manifests through their sites hazardous waste management software using the remote signer's API credentials (ID and Key). The Remote Signer policy also allows the field personnel to contact a remote signer (e.g., via phone) and authorize the remote signer to sign electronic manifests on their behalf. The remote signer can then execute the electronic signature manifests through the RCRAInfo user interface or using their own software that has been configured to use the remote signer's API credentials.
The full policy can be read on RCRA online
Haztrak
Haztrak is a free, open-source, "overkill proof of concept" web application that servers as a reference
for anyone looking for a working example of how waste management software can interface with RCRAInfo
to track hazardous waste shipments electronically cradle to grave. Haztrak is an
It's built to use the e-Manifest RESTful APIs, designed to be cloud native,
and is available on GitHub under USEPA/haztrak
Sample Java Client
section and link to java client on GitHub