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:

  1. Through their favorite web browser at https://rcrainfo.epa.gov/

  2. 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

  1. Register in the RCRAInfo test environment (Pre-Production).
  2. 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.

sample paper manifest

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

  1. 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.

  2. 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.

  1. 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).

  1. 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.

    manifest status Green boxes are shared by electronic/hybrid and paper manifests.

  2. 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

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.

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.

  1. Visit the RCRAInfo pre-production site
  2. Click on the "Register" link and select "Industry User"
  3. 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 IDSite NameStateZipType of SiteNotes
VA988177803HEATING AND OILVirginia22033Generator only
VATEST000001TEST TRANSPORTER 1 OF VAVirginia22202Generator, Transporter
VATEST000002TEST TRANSPORTER 2 OF VAVirginia22202Generator, Transporter
VAD000532119TEST TSDF OF VAVirginia22202Generator, TSDFCan be used for testing web services
VATEST000003TEST TSDF OF VA TWOVirginia22202Generator, TSDFCan be used for testing web services
VATEST000004TEST GENERATOR OF VAVirginia22202Generator 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.

  1. [All users] Authentication services
  2. [All users] e-Manifest Lookup Services
  3. [All users] Lookup Services
  4. [All users] Site Services
  5. [All users] User Services
  6. [Industry users] e-Manifest Services
  7. [Industry users] e-Manifest UI Link Services
  8. [Regulator users] CM&E Evaluation Services
  9. [Regulator users] e-Manifest Services
  10. [Regulator users] Handler Services
  11. [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

  • JSON Schema

  • Sample JSON for submitting manifests to EPA, including:

  • 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

  1. 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
  2. System will check if API ID was disabled by the Administrator. If so following error will be generated:
    • E_SecurityApiInvalidStatus: API ID Status Invalid
  3. 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
  4. 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.
  5. If successful the system will return JSON containing following information:
    • token
    • expiration
  6. If failed Authentication the System will return JSON containing the following field:
    • code : Error code which designated for automated processing
    • message: "Human readable" Error message corresponding to the error code
    • errorId: Unique error id for auditing and tracking purpose
    • errorDate: Error Date/Time for auditing and tracking purpose

Errors

CodeMessage
E_SecurityApiInvalidCredentialsInvalid API Id/Key Specified
E_SecurityApiInvalidStatusAPI Id Status Invalid
E_SecurityApiIdLockedAPI Id is Locked
E_SystemErrorMessage 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:

  1. 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:

  1. 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
  2. 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

  1. 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 for rejectionInfo.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 is OriginalGenerator and user is not authorized for generator.epaSiteId, the following error is generated:

    • E_GeneratorAuthorizationSave: User is not authorized for the Generator. Cannot create Image or DataImage5Copy manifests
  2. 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
  3. 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

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

  1. Security Token Validation.

  2. User Authorization.

  3. If the User is authenticated and authorized, the system processes the request

  4. 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
  5. 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
  6. 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
  7. 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 or DataQaCompleted this version will be returned by the service.
  • If PPC status of the latest manifest version is either Draft or DataEntryInProgress or PendingDataQc or PendingDataQa 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 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. 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

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

See manifest JSON schema

Sequence of Steps

  1. Security Token Validation.

  2. User Authorization.

  3. 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.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
  4. 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
  5. 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

ForFullElectronicandHybridsubmission 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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.
  4. 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.

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 the Pending or Scheduled status
  • Hybrid: can be deleted only if in the Pending or Scheduled status
  • DataImage5Copy: can be deleted only if in the ReadyForSignature or "MtnValidationFailed" status
  • Image: can be deleted only if originType = Web or Service and status is in the ReadyForSignature or MtnValidationFailed status

Service will check if the manifest is locked. The manifest is locked for delete when Manifest is in a queue for signing.

Parameters

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

  1. Security Token Validation.

  2. User Authorization.

  3. 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 or Hybrid or not selected and manifest status is not Pendingof Scheduled 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 not ReadyForSignature 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
  4. The system will delete the manifest.

  5. On success the system returns JSON containing the following information:

    • Manifest Tracking Number
    • Operation Status: "Deleted
    • Date: Date/Time of the operation
  6. 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 manifest
    • siteType: required, the RCRAInfo site type of the handler to sign the manifest
      • Generator
      • Transporter
      • TSDF
      • RejectionInfo_AlternateTsdf
    • transporterOrder: required only if siteType is Transporter, the order of the transporter signing the manifest
    • printedSignatureName: required, the name of the person signing the manifest
    • printedSignatureDate: 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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.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)
  4. 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)
  5. 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)
  6. 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

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

  1. Security Token Validation.

  2. User Authorization.

  3. 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.`
    
  4. 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 or Corrected, then the service creates a new manifest version with the provided Manifest information. The service assigns the UnderCorrection 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.

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

Sequence of Steps

  1. Security Token Validation.

  2. User Authorization.

  3. 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.
  4. 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)

  5. 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
  6. 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

crud-manifest-success.json

{
  "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

  • Security Token

  • 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. Either stateCode or siteId shall be provided.

    • siteId: TSDF, Generator, or Transporter Site ID. This is one of two Mandatory Parameters. Either stateCode or siteId 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 provided stateCode 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 and endDate 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

  1. Security Token Validation.

  2. User Authorization.

  3. The system will process the request.

    • 3.1. If stateCode is not provided and siteId 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.
  4. 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:
  5. empty list

    • 6.1. If any system errors were encountered during the processing, the system returns JSON containing:
  6. 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:

  1. Link to View a manifest
  2. Link to Sign a manifest
  3. Link to Edit a manifest
  4. Link to display manifest dashboard
  5. Link to bulk sign manifest(s)

Parameters

  • Security Token

  • 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 provided page value is either View, Edit, or Sign. This parameter may not be provided if the page value is equal to Dashboard, BulkSign, or BulkQuickSign.
    • 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 the page value is equal to View, Edit, or Sign.
    • view : A string value specifying the view the page should take in the UI. This parameter may not be provided if the page value is equal to View, Edit, or Sign. Values include Incoming, Outgoing, All, Transporting, Broker, and CorrectionRequests if the provided page value is Dashboard. Values include Original, Corrections, and CorrectionRequests if the provided page value is BulkSign. Values include Incoming, Outgoing, and Transporting if the provided page value is BulkQuickSign.

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

  1. Security Token Validation.

  2. User Authorization.

  3. 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" and manifestTrackingNumber 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 the manifestTrackingNumber 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 the manifestTrackingNumber 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 and manifestTrackingNumber 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"
        }
      ]
    }
    
  4. On success, the service returns the URL for the manifest page

  5. If any validation errors were found the service returns an error report

  6. 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

  1. Supplying both billingAccount and the billId

    {
      "billingAccount": "VATESTTSDF001",
      "billId": "123456789"
    }
    
  2. Supplying both billingAccount and the monthYear

    {
      "billingAccount": "VATESTTSDF001",
      "monthYear": "01/2021"
    }
    
  3. If monthYear is provided along with billingAccount and billId, the monthYear argument is ignored.

    {
      "billingAccount": "VATESTTSDF001",
      "billId": "123456789",
      "monthYear": "01/2021"
    }
    

Response Schema

See bill.json for the response schema.

Sequence of Steps

  1. Security Token Validation.

  2. User Authorization.

  3. 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 or monthYear) 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 the billId 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
  4. 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. Valid monthYear 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, valid monthYear 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 the billStatus is Credit then a negative value will be returned. If the billStatus is ZeroBalance then 0 value will be returned
      • currentAmount: The amount for manifests invoiced for the current billing period
      • previousAmount: The total for all manifests not paid or sent to collections from billing periods before the current period
      • previousInterestAmount: 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 period
      • previousPenaltyAmount: for invoices that are being sent to collections, the penalty amount for that invoice
      • previousLateFeeAmount: 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 period
      • dueDate: The date the invoice is due
      • 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
      • createdDate: The date the first manifest for this invoice was signed and placed on the invoice
      • updatedDate
      • billItems containing the following information:
        • manifestTrackingNumber
        • amount: Amount charged for each manifest
        • submissionType: "FullElectronic", "Hybrid", "DataImage5Copy", "Image"
        • originType: "Web", "Services", "Mail"
        • certifiedDate: Date the manifest was certified and placed on this invoice
        • generatorSiteId: 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 for
        • interestAmount: the total interest amount for this lateFeeBillId
        • penaltyAmount: the total penalty amount for this lateFeeBillId
        • lateFeeAmount: the total interest, penalty, and flat fee amounts for this lateFeeBillId
        • flatFeeAmount: the total flat fee amount for this lateFeeBillId
        • 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 invoice
        • amountType: Current, LateFee
        • adjustmentType: Increase, Decrease, FullPayment
        • publicComments:
        • createdDate
  5. On success, the system returns JSON generated in section 4

  6. 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 ID
  • startMonthYear: Contains month number and year for the date range start, if provided in the request. If only startMonthYear provided the service return bill history from the start until current mm/yyyy. If invalid startMonthYear is provided bill history from inception to the endMonthYear is returned.
  • endMonthYear: Contains month number and year for the date range end. If only endMonthYear provided the service return bill history from inception to the endMonthYear. If invalid endMonthYear is provided bill history from startMonthYear to the current date is returned.
  • billsInfo: contains individual bills for the billing account. For each bill it contains following information
    • billId: unique bill id
    • 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 negative value will be returned. If the billStatus is ZeroBalance then 0 value will be returned
    • paidBy: Contains the bill payee user id
    • paymentType: 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 date
    • startMonthYear: Contains month number and year for the date range start. Format 'mm/yyyy'. If only startMonthYear provided the service return bill history from the start until current mm/yyyy. If invalid startMonthYear is provided bill history from inception to the endMonthYear is returned.
    • endMonthYear: Contains month number and year for the date range end. Format 'mm/yyyy'. If only endMonthYear provided the service return bill history from inception to the endMonthYear. If invalid endMonthYear is provided bill history from startMonthYear 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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
  4. 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).
  5. 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
  6. On success, the system returns JSON generated in section 4

  7. 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

  • Security Token

  • 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 of bill.updatedDate.

  • endDate: Required parameter, retrieves bills based on the value of bill.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. If pageNumber 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

  1. Security Token Validation.

    • 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"
      }
      
  2. User Authorization.

  3. 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
      
  4. 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.

  5. 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]
      
  6. 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 criteria
    • totalNumberOfPages: Total Number Of Pages for provided search criteria
    • currentPageNumber: Current Page Number for provided search criteria
    • searchedParameters: valid parameters used in search
      • field: parameter field name
      • value: parameter value
    • warnings: validation errors for optional parameters
      • message: validation message
      • field: parameter field name
      • value: parameter value

    Each bill will contain the following information:

    • billingAccount: EPA site ID
    • billId: bill id
    • billStatus: 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 returned
    • currentAmount: The amount for manifests invoiced for the current billing period
    • previousAmount: The total for all manifests not paid or sent to collections for billing periods before the current period
    • previousInterestAmount: 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 period
    • previousPenaltyAmount: for invoices that are Unpaid after four months, the penalty amount for that invoice
    • previousLateFeeAmount: Total of the flat fee, penalty, and interest charges for all manifests and invoices not paid from billing periods before the current period
    • dueDate The date the invoice is due
    • paidBy: Contains the bill payee user id, for invoices that were mark as paid by the EPA, this element is not returned
    • paymentType: Contains payment type , Following values can be returned: "Credit", "Ach", for invoices that were mark as paid by the EPA, this element is not returned
    • createdDate: The date the invoice was created
    • totalAmountChanged: 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 updated
    • lateFees (when applicable) containing the following information:
      • lateFeeBillId: Bill Id which Late Fee is calculated for
      • interestAmount: the total interest amount for this lateFeeBillId
      • penaltyAmount: the total penalty amount for this lateFeeBillId
      • lateFeeAmount: the total interest, penalty, and flat fee amounts for this lateFeeBillId
      • flatFeeAmount: the total flat fee amount for this lateFeeBillId
      • 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 invoice
      • amountType: "Current", "LateFee"
      • adjustmentType: "Increase", "Decrease", "FullPayment"
      • publicComments:
      • createdDate
    • RecalculationInfo: (when applicable) containing the following information:
      • recalculationReason: "OriginalSiteBill", "NewSiteBill", "SoftDelete"
  7. On success, the system returns JSON generated in section 4

  8. 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

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 neither Corrected nor UnderCorrection versions were created then the service will return information about the Signed version of the manifest.
  • If the manifest status is Corrected then the service will return information about Signed version and all Corrected versions of the manifest.
  • If the manifest status is UnderCorrection then the service will return information about the Signed version of the manifest, the UnderCorrection version and all Corrected versions of the manifest (if any Corrected 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 or DataEntryInProgress or PendingDataQc or PendingDataQa then no manifest versions associated with PPC processing will be returned If PPC status is either PendingDataEntry or DataQaCompleted then the service will return information about the manifest version(s) created for PPC processing.

Parameters

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 TSDF
    • Corrected: version was corrected and electronically signed by either a TSDF or Generator or Transporter user
    • UnderCorrection: 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 PPC
    • DataQaCompleted: 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 or Signed statuses. If the version is in the UnderCorrection status the version number is not assigned.
    • electronicSignature: containing
      • signer: container user information of the signer
        • firstName
        • lastName
        • userId
      • signatureDate
      • humanReadableDocument: containing
        • name: "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.

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:

  1. The handler ID: the unique EPA ID of the handler
  2. details requested: a boolean, cast as a string (e.g., true or false), 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:

  1. Uploading scanned copies of paper manifests prior to submitting (certifying) them
  2. Downloading the scanned copy of paper manifests for viewing or printing
  3. Downloading electronic manifests in PDF format that can be used for DOT shipping paper requirements
  4. 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:

  1. The JSON encoded manifest data
  2. 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:

  1. 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
  2. The sample Java client.
  3. 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:

  1. For the DataImage5Copy and Image 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).

  2. 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

  3. If the document is already stored as a part of the manifest and document is not provided, the service generates no errors or warnings.

  4. If the document is not stored and the status is ReadyForSignature, the document is mandatory.

  5. 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"
    }
    
  6. 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"
    }
    
  7. 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"
    }
    
  8. 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"
    }
    
  9. 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"
    }
    
  10. 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"
    }
    
  11. 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).

  1. 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

  2. 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

  1. 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

  2. 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.
  3. If one of the following IDs: Emanifest.designatedFacility.epaSiteID and Emanifest.generator.epaSiteId and Emanifest.rejectionInfo.alternateDesignatedFacility.siteId is not provided then the service will return an authorization error.

  4. If the provided EPA SiteIDis not registered, then the service will return an authorization error.

  5. If Emanifest.designatedFacility.epaSiteId or Emanifest.generator.epaSiteId or Emanifest.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

  6. If Emanifest.designatedFacility.epaSiteId or Emanifest.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"
    }
    
  7. If Emanifest.designatedFacility.epaSiteId or Emanifest.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"
    }
    
  8. 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"

Transporter Information Validation

  1. If submissionType is FullElectronic or Hybrid, 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"
      }
      
  2. If submissionType is DataImage5Copy, 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 is Hybrid or FullElectronic and Emanifest.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

  1. If submissionType is FullElectronic and status >= 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"
    }
    
  2. If submissionType is FullElectronic or Hybrid and status >= Scheduled, or submissionType is DataImage5Copy 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"
      }
      

New Manifest Information Validation

  1. If the New Manifest is created for shipping the waste to another TSDF or back to the Generator

    • If Emanifest.status >= "ReadyForSignature" and Emanifest.containsPreviousRejectOrResidue is not provided then the service generates the following error:
      {
        "message": "Mandatory Field is not Provided.",
        "field": "Emanifest.containsPreviousRejectOrResidue"
      }
      
    • If Emanifest.containsPreviousRejectOrResidue == true and Emanifest.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" and Emanifest.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"
      }
      

Generator Site Information Validation

  1. If submissionType is FullElectronic 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.

  2. If submissionType is FullElectronic 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"
    }
    
  3. If submissionType is DataImage5Copy or Hybrid, 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

  1. If submissionType is FullElectronic 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"
    }
    
  2. If submissionType is Hybrid and Emanifest.status > Scheduled and generator.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"
    }
    
  3. If submissionType is Image, 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"
    }
    
  4. 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"
    }
    
  5. 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" and Emanifest.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

  1. 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"
    }
    
  2. 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 validate pcbInfos. 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 validate brInfo. See details in Biennial Report Information Validation section.

    • 2.7. Validate dotInformation/wasteDescription.

      • If the element dotHazardous is true, the waste must contain dotInformation.

      • If the element dotHazardous is false, the waste must contain wasteDescription.

      • If the element dotHazardous is true, and dotInformation 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 and dotInformation is provided, the service will validate the dotInformation fields. See section DOT Information fields validation for details.

      • If the element dotHazardous is false and dotInformation 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 element wasteDescription 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 element wasteDescription is provided, then the service validates wasteDescription. If wasteDescription 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 element wasteDescription 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:

  1. 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"
    }
    
  2. 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

  1. Containers and Quantity fields are mandatory
  2. If the quantity entity is not provided, the system generates the following error:
    {
      "message": "Mandatory Field is not Provided",
      "field": "Emanifest.waste.quantity"
    }
    
  3. 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"
    }
    
  4. 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"
    }
    
  5. 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 "
    }
    
  6. 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 "
    }
    
  7. 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

  1. All Additional Information fields are optional. If any of the fields are invalid, they will be ignored with a warning.

  2. 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"
    }
    
  3. 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"
        }
        
    • 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

  1. If pcb == false and any of the pcbInfos 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"
    }
    
  2. If pcb == true and pcbInfos are not provided, the service generates the following error:

    {
      "message": "Mandatory Field is not Provided",
      "field": "Emanifest.waste.pcbInfos"
    }
    
  3. 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"
        }
        
    • 3.2. Validate pcbInfos.articleContainerId

      • If pcbInfos.loadType.code is Container, ArticleInContainer, or ArticleNotInContainer and PcbInfos.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" and articleContainerId is provided, then the service generates the following warning:
        {
          "message": "Field will be ignored",
          "field": "Emanifest.waste.pcbInfos.articleContainerId",
          "value": "articleContainerId value"
        }
        
    • 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"
        }
        
    • 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"
        }
        
    • 3.5. Validate PcbInfos.wasteType

      • If pcbInfos.loadType is "Container" or "ArticleInContainer" and wasteType 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" and wasteType 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"
        }
        
    • 3.6. Validate PcbInfos.bulkIdentity

      • If PcbInfos.loadType is "BulkWaste" and bulkIdentity 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" and bulkIdentity 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"
        }
        

Management Method Code Validation

  1. If submissionType is DataImage5Copy the following applies

    • 1.1. If epaWaste is true and Waste.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"
      }
      
  2. If submissionType is FullElectronic or Hybrid the following applies

    • 2.1. If Emanifest.status is Scheduled, InTransit, or ReadyForSignature, 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"
        }
        
    • 2.2. If Emanifest.status is "Signed," the following applies

      • If the Waste.managementMethod.code is provided, then the service updates Emanifest.validationStatus to true
      • 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"
        }
        

Rejection Information Validation

  1. If an Original Manifest is rejected then Emanifest.rejection shall be specified as true.

  2. Emanifest.rejection and RejectionInfo shall be provided at the ReadyForSignature status. If provided for earlier statuses these fields will be ignored.

    • 2.1 If Emanifest.status < "ReadyForSignature" and either Emanifest.rejection or RejectionInfo 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"
      }
      
  3. If submissionStatus >= "ReadyForSignature" and Emanifest.rejection is not provided then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.rejection"
    }
    
  4. Emanifest.containsPreviousRejectOrResidue is not provided then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.containsPreviousRejectOrResidue"
    }
    
  5. 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" and RejectionInfo.transporterOnSite == true the following applies

    • If RejectionInfo.rejectionType == "PartialReject" then the service sets RejectionInfo.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 is FullElectronic or Hybrid and provided RejectionInfo.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 provided manifestTrackingNumber 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"
        }
        
  6. If Emanifest.rejection == false and If any of the following RejectionInfo 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

  1. If status >= ReadyForSignature and DiscrepancyResidueInfo.wasteQuantity is not provided then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.discrepancyResidueInfo.wasteQuantity"
    }
    
  2. If status >= ReadyForSignature and DiscrepancyResidueInfo.wasteType is not provided then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.discrepancyResidueInfo.wasteType"
    }
    
  3. If DiscrepancyResidueInfo.wasteQuantity == true or DiscrepancyResidueInfo.wasteType == true and DiscrepancyResidueInfo.discrepancyComments is not provided then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.discrepancyResidueInfo.discrepancyComments"
    }
    
  4. 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"
    }
    
  5. If DiscrepancyResidueInfo.wasteQuantity == false and DiscrepancyResidueInfo.wasteType == false and DiscrepancyResidueInfo.discrepancyComments is provided then the service generates the following warning:

    {
      "message": "Provided Field will be Ignored.",
      "field": "Emanifest.discrepancyResidueInfo.discrepancyComments",
      "value": "discrepancyComments value"
    }
    
  6. If DiscrepancyResidueInfo.wasteQuantity == true or DiscrepancyResidueInfo.wasteType == true then the service sets Emanifest.discrepancy = true

  7. If DiscrepancyResidueInfo.wasteQuantity == false and DiscrepancyResidueInfo.wasteType == false then the service sets Emanifest.discrepancy

Residue Information Validation

  1. If status >= ReadyForSignature and DiscrepancyResidueInfo.residue is not provided, then the service generates the following error:

    {
      "message": "Mandatory Field is not Provided.",
      "field": "Emanifest.discrepancyResidueInfo.residue"
    }
    
  2. If DiscrepancyResidueInfo.residue == true and DiscrepancyResidueInfo.residueComments is provided, the service validates if DiscrepancyResidueInfo.residueComments has valid format. If DiscrepancyResidueInfo.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"
    }
    
  3. If DiscrepancyResidueInfo.residue == false and DiscrepancyResidueInfo.residueComments is provided, then the service generates the following warning:

    {
      "message": "Provided Field will be Ignored.",
      "field": "Emanifest.discrepancyResidueInfo.residueComments",
      "value": "residueComments value"
    }
    
  4. If DiscrepancyResidueInfo.residue == true then the service sets Emanifest.residue = true

  5. If DiscrepancyResidueInfo.residue == true then the Emanifest.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 of residueNewManifestTrackingNumber(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 provided residueNewManifestTrackingNumber 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

  1. 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
  2. If the Waste.br == true and none of the provided Waste.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
  3. 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
  4. If Waste.br == true and Waste.brInfo fields are provided, then the following applies:

  5. 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"
        }
        
    • 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"
        }
        
    • 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"
        }
        
    • 5.4. Validate Density and Density Units Of Measurement

      • If Waste.UnitOfMeasurement.code is not G, L, Y, or N (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 is G, L, Y, or N (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 provided densityUnitOfMeasurement.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 characters
  • name: site name, any number of characters not exceeding 80 characters
  • streetNumber: optional parameter, any number of characters not exceeding 12 characters
  • address1: optional parameter, cannot exceed 50 characters
  • city: cannot exceed 25 characters
  • state: 2 character state code
  • zip: valid zip code
  • siteType: 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 characters
    • name
    • streetNumber: if streetNumber is provided and address1 is not provided the service will not use streetNumber for the search, the service will return an error
    • address1: 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 error
    • city
    • state
    • zip

Parameters

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

{
  "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

  1. Security Token Validation.

  2. User Authorization.

  3. 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 and address1 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
  4. 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.

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

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

  1. Security Token Validation.

  2. User Authorization.

  3. 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.
  4. 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.
      • 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).
    • 4.2. If any errors were encountered during processing, the system returns JSON containing:
      • Error: containing code, message, error ID, and date.

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

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
}

See site-exists-return.json

Sequence of Steps

  1. Security Token Validation.

  2. User Authorization.

  3. 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
  4. 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

  1. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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
  4. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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
  4. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Proper Shipping Name
  2. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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
  4. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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
  4. 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

  1. Security Token Validation.
  2. User Authorization.
  3. 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

  1. Proper Shipping Name
  2. 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

  1. Security Token Validation.

  2. User Authorization.

  3. 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
  4. 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.

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)

Downloads PyPI License: CC0-1.0

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)

npm License: MIT npm type definitions

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