Prepare a merchant signer rotation
GET/settings/signer/rotationReturns, per chain with a SubscriptionManager deployment, the data the outgoing signer must sign for setFactory: the manager clone address, its current setFactoryNonce, and the predicted replacement PaymentFactory address for the new signer. metafactory_address is the chain's PaymentFactoryFactory contract — the CREATE2 deployer whose predict(merchant_id, new_signer, settlement_address) view lets you verify new_factory_address independently before signing.
Headers
| Header | Description | Required |
|---|---|---|
| Authorization | Bearer token with your secret API key | yes |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| new_signer | string | yes |
Example Request
Request
const response = await fetch('https://checkout-api.exodus-int.com/settings/signer/rotation?new_signer=<new_signer>', {
method: 'GET',
headers: {
Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
},
});Responses
| Status | Description |
|---|---|
| 200 | The per-chain rotation entries to sign. |
| 400 | Validation error |
| 401 | Missing or invalid authentication |
| 403 | API key lacks the required scope |
| 422 | Signer not configured, unchanged signer, nothing to rotate, payments in flight, or a SubscriptionManager address that returned no data: no contract, a different contract, or a node that has not seen it yet (`manager_unreachable`). |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
| object | enum: signer_rotation | yes | |
| current_signer | string | yes | |
| new_signer | string | yes | |
| new_factory_address | string | yes | |
| merchant_id | string | yes | |
| settlement_address | string | yes | |
| rotations | object[] | yes |
rotations
| Field | Type | Required | Description |
|---|---|---|---|
| chain | string | yes | |
| contract_address | string | yes | |
| current_signer | string | yes | |
| new_factory_address | string | yes | |
| metafactory_address | string | yes | |
| set_factory_nonce | integer | yes | |
| status | enum: pending | already_rotated | yes |
Example Response
{
"object": "signer_rotation",
"current_signer": "0x1234abcd1234abcd1234abcd1234abcd1234abcd",
"new_signer": "0x5678ef015678ef015678ef015678ef015678ef01",
"new_factory_address": "0xfaceb00cfaceb00cfaceb00cfaceb00cfaceb00c",
"merchant_id": "0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658",
"settlement_address": "0xabcd1234abcd1234abcd1234abcd1234abcd1234",
"rotations": [
{
"chain": "eip155:11155111",
"contract_address": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
"current_signer": "0x1234abcd1234abcd1234abcd1234abcd1234abcd",
"new_factory_address": "0xfaceb00cfaceb00cfaceb00cfaceb00cfaceb00c",
"metafactory_address": "0xc0ffee254729296a45a3885639ac7e10f9d54979",
"set_factory_nonce": 0,
"status": "pending"
}
]
}Error Response
Error (e.g. 400)
{
"error": {
"type": "validation_error",
"message": "amount must be a positive number",
"param": "amount"
}
}Last updated on
