Skip to content

Delivery status, attempts and errors

GET
/notifications/deliveries/{delivery_id}
curl --request GET \
--url https://api.flotera.com/api/v1/notifications/deliveries/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--cookie __Host-erm_session=<__Host-erm_session>
delivery_id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid

Delivery detail.

Media typeapplication/json

Delivery projection with append-only attempts.

object
id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
tenant_id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
notification_id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
channel_kind
required
string
Allowed values: telegram email
status
required

Delivery lifecycle (02 §10.5).

string
Allowed values: scheduled queued sending sent retry_wait failed dead cancelled
scheduled_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
next_attempt_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
attempt_count
required
integer
sent_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
provider_message_id
string | null
<= 128 characters
last_error_code
string | null
<= 64 characters
template_version
integer | null
>= 1
attempts
Array<object>
<= 50 items
object
attempt_no
required
integer
>= 1
started_at
required

RFC 3339 UTC with microsecond precision.

string format: date-time
finished_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
outcome
required
string
<= 32 characters
provider_status
string | null
<= 64 characters
error_code
string | null
<= 64 characters
latency_ms
integer | null
created_at
required

RFC 3339 UTC with microsecond precision.

string format: date-time
updated_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
Example
{
"channel_kind": "telegram",
"status": "scheduled",
"attempts": [
{
"started_at": "2026-07-25T10:15:30.123456Z",
"outcome": "sent"
}
],
"created_at": "2026-07-25T10:15:30.123456Z"
}

Missing/invalid credentials (code=unauthorized).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Authenticated but not permitted. code=forbidden — role/scope mismatch; code=feature_not_entitled — the plan does not include the capability; code=account_frozen — the account is frozen and this operation is declared x-ermeon-frozen: deny. The three are deliberately distinct: only the last one is fixed by a top-up (13 §5.6).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Resource does not exist in this tenant. Foreign identifiers also return 404 (anti-enumeration).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}