POST
/submitSubmit a transaction
Submit a transaction request to the Relayer. Authenticated using Builder API Keys or Relayer API Keys. Returns immediately with the `transactionID` and a `state` of `STATE_NEW`. The onchain transaction hash is **not** included in this response — poll `GET /transaction` with the returned `transactionID` to retrieve the `transactionHash` once the transaction has been broadcast.
- Base URL
- https://relayer-v2.polymarket.com
- Auth
- Builder or Relayer API key headersPOLY_BUILDER_API_KEY, POLY_BUILDER_TIMESTAMP, POLY_BUILDER_PASSPHRASE, POLY_BUILDER_SIGNATURE, RELAYER_API_KEY, RELAYER_API_KEY_ADDRESSAuthenticated using Builder API Keys or Relayer API Keys.
- Rate limit
- 25 req / 1 min
- Limit applies to
- Relayer /submit
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| POLY_BUILDER_API_KEY | header | string | no | Builder API key (when using Builder API Key auth) |
| POLY_BUILDER_TIMESTAMP | header | string | no | Unix timestamp (when using Builder API Key auth) |
| POLY_BUILDER_PASSPHRASE | header | string | no | Builder passphrase (when using Builder API Key auth) |
| POLY_BUILDER_SIGNATURE | header | string | no | HMAC-SHA256 signature (when using Builder API Key auth) |
| RELAYER_API_KEY | header | string | no | Relayer API key (when using Relayer API Key auth) |
| RELAYER_API_KEY_ADDRESS | header | string | no | Address that owns the key (when using Relayer API Key auth) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| from | string | yes | Ethereum address (0x-prefixed, 40 hex chars) |
| to | string | yes | Ethereum address (0x-prefixed, 40 hex chars) |
| proxyWallet | string | yes | Ethereum address (0x-prefixed, 40 hex chars) |
| data | string | yes | Encoded transaction data (0x-prefixed hex string) |
| nonce | string | yes | Transaction nonce |
| signature | string | yes | Transaction signature (0x-prefixed hex string) |
| signatureParams | object | yes | |
| type | string | yes | Transaction type |
Example
curl -X POST "https://relayer-v2.polymarket.com/submit" \
-H "Content-Type: application/json" \
-H "POLY_BUILDER_API_KEY: $POLY_BUILDER_API_KEY" \
-H "POLY_BUILDER_TIMESTAMP: $POLY_BUILDER_TIMESTAMP" \
-H "POLY_BUILDER_PASSPHRASE: $POLY_BUILDER_PASSPHRASE" \
-H "POLY_BUILDER_SIGNATURE: $POLY_BUILDER_SIGNATURE" \
-H "RELAYER_API_KEY: $RELAYER_API_KEY" \
-H "RELAYER_API_KEY_ADDRESS: $RELAYER_API_KEY_ADDRESS" \
-d '{
"from": "<from>",
"to": "<to>",
"proxyWallet": "<proxyWallet>",
"data": "<data>",
"nonce": "<nonce>",
"signature": "<signature>",
"signatureParams": {},
"type": "<type>"
}'Response fields
| Field | Type | Description |
|---|---|---|
| transactionID | string | Unique identifier for the submitted transaction |
| state | string | Current state of the transaction |
Responses
| Status | Meaning |
|---|---|
| 200 | Transaction submitted successfully |
| 400 | Bad Request - Invalid transaction payload, fields, or signature |
| 401 | Unauthorized - Invalid authentication |
| 429 | Too Many Requests - Quota exceeded |
| 500 | Server Error |
From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.