When Dragon Guard posts results back to an ERP (for example, after a GrupoMAS Native receipt execution), the outbound delivery is decoupled from the handheld request using a persistent acknowledgment queue. The handheld receives a local acceptance response immediately, while the actual HTTP call to the ERP is made asynchronously by a background dispatcher. This design ensures that temporary ERP outages or network interruptions never block the warehouse operator — Dragon Guard retries the delivery automatically and preserves the exact original payload for replay.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CodexaCP/DG_BACK/llms.txt
Use this file to discover all available pages before exploring further.
Delivery Flow
Handheld posts result
The operator submits a result (e.g.
POST /api/v1/integration/grupomas-native/receipt-results). Dragon Guard persists the operational execution log in core.OperationalExecutionLogs.Acknowledgment record created
Within the same operation, Dragon Guard creates an
OutboundAcknowledgment record containing the exact payload to be sent to the ERP. Initial status: PENDING.API responds with local acceptance
Dragon Guard returns
200 OK to the handheld with status: "ERP_PENDING", outboundAcknowledgmentId, and outboundAcknowledgmentStatus: "PENDING". The handheld does not wait for ERP confirmation.Background dispatcher delivers
A hosted service evaluates due acknowledgments every 1 minute and attempts delivery to the ERP endpoint. On HTTP 2xx from the ERP, the status becomes
SENT.Retry on failure
On a retryable failure (transport error, 5xx), status becomes
FAILED and nextRetryAt is scheduled using exponential backoff.Retry Schedule
The durable dispatcher uses exponential backoff between delivery attempts:| Attempt | Delay after previous failure |
|---|---|
| 1st retry | 1 minute |
| 2nd retry | 5 minutes |
| 3rd retry | 15 minutes |
| 4th retry | 30 minutes |
| 5th retry | 60 minutes |
DEAD_LETTER. Use the manual retry endpoint to re-queue dead-lettered records after resolving the underlying issue.
The durable retry dispatcher replays the original queued payload stored in
PayloadJson. The handheld never needs to resubmit. This is safe because the ERP call is idempotent by design — Grupo Mas ERP applies the same result only once when the eventId and idempotencyKey match.Status Values
Thestatus field on an OutboundAcknowledgment record uses the following values.
| Status | Meaning |
|---|---|
PENDING | Accepted locally, queued for first delivery attempt. |
SENT | ERP confirmed receipt with an HTTP 2xx response. |
FAILED | Previous delivery attempt failed with a retryable error; next attempt is scheduled via nextAttemptAt. |
SKIPPED | Tenant is not integrated or has no callbackUrl configured. No delivery will be attempted. |
DEAD_LETTER | All retry attempts exhausted, or the ERP returned a non-retryable rejection. Manual intervention required. |
The
OperationalExecutionLog.RetryStatus field — visible in GrupoMAS Native posting-result responses as result.retryStatus — uses a separate value set: OUTBOUND_QUEUED, OUTBOUND_RETRY_REQUIRED, OUTBOUND_COMPLETED, OUTBOUND_DEAD_LETTER, OUTBOUND_NOT_CONFIGURED. Those values track the retry lifecycle inside the execution log, not the OutboundAcknowledgment entity itself.API Endpoints
List Acknowledgments
GET /api/outbound-acknowledgments
Returns a paged list of outbound acknowledgment records for the active company.
Company filter. Defaults to the authenticated user’s active company.
Filter by status value (e.g.
DEAD_LETTER, PENDING, FAILED).Filter by event type (e.g.
GRUPOMAS_RECEIPT_RESULT).Text search across
sourceDocumentNo, postedDocumentNo, and eventType.Page number, 1-based. Defaults to
1.Results per page. Defaults to
20, maximum 100.Get Single Acknowledgment
GET /api/outbound-acknowledgments/{id}
Returns full detail for a single acknowledgment record, including the payloadJson field that contains the exact outbound payload that was (or will be) sent to the ERP.
Acknowledgment record ID. Returned as
outboundAcknowledgmentId in posting-result responses.Manually Trigger Retry
POST /api/outbound-acknowledgments/{id}/retry
Immediately re-queues the specified acknowledgment for delivery, bypassing the scheduled nextRetryAt window. Useful for resolving dead-lettered records after fixing an ERP connectivity or configuration issue.
Acknowledgment record ID.
Calling retry on a record with status
SENT (i.e., already successfully delivered) returns 409 Conflict to prevent accidental duplicate delivery to the ERP.OutboundAcknowledgmentDto Fields
Unique identifier for this acknowledgment record.
Tenant company ID.
Tenant company code.
Integration provider that owns this acknowledgment (e.g.
GrupoMASNative).Event type classification. Supported values:
RECEIPT_POSTED, SHIPMENT_POSTED, GRUPOMAS_RECEIPT_RESULT, GRUPOMAS_SHIPMENT_RESULT, GRUPOMAS_COUNT_RESULT, GRUPOMAS_TRANSFER_RESULT.Type of the originating Dragon Guard document.
ID of the originating document in Dragon Guard.
Document number of the originating document.
Type of the posted result document.
Posted document number.
Current delivery status. One of
PENDING, SENT, FAILED, SKIPPED, DEAD_LETTER. See Status Values above.ERP endpoint URL that Dragon Guard is posting to.
null for OUTBOUND_NOT_CONFIGURED records.Number of delivery attempts made so far.
HTTP status code returned by the ERP on the last attempt.
Response body from the ERP on the last attempt (truncated if large).
Error message from the last failed attempt.
Timestamp of the most recent delivery attempt.
Scheduled time for the next retry.
null for completed or dead-lettered records.Timestamp when the ERP successfully acknowledged the delivery.
Timestamp when the record was moved to dead-letter status.
Explanation of why the record was dead-lettered (e.g. retry exhaustion, non-retryable ERP rejection).
Correlation ID from the original inbound handheld request. Preserved through the local audit log and forwarded to the ERP in the
X-Correlation-Id header.Timestamp when the acknowledgment record was created.
The exact JSON payload that Dragon Guard sends (or sent) to the ERP. Only included in single-record GET responses, not in list pages.
Correlation Tracing
TheX-Correlation-Id header from the original inbound handheld request is preserved across the entire delivery chain:
- Inbound request — Dragon Guard reads
X-Correlation-Idfrom the handheld POST. - Local audit — The correlation ID is persisted in
core.OperationalExecutionLogsand in theOutboundAcknowledgmentrecord. - Outbound ERP call — Dragon Guard forwards the same
X-Correlation-Idheader to the ERP on every delivery attempt (including retries).
Event Types
| Event type | Trigger |
|---|---|
GRUPOMAS_RECEIPT_RESULT | POST /api/v1/integration/grupomas-native/receipt-results |
GRUPOMAS_SHIPMENT_RESULT | POST /api/v1/integration/grupomas-native/shipment-results |
GRUPOMAS_COUNT_RESULT | POST /api/v1/integration/grupomas-native/count-results |
GRUPOMAS_TRANSFER_RESULT | POST /api/v1/integration/grupomas-native/transfer-results |
RECEIPT_POSTED | Generic API receipt posting |
SHIPMENT_POSTED | Generic API shipment posting |