Introdução
A API da binds.co permite integrar seu sistema para disparar pesquisas e consultar resultados. Todas as requisições e respostas usam JSON em UTF-8.
Autenticação
A autenticação é feita via HTTP Basic Auth.
- Crie uma conta em adminv2.binds.co.
- Valide seu e-mail.
- Use suas credenciais para gerar o header
Authorization.
Exemplos por linguagem (mais usados)
Abaixo estão exemplos de envio via POST /seeds. Você só precisa trocar
BINDS_TOKEN, BINDS_KEY e o collector.
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const payload = {
collector: "<collector_id>",
from: { name: "Charlie Parker", email: "hello@binds.co", phone: "+5511000000000" },
metadata: { campoPersonalizado1: "Charlie", campoPersonalizado2: "São Paulo" }
};
const res = await fetch("https://app.binds.co/api/seeds", {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Authorization": `Basic ${auth}`
},
body: JSON.stringify(payload)
});
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
payload = {
"collector": "<collector_id>",
"from": {"name": "Charlie Parker", "email": "hello@binds.co", "phone": "+5511000000000"},
"metadata": {"campoPersonalizado1": "Charlie", "campoPersonalizado2": "São Paulo"}
}
res = requests.post(
"https://app.binds.co/api/seeds",
json=payload,
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Basic {auth}"
},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$payload = [
"collector" => "<collector_id>",
"from" => ["name" => "Charlie Parker", "email" => "hello@binds.co", "phone" => "+5511000000000"],
"metadata" => ["campoPersonalizado1" => "Charlie", "campoPersonalizado2" => "São Paulo"],
];
$ch = curl_init("https://app.binds.co/api/seeds");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json; charset=utf-8",
"Authorization: Basic " . $auth,
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsSeeds {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
String json = """
{
"collector": "<collector_id>",
"from": { "name": "Charlie Parker", "email": "hello@binds.co", "phone": "+5511000000000" },
"metadata": { "campoPersonalizado1": "Charlie", "campoPersonalizado2": "São Paulo" }
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://app.binds.co/api/seeds"))
.header("Content-Type", "application/json; charset=utf-8")
.header("Authorization", "Basic " + auth)
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
var payload = new {
collector = "<collector_id>",
from = new { name = "Charlie Parker", email = "hello@binds.co", phone = "+5511000000000" },
metadata = new { campoPersonalizado1 = "Charlie", campoPersonalizado2 = "São Paulo" }
};
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://app.binds.co/api/seeds");
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
req.Content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"bytes"
"encoding/base64"
"fmt"
"net/http"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
body := []byte(`{
"collector":"<collector_id>",
"from":{"name":"Charlie Parker","email":"hello@binds.co","phone":"+5511000000000"},
"metadata":{"campoPersonalizado1":"Charlie","campoPersonalizado2":"São Paulo"}
}`)
req, _ := http.NewRequest("POST", "https://app.binds.co/api/seeds", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json; charset=utf-8")
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
if res.StatusCode < 200 || res.StatusCode >= 300 {
fmt.Println("HTTP", res.StatusCode)
}
// leia o body conforme necessário (io.ReadAll)
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "json"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
uri = URI("https://app.binds.co/api/seeds")
req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json; charset=utf-8"
req["Authorization"] = "Basic #{auth}"
req.body = {
collector: "<collector_id>",
from: { name: "Charlie Parker", email: "hello@binds.co", phone: "+5511000000000" },
metadata: { campoPersonalizado1: "Charlie", campoPersonalizado2: "São Paulo" }
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X POST \
"https://app.binds.co/api/seeds" \
-H "Authorization: Basic <base64(token:chave)>" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"collector":"<collector_id>",
"from":{"name":"Charlie Parker","email":"hello@binds.co","phone":"+5511000000000"},
"metadata":{"campoPersonalizado1":"Charlie","campoPersonalizado2":"São Paulo"}
}'
Listar pesquisas
Consulta as informações e detalhes de uma lista de pesquisas criadas.
/surveys
AuthorizationBasic <base64(token:chave)>Content-Typeapplication/json;utf-8
curl -X GET \
"https://app.binds.co/api/surveys" \
-H "Authorization: Basic <base64(token:chave)>" \
-H "Content-Type: application/json"
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const res = await fetch("https://app.binds.co/api/surveys", {
method: "GET",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Authorization": `Basic ${auth}`
}
});
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
res = requests.get(
"https://app.binds.co/api/surveys",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Basic {auth}"
},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$ch = curl_init("https://app.binds.co/api/surveys");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json; charset=utf-8",
"Authorization: Basic " . $auth,
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsSurveys {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://app.binds.co/api/surveys"))
.header("Content-Type", "application/json; charset=utf-8")
.header("Authorization", "Basic " + auth)
.GET()
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, "https://app.binds.co/api/surveys");
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
req.Headers.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"encoding/base64"
"fmt"
"io"
"net/http"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
req, _ := http.NewRequest("GET", "https://app.binds.co/api/surveys", nil)
req.Header.Set("Content-Type", "application/json; charset=utf-8")
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
if res.StatusCode < 200 || res.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d - %s", res.StatusCode, string(b)))
}
fmt.Println(string(b))
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
uri = URI("https://app.binds.co/api/surveys")
req = Net::HTTP::Get.new(uri)
req["Content-Type"] = "application/json; charset=utf-8"
req["Authorization"] = "Basic #{auth}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X GET \
"https://app.binds.co/api/surveys" \
-H "Authorization: Basic <base64(token:chave)>" \
-H "Content-Type: application/json; charset=utf-8"
Listar coletores
Obtém collectors (chaves) usados no envio de pesquisas.
/collectors
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const res = await fetch("https://app.binds.co/api/collectors", {
method: "GET",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Authorization": `Basic ${auth}`
}
});
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
res = requests.get(
"https://app.binds.co/api/collectors",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Basic {auth}"
},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$ch = curl_init("https://app.binds.co/api/collectors");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json; charset=utf-8",
"Authorization: Basic " . $auth,
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsCollectors {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://app.binds.co/api/collectors"))
.header("Content-Type", "application/json; charset=utf-8")
.header("Authorization", "Basic " + auth)
.GET()
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, "https://app.binds.co/api/collectors");
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
req.Headers.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"encoding/base64"
"fmt"
"io"
"net/http"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
req, _ := http.NewRequest("GET", "https://app.binds.co/api/collectors", nil)
req.Header.Set("Content-Type", "application/json; charset=utf-8")
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
if res.StatusCode < 200 || res.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d - %s", res.StatusCode, string(b)))
}
fmt.Println(string(b))
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
uri = URI("https://app.binds.co/api/collectors")
req = Net::HTTP::Get.new(uri)
req["Content-Type"] = "application/json; charset=utf-8"
req["Authorization"] = "Basic #{auth}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X GET \
"https://app.binds.co/api/collectors" \
-H "Authorization: Basic <base64(token:chave)>" \
-H "Content-Type: application/json; charset=utf-8"
Enviar pesquisa (seed)
Dispare uma pesquisa via API notificando a binds.co quando um evento ocorrer (ex.: compra, entrega).
O campo collector é obrigatório.
/seeds
{
"collector": "<collector_id>",
"from": {
"name": "Charlie Parker",
"email": "hello@binds.co",
"phone": "+5511000000000"
},
"metadata": {
"campoPersonalizado1": "Charlie",
"campoPersonalizado2": "São Paulo"
}
}
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const payload = {
collector: "<collector_id>",
from: { name: "Charlie Parker", email: "hello@binds.co", phone: "+5511000000000" },
metadata: { campoPersonalizado1: "Charlie", campoPersonalizado2: "São Paulo" }
};
const res = await fetch("https://app.binds.co/api/seeds", {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Authorization": `Basic ${auth}`
},
body: JSON.stringify(payload)
});
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
payload = {
"collector": "<collector_id>",
"from": {"name": "Charlie Parker", "email": "hello@binds.co", "phone": "+5511000000000"},
"metadata": {"campoPersonalizado1": "Charlie", "campoPersonalizado2": "São Paulo"}
}
res = requests.post(
"https://app.binds.co/api/seeds",
json=payload,
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Basic {auth}"
},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$payload = [
"collector" => "<collector_id>",
"from" => ["name" => "Charlie Parker", "email" => "hello@binds.co", "phone" => "+5511000000000"],
"metadata" => ["campoPersonalizado1" => "Charlie", "campoPersonalizado2" => "São Paulo"],
];
$ch = curl_init("https://app.binds.co/api/seeds");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json; charset=utf-8",
"Authorization: Basic " . $auth,
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsSeeds {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
String json = """
{
"collector": "<collector_id>",
"from": { "name": "Charlie Parker", "email": "hello@binds.co", "phone": "+5511000000000" },
"metadata": { "campoPersonalizado1": "Charlie", "campoPersonalizado2": "São Paulo" }
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://app.binds.co/api/seeds"))
.header("Content-Type", "application/json; charset=utf-8")
.header("Authorization", "Basic " + auth)
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
var payload = new {
collector = "<collector_id>",
from = new { name = "Charlie Parker", email = "hello@binds.co", phone = "+5511000000000" },
metadata = new { campoPersonalizado1 = "Charlie", campoPersonalizado2 = "São Paulo" }
};
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://app.binds.co/api/seeds");
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
req.Content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"bytes"
"encoding/base64"
"fmt"
"io"
"net/http"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
body := []byte(`{
"collector":"<collector_id>",
"from":{"name":"Charlie Parker","email":"hello@binds.co","phone":"+5511000000000"},
"metadata":{"campoPersonalizado1":"Charlie","campoPersonalizado2":"São Paulo"}
}`)
req, _ := http.NewRequest("POST", "https://app.binds.co/api/seeds", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json; charset=utf-8")
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
if res.StatusCode < 200 || res.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d - %s", res.StatusCode, string(b)))
}
fmt.Println(string(b))
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "json"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
uri = URI("https://app.binds.co/api/seeds")
req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json; charset=utf-8"
req["Authorization"] = "Basic #{auth}"
req.body = {
collector: "<collector_id>",
from: { name: "Charlie Parker", email: "hello@binds.co", phone: "+5511000000000" },
metadata: { campoPersonalizado1: "Charlie", campoPersonalizado2: "São Paulo" }
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X POST \
"https://app.binds.co/api/seeds" \
-H "Authorization: Basic <base64(token:chave)>" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"collector":"<collector_id>",
"from":{"name":"Charlie Parker","email":"hello@binds.co","phone":"+5511000000000"},
"metadata":{"campoPersonalizado1":"Charlie","campoPersonalizado2":"São Paulo"}
}'
Listar respostas
Consulta respostas de uma pesquisa específica.
/surveys/{surveyId}/responses
startDate e endDate para filtrar intervalo, além de skip e limit para paginação.
curl -X GET \
"https://app.binds.co/api/surveys/<surveyId>/responses?startDate=2025-01-01T00:00:00.000Z&endDate=2025-01-31T23:59:59.000Z&skip=0&limit=1000" \
-H "Authorization: Basic <base64(token:chave)>"
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const surveyId = "<surveyId>";
const qs = new URLSearchParams({
startDate: "2025-01-01T00:00:00.000Z",
endDate: "2025-01-31T23:59:59.000Z",
skip: "0",
limit: "1000"
});
const url = `https://app.binds.co/api/surveys/${encodeURIComponent(surveyId)}/responses?${qs}`;
const res = await fetch(url, { headers: { "Authorization": `Basic ${auth}` } });
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
survey_id = "<surveyId>"
params = {
"startDate": "2025-01-01T00:00:00.000Z",
"endDate": "2025-01-31T23:59:59.000Z",
"skip": 0,
"limit": 1000
}
res = requests.get(
f"https://app.binds.co/api/surveys/{survey_id}/responses",
params=params,
headers={"Authorization": f"Basic {auth}"},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$surveyId = "<surveyId>";
$qs = http_build_query([
"startDate" => "2025-01-01T00:00:00.000Z",
"endDate" => "2025-01-31T23:59:59.000Z",
"skip" => 0,
"limit" => 1000,
]);
$url = "https://app.binds.co/api/surveys/" . rawurlencode($surveyId) . "/responses?" . $qs;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Basic " . $auth],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsResponses {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
String surveyId = "<surveyId>";
String qs =
"startDate=" + URLEncoder.encode("2025-01-01T00:00:00.000Z", StandardCharsets.UTF_8) +
"&endDate=" + URLEncoder.encode("2025-01-31T23:59:59.000Z", StandardCharsets.UTF_8) +
"&skip=0&limit=1000";
URI uri = URI.create("https://app.binds.co/api/surveys/" + URLEncoder.encode(surveyId, StandardCharsets.UTF_8) + "/responses?" + qs);
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(uri)
.header("Authorization", "Basic " + auth)
.GET()
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
var surveyId = "<surveyId>";
var url = "https://app.binds.co/api/surveys/" + Uri.EscapeDataString(surveyId)
+ "/responses?startDate=" + Uri.EscapeDataString("2025-01-01T00:00:00.000Z")
+ "&endDate=" + Uri.EscapeDataString("2025-01-31T23:59:59.000Z")
+ "&skip=0&limit=1000";
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, url);
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"encoding/base64"
"fmt"
"io"
"net/http"
"net/url"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
surveyId := "<surveyId>"
qs := url.Values{}
qs.Set("startDate", "2025-01-01T00:00:00.000Z")
qs.Set("endDate", "2025-01-31T23:59:59.000Z")
qs.Set("skip", "0")
qs.Set("limit", "1000")
u := "https://app.binds.co/api/surveys/" + url.PathEscape(surveyId) + "/responses?" + qs.Encode()
req, _ := http.NewRequest("GET", u, nil)
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
if res.StatusCode < 200 || res.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d - %s", res.StatusCode, string(b)))
}
fmt.Println(string(b))
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
survey_id = "<surveyId>"
uri = URI("https://app.binds.co/api/surveys/#{URI.encode_www_form_component(survey_id)}/responses")
uri.query = URI.encode_www_form(
startDate: "2025-01-01T00:00:00.000Z",
endDate: "2025-01-31T23:59:59.000Z",
skip: 0,
limit: 1000
)
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Basic #{auth}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X GET \
"https://app.binds.co/api/surveys/<surveyId>/responses?startDate=2025-01-01T00:00:00.000Z&endDate=2025-01-31T23:59:59.000Z&skip=0&limit=1000" \
-H "Authorization: Basic <base64(token:chave)>"
Listar abordagens
Consulta envios (abordagens) de uma pesquisa.
/survey-sendings?survey={surveyId}
curl -X GET \
"https://app.binds.co/api/survey-sendings?survey=<surveyId>" \
-H "Authorization: Basic <base64(token:chave)>"
JavaScript (Node 18+ com fetch)
const token = process.env.BINDS_TOKEN;
const key = process.env.BINDS_KEY;
const auth = Buffer.from(`${token}:${key}`).toString("base64");
const surveyId = "<surveyId>";
const url = `https://app.binds.co/api/survey-sendings?survey=${encodeURIComponent(surveyId)}`;
const res = await fetch(url, { headers: { "Authorization": `Basic ${auth}` } });
if (!res.ok) throw new Error(`HTTP ${res.status} - ${await res.text()}`);
console.log(await res.json());
Python (requests)
import os, base64, requests
token = os.environ["BINDS_TOKEN"]
key = os.environ["BINDS_KEY"]
auth = base64.b64encode(f"{token}:{key}".encode("utf-8")).decode("utf-8")
survey_id = "<surveyId>"
res = requests.get(
"https://app.binds.co/api/survey-sendings",
params={"survey": survey_id},
headers={"Authorization": f"Basic {auth}"},
timeout=30
)
res.raise_for_status()
print(res.json())
PHP (cURL)
<?php
$token = getenv("BINDS_TOKEN");
$key = getenv("BINDS_KEY");
$auth = base64_encode($token . ":" . $key);
$surveyId = "<surveyId>";
$url = "https://app.binds.co/api/survey-sendings?survey=" . rawurlencode($surveyId);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Basic " . $auth],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false) throw new Exception(curl_error($ch));
curl_close($ch);
if ($status < 200 || $status >= 300) throw new Exception("HTTP " . $status . " - " . $body);
echo $body;
Java (Java 11+ HttpClient)
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BindsSendings {
public static void main(String[] args) throws Exception {
String token = System.getenv("BINDS_TOKEN");
String key = System.getenv("BINDS_KEY");
String auth = Base64.getEncoder().encodeToString((token + ":" + key).getBytes(StandardCharsets.UTF_8));
String surveyId = "<surveyId>";
URI uri = URI.create("https://app.binds.co/api/survey-sendings?survey=" + URLEncoder.encode(surveyId, StandardCharsets.UTF_8));
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(uri)
.header("Authorization", "Basic " + auth)
.GET()
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
if (res.statusCode() < 200 || res.statusCode() >= 300) {
throw new RuntimeException("HTTP " + res.statusCode() + " - " + res.body());
}
System.out.println(res.body());
}
}
C# (.NET / HttpClient)
using System;
using System.Net.Http;
using System.Text;
var token = Environment.GetEnvironmentVariable("BINDS_TOKEN");
var key = Environment.GetEnvironmentVariable("BINDS_KEY");
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{token}:{key}"));
var surveyId = "<surveyId>";
var url = "https://app.binds.co/api/survey-sendings?survey=" + Uri.EscapeDataString(surveyId);
using var http = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, url);
req.Headers.TryAddWithoutValidation("Authorization", $"Basic {auth}");
var res = await http.SendAsync(req);
var body = await res.Content.ReadAsStringAsync();
if (!res.IsSuccessStatusCode) throw new Exception($"HTTP {(int)res.StatusCode} - {body}");
Console.WriteLine(body);
Go (net/http)
package main
import (
"encoding/base64"
"fmt"
"io"
"net/http"
"net/url"
"os"
)
func main() {
token := os.Getenv("BINDS_TOKEN")
key := os.Getenv("BINDS_KEY")
auth := base64.StdEncoding.EncodeToString([]byte(token + ":" + key))
surveyId := "<surveyId>"
u := "https://app.binds.co/api/survey-sendings?survey=" + url.QueryEscape(surveyId)
req, _ := http.NewRequest("GET", u, nil)
req.Header.Set("Authorization", "Basic "+auth)
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
if res.StatusCode < 200 || res.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d - %s", res.StatusCode, string(b)))
}
fmt.Println(string(b))
}
Ruby (Net::HTTP)
require "net/http"
require "uri"
require "base64"
token = ENV["BINDS_TOKEN"]
key = ENV["BINDS_KEY"]
auth = Base64.strict_encode64("#{token}:#{key}")
survey_id = "<surveyId>"
uri = URI("https://app.binds.co/api/survey-sendings")
uri.query = URI.encode_www_form(survey: survey_id)
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Basic #{auth}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code} - #{res.body}" unless res.code.to_i.between?(200, 299)
puts res.body
cURL (bash)
curl -X GET \
"https://app.binds.co/api/survey-sendings?survey=<surveyId>" \
-H "Authorization: Basic <base64(token:chave)>"