Events
Get a disruption event
One event in full. The id is the one GET /v1/events, /v1/parts and /v1/bom return.
GET
/
v1
/
events
/
{id}
Get a disruption event
curl --request GET \
--url https://api.partfinder.dev/v1/events/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.partfinder.dev/v1/events/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.partfinder.dev/v1/events/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.partfinder.dev/v1/events/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.partfinder.dev/v1/events/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.partfinder.dev/v1/events/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.partfinder.dev/v1/events/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"as_of": "2026-10-01T12:16:43.703Z",
"summary": "Ukraine Black Sea port attacks disrupt grain logistics in Odesa (high severity, Ukraine).",
"notice": "Informational only. Risk scores, stock levels, lead times and alternate-part suggestions may be incomplete, delayed or inaccurate. Independently verify before making procurement, engineering, compliance, safety or sourcing decisions.",
"event": {
"id": 1205,
"title": "Ukraine Black Sea port attacks disrupt grain logistics in Odesa",
"summary": "Military attacks on ports and logistics facilities in Ukraine's Odesa and Mykolaiv regions have crippled grain loading operations, bringing Black Sea grain shipments close to a standstill. The disruption creates immediate logistics bottlenecks and threatens shortages of Ukrainian grain commodities on global markets. Buyers of Ukrainian commodities should track port availability and explore alternative supply sources.",
"severity": "high",
"report_status": "confirmed",
"country": "Ukraine",
"country_code": "UA",
"region": "Europe",
"categories": [
"commodities",
"logistics"
],
"root_cause": "geopolitical_action",
"supply_chain_impact": [
"logistics_disruption",
"shortage"
],
"sourcing_implication": "Attacks on Odesa and Mykolaiv ports hinder Ukrainian grain shipments, prompting buyers of Ukrainian commodities to monitor port availability and consider alternative sources.",
"recommended_action": "monitor",
"sourcing_urgency": "critical",
"regions_exposed": [
"Europe",
"North America",
"Asia-Pacific",
"Latin America",
"Africa"
],
"lead_time": {
"text": "as much as 12 days",
"source": {
"sentence": "Özdemir said waiting times at the Sulina entrance to the Danube had increased from two or three days to as much as 12 days, adding demurrage costs and making delivery schedules harder to manage.",
"url": "https://millermagazine.com/en/blog/black-sea-disruption-shifts-grain-trade-focus-from-price-to-reliable-delivery-7046"
},
"interpretation": "Reported by millermagazine.com on September 30, 2026 for shipments affected by this event."
},
"shipping_check": null,
"source_urls": [
"http://rmb.reuters.com/rmd/rss/item/tag:reuters.com,2026:newsml_KBN3VD06W?channel=BEQ259",
"https://www.livemint.com/market/wheat-falls-as-markets-monitor-black-sea-export-prospects/amp-11790558644308.html"
],
"published_date": "2026-09-28T00:00:00.000Z",
"first_seen": "2026-09-28T04:46:31.972Z"
}
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "credits_exhausted",
"summary": "Your organization's credits for this month are used up, so this request was not run. Upgrade your plan in the PartFinder console at https://console.partfinder.dev/settings/billing, then try again.",
"reason": "This request needs 1 credit and 0 are left.",
"billing_url": "https://console.partfinder.dev/settings/billing"
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}Authorizations
An API key created in the PartFinder console at https://console.partfinder.dev, or a customer key created with POST /v1/keys. Send as Authorization: Bearer <key>. Revocation takes effect within approximately one minute.
Path Parameters
The event id.
Required range:
x >= 1Was this page helpful?
⌘I
Get a disruption event
curl --request GET \
--url https://api.partfinder.dev/v1/events/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.partfinder.dev/v1/events/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.partfinder.dev/v1/events/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.partfinder.dev/v1/events/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.partfinder.dev/v1/events/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.partfinder.dev/v1/events/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.partfinder.dev/v1/events/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"as_of": "2026-10-01T12:16:43.703Z",
"summary": "Ukraine Black Sea port attacks disrupt grain logistics in Odesa (high severity, Ukraine).",
"notice": "Informational only. Risk scores, stock levels, lead times and alternate-part suggestions may be incomplete, delayed or inaccurate. Independently verify before making procurement, engineering, compliance, safety or sourcing decisions.",
"event": {
"id": 1205,
"title": "Ukraine Black Sea port attacks disrupt grain logistics in Odesa",
"summary": "Military attacks on ports and logistics facilities in Ukraine's Odesa and Mykolaiv regions have crippled grain loading operations, bringing Black Sea grain shipments close to a standstill. The disruption creates immediate logistics bottlenecks and threatens shortages of Ukrainian grain commodities on global markets. Buyers of Ukrainian commodities should track port availability and explore alternative supply sources.",
"severity": "high",
"report_status": "confirmed",
"country": "Ukraine",
"country_code": "UA",
"region": "Europe",
"categories": [
"commodities",
"logistics"
],
"root_cause": "geopolitical_action",
"supply_chain_impact": [
"logistics_disruption",
"shortage"
],
"sourcing_implication": "Attacks on Odesa and Mykolaiv ports hinder Ukrainian grain shipments, prompting buyers of Ukrainian commodities to monitor port availability and consider alternative sources.",
"recommended_action": "monitor",
"sourcing_urgency": "critical",
"regions_exposed": [
"Europe",
"North America",
"Asia-Pacific",
"Latin America",
"Africa"
],
"lead_time": {
"text": "as much as 12 days",
"source": {
"sentence": "Özdemir said waiting times at the Sulina entrance to the Danube had increased from two or three days to as much as 12 days, adding demurrage costs and making delivery schedules harder to manage.",
"url": "https://millermagazine.com/en/blog/black-sea-disruption-shifts-grain-trade-focus-from-price-to-reliable-delivery-7046"
},
"interpretation": "Reported by millermagazine.com on September 30, 2026 for shipments affected by this event."
},
"shipping_check": null,
"source_urls": [
"http://rmb.reuters.com/rmd/rss/item/tag:reuters.com,2026:newsml_KBN3VD06W?channel=BEQ259",
"https://www.livemint.com/market/wheat-falls-as-markets-monitor-black-sea-export-prospects/amp-11790558644308.html"
],
"published_date": "2026-09-28T00:00:00.000Z",
"first_seen": "2026-09-28T04:46:31.972Z"
}
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "credits_exhausted",
"summary": "Your organization's credits for this month are used up, so this request was not run. Upgrade your plan in the PartFinder console at https://console.partfinder.dev/settings/billing, then try again.",
"reason": "This request needs 1 credit and 0 are left.",
"billing_url": "https://console.partfinder.dev/settings/billing"
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}{
"error": "authentication_required",
"summary": "<string>",
"reason": "<string>",
"billing_url": "<string>",
"did_you_mean": [
"<string>"
]
}