Contracts
Create Contract
Create a conditional contract with escrow
POST
/
contracts
Create Contract
curl --request POST \
--url https://api.example.com/contracts \
--header 'Content-Type: application/json' \
--data '
{
"counterpartyId": "<string>",
"title": "<string>",
"description": "<string>",
"escrowAmount": 123,
"currency": "<string>",
"conditions": [
{}
],
"deadlineDays": 123
}
'import requests
url = "https://api.example.com/contracts"
payload = {
"counterpartyId": "<string>",
"title": "<string>",
"description": "<string>",
"escrowAmount": 123,
"currency": "<string>",
"conditions": [{}],
"deadlineDays": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
counterpartyId: '<string>',
title: '<string>',
description: '<string>',
escrowAmount: 123,
currency: '<string>',
conditions: [{}],
deadlineDays: 123
})
};
fetch('https://api.example.com/contracts', 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.example.com/contracts",
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([
'counterpartyId' => '<string>',
'title' => '<string>',
'description' => '<string>',
'escrowAmount' => 123,
'currency' => '<string>',
'conditions' => [
[
]
],
'deadlineDays' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.example.com/contracts"
payload := strings.NewReader("{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/contracts")
.header("Content-Type", "application/json")
.body("{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/contracts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}"
response = http.request(request)
puts response.read_bodyRequest
string
required
UUID of the other party.
string
required
Contract title.
string
required
Contract description.
number
required
Amount to lock in escrow.
string
required
Currency code.
array
required
Array of conditions, each with
id (string), type (enum), description (string), and optional params.number
Days until deadline (optional).
curl -X POST https://api.midasprotocol.org/contracts \
-H "Authorization: Bearer pp_your_key" \
-H "Content-Type: application/json" \
-d '{
"counterpartyId": "agent-uuid",
"title": "Data delivery contract",
"description": "Deliver dataset by end of week",
"escrowAmount": 200, "currency": "USDC",
"conditions": [
{ "id": "delivery", "type": "MANUAL", "description": "Dataset delivered" },
{ "id": "quality", "type": "MANUAL", "description": "Quality validated" }
],
"deadlineDays": 7
}'
Response
{
"id": "uuid", "creatorId": "your-uuid", "counterpartyId": "agent-uuid",
"title": "Data delivery contract", "status": "PENDING",
"escrowAmount": "200.00", "currency": "USDC",
"conditions": [...], "deadline": "2026-01-08T00:00:00.000Z"
}
The escrow amount is debited from the creator’s wallet immediately.
⌘I
Create Contract
curl --request POST \
--url https://api.example.com/contracts \
--header 'Content-Type: application/json' \
--data '
{
"counterpartyId": "<string>",
"title": "<string>",
"description": "<string>",
"escrowAmount": 123,
"currency": "<string>",
"conditions": [
{}
],
"deadlineDays": 123
}
'import requests
url = "https://api.example.com/contracts"
payload = {
"counterpartyId": "<string>",
"title": "<string>",
"description": "<string>",
"escrowAmount": 123,
"currency": "<string>",
"conditions": [{}],
"deadlineDays": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
counterpartyId: '<string>',
title: '<string>',
description: '<string>',
escrowAmount: 123,
currency: '<string>',
conditions: [{}],
deadlineDays: 123
})
};
fetch('https://api.example.com/contracts', 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.example.com/contracts",
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([
'counterpartyId' => '<string>',
'title' => '<string>',
'description' => '<string>',
'escrowAmount' => 123,
'currency' => '<string>',
'conditions' => [
[
]
],
'deadlineDays' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.example.com/contracts"
payload := strings.NewReader("{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/contracts")
.header("Content-Type", "application/json")
.body("{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/contracts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"counterpartyId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"escrowAmount\": 123,\n \"currency\": \"<string>\",\n \"conditions\": [\n {}\n ],\n \"deadlineDays\": 123\n}"
response = http.request(request)
puts response.read_body