API reference
The endpoints a provider implements, and every schema in the v0 contract. Generated from the same source the platform validates against.
Base URL
Your service, at a base path of your choosing, which your team gives when it connects the model, for example https://models.example.com/shockai/v0.
Authentication. Every request carries a ShockAI-Signature header, signed with the platform's Ed25519 key. See Signing requests.
Endpoints
/healthzSay the service is up
Optional and unsigned: the only endpoint that is. The platform may call it before a signed request, to wake a host that sleeps when idle, and ignores the body. Answer 200 without reading anything a case holds.
Responses
200Up.
/manifestDescribe the model
Returns the model manifest. The platform reads it at registration and whenever the provider announces a new version; a manifest change never alters a run already made, because every result is pinned to the version that produced it.
Responses
200ModelManifestThe manifest.401ApiErrorThe signature is missing, expired or wrong (authentication).500ApiErrorThe model failed (provider_error). The platform retries with backoff.
/quotePrice a case
For models priced by quote. Returns a binding price for the case; the platform shows it to the user and, on acceptance, passes the quote id with the run. Quoting must not start work.
Request body
BlastCaseResponses
200QuoteThe quote.400ApiErrorThe request is malformed or the case fails validation (invalid_request).401ApiErrorThe signature is missing, expired or wrong (authentication).422ApiErrorThe case is valid but the model cannot run it (unsupported_case), or cannot honour its consent terms (consent_refused). Final: the platform will not retry.429ApiErrorToo many requests (rate_limited). SendRetry-After; the platform backs off accordingly.500ApiErrorThe model failed (provider_error). The platform retries with backoff.
/runsRun the model on a case
Sync models answer within 30 seconds with the run succeeded and its result. Async models answer 202 with the run queued, then report through the run.* webhooks. The case contains only the inputs the manifest declares. The platform sends an Idempotency-Key; a repeated key must return the original run, not start another.
Parameters
Idempotency-Key(header)required · Stable across retries of the same run request.
Request body
RunRequestResponses
200RunSync: the finished run.202RunAsync: the accepted run.400ApiErrorThe request is malformed or the case fails validation (invalid_request).401ApiErrorThe signature is missing, expired or wrong (authentication).422ApiErrorThe case is valid but the model cannot run it (unsupported_case), or cannot honour its consent terms (consent_refused). Final: the platform will not retry.429ApiErrorToo many requests (rate_limited). SendRetry-After; the platform backs off accordingly.500ApiErrorThe model failed (provider_error). The platform retries with backoff.
Callback
{$request.body#/callbackUrl}Run status changed. WebhookEvent Signed with the same scheme, with your key: one of the signing.callbackKeys your manifest declares, over the callback URL exactly as given. Sign each delivery afresh, so a retry carries a current timestamp. Deliver at least once: retry with backoff until a 2xx, stop on a 4xx other than 408 or 429, and after a restart send again what was not delivered, under the same event id. The platform de-duplicates on the event id, and polls a run whose callback does not come. The callback URL is the run's own, so keep it private.
/runs/{runId}Get a run
The platform polls this as a fallback when a webhook is late. Results must stay retrievable for at least 24 hours after the run finishes.
Parameters
runId(path)required · The id the provider assigned inPOST /runs.
/runs/{runId}Cancel a run
Best effort. A run that has already finished is returned unchanged. A cancelled run is not charged.
Parameters
runId(path)required · The id the provider assigned inPOST /runs.
Schemas
Top-level documents first, then the parts they are made of. Each is also published as a standalone JSON Schema.
BlastCase
Download JSON SchemaEverything a model may read about one blast: design, as-built record, site, receivers, calibration and the question asked.
| Field | Type | Description |
|---|---|---|
specVersionrequired | "0.1" | Version of the ShockAI Model API specification this document follows. |
caseIdrequired | string | SHA-256 of the canonical case (see Canonical JSON) without caseId and createdAt, and without the uri of any BlobRef (any object carrying uri, sha256 and mediaType): its bytes are named by the hash, and a signed URL changes from run to run. Identical cases have identical ids, which is what makes results cacheable and reproducible.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
coordinateSystemrequired | CoordinateSystem | The frame every position in the case is expressed in. |
siterequired | object | |
site.name | string | min length 1 · max length 200 |
site.domainsrequired | array of RockDomain | A zone of rock the site treats as one material. Holes name the domain they sit in.max 100 items |
site.terrain | BlobRef | Surface model, when the provider needs one. |
designrequired | Design | The blast as designed. |
asBuilt | object | Present once the blast is drilled, loaded or fired. A pre-blast prediction leaves it out. |
asBuilt.holes | array of AsBuiltHole | A hole as drilled and loaded. Fields left out are as designed.max 5000 items |
asBuilt.firing | FiringRecord | What actually fired, and when. |
receiversrequired | array of Receiver | A place a prediction is wanted. It has a position, a resolved distance, or both.max 1000 items |
calibration | Calibration | What the site has measured. This is what lets a kinematic model be calibrated rather than assumed. |
measured | Measured | Present once the blast has fired and its records are in. |
requestrequired | OutputRequest | The question the case asks. |
consentrequired | Consent | The data owner’s terms for this case. A provider that cannot honour them must refuse the run. |
ModelManifest
Download JSON SchemaWhat a model says about itself: capabilities, inputs, validity, execution, pricing and data handling.
| Field | Type | Description |
|---|---|---|
specVersionrequired | "0.1" | Version of the ShockAI Model API specification this document follows. |
idrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
versionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
namerequired | string | min length 1 · max length 120 |
summaryrequired | string | min length 1 · max length 500 |
vendorrequired | object | |
vendor.namerequired | string | min length 1 · max length 120 |
vendor.url | string (uri) | |
methodrequired | ModelMethod | The family of method, so a user can tell a fitted law from a simulation. |
capabilitiesrequired | array of Capability | One kind of output a model produces, and what it needs to produce it.min 1 items |
executionrequired | object | |
execution.moderequired | enum | Sync models answer POST /runs within the timeout; async models accept the run and call back.syncasync |
execution.typicalSecondsrequired | number | > 0 |
execution.maxSecondsrequired | number | Hard limit. A run still going at this point is cancelled.> 0 · ≤ 604800 |
pricingrequired | object (model = "included") | object (model = "per_run") | object (model = "per_hole") | object (model = "quote") | object (model = "licence") | How a run is charged. |
pricing.modelrequiredmodel = "included" | "included" | |
pricing.modelrequiredmodel = "per_run" | "per_run" | |
pricing.currencyrequiredmodel = "per_run" | string | min length 3 · max length 3 |
pricing.unitAmountrequiredmodel = "per_run" | integer | Minor units, e.g. cents.≥ 0 |
pricing.modelrequiredmodel = "per_hole" | "per_hole" | |
pricing.currencyrequiredmodel = "per_hole" | string | min length 3 · max length 3 |
pricing.unitAmountrequiredmodel = "per_hole" | integer | ≥ 0 |
pricing.modelrequiredmodel = "quote" | "quote" | |
pricing.modelrequiredmodel = "licence" | "licence" | |
pricing.notemodel = "licence" | string | The customer brings their own licence; the platform charges nothing on the run.max length 500 |
dataHandlingrequired | object | |
dataHandling.regionsrequired | array of string | Where the case is processed, for example au, eu, us.min 1 items · each item min length 2, max length 40 |
dataHandling.retentionrequired | enum | none30dcontract |
dataHandling.trainsOnCustomerDatarequired | boolean | |
documentationUrl | string (uri) | |
signing | object | How the provider signs what it sends the platform. Required of an async model, whose results arrive as signed callbacks. |
signing.callbackKeysrequired | array of Ed25519Jwk | The public keys your callbacks are signed with, as Ed25519 JWKs: one, or two while you rotate. The platform pins them when the model is connected, so a changed key is a new manifest version.min 1 items · max 3 items |
build | object | What is deployed behind this version. |
build.hashrequired | string | Identifies the code and weights answering, for example a commit or image digest. Every result reports it in provenance.buildHash.min length 1 · max length 128 · pattern ^[A-Za-z0-9._:+/@-]+$ |
ModelResult
Download JSON SchemaWhat a model returns for one case.
| Field | Type | Description |
|---|---|---|
specVersionrequired | "0.1" | Version of the ShockAI Model API specification this document follows. |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
outputsrequired | array of Output | One answer, discriminated by kind.max 5000 items |
unavailablerequired | array of Unavailable | A requested output the model declined to produce, and why.max 5000 items |
warningsrequired | array of Warning | Something the model wants a person to see.max 500 items |
provenancerequired | Provenance | Where a result came from. Reports cite it; the platform uses it to score the model later. |
RunRequest
Download JSON SchemaThe body of POST /runs.
| Field | Type | Description |
|---|---|---|
caserequired | BlastCase | Everything a model may read about one blast: design, as-built record, site, receivers, calibration and the question asked. |
quoteId | string | The accepted quote, for models priced by quote.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
callbackUrl | string (uri) | Where an async model sends its run.* events. Always HTTPS. |
A model run, by status. Sync models return it succeeded from POST /runs; async models return it queued.
One of QueuedRun | RunningRun | SucceededRun | FailedRun | CancelledRun
Quote
Download JSON SchemaA binding price for one case, valid until it expires.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
currencyrequired | string | min length 3 · max length 3 |
amountrequired | integer | Minor units, e.g. cents.≥ 0 |
expiresAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
estimatedSecondsrequired | number | > 0 |
ApiError
Download JSON SchemaEvery non-2xx response carries this body.
| Field | Type | Description |
|---|---|---|
errorrequired | object | |
error.typerequired | enum | The error family. unsupported_case and consent_refused are final; rate_limited, provider_error and timeout may be retried.invalid_requestunsupported_caseconsent_refusedauthenticationrate_limitedquote_expiredprovider_errortimeout |
error.coderequired | string | A stable machine-readable code within the family.max length 80 · pattern ^[a-z][a-z0-9_]*$ |
error.messagerequired | string | min length 1 · max length 1000 |
error.param | string | The case field at fault, as a JSON Pointer.max length 200 |
WebhookEvent
Download JSON SchemaSent by an async provider to the run’s callbackUrl, signed like every request. type is run. and the state the run in data has reached.
One of
type = "run.running"| Field | Type | Description |
|---|---|---|
idrequired | string | Unique per event; deliveries are at-least-once, so de-duplicate on it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
typerequired | "run.running" | |
datarequired | object | |
data.runrequired | RunningRun | Started and not yet finished. |
type = "run.succeeded"| Field | Type | Description |
|---|---|---|
idrequired | string | Unique per event; deliveries are at-least-once, so de-duplicate on it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
typerequired | "run.succeeded" | |
datarequired | object | |
data.runrequired | SucceededRun | Finished with the model’s result. |
type = "run.failed"| Field | Type | Description |
|---|---|---|
idrequired | string | Unique per event; deliveries are at-least-once, so de-duplicate on it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
typerequired | "run.failed" | |
datarequired | object | |
data.runrequired | FailedRun | Finished without a result, and why. |
type = "run.cancelled"| Field | Type | Description |
|---|---|---|
idrequired | string | Unique per event; deliveries are at-least-once, so de-duplicate on it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
typerequired | "run.cancelled" | |
datarequired | object | |
data.runrequired | CancelledRun | Stopped before it finished, by the platform or the provider. |
ImportDocument
Download JSON SchemaPredictions made by another tool, brought onto the platform with their provenance.
| Field | Type | Description |
|---|---|---|
specVersionrequired | "0.1" | Version of the ShockAI Model API specification this document follows. |
blastrequired | object | |
blast.platformBlastId | string | The blast on the platform, when the importer knows it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
blast.externalRef | string | The blast’s name or number in the source tool.min length 1 · max length 200 |
sourcerequired | object | |
source.toolrequired | string | The software that produced the results.min length 1 · max length 120 |
source.versionrequired | string | min length 1 · max length 60 |
source.vendor | string | min length 1 · max length 120 |
source.method | ModelMethod | The family of method, so a user can tell a fitted law from a simulation. |
source.file | object | |
source.file.namerequired | string | min length 1 · max length 255 |
source.file.sha256required | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
source.producedAt | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
outputsrequired | array of ImportedOutput | One prediction made elsewhere, discriminated by kind: every kind a prediction case asks.min 1 items · max 5000 items |
unavailable | array of Unavailable | A requested output the model declined to produce, and why.max 5000 items · default [] |
warnings | array of Warning | Something the model wants a person to see.max 500 items · default [] |
Airblast
Predicted peak overpressure at a receiver.
| Field | Type | Description |
|---|---|---|
kindrequired | "airblast" | |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
peakParequired | Estimate | Peak overpressure, Pa. dB(L) = 20·log10(Pa / 20 µPa). |
peakDbL | Estimate | The same peak in dB(L), as the model computed it, so a limit in decibels is read without a round trip. |
scaledDistance | number | The cube-root scaled distance the prediction was made at.> 0 |
validityrequired | Validity | How far to trust one output. |
AirblastLaw
A fitted airblast attenuation law on cube-root scaled distance.
| Field | Type | Description |
|---|---|---|
scalingrequired | "cube_root" | |
kParequired | number | Site constant in P = K·SD^−β, pascals.> 0 |
betarequired | number | Attenuation exponent β.> 0 |
sigmaLnrequired | number | Residual standard deviation in ln(Pa).≥ 0 |
nrequired | number | Readings in the fit.> 0 |
fitrequired | LawFitStatistics | The least-squares statistics of a log-log fit, for prediction intervals: ln y ± t(p, dof)·σ·√(1 + 1/n + (ln SD − mean)²/sxx). |
scaledDistancerequired | Range | The scaled-distance range the fit was made over. |
sourcerequired | enum | platform_fituserprior |
AsBuiltHole
A hole as drilled and loaded. Fields left out are as designed.
| Field | Type | Description |
|---|---|---|
idrequired | string | The design hole this record amends.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
collar | Point3 | A position in the case coordinate system, metres. |
toe | Point3 | A position in the case coordinate system, metres. |
waterDepthM | number | Standing water measured at loading, m.≥ 0 |
decks | array of Deck | The hole as loaded, when it differs from the design.min 1 items · max 32 items |
BackbreakReading
How far behind some of its holes a fired blast broke the wall it left: the damage a model judging it can be fitted to.
| Field | Type | Description |
|---|---|---|
distanceMrequired | number | How far behind the holes the final wall broke, m. A model judging damage reads it as a radius about each hole’s charge, square to its axis: for vertical holes, the distance in plan from the line of their collars to the broken crest.≥ 0 |
holeIdsrequired | array of string | The holes it was measured behind: the back row for one reading of the blast, or one hole for a reading per hole.min 1 items · max 5000 items · each item min length 1, max length 128, pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
method | enum | How it was measured: taped, surveyed, read from a scan, or estimated by eye.tapesurveyscanestimate |
note | string | Anything a reader should know.max length 500 |
BlobRef
A large payload passed by reference rather than inline: terrain, point clouds, long waveforms.
| Field | Type | Description |
|---|---|---|
urirequired | string (uri) | A signed HTTPS URL. It expires; fetch it once when the run starts. |
sha256required | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
mediaTyperequired | string | IANA media type, for example image/tiff or application/vnd.las.min length 3 · max length 120 |
bytes | integer | Size in bytes.≥ 0 |
Calibration
What the site has measured. This is what lets a kinematic model be calibrated rather than assumed.
| Field | Type | Description |
|---|---|---|
siteLaw | SiteLaw | A fitted scaled-distance attenuation law. |
airblastLaw | AirblastLaw | A fitted airblast attenuation law on cube-root scaled distance. |
seedWaveforms | array of SeedWaveform | A single-hole ground-motion record: the kinematic input a superposition model is calibrated from.max 500 items |
vod | array of VodMeasurement | A measured velocity of detonation.max 5000 items |
outcomes | array of MeasuredOutcome | A reading from an earlier blast at this site.max 10000 items |
strainAmplitude | StrainAmplitude | The site's fit of the strain a blast puts in its rock near the charges, which a model judging damage scales its amplitude by. |
CancelledRun
Stopped before it finished, by the platform or the provider.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
updatedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
statusrequired | "cancelled" |
Capability
One kind of output a model produces, and what it needs to produce it.
| Field | Type | Description |
|---|---|---|
outputrequired | OutputKind | A kind of answer: a prediction of what a blast will do, or, for hole_diagnosis and strain_amplitude, a reading of what a fired blast did. |
inputsrequired | object | |
inputs.requiredrequired | array of InputPath | A part of the BlastCase. The case a model receives is built from the parts it declares and nothing else. design.holes carries the holes and the layout family they form; design.drillingDeviation carries design.drillingDeviationM.min 1 items |
inputs.requiredAnyOf | array of array of InputPath | Inputs that stand in for one another: the model needs at least one from each group, for example the charge, from the stated MIC or from the holes. A case carrying none of a group is declined with missing_input, as for a missing required input.default [] · each item min 2 items |
inputs.optional | array of InputPath | A part of the BlastCase. The case a model receives is built from the parts it declares and nothing else. design.holes carries the holes and the layout family they form; design.drillingDeviation carries design.drillingDeviationM.default [] |
validity | object | The domain the model is validated on. Outputs outside it must be marked outside or declined. |
validity.distanceM | Range | An inclusive interval. Either bound may be omitted. A range whose min exceeds its max is empty: a model declared valid over one is valid nowhere, and no prediction falls inside a fitted range that is empty. |
validity.scaledDistance | Range | An inclusive interval. Either bound may be omitted. A range whose min exceeds its max is empty: a model declared valid over one is valid nowhere, and no prediction falls inside a fitted range that is empty. |
validity.rockClasses | array of RockClass | Coarse rock class used when no measured properties are available. |
validity.notes | string | max length 1000 |
CaseUnavailable
A kind answered once for the case that the model declined.
| Field | Type | Description |
|---|---|---|
kindrequired | enum | ppv_fielddamage_envelopestrain_fieldflyrock_zonefragmentation_curvemovement_fieldtiming_proposalhole_diagnosisstrain_amplitude |
reasonrequired | enum | Why the model did not answer.not_supportedmissing_inputoutside_validityinsufficient_calibration |
detail | string | max length 500 |
Consent
The data owner’s terms for this case. A provider that cannot honour them must refuse the run.
| Field | Type | Description |
|---|---|---|
purposerequired | enum | What the owner agreed the case be used for: prediction of what a blast will do, or diagnosis of what a fired blast did, which sends the blast’s own records. A case asks only for the kinds of its purpose.predictiondiagnosis |
retentionrequired | enum | How long the provider may keep the case after the run.none30dcontract |
allowTrainingrequired | boolean | Whether the provider may use the case to improve its model. False unless the owner opts in. |
CoordinateSystem
The frame every position in the case is expressed in.
One of
kind = "epsg"| Field | Type | Description |
|---|---|---|
kindrequired | "epsg" | |
coderequired | integer | EPSG code of a projected system, for example 28350 (GDA94 / MGA zone 50).> 0 |
kind = "local"| Field | Type | Description |
|---|---|---|
kindrequired | "local" | |
namerequired | string | The mine grid name.min length 1 · max length 120 |
gridBearingDeg | number | Bearing of grid north from true north, degrees clockwise.≥ -360 · ≤ 360 |
origin | object | WGS 84 position of the local origin, when known. |
origin.latituderequired | number | ≥ -90 · ≤ 90 |
origin.longituderequired | number | ≥ -180 · ≤ 180 |
DamageEnvelope
The zone around the charges where rock is expected to be damaged: the basis for wall control.
| Field | Type | Description |
|---|---|---|
kindrequired | "damage_envelope" | |
thresholdMmSrequired | number | The PPV taken as the onset of damage for this envelope.> 0 |
criterionrequired | string | Name of the damage criterion, for example holmberg-persson, charge-column-integration or hoek-brown-strain.min length 1 · max length 120 |
holesrequired | array of object | max 5000 items |
holes[].holeIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holes[].radiusMrequired | Estimate | Radius from the hole axis at which the threshold is reached. |
surface | BlobRef | The envelope as a closed mesh, when available. |
validityrequired | Validity | How far to trust one output. |
Deck
One interval of a hole, collar downwards. Only an explosive deck carries a product and a mass.
One of ExplosiveDeck | UnchargedDeck
Design
The blast as designed.
| Field | Type | Description |
|---|---|---|
name | string | min length 1 · max length 200 |
pattern | enum | Layout family.squarerectangularstaggeredringdevelopmentother |
holesrequired | array of DesignHole | Every hole, collar to toe. Empty when the platform holds only a summary of the design, as for a what-if question about a charge at a distance.max 5000 items |
productsrequired | array of Product | An explosive product as loaded.max 50 items |
initiation | Initiation | Omitted when the platform holds only a summary of the design. |
maxInstantaneousCharge | MaxInstantaneousCharge | The maximum instantaneous charge (MIC) as the platform computed it for compliance. A model that works from the charge rather than from every hole should use it; one that models the holes may recompute it. |
drillingDeviationM | number | One standard deviation of collar and drilling error, m (Cunningham’s W): what fragmentation uniformity loses to imperfect drilling.≥ 0 |
DesignHole
A hole as designed.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
row | integer | > 0 |
column | integer | > 0 |
collarrequired | Point3 | A position in the case coordinate system, metres. |
toerequired | Point3 | A position in the case coordinate system, metres. |
diameterMm | number | Hole diameter, mm. Left out when the plan does not state it.> 0 · ≤ 2000 |
domainId | string | The rock domain the hole sits in.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
burdenM | number | Burden this hole breaks, m.> 0 |
spacingM | number | Spacing to its neighbour in the row, m.> 0 |
subdrillM | number | Drilled length below grade, m. |
decksrequired | array of Deck | The hole from collar to toe. Stemming is a deck like any other.min 1 items · max 32 items |
delayrequired | HoleDelay | When a hole is designed to fire. |
DiagnosedHole
One hole’s diagnosis.
| Field | Type | Description |
|---|---|---|
holeIdrequired | string | The design hole.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
verdictrequired | HoleVerdict | What became of a hole. on_time, late and early: it fired, within the model’s timing limit of its designed time, after it, or before it. not_detected: no motion of its own was found, so it is taken not to have fired. weak and strong: it fired, and its ground motion was well below or well above the blast’s typical hole. unrelieved: it fired confined, with no relief to break to; reserved for a model that can tell, and the platform’s own does not give it. unresolved: the records cannot tell it from the holes in resolvedWith. A verdict claims only what it names: a hole on time may also be weak, which size says. |
confidencerequired | number | The model’s probability that the verdict is right, about what the verdict claims and nothing more: for on_time, late and early, that the hole fired and when; for weak and strong, its size; for not_detected, that it did not fire.≥ 0 · ≤ 1 |
alternatives | array of object | The other verdicts the model weighed, likeliest first. Each is a claim of its own, so with the verdict’s they need not sum to one.max 8 items |
alternatives[].verdictrequired | HoleVerdict | What became of a hole. on_time, late and early: it fired, within the model’s timing limit of its designed time, after it, or before it. not_detected: no motion of its own was found, so it is taken not to have fired. weak and strong: it fired, and its ground motion was well below or well above the blast’s typical hole. unrelieved: it fired confined, with no relief to break to; reserved for a model that can tell, and the platform’s own does not give it. unresolved: the records cannot tell it from the holes in resolvedWith. A verdict claims only what it names: a hole on time may also be weak, which size says. |
alternatives[].confidencerequired | number | ≥ 0 · ≤ 1 |
timing | object | When the hole fired. Left out for a hole not detected. |
timing.offsetMsrequired | number | The firing time the model found less the design hole’s delay.totalMs, ms. |
timing.sigmaMs | number | One standard deviation of that time, ms.≥ 0 |
size | object | How big the hole was. Left out for a hole not detected. |
size.relativerequired | number | Its ground motion over the blast’s typical hole’s: 1 is typical.≥ 0 |
size.sigmaLn | number | One standard deviation of ln(relative).≥ 0 |
size.call | object | The size as a claim of its own, where the records resolve sizes. A weak or strong verdict makes the same call. |
size.call.valuerequired | enum | weaktypicalstrong |
size.call.confidencerequired | number | The model’s probability that the call is right.≥ 0 · ≤ 1 |
confinement | object | How much shear the hole carried, which is what confinement shows as. Only where a record’s heading is known. |
confinement.relativerequired | number | Its shear over its compression (motion across the ray over motion along it) against the blast’s typical hole: 1 is typical.≥ 0 |
confinement.sigmaLn | number | ≥ 0 |
clarityDb | number | The hole’s motion over the noise at its clearest record, dB. |
dominantFrequencyHz | number | > 0 |
resolvedWith | array of string | The other design holes the records cannot tell this one from: they fired too close together for any record to separate.max 5000 items · each item min length 1, max length 128, pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
flags | array of string | What a reader should know about this hole’s answer, as stable codes. Reserved: heading_unknown, no record that heard it has a known heading; det_log_disagrees, the firing record says it did not fire and the records say it did; low_snr, it is barely above the noise; clipped_samples, a record that heard it was clipped; window_truncated, the record ends before its motion does; no_plan_time, the design gives it no firing time.max 20 items · each item max length 80, pattern ^[a-z][a-z0-9_.-]*$ |
evidence | HoleEvidence | The working behind a verdict: the ground motion the model attributes to this hole alone, so a reader can see what it rests on. |
Ed25519Jwk
An Ed25519 public key as an RFC 8037 JWK. Publish only the public half: the platform refuses a manifest whose key carries its private part (d).
| Field | Type | Description |
|---|---|---|
ktyrequired | "OKP" | |
crvrequired | "Ed25519" | |
xrequired | string | The 32-byte public key, base64url without padding.min length 43 · max length 43 · pattern ^[A-Za-z0-9_-]+$ |
kid | string | Ignored: the key id is always the RFC 7638 thumbprint.min length 1 · max length 128 |
use | "sig" | |
alg | "EdDSA" |
Estimate
A predicted quantity with its uncertainty. A point value with no spread is allowed but a spread is expected: a prediction without one cannot be scored for coverage.
| Field | Type | Description |
|---|---|---|
medianrequired | number | The best estimate (P50). |
percentiles | array of object | Further points on the predictive distribution, usually those the request asked for.max 99 items |
percentiles[].prequired | number | Percentile, 0 to 100.≥ 0 · ≤ 100 |
percentiles[].valuerequired | number | The value at that percentile, in the unit of the parent quantity. |
ensemble | array of number | Raw ensemble members, for providers that sample rather than summarise.max 10000 items |
ExplosiveDeck
An interval of a hole loaded with explosive.
| Field | Type | Description |
|---|---|---|
kindrequired | "explosive" | |
topDepthMrequired | number | Depth of the top of the deck along the hole, from the collar.≥ 0 |
bottomDepthMrequired | number | Depth of the bottom of the deck along the hole.≥ 0 |
productIdrequired | string | The product loaded.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
massKgrequired | number | Charge mass.≥ 0 |
FailedRun
Finished without a result, and why.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
updatedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
statusrequired | "failed" | |
errorrequired | object | |
error.typerequired | enum | The error family. unsupported_case and consent_refused are final; rate_limited, provider_error and timeout may be retried.invalid_requestunsupported_caseconsent_refusedauthenticationrate_limitedquote_expiredprovider_errortimeout |
error.coderequired | string | A stable machine-readable code within the family.max length 80 · pattern ^[a-z][a-z0-9_]*$ |
error.messagerequired | string | min length 1 · max length 1000 |
error.param | string | The case field at fault, as a JSON Pointer.max length 200 |
FiringRecord
What actually fired, and when.
| Field | Type | Description |
|---|---|---|
sourcerequired | enum | Where the firing times come from: a detonator log, an imported timing file, or the design itself.det_logtiming_importdesign |
firedAt | string (date-time) | Wall-clock time of T0. |
holesrequired | array of object | max 5000 items |
holes[].idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holes[].firedMsrequired | number | null | Measured firing time from T0, ms; null when the hole did not fire. |
holes[].statusrequired | enum | firedmisfirecutoffunknown |
FlyrockZone
Predicted flyrock range and clearance.
| Field | Type | Description |
|---|---|---|
kindrequired | "flyrock_zone" | |
maxThrowMrequired | Estimate | Maximum expected throw, m. |
mechanismrequired | enum | face_burstcrateringriflingcombined |
clearance | object | Recommended clearance distances. |
clearance.personnelMrequired | number | > 0 |
clearance.equipmentMrequired | number | > 0 |
holes | array of object | max 5000 items |
holes[].holeIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holes[].maxThrowMrequired | number | ≥ 0 |
holes[].faceBurstM | number | How far the face would throw rock out through the hole’s burden, m.≥ 0 |
holes[].crateringM | number | How far the hole’s stemming and the rock over its charge would be thrown if they blew out, m. Whether they do is not this figure: the hole’s confinement says that.≥ 0 |
holes[].stemmingM | number | The stemming the hole was read at, m: as loaded where the case’s as-built record states the hole’s decks, else as designed.≥ 0 |
holes[].stemmingAsLoaded | boolean | True where stemmingM is the as-built record’s. |
validityrequired | Validity | How far to trust one output. |
FragmentationCurve
Predicted size distribution of the broken rock.
| Field | Type | Description |
|---|---|---|
kindrequired | "fragmentation_curve" | |
domainId | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
curverequired | array of object | The curve, by ascending sieve size.min 2 items · max 200 items |
curve[].sizeMmrequired | number | Sieve size, mm.> 0 |
curve[].passingPercentrequired | number | Percent of the rock passing that size.≥ 0 · ≤ 100 |
x50Mmrequired | Estimate | A predicted quantity with its uncertainty. A point value with no spread is allowed but a spread is expected: a prediction without one cannot be scored for coverage. |
x80Mmrequired | Estimate | A predicted quantity with its uncertainty. A point value with no spread is allowed but a spread is expected: a prediction without one cannot be scored for coverage. |
uniformityIndex | number | ≥ 0 |
validityrequired | Validity | How far to trust one output. |
FrequencyBin
One band of log10(scaled distance) and the median dominant frequency the site recorded in it.
| Field | Type | Description |
|---|---|---|
log10SdMinrequired | number | |
log10SdMaxrequired | number | |
medianHzrequired | number | Median dominant frequency of the readings in the band, Hz.> 0 |
countrequired | integer | > 0 |
Grid
A plan-view grid for field outputs. A field’s values sit at the nodes minX + i·cellM, minY + j·cellM for i below its columns and j below its rows, the last node within a cell of maxX and maxY; a reader takes columns and rows from the output and never recomputes them.
| Field | Type | Description |
|---|---|---|
minXrequired | number | |
minYrequired | number | |
maxXrequired | number | |
maxYrequired | number | |
cellMrequired | number | Cell size, m.> 0 |
elevationrequired | enum | Where grid points sit vertically.terraincollar_plane |
HoleDelay
When a hole is designed to fire.
| Field | Type | Description |
|---|---|---|
totalMsrequired | number | Designed firing time from T0, milliseconds. |
surfaceMs | number | Delay carried by the surface connector.≥ 0 |
downholeMs | number | Delay of the in-hole unit.≥ 0 |
tieInFrom | string | The hole this one receives its signal from on the surface tie-in.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
HoleDiagnosis
What each hole of a fired blast did, read from the blast’s own ground-motion records and its firing record.
| Field | Type | Description |
|---|---|---|
kindrequired | "hole_diagnosis" | |
holesrequired | array of DiagnosedHole | Every design hole with an explosive deck, once each.max 5000 items |
records | array of object | What became of each record the model was given.max 64 items |
records[].recordIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
records[].userequired | enum | What the model did with the record: read it; set it aside as unable to tell the holes apart; or skipped it unread, for example beyond the number of records it reads, or at a receiver with no position.readset_asideskipped |
records[].residualFraction | number | For a record read: the energy left in it once every hole’s motion is taken out, over what was there.≥ 0 |
validityrequired | Validity | How far to trust one output. |
HoleEvidence
The working behind a verdict: the ground motion the model attributes to this hole alone, so a reader can see what it rests on.
| Field | Type | Description |
|---|---|---|
recordIdrequired | string | The record of measured.records the motion is modelled on: the one that heard the hole most clearly.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
sampleRateHzrequired | number | The rate of the rows, which is the model’s own and need not be the record’s.> 0 |
startMsrequired | number | Time of the first row from T0, ms, as the model aligned the record. |
samplesrequired | array of [3 × number] | The hole’s own motion at that record, one [a, b, c] row per sample on the record’s axes, mm/s. At most a second or so: enough to draw.max 8192 items |
HoleVerdict
What became of a hole. on_time, late and early: it fired, within the model’s timing limit of its designed time, after it, or before it. not_detected: no motion of its own was found, so it is taken not to have fired. weak and strong: it fired, and its ground motion was well below or well above the blast’s typical hole. unrelieved: it fired confined, with no relief to break to; reserved for a model that can tell, and the platform’s own does not give it. unresolved: the records cannot tell it from the holes in resolvedWith. A verdict claims only what it names: a hole on time may also be weak, which size says.
on_timelateearlynot_detectedweakstrongunrelievedunresolvedImportedOutput
One prediction made elsewhere, discriminated by kind: every kind a prediction case asks.
One of ReceiverPpv | MaxCharge | ReceiverWaveform | ReceiverSpectrum | PpvField | Airblast | DamageEnvelope | StrainField | FlyrockZone | FragmentationCurve | MovementField | TimingProposal
Initiation
How the blast is initiated.
| Field | Type | Description |
|---|---|---|
systemrequired | InitiationSystem | The detonator technology. It sets the delay scatter a model should assume when none is given. |
delayScatter | object | One standard deviation of detonator timing error: a fixed part plus a percentage of the nominal delay. |
delayScatter.fixedMs | number | ≥ 0 |
delayScatter.percent | number | ≥ 0 |
InitiationSystem
The detonator technology. It sets the delay scatter a model should assume when none is given.
electronicnonelelectricdetonating_cordInputPath
A part of the BlastCase. The case a model receives is built from the parts it declares and nothing else. design.holes carries the holes and the layout family they form; design.drillingDeviation carries design.drillingDeviationM.
design.holesdesign.productsdesign.initiationdesign.maxInstantaneousChargedesign.drillingDeviationasBuilt.holesasBuilt.firingsite.domainssite.terrainreceiverscalibration.siteLawcalibration.airblastLawcalibration.seedWaveformscalibration.vodcalibration.outcomescalibration.strainAmplitudemeasured.recordsmeasured.backbreakLawFitStatistics
The least-squares statistics of a log-log fit, for prediction intervals: ln y ± t(p, dof)·σ·√(1 + 1/n + (ln SD − mean)²/sxx).
| Field | Type | Description |
|---|---|---|
dofrequired | number | Residual degrees of freedom of the fit.> 0 |
meanLnScaledDistancerequired | number | Mean of ln(scaled distance) over the readings. |
sxxrequired | number | null | Σ(ln SD − mean)² over the readings. Null when only the law’s summary is known; intervals then leave out the leverage term.> 0 |
MaxCharge
The inverse question: how much charge per delay a receiver’s limit allows. The design value blasters plan with.
| Field | Type | Description |
|---|---|---|
kindrequired | "max_charge" | |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
limitMmSrequired | number | The PPV limit the charge was held to: the receiver’s own limit.> 0 |
percentilerequired | number | The percentile the limit was read at.≥ 50 · ≤ 99.9 |
maxChargeKgrequired | number | null | The largest maximum instantaneous charge whose prediction at that percentile stays at or under the limit. Null when even a token charge exceeds it.> 0 |
scaledDistance | number | The scaled distance at that charge.> 0 |
validityrequired | Validity | How far to trust one output. |
MaxInstantaneousCharge
The maximum instantaneous charge (MIC) as the platform computed it for compliance. A model that works from the charge rather than from every hole should use it; one that models the holes may recompute it.
| Field | Type | Description |
|---|---|---|
massKgrequired | number | The largest charge detonating inside any one window, kg.> 0 |
windowMsrequired | number | The window, ms. Jurisdictions set it; 8 ms is common.> 0 |
Measured
What was measured of this blast itself, once it has fired. calibration holds what earlier blasts taught the site; this holds the blast in question.
| Field | Type | Description |
|---|---|---|
records | array of MeasuredRecord | A ground-motion record of this blast, as a monitor wrote it. Its time against T0 is not known: a recorder starts on the motion reaching it, and its clock is not the initiation system’s. A model that needs the two aligned finds the alignment itself.max 64 items |
backbreak | array of BackbreakReading | How far behind its holes the blast broke the wall, once it was seen.max 5000 items |
MeasuredOutcome
A reading from an earlier blast at this site.
| Field | Type | Description |
|---|---|---|
blastRefrequired | string | Which earlier blast this came from.min length 1 · max length 200 |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
distanceM | number | > 0 |
micKg | number | Maximum instantaneous charge of that blast, kg.> 0 |
ppvMmS | number | ≥ 0 |
basis | PpvBasis | How peak particle velocity is taken: the largest single component (max_axis) or the peak vector sum (pvs). |
dominantFrequencyHz | number | > 0 |
airblastDbL | number | ≥ 0 |
MeasuredRecord
A ground-motion record of this blast, as a monitor wrote it. Its time against T0 is not known: a recorder starts on the motion reaching it, and its clock is not the initiation system’s. A model that needs the two aligned finds the alignment itself.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
receiverIdrequired | string | The receiver it was recorded at. That receiver carries a position, with or without an elevation: a record with no place on the grid tells a model nothing about which hole it heard.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
sampleRateHzrequired | number | > 0 |
axesrequired | enum | How the rows’ three components lie. recorded: as the unit wrote them, with nothing known of how it lay. levelled: turned so the third component is vertical, up positive, and the first two lie in the level plane on an unknown bearing. oriented: levelled, with the first component along headingDeg and the second a quarter turn clockwise of it seen from above.recordedlevelledoriented |
headingDeg | number | Bearing of the first component, degrees clockwise from grid north. Given for oriented axes only.≥ 0 · ≤ 360 |
quietUntilIndexrequired | integer | The rows before this index were recorded before the blast’s motion arrived: what a model measures the noise from.≥ 0 |
dominantFrequencyHz | number | Dominant frequency of the record, Hz, as the platform’s analysis found it.> 0 |
clipMmS | number | The recorder’s full scale, mm/s. A sample at it was clipped.> 0 |
recordedAt | string (date-time) | Wall-clock time of the first row, by the recorder’s own clock. |
samplesrequired | ParticleVelocity | Three-component particle velocity, mm/s: one [a, b, c] row per sample in frame order, so every component has the same length; or a reference to the same rows. |
ModelId
A model identifier in the form vendor/model, lower case, for example shockai/site-law.
stringmin length 3 · max length 128 · pattern ^[a-z0-9][a-z0-9-]*\/[a-z0-9][a-z0-9.-]*$
ModelMethod
The family of method, so a user can tell a fitted law from a simulation.
empiricalkinematicnumericalstatisticalhybridMovementField
Predicted displacement of the burden, and the muckpile it forms.
| Field | Type | Description |
|---|---|---|
kindrequired | "movement_field" | |
pointsrequired | array of object | max 50000 items |
points[].idrequired | string | Names the point within this field.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
points[].fromrequired | Point3 | A position in the case coordinate system, metres. |
points[].torequired | Point3 | A position in the case coordinate system, metres. |
points[].flight | object | When the point moves. Without a touchdown, a viewer may draw it as an arc under gravity that joins from and to in that time; the model’s own path may differ, such as a block that rolls after it lands. Left out, only the displacement is stated. |
points[].flight.launchMsrequired | number | When the point leaves from, milliseconds from T0. |
points[].flight.durationMsrequired | number | How long it then takes to come to rest at to, milliseconds.≥ 0 |
points[].flight.touchdown | object | Where the point first comes down on something, or the rock round it closes on it: the end of its flight through the air, before it rolls, slides, slumps or drops to to, or is carried up to it. The arc under gravity that joins from and at in afterMs is the model’s own flight; from there the point moves to to, arriving at durationMs. Left out, the flight is not told apart from what follows it. |
points[].flight.touchdown.atrequired | Point3 | A position in the case coordinate system, metres. |
points[].flight.touchdown.afterMsrequired | number | When it gets there, milliseconds after it leaves from: never after durationMs.≥ 0 |
points[].source | object | The point as a source for a model of the broken rock’s surface, a flow over the ground the blast empties: how much rock, how heavy, the momentum it starts with and whether the mass carries it. A field that states sources states one for every point with a flight (conformance holds it to that). Left out, a viewer infers the flow from where the points rest. |
points[].source.volumeM3required | number | The rock the point stands for as it stood in the bench, m³: in situ, before any swell.> 0 |
points[].source.massKgrequired | number | That rock’s mass, kg.> 0 |
points[].source.momentumrequired | object | The level momentum the rock leaves from with at flight.launchMs, kg·m/s, once whatever confines or relieves it has taken its share: what a flow of the broken rock over the ground starts with. Its vertical part is not stated; the flight is. |
points[].source.momentum.xrequired | number | Eastward, kg·m/s. |
points[].source.momentum.yrequired | number | Northward, kg·m/s. |
points[].source.carriedrequired | boolean | True where the mass carries the rock: it rides the burden as its cover (a model may hold the stemming above the charge so wherever it comes down), or it comes down and rests over the ground the blast breaks or the bench round it. False where it is thrown clear, out through the free face onto the floor in front, a piece of its own. |
muckpileSurface | BlobRef | The predicted muckpile surface. |
validityrequired | Validity | How far to trust one output. |
Output
One answer, discriminated by kind.
One of ReceiverPpv | MaxCharge | ReceiverWaveform | ReceiverSpectrum | PpvField | Airblast | DamageEnvelope | StrainField | FlyrockZone | FragmentationCurve | MovementField | TimingProposal | HoleDiagnosis | StrainAmplitudeFit
OutputKind
A kind of answer: a prediction of what a blast will do, or, for hole_diagnosis and strain_amplitude, a reading of what a fired blast did.
receiver_ppvmax_chargereceiver_waveformreceiver_spectrumppv_fieldairblastdamage_envelopestrain_fieldflyrock_zonefragmentation_curvemovement_fieldtiming_proposalhole_diagnosisstrain_amplitudeOutputRequest
The question the case asks.
| Field | Type | Description |
|---|---|---|
outputsrequired | array of OutputKind | What the caller wants back.min 1 items |
receiverIds | array of string | Receivers to predict at; all receivers when omitted.each item min length 1, max length 128, pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
grid | Grid | A plan-view grid for field outputs. A field’s values sit at the nodes minX + i·cellM, minY + j·cellM for i below its columns and j below its rows, the last node within a cell of maxX and maxY; a reader takes columns and rows from the output and never recomputes them. |
percentiles | array of number | Points of the predictive distribution to report. 50 and 95 when omitted.max 20 items · default [50,95] · each item ≥ 0, ≤ 100 |
designPercentile | number | The percentile design values are read at: a charge limit is the largest charge whose prediction at this percentile stays under the limit. 95 when omitted.≥ 50 · ≤ 99.9 · default 95 |
seed | integer | Seed for any sampling, so a run can be reproduced exactly.≥ 0 |
ParticleVelocity
Three-component particle velocity, mm/s: one [a, b, c] row per sample in frame order, so every component has the same length; or a reference to the same rows.
One of
[a, b, c] in frame order, mm/s.Point3
A position in the case coordinate system, metres.
| Field | Type | Description |
|---|---|---|
xrequired | number | Easting, metres. |
yrequired | number | Northing, metres. |
zrequired | number | Elevation, metres. Up is positive. |
PpvBasis
How peak particle velocity is taken: the largest single component (max_axis) or the peak vector sum (pvs).
max_axispvsPpvField
Peak particle velocity over a plan-view grid, at one percentile.
| Field | Type | Description |
|---|---|---|
kindrequired | "ppv_field" | |
gridrequired | Grid | A plan-view grid for field outputs. A field’s values sit at the nodes minX + i·cellM, minY + j·cellM for i below its columns and j below its rows, the last node within a cell of maxX and maxY; a reader takes columns and rows from the output and never recomputes them. |
percentilerequired | number | ≥ 0 · ≤ 100 |
basisrequired | PpvBasis | How peak particle velocity is taken: the largest single component (max_axis) or the peak vector sum (pvs). |
columnsrequired | integer | Nodes along x: ⌊(maxX − minX) / cellM⌋ + 1.> 0 |
rowsrequired | integer | Nodes along y: ⌊(maxY − minY) / cellM⌋ + 1.> 0 |
valuesMmSrequired | array of (number | null) | BlobRef | Row-major from the south-west corner; null where the model declines to predict.max 4000000 items · each item ≥ 0 |
validityrequired | Validity | How far to trust one output. |
Product
An explosive product as loaded.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
namerequired | string | min length 1 · max length 120 |
classrequired | enum | Product family.anfoheavy_anfoemulsionwatergelpackagedboosterother |
densityGcc | number | In-hole density, g/cm³.> 0 · ≤ 3 |
relativeWeightStrength | number | Relative weight strength, ANFO = 100.> 0 |
energyMjKg | number | Rated energy, MJ/kg.> 0 |
nominalVodMs | number | Nominal velocity of detonation, m/s.> 0 |
Provenance
Where a result came from. Reports cite it; the platform uses it to score the model later.
| Field | Type | Description |
|---|---|---|
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
startedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
finishedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
inputsUsedrequired | array of InputPath | Which parts of the case the model actually read, as input paths.max 50 items |
parameters | map of (string | number | boolean) | Any parameters the model fitted or chose, so the result can be explained. |
buildHash | string | The build that answered, as the manifest's build.hash names it.min length 1 · max length 128 · pattern ^[A-Za-z0-9._:+/@-]+$ |
QueuedRun
Accepted and waiting to start.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
updatedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
statusrequired | "queued" | |
progress | number | Fraction complete, for display only.≥ 0 · ≤ 1 |
Range
An inclusive interval. Either bound may be omitted. A range whose min exceeds its max is empty: a model declared valid over one is valid nowhere, and no prediction falls inside a fitted range that is empty.
| Field | Type | Description |
|---|---|---|
min | number | |
max | number |
Receiver
A place a prediction is wanted. It has a position, a resolved distance, or both.
Needs at least one of position, distanceM
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
name | string | min length 1 · max length 200 |
kindrequired | enum | A seismograph location, a structure to protect, a lease or property boundary point, or any point of interest.monitorstructureboundarypoint |
position | SurfacePosition | Where the receiver is. Omitted when only its distance is known. A monitor placed on a plan often has no surveyed height: its z is then left out. |
distanceM | number | The source-to-receiver distance the platform resolved: a surveyed or entered distance, or the slant distance to the nearest charge. A model should use it unless it models the geometry itself.> 0 |
distanceSource | string | Where distanceM came from, for example manual, placement or georeference.min length 1 · max length 40 |
limits | object | The limits that apply here: a model reports exceedance probability against them, and a charge limit is held to the PPV limit. |
limits.ppvMmS | number | > 0 |
limits.airblastDbL | number | > 0 |
limits.standard | string | The standard the limit comes from, for example AS 2187.2.max length 120 |
ReceiverPpv
Predicted peak particle velocity at a receiver.
| Field | Type | Description |
|---|---|---|
kindrequired | "receiver_ppv" | |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
basisrequired | PpvBasis | How peak particle velocity is taken: the largest single component (max_axis) or the peak vector sum (pvs). |
ppvMmSrequired | Estimate | Peak particle velocity, mm/s. |
dominantFrequencyHz | Estimate | Frequency at the peak, Hz. |
scaledDistance | number | The scaled distance the prediction was made at.> 0 |
exceedanceProbability | number | Probability of exceeding the receiver’s PPV limit, when it has one.≥ 0 · ≤ 1 |
validityrequired | Validity | How far to trust one output. |
ReceiverSpectrum
A predicted amplitude spectrum at a receiver.
| Field | Type | Description |
|---|---|---|
kindrequired | "receiver_spectrum" | |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
spectrumrequired | array of object | The spectrum, by ascending frequency.max 10000 items |
spectrum[].frequencyHzrequired | number | > 0 |
spectrum[].amplituderequired | number | Fourier amplitude, mm/s·s.≥ 0 |
validityrequired | Validity | How far to trust one output. |
ReceiverUnavailable
A kind answered per receiver that the model declined, at one receiver or at all of them.
| Field | Type | Description |
|---|---|---|
kindrequired | enum | receiver_ppvmax_chargereceiver_waveformreceiver_spectrumairblast |
receiverIdrequired | string | null | The receiver the model declined at, or null when it declines the kind at every receiver (for example, the case names none).min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
reasonrequired | enum | Why the model did not answer.not_supportedmissing_inputoutside_validityinsufficient_calibration |
detail | string | max length 500 |
ReceiverWaveform
A predicted ground-motion time history at a receiver.
| Field | Type | Description |
|---|---|---|
kindrequired | "receiver_waveform" | |
receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
percentile | number | Which member of the distribution this trace represents, when the model samples.≥ 0 · ≤ 100 |
sampleRateHzrequired | number | > 0 |
startMsrequired | number | Time of the first sample from T0, ms. |
framerequired | enum | xyztvl |
samplesrequired | ParticleVelocity | Three-component particle velocity, mm/s: one [a, b, c] row per sample in frame order, so every component has the same length; or a reference to the same rows. |
validityrequired | Validity | How far to trust one output. |
RockClass
Coarse rock class used when no measured properties are available.
super_softsoftmediumhardRockDomain
A zone of rock the site treats as one material. Holes name the domain they sit in.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
name | string | min length 1 · max length 120 |
rockClass | RockClass | Coarse class when nothing better is known. |
densityKgM3 | number | In-situ density, kg/m³.> 0 |
ucsMPa | number | Uniaxial compressive strength, MPa.> 0 |
youngsModulusGPa | number | Young's modulus, GPa.> 0 |
hoekBrownMi | number | Hoek–Brown constant m_i of the intact rock: the m in σ1 = σ3 + σci·(m·σ3/σci + 1)^0.5, which with the UCS gives its tensile strength σci·(√(m² + 4) − m)/2, about UCS/m_i.> 0 |
poissonsRatio | number | Poisson's ratio of the intact rock, between 0 and 0.5.> 0 · < 0.5 |
strengthStage | StrengthStage | Which stage of failure the strength figures describe (Martin and Chandler 1994): crack initiation, the onset of strain localisation, or peak. A model judging damage reads the UCS and m_i as that stage's; peak when unstated. |
strainCriterion | StrainCriterion | A strain criterion for this rock, usually regressed from its measured failure strains, which a model judging damage reads in place of the strength it derives from the figures. |
pWaveVelocityMs | number | P-wave velocity, m/s.> 0 |
rmr | number | Rock mass rating (Bieniawski).≥ 0 · ≤ 100 |
gsi | number | Geological strength index.≥ 0 · ≤ 100 |
kuzRamRockFactor | number | Kuz-Ram rock factor A, when calibrated.> 0 |
RunningRun
Started and not yet finished.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
updatedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
statusrequired | "running" | |
progress | number | Fraction complete, for display only.≥ 0 · ≤ 1 |
Scaling
Charge scaling for scaled distance: D/√Q for ground vibration, D/∛Q for airblast and near-field work.
square_rootcube_rootSeedWaveform
A single-hole ground-motion record: the kinematic input a superposition model is calibrated from.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holeId | string | The single hole that produced it.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
receiverId | string | Where it was recorded.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
distanceMrequired | number | Charge-to-sensor distance, m.> 0 |
chargeKgrequired | number | Charge mass of the seed hole, kg.> 0 |
sampleRateHzrequired | number | > 0 |
framerequired | enum | Component frame: instrument axes, or transverse / vertical / longitudinal to the source.xyztvl |
samplesrequired | ParticleVelocity | Three-component particle velocity, mm/s: one [a, b, c] row per sample in frame order, so every component has the same length; or a reference to the same rows. |
recordedAt | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
SiteLaw
A fitted scaled-distance attenuation law.
| Field | Type | Description |
|---|---|---|
metricrequired | "ppv" | |
basisrequired | PpvBasis | How peak particle velocity is taken: the largest single component (max_axis) or the peak vector sum (pvs). |
scalingrequired | Scaling | Charge scaling for scaled distance: D/√Q for ground vibration, D/∛Q for airblast and near-field work. |
krequired | number | Site constant K in PPV = K·SD^−β, mm/s.> 0 |
betarequired | number | Attenuation exponent β.> 0 |
sigmaLn | number | Residual standard deviation in natural-log units.≥ 0 |
n | number | Readings in the fit. Fractional when a regional prior lends the fit its weight in readings.≥ 0 |
scaledDistance | Range | The scaled-distance range the fit was made over. |
fit | LawFitStatistics | What a prediction interval needs beyond σ and n. |
frequencyBins | array of FrequencyBin | Dominant frequency by scaled distance, from the site’s own readings.max 60 items |
sourcerequired | enum | A law fitted by the platform from this site’s readings, one entered by the user, or a regional prior.platform_fituserprior |
StrainAmplitude
The site's fit of the strain a blast puts in its rock near the charges, which a model judging damage scales its amplitude by.
| Field | Type | Description |
|---|---|---|
factorrequired | number | The ratio of the P wave's amplitude near the charges to the site law's PPV extrapolated inward, as the model that fitted it reads both: above 1 the rock is strained more than the law alone says. A model judging damage scales its near-field amplitude by it.> 0 |
basisrequired | enum | What the factor was fitted to: how far behind the back row the wall broke, half-cast counts on the final wall, a post-blast scan against the design, strain read from an array of synchronised monitors, or judgement.backbreakhalf_castscanstrain_arrayjudgement |
blastRef | string | Which blast it was fitted on.min length 1 · max length 200 |
fittedWith | object | The model and version whose amplitude the factor scales. A factor fitted against one model's assumptions is that model's: another model, another version, or any model when this is left out, reads it as judgement. |
fittedWith.modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
fittedWith.modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
note | string | How the fit was made, for a reader.max length 500 |
StrainAmplitudeFit
A damage model's amplitude fitted to the damage a fired blast did: how much the strain near its charges exceeded, or fell short of, what the model takes from the site law.
| Field | Type | Description |
|---|---|---|
kindrequired | "strain_amplitude" | |
factorrequired | Estimate | The factor on the model's near-field amplitude that makes the damage radius it reports on the observed holes what was seen: the median over the holes, in log, with their spread as percentiles. What a later case of the site carries as calibration.strainAmplitude. |
basisrequired | enum | What it was fitted to: the backbreak measured behind the holes.backbreak |
holesrequired | array of object | Each hole the fit read, once.max 5000 items |
holes[].holeIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holes[].observedMrequired | number | The backbreak seen behind it, m.≥ 0 |
holes[].factorrequired | number | The least factor at which the model reports its radius as the backbreak, stated rounded up.> 0 |
validityrequired | Validity | How far to trust one output. |
StrainCriterion
A strain-based Hoek–Brown criterion of the intact rock as Yang and Green (2025) write it, eq. 4: ε1 = ε3 ± (a·σci·ε3 + b·σci²)^0.5 + c·σci, strain a dimensionless fraction, compression positive. A model judging damage reads it on a state's greatest and least compressive principal strains, the middle one ignored, with no tension cutoff beyond the curve's own, in place of the strength it would derive from the domain's figures: so a criterion derived from the same E, μ and m need not answer as the figures do.
| Field | Type | Description |
|---|---|---|
stage | StrengthStage | The stage of failure the criterion describes; peak when unstated. |
sigmaCiMParequired | number | The σci the constants were fitted or derived with, MPa.> 0 |
arequired | number | Per MPa, for strain as a fraction (not percent). |
brequired | number | Per MPa², for strain as a fraction. Must exceed c², or the curve does not enclose the unstrained state: a model judges such a criterion by the form it derives from the figures instead, and warns.> 0 |
crequired | number | Per MPa, for strain as a fraction. |
lesserStrain | Range | The least compressive principal strain ε3 over the failures the fit was made from: compression positive, so the lateral extension of a triaxial test is negative. A model warns where it reads the curve outside it; an empty range covers nothing. |
greaterStrain | Range | The greatest compressive principal strain ε1 over the same failures. The curve has two limbs, and at a lesser strain inside its range the other limb was not fitted: with this, a model can tell which it read. |
basisrequired | enum | Whether the constants were regressed from measured failure strains (their eq. 14) or derived from E, μ and m (their eqs 5–7).regressionderived |
note | string | Where the failure strains or figures came from, for a reader.max length 500 |
StrainField
Peak extension of the rock over a plan-view grid at a depth: where a blast strains the rock past its strength, and by how much.
| Field | Type | Description |
|---|---|---|
kindrequired | "strain_field" | |
gridrequired | Grid | A plan-view grid for field outputs. A field’s values sit at the nodes minX + i·cellM, minY + j·cellM for i below its columns and j below its rows, the last node within a cell of maxX and maxY; a reader takes columns and rows from the output and never recomputes them. |
depthMrequired | number | How far below the grid's plane the field was read, m, the plane being the charged holes' mean collar height for collar_plane: the strain the rock sees at the charges' level, not at the surface.≥ 0 |
columnsrequired | integer | Nodes along x: ⌊(maxX − minX) / cellM⌋ + 1.> 0 |
rowsrequired | integer | Nodes along y: ⌊(maxY − minY) / cellM⌋ + 1.> 0 |
valuesMicrostrainrequired | array of (number | null) | BlobRef | Peak principal extension of the rock at each cell over the whole blast, microstrain, row-major from the south-west corner; null where the model declines to predict.max 4000000 items · each item ≥ 0 |
thresholdMicrostrainrequired | number | The extension at which a plane P wave reaches the model's criterion, for a viewer to contour: the strain of the PPV its damage_envelope reports as thresholdMmS.> 0 |
validityrequired | Validity | How far to trust one output. |
StrengthStage
A stage of the progressive failure of intact rock, from the first cracks to the peak load.
crack_initiationstrain_localisationpeakSucceededRun
Finished with the model’s result.
| Field | Type | Description |
|---|---|---|
idrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
modelIdrequired | ModelId | A model identifier in the form vendor/model, lower case, for example shockai/site-law. |
modelVersionrequired | string | A semantic version. A result is always pinned to the exact version that produced it.pattern ^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$ |
caseIdrequired | string | A content hash: sha256: followed by 64 lower-case hex digits.pattern ^sha256:[0-9a-f]{64}$ |
createdAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
updatedAtrequired | string (date-time) | An ISO 8601 timestamp in UTC, for example 2026-09-26T04:12:00Z. |
statusrequired | "succeeded" | |
resultrequired | ModelResult | What a model returns for one case. |
SurfacePosition
A place on the ground in the case coordinate system, metres, whose elevation may not be known.
| Field | Type | Description |
|---|---|---|
xrequired | number | Easting, metres. |
yrequired | number | Northing, metres. |
z | number | Elevation, metres. Up is positive. Left out where the height was never surveyed: unknown, not zero. |
TimingProposal
A proposed set of firing times.
| Field | Type | Description |
|---|---|---|
kindrequired | "timing_proposal" | |
objectiverequired | string | What the proposal optimises, for example minimise P95 PPV at receiver R3.min length 1 · max length 500 |
holesrequired | array of object | max 5000 items |
holes[].holeIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
holes[].totalMsrequired | number | |
expected | array of object | What the model expects the proposed timing to achieve.max 1000 items |
expected[].receiverIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
expected[].ppvMmSrequired | Estimate | A predicted quantity with its uncertainty. A point value with no spread is allowed but a spread is expected: a prediction without one cannot be scored for coverage. |
validityrequired | Validity | How far to trust one output. |
Unavailable
A requested output the model declined to produce, and why.
One of ReceiverUnavailable | CaseUnavailable
UnchargedDeck
An interval of a hole with no explosive in it.
| Field | Type | Description |
|---|---|---|
kindrequired | enum | What fills this interval of the hole.stemmingairwaterinert |
topDepthMrequired | number | Depth of the top of the deck along the hole, from the collar.≥ 0 |
bottomDepthMrequired | number | Depth of the bottom of the deck along the hole.≥ 0 |
Validity
How far to trust one output.
| Field | Type | Description |
|---|---|---|
statusrequired | enum | Whether the inputs sit inside the range the model was validated on.withinextrapolatedoutside |
code | string | Which way it is outside, as a stable code: for example below_fitted_range, above_fitted_range, near_field.max length 60 · pattern ^[a-z][a-z0-9_]*$ |
note | string | max length 500 |
VodMeasurement
A measured velocity of detonation.
| Field | Type | Description |
|---|---|---|
holeIdrequired | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
productId | string | An opaque identifier: letters, digits, ., _, : and -, up to 128 characters.min length 1 · max length 128 · pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |
vodMsrequired | number | Measured velocity of detonation, m/s.> 0 |
methodrequired | enum | continuous_resistancepoint_to_pointoptical |
Warning
Something the model wants a person to see.
| Field | Type | Description |
|---|---|---|
coderequired | string | A stable machine-readable code. Reserved: interval.approximate, the intervals on this result are approximate (for example, the fit came without its leverage statistics); target narrows it to a receiver. Reserved for a diagnosis: diagnosis.not_converged, the fit had not settled when it stopped; diagnosis.single_record, only one record was read, so nothing cross-checks it; diagnosis.det_log_disagrees, a hole the firing record says did not fire shows in the records; diagnosis.heading_unknown, no record’s heading is known, so shear is not read.max length 80 · pattern ^[a-z][a-z0-9_.-]*$ |
messagerequired | string | min length 1 · max length 1000 |
target | string | What the warning is about: a hole id, a receiver id or a field path.max length 200 |