All sections

Integrated Environmental Permits (IEP)

Unless stated otherwise, this page refers to Ukrainian companies and individual entrepreneurs and uses identifiers from Ukrainian public registries.

This section describes requests used to work with integrated environmental permit cases, documents, installations, and hearings related to an enterprise.

IEP case list

GET /api/v1/enterprises/{registry_id}/integrated-permit-cases

This request returns integrated permit cases related to the enterprise.

The registry_id parameter in the request path is required. It is the enterprise identifier.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "00178353" },
    "items": [
      {
        "id": 321,
        "registry_id": "IEP-2026-001",
        "status": "In progress",
        "is_present_in_registry": true,
        "operator_name": "Example Operator LLC",
        "industrial_site_name": "Main industrial site",
        "industrial_site_address": "Kyiv region, Boryspil district",
        "region": "Київська область",
        "submitted_at": "2026-02-15",
        "last_progress_at": "2026-02-20T10:15:00+02:00",
        "documents_count": 5,
        "installations_count": 2,
        "hearings_count": 1,
        "links": {
          "details": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-case-details/321",
          "status_history": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/status-history",
          "documents": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/documents",
          "hearings": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/hearings"
        }
      }
    ],
    "pagination": { "current_page": 1, "per_page": 20, "total": 1, "last_page": 1 }
  },
  "stats": { "..." }
}

IEP case details

GET /api/v1/enterprises/{registry_id}/integrated-permit-case-details/{case_id}

This request returns full data for a specific integrated permit case. Status history is available via a separate endpoint returned in links.status_history.

The registry_id and case_id parameters in the request path are required. registry_id is the enterprise identifier. case_id is the case identifier.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-case-details/321" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "00178353" },
    "object": {
      "id": 321,
      "registry_id": "IEP-2026-001",
      "status": "In progress",
      "is_present_in_registry": true,
      "operator_name": "Example Operator LLC",
      "industrial_site_name": "Main industrial site",
      "industrial_site_address": "Kyiv region, Boryspil district",
      "region": "Київська область",
      "submitted_at": "2026-02-15",
      "last_progress_at": "2026-02-20T10:15:00+02:00",
      "registry_created_at": "2026-02-15T09:00:00+02:00",
      "registry_updated_at": "2026-02-20T10:15:00+02:00",
      "registry_url": "https://eco.gov.ua/example-case",
      "documents_count": 5,
      "installations_count": 2,
      "hearings_count": 1,
      "progress": [],
      "application_details": null,
      "installations": [],
      "hearings": [],
      "links": {
        "status_history": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/status-history",
        "documents": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/documents",
        "hearings": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/hearings"
      }
    }
  },
  "stats": { "..." }
}

Response fields

results.items[]

  • id: IEP case identifier.
  • registry_id: application number.
  • status: current case status.
  • is_present_in_registry: whether the case is currently present in the official IEP registry.
  • operator_name: installation operator.
  • industrial_site_name: short name of the industrial site or case.
  • industrial_site_address: industrial site address from the case.
  • region: case region.
  • submitted_at: application submission date.
  • last_progress_at: date and time of the latest known case movement from the registry chronology.
  • documents_count: number of documents in the case.
  • installations_count: number of installations in the case.
  • hearings_count: number of hearings in the case.

results.object

  • is_present_in_registry: whether the case is currently present in the official IEP registry.
  • registry_created_at: registry record creation date, if available from the source.
  • registry_updated_at: registry record update date.
  • last_progress_at: date and time of the latest chronology event for the case.
  • registry_url: link to the official registry card.
  • progress: case movement chronology.
  • application_details: structured data extracted from the main application.
  • installations: installations within the case.
  • hearings: hearings within the case.
  • links.status_history: link to the separate endpoint with status history of this case.
  • links.documents: link to documents of this case.
  • links.hearings: link to hearings of this case.

IEP case status history

GET /api/v1/enterprises/{registry_id}/integrated-permit-cases/{case_id}/status-history

This request returns a separate paginated list of status-history and service events for a specific IEP case.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/status-history" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "00178353" },
    "object": {
      "id": 321,
      "registry_id": "IEP-2026-001",
      "status": "In progress",
      "industrial_site_name": "Main industrial site"
    },
    "items": [
      {
        "id": 9002,
        "event_type": "registry_absent",
        "status": "In progress",
        "previous_status": null,
        "source_effective_at": "2026-06-02T12:00:00+03:00",
        "first_detected_at": "2026-06-02T12:00:00+03:00",
        "last_detected_at": "2026-06-02T12:00:00+03:00",
        "progress_title": null,
        "progress_description": null,
        "message": "The case was not visible in the IEP registry."
      }
    ],
    "pagination": { "current_page": 1, "per_page": 20, "total": 9, "last_page": 1 }
  },
  "stats": { "..." }
}

results.items[]

  • id: status history record identifier.
  • event_type: type of status history event.
  • status: status associated with the record.
  • previous_status: previous status, if it could be determined.
  • source_effective_at: event date and time from the registry, or the date we recorded for a service event.
  • first_detected_at: when this record was first detected in ESG SaveEcoBot.
  • last_detected_at: when this record was last confirmed during synchronization.
  • progress_title: chronology stage title, if the record comes from the registry timeline.
  • progress_description: chronology stage description, if available.
  • message: service message for events such as disappearance from or return to the registry.
event_type values
  • progress_status: regular chronology entry from the official registry.
  • status_snapshot_mismatch: the current case status on the card differs from the latest status in the chronology.
  • registry_absent: the case was not present in the official registry during verification.
  • registry_returned: the case appeared in the official registry again after being absent.

Enterprise IEP documents

GET /api/v1/enterprises/{registry_id}/integrated-permit-documents

This request returns integrated permit documents related to the enterprise.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-documents" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "00178353" },
    "items": [
      {
        "id": 501,
        "name": "Integrated permit application",
        "format": "pdf",
        "size": 314572,
        "uploaded_at": "2026-02-15T09:05:00+02:00",
        "section": "application",
        "installation_title": "Boiler house No. 1",
        "case": {
          "id": 321,
          "registry_id": "IEP-2026-001",
          "industrial_site_name": "Main industrial site",
          "region": "Київська область"
        },
        "links": {
          "download": "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-documents/501/download"
        }
      }
    ],
    "pagination": { "current_page": 1, "per_page": 20, "total": 5, "last_page": 1 }
  },
  "stats": { "..." }
}

Documents of an IEP case

GET /api/v1/enterprises/{registry_id}/integrated-permit-cases/{case_id}/documents

This request returns integrated permit documents for a specific case.

The registry_id and case_id parameters in the request path are required. registry_id is the enterprise identifier. case_id is the case identifier.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-cases/321/documents" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Filters

  • installation_id: limit documents to a specific installation inside the case.

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "00178353" },
    "object": {
      "id": 321,
      "registry_id": "IEP-2026-001",
      "industrial_site_name": "Main industrial site"
    },
    "items": []
  },
  "stats": { "..." }
}

Enterprise IEP hearings

GET /api/v1/enterprises/{registry_id}/integrated-permit-hearings

This request returns hearings related to integrated permit cases of the enterprise.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/43732948/integrated-permit-hearings" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "43732948" },
    "items": [
      {
        "id": 12,
        "title": "Public hearing on the IEP case",
        "description": "Discussion of comments and proposals regarding the integrated environmental permit application.",
        "starts_at": "2026-05-10T10:00:00+03:00",
        "ends_at": "2026-05-10T12:00:00+03:00",
        "location": "Vinnytsia City Council",
        "address": "Vinnytsia, Soborna St, 59",
        "case": {
          "id": 1,
          "registry_id": "000056/26",
          "industrial_site_name": "ТОРГТЕХНІКА"
        }
      },
      {
        "id": 13,
        "title": "Follow-up public hearing on the IEP case",
        "description": "Additional discussion of the application materials and public questions.",
        "starts_at": "2026-05-17T11:00:00+03:00",
        "ends_at": "2026-05-17T13:00:00+03:00",
        "location": "Vinnytsia City Council",
        "address": "Vinnytsia, Soborna St, 59",
        "case": {
          "id": 1,
          "registry_id": "000056/26",
          "industrial_site_name": "ТОРГТЕХНІКА"
        }
      }
    ],
    "pagination": { "current_page": 1, "per_page": 20, "total": 2, "last_page": 1 }
  },
  "stats": { "..." }
}

Response fields

results.items[]

  • id: hearing identifier.
  • title: hearing title.
  • description: free-text description.
  • starts_at: hearing start date and time, if available.
  • ends_at: hearing end date and time, if available.
  • location: short hearing venue name.
  • address: hearing address.
  • case: short information about the IEP case.
  • case.id: IEP case identifier.
  • case.registry_id: application number.
  • case.industrial_site_name: short industrial site or case name.

Hearings of an IEP case

GET /api/v1/enterprises/{registry_id}/integrated-permit-cases/{case_id}/hearings

This request returns hearings for a specific integrated permit case.

The registry_id and case_id parameters in the request path are required. registry_id is the enterprise identifier. case_id is the case identifier.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl "https://esg.saveecobot.com/api/v1/enterprises/43732948/integrated-permit-cases/1/hearings" \
  -H "Authorization: Bearer $ESG_API_TOKEN" \
  -H 'Accept: application/json'

Example response

{
  "results": {
    "enterprise": { "type": "company", "registry_id": "43732948" },
    "object": {
      "id": 1,
      "registry_id": "000056/26",
      "industrial_site_name": "ТОРГТЕХНІКА"
    },
    "items": [
      {
        "id": 12,
        "title": "Public hearing on the IEP case",
        "description": "Discussion of comments and proposals regarding the integrated environmental permit application.",
        "starts_at": "2026-05-10T10:00:00+03:00",
        "ends_at": "2026-05-10T12:00:00+03:00",
        "location": "Vinnytsia City Council",
        "address": "Vinnytsia, Soborna St, 59"
      },
      {
        "id": 13,
        "title": "Follow-up public hearing on the IEP case",
        "description": "Additional discussion of the application materials and public questions.",
        "starts_at": "2026-05-17T11:00:00+03:00",
        "ends_at": "2026-05-17T13:00:00+03:00",
        "location": "Vinnytsia City Council",
        "address": "Vinnytsia, Soborna St, 59"
      }
    ]
  },
  "stats": { "..." }
}

Response fields

results.object

  • id: IEP case identifier.
  • registry_id: application number.
  • industrial_site_name: short industrial site or case name.

results.items[]

  • id: hearing identifier.
  • title: hearing title.
  • description: free-text description.
  • starts_at: hearing start date and time, if available.
  • ends_at: hearing end date and time, if available.
  • location: short hearing venue name.
  • address: hearing address.

IEP document download

GET /api/v1/enterprises/{registry_id}/integrated-permit-documents/{document_id}/download

This request returns an integrated permit document file for download.

The registry_id and document_id parameters in the request path are required. registry_id is the enterprise identifier. document_id is the document identifier.

Example request

$ ESG_API_TOKEN="your_api_token"
$ curl -L "https://esg.saveecobot.com/api/v1/enterprises/00178353/integrated-permit-documents/501/download" \
  -H "Authorization: Bearer $ESG_API_TOKEN"

Get access to the ESG company profile
in the SaveEcoBot system in Ukraine

Make your ESG analysis flawless!