{
  "openapi": "3.0.1",
  "info": {
    "title": "OFAC Sanctions Screening: UN, EU, UK Lists + LEI & EU VAT Check",
    "description": "First 25 counterparty checks free. Sanctions screening of companies and vessels, one verdict each — pay per qualified counterparty check. Denied party lists: OFAC, Entity List, UN, EU, UK; LEI lookup; validation of EU VAT numbers. AI with Apify model access or your own key. Free demo on any plan.",
    "version": "0.1",
    "x-build-id": "DyNjU4ZpzbLYXtDlF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rich_minds~counterparty-check-ai/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rich_minds-counterparty-check-ai",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/rich_minds~counterparty-check-ai/runs": {
      "post": {
        "operationId": "runs-sync-rich_minds-counterparty-check-ai",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/rich_minds~counterparty-check-ai/run-sync": {
      "post": {
        "operationId": "run-sync-rich_minds-counterparty-check-ai",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "preset": {
            "title": "Start from a ready check (one click)",
            "enum": [
              "custom",
              "exporter-buyers",
              "freight-shipping",
              "us-export-control",
              "eu-suppliers-vat",
              "marketplace-sellers",
              "vessel-screening"
            ],
            "type": "string",
            "description": "Pick a ready check and press Start: it <b>replaces the free sample</b> with a real example list for that trade and runs the live check (the untouched sample counts as empty); a value you typed yourself always wins. <b>Custom</b> = fill the fields yourself.",
            "default": "custom"
          },
          "counterparties": {
            "title": "Counterparties to check",
            "type": "array",
            "description": "One per line: name, 2-letter country — <code>Acme Trading FZE, AE</code>, or a vessel <code>PEGAS, IMO 9256860</code>. Typing here replaces the demo and starts the live check on any Apify plan (a plan that cannot run the Store fallback still gets every row). VAT / LEI numbers: link your sheet below. Affects what you pay.",
            "items": {
              "type": "string"
            }
          },
          "sheetUrl": {
            "title": "Or link your supplier sheet (Google Sheets, CSV or Excel)",
            "type": "string",
            "description": "A Google Sheet share link or any CSV / .xlsx URL — headers matched automatically: <b>Name</b> (or Company / Supplier), <b>Country</b>, <b>VAT</b>, <b>LEI</b>, <b>Registration number</b>, IMO. Every row with a name is checked, on any Apify plan (a plan that cannot run the Store fallback still gets every row). Affects what you pay."
          },
          "notifyEmail": {
            "title": "E-mail me the verdicts (optional)",
            "type": "string",
            "description": "The digest (counts by verdict, every block and review with its reason) is e-mailed here after every run with something to report; weekly with a re-screen memory, only changes arrive. Never sent for the free demo."
          },
          "minScore": {
            "title": "Minimum score (0–100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "<b>Blocks and reviews are always delivered</b> — this only drops <b>clear</b> rows scoring below it. Score = 100 − risk: clear ≈ 95, review ≈ 40, block ≈ 5. Dropped rows are not charged. Leave 0 to keep every clear verdict too (a clear verdict is evidence for your file).",
            "default": 0
          },
          "maxQualified": {
            "title": "Max counterparties to deliver",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard cap on rows and on what <b>this Actor</b> charges: at most this many × $0.0097 with AI on (× $0.0039 off), e.g. 100 × $0.0039 = $0.39. Blocks and reviews come first; counterparties beyond the cap are screened, not delivered and not charged — the status says how many. Affects what you pay.",
            "default": 100
          },
          "maxDiscoveryChargeUsd": {
            "title": "Max fallback spend (USD)",
            "minimum": 0.01,
            "maximum": 1000,
            "type": "number",
            "description": "Only used when an official list cannot be downloaded: <code>haketa/sanctions-screening</code> then screens the names for the sanctions part on your account, capped here — $0.50 in the form and for an API or agent call that leaves it out. Normal runs read the official lists themselves and spend nothing here. Affects what you pay.",
            "default": 0.5
          },
          "enableAi": {
            "title": "AI hit adjudication",
            "type": "boolean",
            "description": "Reads every open possible hit against the counterparty's own facts, picks the right GLEIF record among same-name companies, searches name variants and writes a reviewer note. <b>On = $0.0097 per counterparty the AI assessed; off = $0.0039</b>; nothing to adjudicate stays $0.0039. Tokens: with Apify model access ≈ $0.003 a check on top; with your own key, your provider's.",
            "default": true
          },
          "lists": {
            "title": "Lists to screen",
            "type": "array",
            "description": "Leave all six on for trade. A list switched off is not downloaded and not named in <code>listsChecked</code>.",
            "items": {
              "type": "string",
              "enum": [
                "OFAC_SDN",
                "OFAC_CONS",
                "US_CSL",
                "UN",
                "EU",
                "UK"
              ],
              "enumTitles": [
                "OFAC SDN (US Treasury)",
                "OFAC non-SDN lists (SSI, NS-MBS, CMIC …)",
                "US Consolidated Screening List (BIS Entity List, Denied Persons, Unverified, MEU, ITAR)",
                "UN Security Council consolidated list",
                "EU consolidated financial sanctions",
                "UK Sanctions List (FCDO)"
              ]
            },
            "default": [
              "OFAC_SDN",
              "OFAC_CONS",
              "US_CSL",
              "UN",
              "EU",
              "UK"
            ]
          },
          "screenParents": {
            "title": "Screen the parent companies",
            "type": "boolean",
            "description": "Looks up the direct and ultimate parent in GLEIF and screens them through the same lists — a listed parent turns the verdict to <b>review</b> (the OFAC 50 % rule).",
            "default": true
          },
          "checkVat": {
            "title": "Validate EU VAT numbers (VIES)",
            "type": "boolean",
            "description": "For a counterparty with a <code>vatNumber</code>: format check, then the EU VIES service — valid or not, the registered name and address, and whether that name matches yours. An invalid number turns the verdict to <b>review</b>.",
            "default": true
          },
          "requesterVatNumber": {
            "title": "Your own EU VAT number (for VIES consultation numbers)",
            "type": "string",
            "description": "Optional. With your EU VAT number here (e.g. <code>DE811569869</code>), VIES returns a <b>consultation number</b> for every VAT check — <code>vatConsultationNumber</code> in the row, the proof of the check for your audit file. Empty = the check runs without one.",
            "default": ""
          },
          "minNameScore": {
            "title": "Name match threshold (70–100)",
            "minimum": 70,
            "maximum": 100,
            "type": "integer",
            "description": "A list name scoring this or more against the counterparty (legal forms dropped, transliterated) is a possible hit and gets weighed. Lower = more possible hits to review; higher = only near-identical names.",
            "default": 85
          },
          "includeNoMatch": {
            "title": "Deliver clear counterparties with no possible hit",
            "type": "boolean",
            "description": "On: every counterparty gets a row — a clear verdict is evidence for your file. Off: only counterparties with a possible hit, a VAT or an LEI problem are delivered (the rest are not charged).",
            "default": true
          },
          "targetFlags": {
            "title": "Target flags (any of)",
            "type": "array",
            "description": "Only deliver counterparties that have at least one of these flags (e.g. <code>likely_hit</code>, <code>vat_invalid</code>). Leave empty to keep everything. An API call passes the flag names from the README's flag table (<code>likelyHit</code> works too); an unknown name stops the run at once with the list of valid ones.",
            "items": {
              "type": "string",
              "enum": [
                "likely_hit",
                "unclear_hit",
                "parent_hit",
                "weak_alias_only",
                "no_hit",
                "vat_invalid",
                "vat_name_mismatch",
                "vat_unchecked",
                "no_legal_entity",
                "lei_not_found",
                "lei_lapsed",
                "list_unavailable"
              ],
              "enumTitles": [
                "A sanctions / export list entry likely is this counterparty",
                "A possible list hit the facts do not decide",
                "A GLEIF parent has a likely or unclear list hit",
                "The only hits matched weak aliases",
                "No list entry scored at or above the name threshold",
                "VIES says the VAT number is not valid (or its format is wrong)",
                "The VAT registration is in another name",
                "A VAT number was given but VIES could not answer",
                "No GLEIF legal-entity record was found",
                "The LEI given is not in GLEIF",
                "The LEI is not in ISSUED status (lapsed, retired, …)",
                "An official list could not be read this run"
              ]
            }
          },
          "suppressionList": {
            "title": "Exclude list",
            "type": "array",
            "description": "Counterparty names to skip (e.g. your own group companies). Skipped before any check and never charged.",
            "items": {
              "type": "string"
            }
          },
          "llmProvider": {
            "title": "AI model access",
            "enum": [
              "apify",
              "byok"
            ],
            "type": "string",
            "description": "<b>Apify (no keys)</b> — the AI runs through Apify's model access (<code>anthropic/claude-haiku-4.5</code>) on plans that include it; its tokens (≈ $0.003 a check) are billed to your Apify account on top of the $0.0097. <b>My own key</b> — your OpenAI / Anthropic / Gemini / Groq key: measured ≈ 0.6–1.2 s per counterparty check with <code>google:gemini-3.5-flash-lite</code> (0.6 s on 2026-10-23, 1.2 s on 2026-10-22) — give a 50-company run a 240 s timeout. A free-tier key: expect 1–3 AI checks per run (the rest keep their rule score); a paid key (billing on) assesses every counterparty with an open hit.",
            "default": "apify"
          },
          "llmModel": {
            "title": "AI model",
            "type": "string",
            "description": "Leave empty for the default: <code>anthropic/claude-haiku-4.5</code> through Apify's model access, <code>google:gemini-3.5-flash-lite</code> with your own key (a free Gemini key works as is). Apify mode takes an OpenRouter slug such as <code>openai/gpt-4.1-mini</code>; own-key mode takes <code>provider:model</code>, e.g. <code>anthropic:claude-haiku-4-5-20251001</code> or <code>groq:openai/gpt-oss-120b</code>."
          },
          "llmApiKey": {
            "title": "Your API key (own-key mode only)",
            "type": "string",
            "description": "Required when <b>AI model access</b> is <i>My own API key</i>. Stored encrypted by Apify, never logged."
          },
          "aiCandidateMultiplier": {
            "title": "AI pool, × max counterparties (API only)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "API only — hidden on the form. How many counterparties with open hits get the AI pass, as a multiple of <b>Max counterparties</b> — the riskiest rule verdicts first. Counterparties with nothing to adjudicate never go to the AI.",
            "default": 2
          },
          "sendAlertsTo": {
            "title": "Send alerts to (Slack, Discord, Teams, Google Chat, Telegram or webhook)",
            "type": "string",
            "description": "Paste one or more URLs, one per line — the service is detected from the address: a Slack or Discord channel webhook, a Teams Workflows or Google Chat space webhook, your Telegram bot's send link (<code>https://api.telegram.org/bot&lt;token&gt;/sendMessage?chat_id=@yourchannel</code>) or any other https URL (Zapier, Make, n8n, your CRM), which gets every verdict as JSON. After every run with at least one counterparty to report, the digest (how many are new, the top 10 with links) is posted there. Never sent for the free demo. Headers, batching and signing: <i>Delivery details (advanced)</i>."
          },
          "rescreenStoreName": {
            "title": "Re-screen memory (store name)",
            "type": "string",
            "description": "Type a name (e.g. <code>suppliers-weekly</code>) and every run remembers each counterparty's result in that key-value store on your account; later runs deliver — and charge — only the counterparties whose verdict or hits changed (<code>changeType</code>: new / changed / delisted). Empty = every counterparty every run. One name per list you monitor.",
            "default": ""
          },
          "dedupeAcrossRuns": {
            "title": "Skip unchanged counterparties (API only)",
            "type": "boolean",
            "description": "API only — hidden on the form. A re-screen never skips a counterparty for good: <code>true</code> turns on the re-screen memory (store <code>&lt;dedupeStoreName&gt;-rescreen</code> unless <b>Re-screen memory</b> names one), so unchanged counterparties are skipped and every new designation is still delivered.",
            "default": false
          },
          "dedupeTtlDays": {
            "title": "Memory days (API only)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "API only — hidden on the form; a 0.1 name. A re-screen compares every run with the last result, so only the re-screen memory decides what comes back.",
            "default": 0
          },
          "historyDatasetName": {
            "title": "Keep a running log (dataset name)",
            "type": "string",
            "description": "Optional. Type a name (e.g. <code>counterparty-check-ai-seen-log</code>) and every run appends its verdicts with the date to that named dataset on your account — one list across months to connect to Google Sheets or your BI tool once. Empty = off. Costs nothing extra.",
            "default": ""
          },
          "sourceMode": {
            "title": "Where do the counterparties come from?",
            "enum": [
              "live",
              "dataset",
              "list",
              "actor"
            ],
            "type": "string",
            "description": "<b>live</b> — the counterparties typed in section 1 (or your sheet), checked live: the official lists, GLEIF and VIES are read by this Actor, no other Actor runs and nothing else is billed (any plan; <code>actor</code> is the same mode under its 0.1 name). <b>dataset</b> — an Apify dataset of companies (fields: <code>name</code> / <code>companyName</code> / <code>legalName</code>, <code>country</code>, <code>vatNumber</code>, <code>lei</code>). <b>list</b> — records you paste into <code>itemsList</code>. The mode you choose always runs as chosen; only the untouched sample records next to counterparties you typed switch to the live check. <code>{}</code> over the API runs the free demo — nothing charged.",
            "default": "live"
          },
          "autoSwitchToLive": {
            "title": "Counterparties typed next to the sample start the live check",
            "type": "boolean",
            "description": "On (default): counterparties typed next to the untouched sample records start the live check (<code>OUTPUT.switchedToLive</code> names them). Off: the mode you send is the mode that runs — the sample stays the free demo and the status names the counterparties it did not check. API pipelines that must never start a paid read on their own: send <code>false</code>.",
            "default": true
          },
          "failOnSourceError": {
            "title": "Fail the run when no counterparty could be screened",
            "type": "boolean",
            "description": "Off (default): a run whose dataset or list delivers no counterparty ends SUCCEEDED with 0 rows and <code>OUTPUT.ok: false</code>. On: the same run ends FAILED, so a schedule's failed-run alert fires.",
            "default": false
          },
          "datasetId": {
            "title": "Dataset",
            "type": "string",
            "description": "Only for <b>dataset</b> mode. Pick the dataset so the Actor is granted read access to it."
          },
          "itemsList": {
            "title": "Records to check (list mode)",
            "type": "array",
            "description": "Only for <b>list</b> mode. JSON array of objects with at least <code>name</code> and optionally <code>country</code>, <code>lei</code>, <code>vatNumber</code>, <code>registrationNumber</code>, <code>address</code>, <code>website</code>, <code>type</code>. The prefilled 3 are the free demo's fictional samples (precomputed, labelled <code>isSample</code>)."
          },
          "discoveryActorId": {
            "title": "Store fallback — only when an official list is unreachable (advanced)",
            "type": "string",
            "description": "Runs on your account only when an official list cannot be downloaded, to screen the names for the sanctions part (capped by <b>Max fallback spend</b>). The rows still name the missing list and are never <code>clear</code> while it is missing.",
            "default": "haketa/sanctions-screening"
          },
          "discoveryInput": {
            "title": "Store fallback input (API only)",
            "type": "object",
            "description": "API only — hidden on the form. Extra input passed to the fallback Store Actor as-is (e.g. <code>{\"sources\": [\"OFAC\", \"EU\"]}</code>); the names to screen are filled in by this Actor."
          },
          "maxToProcess": {
            "title": "Max counterparties to screen (API only)",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "API only — hidden on the form. Upper bound on how many counterparties are screened in one run (controls run time). Default = 3 × max counterparties."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Every delivered verdict is POSTed here as JSON (Zapier, Make, n8n, your CRM) — flat columns: <code>verdict</code>, <code>verdictReason</code>, <code>lei</code>, <code>vatValid</code>, <code>bestHitScore</code>. Wins over a webhook URL in <b>Send alerts to</b>; every URL is posted once. Stored encrypted — Zapier / Make hook URLs carry their secret in the path."
          },
          "webhookHeaders": {
            "title": "Webhook headers (API only)",
            "type": "object",
            "description": "API only — hidden on the form. Extra HTTP headers for the webhook, e.g. <code>{\"Authorization\": \"Bearer …\"}</code>. Stored encrypted by Apify, never logged."
          },
          "webhookBatchSize": {
            "title": "Webhook batch size (API only)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "API only — hidden on the form. 1 = one POST per counterparty the moment its verdict is ready (body <code>{event, counterparty_check, runId}</code>). Higher = one POST per N counterparties (body <code>{event, counterparty_checks: [rows], runId}</code>). A 429 / 5xx is retried once after 2 s; a failed POST never fails the run.",
            "default": 1
          },
          "webhookSecret": {
            "title": "Webhook signing secret (API only)",
            "type": "string",
            "description": "API only — hidden on the form. Any random string. Every webhook POST then carries <code>X-Signature: sha256=&lt;HMAC-SHA256 of the raw body with this secret&gt;</code>, so your endpoint can verify it came from this Actor. Stored encrypted by Apify, never logged."
          },
          "dedupeStoreName": {
            "title": "Dedupe store name (API only)",
            "type": "string",
            "description": "API only — hidden on the form. Key-value store of the \"never deliver twice\" memory (only with that setting on). One name per client.",
            "default": "counterparty-check-ai-seen"
          },
          "discoveryTimeoutSecs": {
            "title": "Store fallback timeout, seconds (API only)",
            "minimum": 60,
            "maximum": 86400,
            "type": "integer",
            "description": "API only — hidden on the form. How long the fallback Store Actor may run — never more than 60 % of the run's time left.",
            "default": 3600
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Slack incoming-webhook URL for the digest."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Discord channel webhook URL for the digest."
          },
          "teamsWebhookUrl": {
            "title": "Microsoft Teams webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Teams Workflows webhook URL for the digest."
          },
          "googleChatWebhookUrl": {
            "title": "Google Chat webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Google Chat space webhook URL for the digest."
          },
          "telegramUrl": {
            "title": "Telegram sendMessage link (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. The bot's sendMessage link with its chat_id."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}