---
title: "Malformed signed request — Anis Developers"
description: "The signed request is badly built: a signature header is missing or cannot be read, the signed parts are not the ones this route needs or not in their order, or the `Content-Digest` cannot be read or does not describe the body that was sent. Anis decides this before it looks at any key, so it says nothing about your key."
url: https://developers.anis.ly/errors/malformed-signed-request/
language: en
---

> Every page of this documentation: https://developers.anis.ly/llms.txt

[Error codes](https://developers.anis.ly/errors.md) · Keys and signatures

# Malformed signed request

- **Code:** `malformed_signed_request`
- **Status:** 400
- **If this was an order:** Bought nothing — an earlier copy may have: resume the same id
- **Send it again unchanged?** No — change something first
- **.NET SDK:** `AnisApiException`

> **An earlier copy of this order may have gone through**
>
> This request bought nothing, but it was refused before Anis looked at the order, so it says nothing about an earlier attempt with the same operation id. Fix the cause first (restore access, or fix how the request is signed), then resume the same id (or read it with `GET /orders/{operationId}`). Never place it again under a new id.

## What it means

The signed request is badly built: a signature header is missing or cannot be read, the signed parts are not the ones this route needs or not in their order, or the `Content-Digest` cannot be read or does not describe the body that was sent. Anis decides this before it looks at any key, so it says nothing about your key.

## What to do

- Run the signature self-check ([check your signature](https://developers.anis.ly/reference/check-signature.md)) with the same signing code. If it is refused the same way, the fault is in how your code builds the signed request; if it passes, compare what it reports with the call that failed.
- Rebuild the request over the exact bytes you send: both `Signature` and `Signature-Input` (label `sig1`), exactly the parts this route signs in their order (see [Signing requests](https://developers.anis.ly/docs/signing-requests.md)), and a `Content-Digest` of the body as sent — check that nothing between you and Anis changes the body.
- Do not change your key: this refusal says nothing about it. Sending the same request again unchanged gets the same answer.
- On an order: refused before Anis looked at the order, so it says nothing about an earlier attempt with the same operation id. Fix how the request is signed first, then resume the same id (or read it with `GET /orders/{operationId}`). Never place it again under a new id.

## Where you can meet it

- GET [Read your profile](https://developers.anis.ly/reference/read-profile.md) `/v1/profile`
- GET [List wallets](https://developers.anis.ly/reference/list-wallets.md) `/v1/wallets`
- GET [Read a wallet](https://developers.anis.ly/reference/read-wallet.md) `/v1/wallets/{walletId}`
- GET [List catalogue categories](https://developers.anis.ly/reference/list-categories.md) `/v1/wallets/{walletId}/catalog/categories`
- GET [List subcategories of a category](https://developers.anis.ly/reference/list-subcategories.md) `/v1/wallets/{walletId}/catalog/categories/{categoryId}/subcategories`
- GET [Read a subcategory](https://developers.anis.ly/reference/read-subcategory.md) `/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId}`
- GET [List cards for sale](https://developers.anis.ly/reference/list-cards.md) `/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId}/cards`
- GET [Read a catalogue card](https://developers.anis.ly/reference/read-catalogue-card.md) `/v1/wallets/{walletId}/catalog/cards/{cardId}`
- POST [Place an order](https://developers.anis.ly/reference/create-order.md) `/v1/wallets/{walletId}/orders`
- GET [Read an order](https://developers.anis.ly/reference/read-order.md) `/v1/orders/{operationId}`
- GET [List owned cards](https://developers.anis.ly/reference/list-owned-cards.md) `/v1/wallets/{walletId}/owned-cards`
- GET [Read an owned card](https://developers.anis.ly/reference/read-owned-card.md) `/v1/wallets/{walletId}/owned-cards/{soldCardId}`
- POST [Reveal a card](https://developers.anis.ly/reference/reveal-card.md) `/v1/wallets/{walletId}/owned-cards/{soldCardId}/reveal`
- POST [Reveal an invoice](https://developers.anis.ly/reference/reveal-invoice.md) `/v1/wallets/{walletId}/invoices/{invoiceId}/owned-cards/reveal`
- POST [Suspend your application](https://developers.anis.ly/reference/suspend-application.md) `/v1/application/suspend`
- POST [Revoke an application key](https://developers.anis.ly/reference/revoke-key.md) `/v1/keys/{keyId}/revoke`
- POST [Check your signature](https://developers.anis.ly/reference/check-signature.md) `/v1/diagnostics/signature`
- GET [List your allowed addresses](https://developers.anis.ly/reference/list-networks.md) `/v1/application/networks`
- POST [Allow one more address](https://developers.anis.ly/reference/add-network.md) `/v1/application/networks`
- POST [Remove an address you added](https://developers.anis.ly/reference/remove-network.md) `/v1/application/networks/remove`
- GET [Get meter packages](https://developers.anis.ly/reference/get-meter-packages.md) `/v1/wallets/{walletId}/meter-packages`
- GET [Get my meter charges](https://developers.anis.ly/reference/get-meter-charges.md) `/v1/wallets/{walletId}/meter-charges`
- POST [Charge a meter](https://developers.anis.ly/reference/create-meter-charge.md) `/v1/wallets/{walletId}/meter-charges`
- GET [Read a meter charge](https://developers.anis.ly/reference/read-meter-charge.md) `/v1/meter-charges/{operationId}`
- GET [Get direct recharge products](https://developers.anis.ly/reference/get-direct-recharge-products.md) `/v1/wallets/{walletId}/direct-recharge-products`
- GET [Read a direct recharge product](https://developers.anis.ly/reference/read-direct-recharge-product.md) `/v1/wallets/{walletId}/direct-recharge-products/{productId}`
- GET [Get recipient locations](https://developers.anis.ly/reference/get-direct-recharge-product-locations.md) `/v1/wallets/{walletId}/direct-recharge-products/{productId}/locations`
- GET [Quote a direct recharge product](https://developers.anis.ly/reference/direct-recharge-quote.md) `/v1/wallets/{walletId}/direct-recharge-products/{productId}/quote`
- GET [Get my direct recharges](https://developers.anis.ly/reference/get-direct-recharges.md) `/v1/wallets/{walletId}/direct-recharges`
- POST [Request a direct recharge product](https://developers.anis.ly/reference/create-direct-recharge.md) `/v1/wallets/{walletId}/direct-recharges`
- GET [Read a direct recharge](https://developers.anis.ly/reference/read-direct-recharge.md) `/v1/direct-recharges/{operationId}`
- PATCH [Correct a suspended recipient](https://developers.anis.ly/reference/update-direct-recharge-recipient.md) `/v1/direct-recharges/{operationId}/recipient`
- GET [Read your webhook endpoint](https://developers.anis.ly/reference/read-webhook-endpoint.md) `/v1/webhook-endpoint`
- PUT [Set your webhook endpoint](https://developers.anis.ly/reference/set-webhook-endpoint.md) `/v1/webhook-endpoint`
- POST [Test your webhook endpoint](https://developers.anis.ly/reference/test-webhook-endpoint.md) `/v1/webhook-endpoint/test`
- GET [Get webhook deliveries](https://developers.anis.ly/reference/get-webhook-events.md) `/v1/webhook-events`
- POST [Redeliver a webhook](https://developers.anis.ly/reference/redeliver-webhook-event.md) `/v1/webhook-events/{eventId}/redeliver`

## Example

The body of the refusal. Its `type` is the address of this page.

```
{
  "type": "https://developers.anis.ly/errors/malformed-signed-request",
  "title": "Malformed signed request",
  "status": 400,
  "code": "malformed_signed_request",
  "requestId": "01J9R2K8T4V6XQ0M3B7C5D9E1F"
}
```
