> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agribackup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit a DDS to TRACES NT for EU Clearance

> Transmit a generated Due Diligence Statement to the EU's TRACES NT system and receive an official submission reference number for border clearance tracking.

Once you have generated a Due Diligence Statement, the next step in the EUDR compliance lifecycle is to transmit it to the EU's TRACES NT clearance infrastructure. This endpoint initiates the TRACES NT handshake using your Vault-secured credentials, submits the XML payload for official processing, and returns an official EU reference number you can use to track the declaration's clearance status. Listen for the `dds.submitted` webhook to confirm the payload has been accepted into the TRACES NT queue, and the `dds.validated` or `dds.rejected` webhook for the final outcome.

## Endpoint

`POST /api/v1/enterprise/eudr/declarations/dds/{referenceId}/submit`

## Path Parameters

<ParamField path="referenceId" type="string" required>
  The unique reference identifier of the DDS you wish to submit to TRACES NT. This is the `referenceId` returned when you retrieved the finalized DDS payload. The DDS must be in `GENERATED` status. Attempting to submit a DDS that is already `SUBMITTED` or `REVOKED` will return a `409 Conflict` error.
</ParamField>

## Response Fields

<ResponseField name="success" type="boolean">
  Indicates whether the TRACES NT handshake and submission completed successfully.
</ResponseField>

<ResponseField name="tracesReferenceNumber" type="string">
  The official TRACES NT submission reference number assigned upon successful enqueueing. Present this reference to customs authorities or border inspection posts as proof of filing.
</ResponseField>

<ResponseField name="verificationNumber" type="string">
  A secondary verification number returned by TRACES NT for cross-referencing the submission in the EU clearance system.
</ResponseField>

<ResponseField name="status" type="string">
  The updated DDS lifecycle status returned by TRACES NT. Will reflect `SUBMITTED` upon a successful call to this endpoint.
</ResponseField>

<ResponseField name="message" type="string">
  A human-readable message from TRACES NT describing the outcome of the submission attempt.
</ResponseField>

<ResponseField name="submittedAt" type="string">
  ISO 8601 timestamp recording when the TRACES NT handshake was completed and the payload entered the processing queue.
</ResponseField>

<ResponseField name="hederaTransactionId" type="string">
  The Hedera consensus transaction ID anchoring the submission event on the DLT for immutable audit evidence.
</ResponseField>

## Code Examples

<CodeGroup>
  ```python Python theme={null}
  import agribackup
  from agribackup.rest import ApiException

  configuration = agribackup.Configuration(host="https://live.agribackup.com/api/v1")
  configuration.api_key['ApiKeyAuth'] = 'sk_live_YOUR_API_KEY'

  with agribackup.ApiClient(configuration) as api_client:
      try:
          declarations_api = agribackup.EnterpriseDeclarationsApi(api_client)

          reference_id = "DDS-AB12CD34"
          response = declarations_api.submit_dds(reference_id=reference_id)

          print("Success:", response.success)
          print("TRACES reference number:", response.traces_reference_number)
          print("Status:", response.status)
          print("Submitted at:", response.submitted_at)

      except ApiException as e:
          print("Exception when calling EnterpriseDeclarationsApi: %s\n" % e)
  ```

  ```javascript Node.js theme={null}
  import { AgriBackupClient } from '@agribackup/sdk';

  const client = new AgriBackupClient({
    apiKey: 'sk_live_YOUR_API_KEY',
    baseUrl: 'https://live.agribackup.com/api/v1'
  });

  async function submitDds() {
    try {
      const referenceId = 'DDS-AB12CD34';
      const response = await client.declarations.submitDds(referenceId);

      console.log('Success:', response.success);
      console.log('TRACES reference number:', response.tracesReferenceNumber);
      console.log('Status:', response.status);
      console.log('Submitted at:', response.submittedAt);
    } catch (error) {
      console.error('Error submitting DDS:', error.message);
    }
  }

  submitDds();
  ```

  ```bash cURL theme={null}
  curl --request POST \
    --url https://live.agribackup.com/api/v1/enterprise/eudr/declarations/dds/DDS-AB12CD34/submit \
    --header 'X-API-Key: sk_live_YOUR_API_KEY'
  ```
</CodeGroup>

## Example Response

```json theme={null}
{
  "success": true,
  "tracesReferenceNumber": "TRACES-2026-EU-00441",
  "verificationNumber": "VRF-2026-00441",
  "status": "SUBMITTED",
  "message": "DDS successfully submitted to TRACES NT",
  "submittedAt": "2026-07-15T10:05:33Z",
  "hederaTransactionId": "0.0.12345@1234567890.000000000"
}
```

<Warning>
  Submission to TRACES NT is a one-way operation that cannot be undone through re-submission. If the TRACES NT system returns a validation rejection (indicated by the `dds.rejected` webhook), you must revoke the statement and generate a corrected DDS before resubmitting.
</Warning>

<Note>
  TRACES NT validation is asynchronous. After receiving a successful response from this endpoint, monitor your registered webhook endpoint for the `dds.validated` or `dds.rejected` event. Full validation typically completes within minutes but may take up to 24 hours during peak periods.
</Note>
