curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Wallet-Auth: <x-wallet-auth>' \
--data '
{
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitTransferFrom": [
{
"name": "permitted",
"type": "TokenPermissions"
},
{
"name": "spender",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
],
"TokenPermissions": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
]
},
"primaryType": "PermitTransferFrom",
"message": {
"permitted": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1000000"
},
"spender": "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
"nonce": "123456",
"deadline": "1717123200"
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data"
payload = {
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitTransferFrom": [
{
"name": "permitted",
"type": "TokenPermissions"
},
{
"name": "spender",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
],
"TokenPermissions": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
]
},
"primaryType": "PermitTransferFrom",
"message": {
"permitted": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1000000"
},
"spender": "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
"nonce": "123456",
"deadline": "1717123200"
}
}
headers = {
"X-Wallet-Auth": "<x-wallet-auth>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Wallet-Auth': '<x-wallet-auth>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
domain: {
name: 'Permit2',
chainId: 1,
verifyingContract: '0x000000000022D473030F116dDEE9F6B43aC78BA3'
},
types: {
EIP712Domain: [
{name: 'name', type: 'string'},
{name: 'chainId', type: 'uint256'},
{name: 'verifyingContract', type: 'address'}
],
PermitTransferFrom: [
{name: 'permitted', type: 'TokenPermissions'},
{name: 'spender', type: 'address'},
{name: 'nonce', type: 'uint256'},
{name: 'deadline', type: 'uint256'}
],
TokenPermissions: [{name: 'token', type: 'address'}, {name: 'amount', type: 'uint256'}]
},
primaryType: 'PermitTransferFrom',
message: {
permitted: {token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', amount: '1000000'},
spender: '0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf',
nonce: '123456',
deadline: '1717123200'
}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data', 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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data",
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([
'domain' => [
'name' => 'Permit2',
'chainId' => 1,
'verifyingContract' => '0x000000000022D473030F116dDEE9F6B43aC78BA3'
],
'types' => [
'EIP712Domain' => [
[
'name' => 'name',
'type' => 'string'
],
[
'name' => 'chainId',
'type' => 'uint256'
],
[
'name' => 'verifyingContract',
'type' => 'address'
]
],
'PermitTransferFrom' => [
[
'name' => 'permitted',
'type' => 'TokenPermissions'
],
[
'name' => 'spender',
'type' => 'address'
],
[
'name' => 'nonce',
'type' => 'uint256'
],
[
'name' => 'deadline',
'type' => 'uint256'
]
],
'TokenPermissions' => [
[
'name' => 'token',
'type' => 'address'
],
[
'name' => 'amount',
'type' => 'uint256'
]
]
],
'primaryType' => 'PermitTransferFrom',
'message' => [
'permitted' => [
'token' => '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
'amount' => '1000000'
],
'spender' => '0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf',
'nonce' => '123456',
'deadline' => '1717123200'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Wallet-Auth: <x-wallet-auth>"
],
]);
$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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data"
payload := strings.NewReader("{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Wallet-Auth", "<x-wallet-auth>")
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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data")
.header("X-Wallet-Auth", "<x-wallet-auth>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Wallet-Auth"] = '<x-wallet-auth>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}"
response = http.request(request)
puts response.read_body{
"signature": "0x1b0c9cf8cd4554c6c6d9e7311e88f1be075d7f25b418a044f4bf2c0a42a93e212ad0a8b54de9e0b5f7e3812de3f2c6cc79aa8c3e1c02e7ad14b4a8f42012c2c01b"
}{
"errorType": "invalid_request",
"errorMessage": "Invalid request. Please check the request body and parameters."
}{
"errorType": "unauthorized",
"errorMessage": "Wallet authentication error."
}{
"errorType": "payment_method_required",
"errorMessage": "A valid payment method is required to complete this operation. Please add a payment method to your account at https://portal.cdp.coinbase.com."
}{
"errorType": "not_found",
"errorMessage": "EVM account with the given address not found."
}{
"errorType": "idempotency_error",
"errorMessage": "Idempotency key '8e03978e-40d5-43e8-bc93-6894a57f9324' was already used with a different request payload. Please try again with a new idempotency key."
}{
"errorType": "internal_server_error",
"errorMessage": "An internal server error occurred. Please try again later."
}{
"errorType": "bad_gateway",
"errorMessage": "Bad gateway. Please try again later."
}{
"errorType": "service_unavailable",
"errorMessage": "Service unavailable. Please try again later."
}Sign EIP-712 typed data
Signs EIP-712 typed data with the given EVM account.
curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Wallet-Auth: <x-wallet-auth>' \
--data '
{
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitTransferFrom": [
{
"name": "permitted",
"type": "TokenPermissions"
},
{
"name": "spender",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
],
"TokenPermissions": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
]
},
"primaryType": "PermitTransferFrom",
"message": {
"permitted": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1000000"
},
"spender": "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
"nonce": "123456",
"deadline": "1717123200"
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data"
payload = {
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitTransferFrom": [
{
"name": "permitted",
"type": "TokenPermissions"
},
{
"name": "spender",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
],
"TokenPermissions": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
]
},
"primaryType": "PermitTransferFrom",
"message": {
"permitted": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1000000"
},
"spender": "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
"nonce": "123456",
"deadline": "1717123200"
}
}
headers = {
"X-Wallet-Auth": "<x-wallet-auth>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Wallet-Auth': '<x-wallet-auth>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
domain: {
name: 'Permit2',
chainId: 1,
verifyingContract: '0x000000000022D473030F116dDEE9F6B43aC78BA3'
},
types: {
EIP712Domain: [
{name: 'name', type: 'string'},
{name: 'chainId', type: 'uint256'},
{name: 'verifyingContract', type: 'address'}
],
PermitTransferFrom: [
{name: 'permitted', type: 'TokenPermissions'},
{name: 'spender', type: 'address'},
{name: 'nonce', type: 'uint256'},
{name: 'deadline', type: 'uint256'}
],
TokenPermissions: [{name: 'token', type: 'address'}, {name: 'amount', type: 'uint256'}]
},
primaryType: 'PermitTransferFrom',
message: {
permitted: {token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', amount: '1000000'},
spender: '0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf',
nonce: '123456',
deadline: '1717123200'
}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data', 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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data",
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([
'domain' => [
'name' => 'Permit2',
'chainId' => 1,
'verifyingContract' => '0x000000000022D473030F116dDEE9F6B43aC78BA3'
],
'types' => [
'EIP712Domain' => [
[
'name' => 'name',
'type' => 'string'
],
[
'name' => 'chainId',
'type' => 'uint256'
],
[
'name' => 'verifyingContract',
'type' => 'address'
]
],
'PermitTransferFrom' => [
[
'name' => 'permitted',
'type' => 'TokenPermissions'
],
[
'name' => 'spender',
'type' => 'address'
],
[
'name' => 'nonce',
'type' => 'uint256'
],
[
'name' => 'deadline',
'type' => 'uint256'
]
],
'TokenPermissions' => [
[
'name' => 'token',
'type' => 'address'
],
[
'name' => 'amount',
'type' => 'uint256'
]
]
],
'primaryType' => 'PermitTransferFrom',
'message' => [
'permitted' => [
'token' => '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
'amount' => '1000000'
],
'spender' => '0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf',
'nonce' => '123456',
'deadline' => '1717123200'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Wallet-Auth: <x-wallet-auth>"
],
]);
$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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data"
payload := strings.NewReader("{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Wallet-Auth", "<x-wallet-auth>")
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://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data")
.header("X-Wallet-Auth", "<x-wallet-auth>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/evm/accounts/{address}/sign/typed-data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Wallet-Auth"] = '<x-wallet-auth>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": {\n \"name\": \"Permit2\",\n \"chainId\": 1,\n \"verifyingContract\": \"0x000000000022D473030F116dDEE9F6B43aC78BA3\"\n },\n \"types\": {\n \"EIP712Domain\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n }\n ],\n \"PermitTransferFrom\": [\n {\n \"name\": \"permitted\",\n \"type\": \"TokenPermissions\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"TokenPermissions\": [\n {\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ]\n },\n \"primaryType\": \"PermitTransferFrom\",\n \"message\": {\n \"permitted\": {\n \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"amount\": \"1000000\"\n },\n \"spender\": \"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf\",\n \"nonce\": \"123456\",\n \"deadline\": \"1717123200\"\n }\n}"
response = http.request(request)
puts response.read_body{
"signature": "0x1b0c9cf8cd4554c6c6d9e7311e88f1be075d7f25b418a044f4bf2c0a42a93e212ad0a8b54de9e0b5f7e3812de3f2c6cc79aa8c3e1c02e7ad14b4a8f42012c2c01b"
}{
"errorType": "invalid_request",
"errorMessage": "Invalid request. Please check the request body and parameters."
}{
"errorType": "unauthorized",
"errorMessage": "Wallet authentication error."
}{
"errorType": "payment_method_required",
"errorMessage": "A valid payment method is required to complete this operation. Please add a payment method to your account at https://portal.cdp.coinbase.com."
}{
"errorType": "not_found",
"errorMessage": "EVM account with the given address not found."
}{
"errorType": "idempotency_error",
"errorMessage": "Idempotency key '8e03978e-40d5-43e8-bc93-6894a57f9324' was already used with a different request payload. Please try again with a new idempotency key."
}{
"errorType": "internal_server_error",
"errorMessage": "An internal server error occurred. Please try again later."
}{
"errorType": "bad_gateway",
"errorMessage": "Bad gateway. Please try again later."
}{
"errorType": "service_unavailable",
"errorMessage": "Service unavailable. Please try again later."
}Authorizations
A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.
Headers
A JWT signed using your Wallet Secret, encoded in base64. Refer to the Generate Wallet Token section of our Authentication docs for more details on how to generate your Wallet Token.
An optional string request header for making requests safely retryable. When included, duplicate requests with the same key will return identical responses. Refer to our Idempotency docs for more information on using idempotency keys.
1 - 128Path Parameters
The 0x-prefixed address of the EVM account.
^0x[0-9a-fA-F]{40}$Body
The message to sign using EIP-712.
The domain of the EIP-712 typed data.
Show child attributes
Show child attributes
{
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
}
A mapping of struct names to an array of type objects (name + type).
Each key corresponds to a type name (e.g., "EIP712Domain", "PermitTransferFrom").
{
"EIP712Domain": [
{ "name": "name", "type": "string" },
{ "name": "chainId", "type": "uint256" },
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitTransferFrom": [
{
"name": "permitted",
"type": "TokenPermissions"
},
{ "name": "spender", "type": "address" },
{ "name": "nonce", "type": "uint256" },
{ "name": "deadline", "type": "uint256" }
],
"TokenPermissions": [
{ "name": "token", "type": "address" },
{ "name": "amount", "type": "uint256" }
]
}
The primary type of the message. This is the name of the struct in the types object that is the root of the message.
"PermitTransferFrom"
The message to sign. The structure of this message must match the primaryType struct in the types object.
{
"permitted": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1000000"
},
"spender": "0x1111111254EEB25477B68fb85Ed929f73A960582",
"nonce": "0",
"deadline": "1716239020"
}
Response
Successfully signed typed data.
The signature of the typed data, as a 0x-prefixed hex string.
"0x1b0c9cf8cd4554c6c6d9e7311e88f1be075d7f25b418a044f4bf2c0a42a93e212ad0a8b54de9e0b5f7e3812de3f2c6cc79aa8c3e1c02e7ad14b4a8f42012c2c01b"
Was this page helpful?