---
title: "Retry a failed deposit by id"
method: POST
path: "/deposits/{id}/retry"
tags: ["Processing"]
---

# Retry a failed deposit by id

`POST /deposits/{id}/retry`

Re-drive one failed deposit through the settlement flow, addressing it by the stable id returned by `GET /deposits`. Authenticate with an `x-api-key` (write scope) or a Bearer platform token. Scoped to the caller's tenant: an unknown id and another tenant's id are both a 404. The deposit must be `failed` or `rejected`; operator-only states (`ignored`, `delayed`) are retryable through the admin endpoint only. Unlike `POST /deposits/retry`, the error code the deposit failed with does not gate the retry. Optionally pin the settlement layer — EVM only, refused for a Solana or HyperCore deposit rather than silently ignored. Omit the body entirely to retry without pinning a layer. Tron deposits are not retryable. A HyperCore deposit whose first leg already completed is refused with a 409. A 200 means the retry was accepted and re-driven, not that it settled.

## Path parameters

- `id` string, required — Deposit id. Returned by GET /deposits.

## Headers

- `x-api-key` string — API key for authentication (omit when sending Authorization)
- `authorization` string — Bearer platform token (e.g. forwarded by user-service). Takes precedence over `x-api-key` when both are present.
- `x-api-version` string — API version identifier (e.g. "2026-04.amazon"). Optional today, will become required in a future release.

## Request body

- RetryDepositByIdRequestBody
  - `settlementLayer` string — Optional settlement-layer override for the re-drive (e.g. "ACROSS", "RELAY"). EVM deposits only; rejected for Solana. Omit to let the orchestrator pick.

## Response `200`

Deposit retry initiated

- RetryDepositByIdResponse
  - `message` string, required
  - `status` 'pending' | 'processing' | 'completed' | 'failed' | 'rejected' | 'ignored' | 'expecting_refund' | 'refunded' | 'delayed' | 'reconciliation_required', required

## Other responses

- `400` — Deposit not in a retryable state, a Tron deposit, settlement-layer override given for a non-EVM deposit, or the Solana deposit has no output-token route
- `401` — Authentication required or invalid
- `403` — Unauthorized - API key lacks write scope
- `404` — Deposit not found or not owned by the caller
- `409` — HyperCore leg 1 already completed (Core funds swept to HyperEVM) — a leg-2 refund/fill concern, not a leg-1 retry

---

[API](https://skmtc.net/rhinestonewtf/apis/deposit-service-api.md) · [All operations](https://skmtc.net/rhinestonewtf/apis/deposit-service-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/rhinestonewtf/deposit-service-api/revisions/c9aa3f252e4f/schema)
