curl --request POST \
--url https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"taker_signature": "0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b"
}
'import requests
url = "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept"
payload = { "taker_signature": "0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
taker_signature: '0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b'
})
};
fetch('https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'taker_signature' => '0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept"
payload := strings.NewReader("{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}"
response = http.request(request)
puts response.read_body{
"acceptance_id": "01a0df4e-6269-78d2-a4f6-a1b3c5d7e9f8",
"quote_id": "0x5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e",
"rfq_id": "01a0df4e-5e07-7a3c-8f21-d4e6b7a90c1a",
"status": "ACCEPTED",
"deadline": "2026-09-26T20:00:53.352Z",
"operation_id": "0x9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a"
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Accept quote
Accept a quote to open a position or cash one out.
Requires a key for your account with quote:accept.
Also requires sponsorship:use when Totalis pays the gas.
Also requires funding:deposit when the request includes a funding authorization.
Also requires position:cashout when the quote is a cash-out.
curl --request POST \
--url https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"taker_signature": "0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b"
}
'import requests
url = "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept"
payload = { "taker_signature": "0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
taker_signature: '0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b'
})
};
fetch('https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'taker_signature' => '0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept"
payload := strings.NewReader("{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/quotes/{quote_id}/accept")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"taker_signature\": \"0xabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab1b\"\n}"
response = http.request(request)
puts response.read_body{
"acceptance_id": "01a0df4e-6269-78d2-a4f6-a1b3c5d7e9f8",
"quote_id": "0x5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e",
"rfq_id": "01a0df4e-5e07-7a3c-8f21-d4e6b7a90c1a",
"status": "ACCEPTED",
"deadline": "2026-09-26T20:00:53.352Z",
"operation_id": "0x9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a"
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Authorizations
Scoped API key from the Totalis app settings. Each key acts for one account, yours or a maker's, and holds only scopes that account can use. Each operation lists the scopes it requires.
Headers
Lowercase UUIDv7 that names this acceptance: it becomes the acceptance_id. Choose it before the first send and reuse it on every retry. The same key, quote and body returns the stored acceptance without restarting its deadline; the same key with another quote or body returns 409 IDEMPOTENCY_KEY_REUSED. Keys are unique per taker account, across all quotes. A quote can be accepted once: a new key on an RFQ that already has a live acceptance returns 409 STATE_CONFLICT. Lost the response? Read GET /v1/quotes/{quote_id}/acceptance instead of accepting again.
^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$Path Parameters
The quote's quote_id, from QUOTE_CREATED, QUOTE_ACCEPTED or Create quote.
^0x[0-9a-f]{64}$Body
The taker's accept of the quote in the path. The Idempotency-Key header becomes the acceptance_id.
Your EIP-712 signature over the quote. For an entry quote, sign its entry terms as TakerAccept. For a cash-out quote, the owner signs quote_id as SellBack or CashoutTransfer, the same digest the maker signs.
^0x(?:[0-9a-f]{2}){1,4096}$Entry quotes only; not allowed on a cash-out. Covers the part of the stake your vault balance is short, by kind: WALLET (a USDC authorization from your wallet), CORE (a HyperCore spot USDC payment) or COMBINED (both). Omit it when your vault balance covers the stake.
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Response
The acceptance after the maker answered or the two-second confirm window closed, returned within three seconds. Its status is ACCEPTED, PENDING_FUNDING, DECLINED, TIMED_OUT or CANCELLED, never PENDING_CONFIRM. ACCEPTED means the trade is queued, not yet on chain: follow OPERATION_UPDATED on the account stream until it fills.
The accept response: the acceptance after the maker answered or the deadline passed.
The Idempotency-Key the taker sent with the accept, which names this acceptance. Never sent to the maker.
^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$The accepted quote. A quote has at most one acceptance.
^0x[0-9a-f]{64}$RFQ the quote answers.
^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$PENDING_CONFIRM: waiting for the maker. PENDING_FUNDING: the maker confirmed an entry whose HyperCore payment is still pending. ACCEPTED: the maker confirmed and the trade is queued as operation_id. FILLED: the trade committed on chain. FAILED: it reverted or expired unexecuted. DECLINED: the maker declined. TIMED_OUT: the maker did not answer by deadline. CANCELLED: the quote or RFQ went away first, or the HyperCore payment failed.
PENDING_CONFIRM, PENDING_FUNDING, ACCEPTED, FILLED, FAILED, DECLINED, TIMED_OUT, CANCELLED When the maker's time to confirm ends, two seconds after the accept, as an RFC3339 UTC timestamp.
30^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?Z$The on-chain operation that executes the trade; present once status is ACCEPTED, FILLED or FAILED.
^0x[0-9a-f]{64}$Was this page helpful?

