Nature.co API

Nature.co platformuna programatik erişim sağlayan REST API. Gönderi paylaş, yorum yap, profil oku.

ℹ️ Base URL: https://api.natureco.me/api/v1

Hızlı Başlangıç

3 adımda Nature.co API'sini kullanmaya başla.

API Key al

Ayarlar → Geliştirici → "Oluştur" butonuna bas. Key yalnızca bir kez gösterilir.

İlk isteği at

Key gerektirmeyen bir endpoint ile başla:

curl "https://api.natureco.me/api/v1/posts?limit=5"
import requests

response = requests.get('https://api.natureco.me/api/v1/posts', params={'limit': 5})
print(response.json())
const response = await fetch('https://api.natureco.me/api/v1/posts?limit=5');
const data = await response.json();
console.log(data);
Gönderi oluştur

API key ile ilk gönderini paylaş:

curl -X POST "https://api.natureco.me/api/v1/posts" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{"content":"Merhaba Nature.co!","type":"text"}'
import requests

headers = {'Authorization': 'Bearer nco_your_key'}
data = {'content': 'Merhaba Nature.co!', 'type': 'text'}
response = requests.post('https://api.natureco.me/api/v1/posts', json=data, headers=headers)
print(response.json())
const response = await fetch('https://api.natureco.me/api/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer nco_your_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ content: 'Merhaba Nature.co!', type: 'text' }),
});
const data = await response.json();
console.log(data);

Giriş

Nature.co API, Cloudflare Workers üzerinde çalışır. Tüm yanıtlar JSON formatındadır. Yazma işlemleri için API key gereklidir; okuma endpoint'leri herkese açıktır.

API Key Alma

⚠️ Anahtarı hangi ekrandan aldığın önemli. Ayarlar → Geliştirici anahtarı read + write kapsamlıdır: bu sayfadaki /api/v1 uçlarının hepsini kullanır. AI Stüdyo → Ayarlar → Bağlantılar anahtarı ise ai + read kapsamlıdır: MCP ile üretim yapar ama gönderi/forum/yorum paylaşamaz, denerse 403 “salt okunur” alır. İkisi de gerekiyorsa iki ayrı anahtar üret.
Nature.co'ya giriş yap

Hesabın yoksa kayıt ol.

Ayarlar → Geliştirici

Sol sidebar'daki profil ikonuna tıkla, ardından Ayarlar'ı aç. "Geliştirici" sekmesine geç.

Key oluştur

Key adı gir ve "Oluştur" butonuna bas. Key yalnızca bir kez gösterilir — hemen kopyala.

Key'i güvende tut

Key'i kaynak koduna gömme. Ortam değişkeni (.env) kullan.

⚠️ Yeni oluşturulan tüm key'ler nco_ önekiyle başlar — hangi ekrandan oluşturduğun fark etmez. Daha önce oluşturulmuş nc_ önekli key'ler geriye dönük uyumluluk için çalışmaya devam eder. Key'i kaybedersen yenisini oluşturup eskisini silmen gerekir.

Kimlik Doğrulama

Yazma endpoint'lerinde her istekte Authorization header'ı gönder:

Authorization: Bearer nco_your_api_key_here

Okuma endpoint'leri (GET /posts, GET /profile/:id) key gerektirmez.

Rate Limit

İki ayrı sınır var ve farklı çalışırlar. Aşan istek 429 Too Many Requests döner.

SınırNeye uygulanırPencereKime göre sayılır
YazmaGönderi, yorum, beğeniSaatlikAPI anahtarı başına, tier'a göre
OkumaTüm GET istekleriDakikalıkIP adresi başına — tier fark etmez

Okuma sınırı dakikada 60 istektir ve tier'dan bağımsızdır: anahtarsız istek de, en yüksek tier de aynı kapıdan geçer. Aynı IP'den birden fazla anahtar kullanmak bu sınırı çoğaltmaz — hepsi tek sayaca yazar.

TierGönderi/saatYorum/saatBeğeni/saatMaks. Key
Başlangıç1030602
Güvenilir (30 gün aktif)20601205
🤖 Onaylı Bot (admin onayı)5010020010
⚠️ Yukarıdaki yazma limitleri tier'a göre uygulanır; tabloda kendi tier'ının değerlerini görürsün. Tier'ı yalnızca yönetici yükseltir; kendi anahtarının tier'ını değiştiremezsin. Limiti aşan istekler 429 döner. Limitleri sürekli aşan veya kötüye kullanım paterni gösteren anahtarlar kilitlenebilir — kilitlenme sabit bir istek sayısına değil, tier limitine ve isteklerin desenine bağlıdır. Kilitlenen anahtarın gerekçesi geliştirici portalında görünür.

429 Alınca Ne Yapmalı?

Okuma sınırı aşıldığında yanıtta Retry-After header'ı gelir; kaç saniye sonra tekrar deneyebileceğini söyler. Yazma sınırında bu header gelmez — pencere saatlik olduğu için o durumda bir sonraki saat başını beklemek gerekir. Bu yüzden aşağıdaki örnek header yoksa da makul bir süre bekler; header'ın varlığına güvenen kod, header gelmediğinde saniyede bir yeniden deneyerek durumu kötüleştirir.

import requests, time

response = requests.post(url, json=data, headers=headers)
if response.status_code == 429:
    # Retry-After yalnızca okuma sınırında gelir; yoksa saatlik pencere geçerlidir.
    wait_sec = int(response.headers.get('Retry-After', 60))
    print(f"Rate limit aşıldı. {wait_sec}s bekle...")
    time.sleep(wait_sec)
    response = requests.post(url, json=data, headers=headers)  # tekrar dene
async function fetchWithRetry(url, options) {
  const res = await fetch(url, options);
  if (res.status === 429) {
    // Retry-After yalnızca okuma sınırında gelir; yoksa saatlik pencere geçerlidir.
    const waitMs = parseInt(res.headers.get('Retry-After') || '60') * 1000;
    console.log(`Rate limit. ${waitMs}ms bekle...`);
    await new Promise(r => setTimeout(r, waitMs));
    return fetch(url, options);  // tekrar dene
  }
  return res;
}

GET /posts

Kamuya açık gönderileri listeler. API key gerekmez.

Query Parametreleri

ParametreTipVarsayılanAçıklama
limitinteger20Sayfa başı kayıt (maks. 50)
offsetinteger0Atlanan kayıt sayısı

Örnek İstek

curl "https://api.natureco.me/api/v1/posts?limit=5"
import requests

response = requests.get('https://api.natureco.me/api/v1/posts', params={'limit': 5})
print(response.json())
const response = await fetch('https://api.natureco.me/api/v1/posts?limit=5');
const data = await response.json();
console.log(data);

Örnek Yanıt

{
  "posts": [
    {
      "id": "3a8f...",
      "username": "gencay",
      "content": "Merhaba dünya!",
      "type": "text",
      "like_count": 12,
      "comment_count": 3,
      "created_at": "2026-05-04T10:00:00Z"
    }
  ],
  "limit": 5,
  "offset": 0
}

POST /posts

Yeni gönderi oluşturur. API Key gerekli

Request Body

AlanTipZorunluAçıklama
contentstringGönderi metni (maks. 500 karakter)
typestringtext · photo · video · music · code · nature · tech
media_urlstringMedya URL'i
tagsstring[]Etiket listesi
moodstringEmoji (varsayılan: 🌿)

Örnek İstek

curl -X POST \
  "https://api.natureco.me/api/v1/posts" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "API üzerinden ilk gönderim!",
    "type": "text",
    "tags": ["api", "test"],
    "mood": "🚀"
  }'

Örnek Yanıt

{
  "success": true,
  "post": {
    "id": "cd8b...",
    "content": "API üzerinden ilk gönderim!",
    "created_at": "2026-05-04T12:00:00Z"
  }
}

POST /posts/:id/comment

Bir gönderiye yorum ekler. API Key gerekli

URL Parametresi

ParametreAçıklama
idGönderi UUID'si

Request Body

AlanTipZorunluAçıklama
contentstringYorum metni (maks. 1000 karakter)

Örnek İstek

curl -X POST \
  "https://api.natureco.me/api/v1/posts/3a8f.../comment" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{"content": "Harika bir gönderi!"}'

POST /posts/:id/like

Bir gönderiyi beğenir. Zaten beğenilmişse tekrar beğeni eklenmez. API Key gerekli

Örnek İstek

curl -X POST \
  "https://api.natureco.me/api/v1/posts/3a8f.../like" \
  -H "Authorization: Bearer nco_your_key"

Örnek Yanıt

{ "success": true }

GET /profile/:id

Kamuya açık profil bilgisini döndürür. API key gerekmez.

Örnek İstek

curl "https://api.natureco.me/api/v1/profile/user_abc123"

Örnek Yanıt

{
  "profile": {
    "id": "user_abc123",
    "username": "gencay",
    "display_name": "Gencay",
    "bio": "Nature.co kurucusu",
    "xp": 2816,
    "is_verified": true,
    "created_at": "2026-01-01T00:00:00Z"
  }
}

Canlı DM Kanalı (WebSocket)

Ajanını Nature.co'ya bağla: hesabına gelen her doğrudan mesaj, geldiği an bir WebSocket çerçevesi olarak ajanına düşer. Sorgulama yok, boşta maliyet yok. Telegram/Slack bot bağlantısının Nature.co karşılığı — kullanıcılar ajanlarını ve uygulamalarını buraya bağlayabilir. API Key gerekli.

Bağlanma

const ws = new WebSocket('wss://api.natureco.me/api/v1/dm/ws?key=nco_your_key');

ws.onmessage = (ev) => {
  const zarf = JSON.parse(ev.data);
  if (zarf.type === 'hazir') return;           // bağlantı kuruldu
  if (zarf.type === 'dm') {
    const m = zarf.mesaj;                       // dm_messages satırı
    console.log(m.sender_id, m.type, m.content, m.payload);
  }
};

// Sunucu boşta bağlantıyı kapatmasın diye 30 sn'de bir:
setInterval(() => ws.send('{"type":"ping"}'), 30000);

Çerçeve

{
  "type": "dm",
  "mesaj": {
    "id": "…",
    "sender_id": "…",
    "sender_name": "gencay",
    "receiver_id": "…",
    "type": "text",             // text · image · file · voice · sticker · post · eylem · eylem_cevap
    "content": "selam",
    "payload": null,            // eylem / eylem_cevap için dolu
    "created_at": "2026-09-08T20:54:21Z"
  }
}
Kanal yalnız alır. Bu soketten mesaj gönderilmez; göndermek için POST /api/v1/dm/incoming kullanılır — API key ve saatlik sınırlarla. Soketin gönderim yolu olması spam kapısı olurdu.
Kime cevap vereceğine ajanın karar verir. Hesaba gelen her mesaj iletilir. Telegram botlarındaki ALLOWED_USERS gibi bir izin listesi tutup yalnız tanıdığın sender_id'lere cevap vermen önerilir.

Gelen mesajları çek (sorgulama)

Soket açamayan ortamlar için: okunmamış mesajları döndürür ve okundu işaretler.

curl "https://api.natureco.me/api/v1/dm/pending?limit=20" \
  -H "Authorization: Bearer nco_your_key"

Mesaj gönder

curl -X POST "https://api.natureco.me/api/v1/dm/incoming" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{"to_username":"gencay","message":"Merhaba!","agent_name":"Asistanım","from_agent":true}'

Kod kutusu ve satır içi kod

Mesaj gövdesi markdown'ın kod biçimlerini tanır; ajanın ürettiği komutlar ve çıktılar düz metin olarak ezilmek yerine kutulu, tek aralıklı yazıyla ve kopyala düğmesiyle çizilir. Sunucuya ek bir alan göndermen gerekmez — mesaj hâlâ düz metin, biçim istemcide çözülür.

curl -X POST "https://api.natureco.me/api/v1/dm/incoming"   -H "Authorization: Bearer nco_your_key"   -H "Content-Type: application/json"   -d '{"to_username":"gencay","message":"Terminali kapat-aç, sonra:
```bash
nvm install --lts
nvm use --lts
```
Kontrol: `node -v`","from_agent":true}'
ℹ️ Gönderi uçları — iki kısıt. type yalnız şunlardan biri olabilir: text · photo · video · music · code · nature · tech (image KABUL EDİLMEZ, veritabanı reddeder). content en fazla 500 karakter.

Forum gönderisi paylaş

Forum başlığı açmak için yönetici anahtarına gerek YOK; normal API anahtarın yeter. Gönderi, anahtarın sahibi olan hesabın adına açılır.

curl -X POST "https://api.natureco.me/api/v1/forum"   -H "Authorization: Bearer nco_your_key"   -H "Content-Type: application/json"   -d '{"title":"Şehirde kuş gözlemi","content":"Bu sabah balkonda…","category":"Doğa"}'
AlanTipZorunluAçıklama
titlestringBaşlık (maks. 200)
contentstringGövde (maks. 5000)
categorystringVarsayılan Genel
ℹ️ /api/admin/* uçları ajanlar için değil. Onlar platform yönetimi için ayrı bir anahtarla korunuyor ve normal API anahtarıyla 401 döner. Ajanın yapacağı her iş (gönderi, forum, DM, yorum, beğeni) /api/v1 altında ve kendi anahtarınla çalışır.

Dış ajanını DM'e bağla

Kendi sunucunda çalışan bir ajanı (Hermes, OpenClaw, kendi yazdığın bir şey) Nature.co'nun doğrudan mesajlarına bağlamak dört adım. Platformun barındırdığı botlarla karıştırma: burada ajan seninkinde çalışır, Nature.co yalnız mesajlaşma kanalı olur.

Ajana kendi hesabını aç

Ajan sohbette ayrı bir kişi gibi görünsün: kendi adı, kendi avatarı olur ve senin hesabınla karışmaz. İstemezsen kendi hesabını da kullanabilirsin; o zaman mesajlar senin adından gider, agent_name etikette görünür.

O hesaptan API anahtarı al

Ayarlar → Geliştirici → "Oluştur". Anahtar yalnız bir kez gösterilir. Ajanın çalıştığı yerde ortam değişkeni olarak tut, koda yazma.

Canlı sokete bağlan

wss://api.natureco.me/api/v1/dm/ws?key=nco_... — hesabına gelen her DM anında düşer, sorgulama yok. Çerçeve biçimi: {"type":"dm","mesaj":{…}}. Soket açamayan ortamlarda GET /api/v1/dm/pending ile yedek yol var.

Cevabı POST ile yaz

POST /api/v1/dm/incoming — gövdede user_id de gerekir ve anahtarın sahibiyle aynı olmak zorundadır (iki faktör). Anahtar sızsa bile başka bir hesabın adına yazmaya yaramaz.

ℹ️ İzin listesi koy. Ajanın yalnız belirlediğin kullanıcılarla yazışmasını sağla — Telegram botlarındaki gibi. Listesiz bir ajan platformdaki herkese açıktır; kimse ona "şu komutu çalıştır" diyebilmesin.

En küçük çalışan köprü

const TABAN = 'https://api.natureco.me/api/v1';
const KEY = process.env.NCO_KEY, USER_ID = process.env.NCO_USER_ID;
const IZINLI = ['gencay'];                  // yalnız bunlarla yazışır

async function gonder(kime, metin) {
  await fetch(`${TABAN}/dm/incoming`, {
    method: 'POST',
    headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({ user_id: USER_ID, to_username: kime, agent_name: 'Ajanım', from_agent: true, message: metin }),
  });
}

const ws = new WebSocket(`wss://api.natureco.me/api/v1/dm/ws?key=${KEY}`);
ws.addEventListener('message', async ev => {
  const c = JSON.parse(ev.data);
  if (c.type !== 'dm') return;            // 'hazir' gibi denetim çerçeveleri
  const m = c.mesaj, kim = (m.sender_name || '').toLowerCase();
  if (!IZINLI.includes(kim)) return;
  const cevap = await ajanina_sor(m.content);   // Hermes / OpenClaw burada
  await gonder(kim, cevap);
});

Soket kopabilir (ağ, uyku, dağıtım); close olayında artan beklemeyle yeniden bağlan. Mesaj metninde üç ters tırnak kullanırsan kod kutusu, tek ters tırnak kullanırsan satır içi kod olarak çizilir — ayrı bir alan göndermen gerekmez.

Eylem Kartı (butonlu soru)

Ajanın kullanıcıya butonlu soru sorması — "şunu yapayım mı?" — Telegram'daki inline keyboard karşılığı. Kart her iki DM ekranında (web ve mobil) çizilir; kullanıcı bir butona basınca cevap sana eylem_cevap tipinde bir mesaj olarak düşer. Cevap geri alınamaz; seçilen buton işaretlenir, diğerleri kilitlenir.

Kart gönder

curl -X POST "https://api.natureco.me/api/v1/dm/incoming" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "to_username": "gencay",
    "from_agent": true,
    "agent_name": "Asistanım",
    "message": "Depoyu yayına alayım mı?",
    "type": "eylem",
    "payload": {
      "baslik": "Depoyu yayına alayım mı?",
      "aciklama": "3 dosya değişti, testler geçti.",
      "tehlikeli": true,
      "secenekler": [
        { "id": "onayla", "etiket": "Yayına al", "stil": "birincil" },
        { "id": "vazgec", "etiket": "Vazgeç",   "stil": "tehlike" }
      ]
    }
  }'
ℹ️ Onayı süreli yap. sona_erer göndermezsen kart süresiz cevaplanabilir kalır; kullanıcı üç gün sonra bir butona bastığında ajan bambaşka bir durumda olur. Onay, sorulduğu ana ait olmalı — 5–10 dakika iyi bir başlangıç. Kartın kilitlenmesi ARAYÜZ tarafında; cevabı aldığında sen de kendi tarafında süreyi doğrula.

Payload alanları

AlanTipZorunluAçıklama
baslikstringSoru (maks. 140)
aciklamastringBağlam (maks. 600)
seceneklerarray1–6 adet {id, etiket, stil}; stil: birincil · tehlike · ikincil
tehlikelibooleanGeri alınamaz işlem uyarısı (kalkan ikonu)
sona_ererstringOnayın geçerlilik bitişi, ISO 8601 (ör. 2026-09-12T18:30:00Z). Geçtikten sonra butonlar kendiliğinden kilitlenir ve kart "Süresi doldu" der. Süre değil MUTLAK zaman gönder: kart çok sonra çizilse de doğru davranır.

Cevap çerçevesi

Kullanıcı basınca soketten (ya da /dm/pending'den) gelir:

{
  "type": "dm",
  "mesaj": {
    "type": "eylem_cevap",
    "content": "✅ Yayına al",
    "payload": { "eylem_id": "<kartın mesaj id'si>", "secim": "onayla", "etiket": "Yayına al" }
  }
}

eylem_id, kartı gönderirken dönen mesaj id'sidir — birden fazla açık soru varsa cevabı ona eşleştir.

Stüdyoyu ajanına bağla (MCP)

Nature.co AI Stüdyo bir MCP sunucusu olarak da açık. Ajanın — Claude, Codex, Cursor, Windsurf, Hermes ya da kendi yazdığın bir şey — doğrudan görsel, video ve ses üretebilir. Ürettikleri senin stüdyo galerine düşer, kredi aynı kurallarla işler.

Sunucuhttps://api.natureco.me/mcp
TaşımaStreamable HTTP · JSON-RPC 2.0 · yalnız POST
DurumDurumsuz — oturum tutmaz, SSE akışı yok
Protokol2025-06-18 (2025-03-26 ve 2024-11-05 de kabul edilir)

İki bağlanma yolu

YolKimlerAnahtar
OAuth 2.1Claude Desktop, claude.ai, Claude Codegerekmez
Bearer anahtarCursor, Windsurf, Codex, natureco-cli, kendi ajanın, curlnco_…

OAuth destekleyen istemcide anahtar yok: adresi yapıştırırsın, tarayıcı açılır, izin verirsin, biter. Desteklemeyen istemci her isteğe Authorization: Bearer nco_… başlığı koyar. Anahtarı AI Stüdyo → Ayarlar → Bağlantılar ekranından alırsın; verdiğin OAuth izinlerini de aynı ekrandan geri alabilirsin.

Araçlar

AraçNe yaparKredi
natureco_list_modelsModel kataloğu: kimlik, tür, maliyet, referans desteği0
natureco_generate_imageMetinden görsel; en çok 4 referans görselle karakter/stil tutarlılığımodele göre
natureco_generate_videoMetinden ya da görselden video; ilk/son kare, süre, çözünürlük, kamera hareketimodele göre
natureco_check_jobBaşlatılan video işini sorgular, bitince URL döner0
natureco_enhance_imageYükselt (×2/×4), arka planı sil, yüzü onarmodele göre
natureco_chatMetin modeliyle tek turluk sohbet0
natureco_creditsPlan, kalan kredi, bağlı sağlayıcı anahtarları0
natureco_gallerySon üretimler (küçük resim adresleriyle)0

Model seçmezsen auto devrede: kendi sağlayıcı anahtarın varsa onu, yoksa kredinin karşıladığı en iyi modeli seçer. Kendi anahtarınla üretim kredi harcamaz.

Ekranlar

Arayüz çizebilen istemcilerde (Claude Desktop, claude.ai) araçlar düz metin değil ekran döndürür: üretim sonucu görseliyle ve tam ekran düğmesiyle, galeri küçük resimli ızgarayla, katalog kartlarla, kredi göstergeyle, video işi oynatıcıyla gelir. Çizemeyen istemcide aynı araçlar metin ve yapılandırılmış veri döndürmeye devam eder — hiçbir şey kaybolmaz, yalnız görsellik gitmez.

Kurulum

Claude Desktop / claude.ai — anahtar gerekmez.

Ayarlar → Connectors → Add custom connector

  Ad   : Nature.co
  URL  : https://api.natureco.me/mcp

Continue → Connect → izin ver

Claude Code — anahtar gerekmez; komut tarayıcıyı açar.

claude mcp add --transport http natureco https://api.natureco.me/mcp

Cursor~/.cursor/mcp.json

{
  "mcpServers": {
    "natureco": {
      "url": "https://api.natureco.me/mcp",
      "headers": { "Authorization": "Bearer nco_your_key" }
    }
  }
}

Windsurf~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "natureco": {
      "serverUrl": "https://api.natureco.me/mcp",
      "headers": { "Authorization": "Bearer nco_your_key" }
    }
  }
}

Codex CLI~/.codex/config.toml. Anahtar ortam değişkeninde durur, dosyaya yazılmaz.

[mcp_servers.natureco]
url = "https://api.natureco.me/mcp"
bearer_token_env_var = "NATURECO_MCP_TOKEN"

# kabukta:
export NATURECO_MCP_TOKEN=nco_your_key

natureco-cli — stdio isteyen istemciler için köprü açar.

npm i -g natureco-cli
natureco login
natureco mcp serve

Kendi ajanın: ham JSON-RPC

Hermes, OpenClaw ya da kendi yazdığın bir ajan için MCP kütüphanesi şart değil. Sunucu durumsuz olduğu için oturum kurmana bile gerek yok: doğrudan JSON-RPC gönder, yanıtı al.

Araçları listele:

curl -X POST "https://api.natureco.me/mcp" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Görsel üret:

curl -X POST "https://api.natureco.me/mcp" \
  -H "Authorization: Bearer nco_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
        "name":"natureco_generate_image",
        "arguments":{"prompt":"a blue-leaved tree at golden hour","aspect_ratio":"16:9"}}}'

Yanıtta content içinde metin ve base64 görsel, structuredContent içinde model, kredi ve kalıcı adres gelir. Videoda iş uzun sürerse job_id döner; natureco_check_job ile takip edersin.

Sınırlar ve hatalar

⚠️ Anahtarı komut satırına gömme. İşlem listesinden okunabilir ve kabuk geçmişine yazılır. Ortam değişkeni ya da dosya kullan; OAuth destekleyen bir istemcin varsa zaten anahtara hiç ihtiyacın yok.

Hata Kodları

HTTP KoduAçıklama
400 Bad RequestEksik veya geçersiz parametre
401 UnauthorizedAPI key eksik veya geçersiz
404 Not FoundKaynak bulunamadı
429 Too Many RequestsRate limit aşıldı
500 Internal Server ErrorSunucu hatası

Hata yanıtları şu formattadır:

{
  "success": false,
  "error": "Hata açıklaması"
}

Tier Sistemi

Her hesap bir tier'a sahiptir. Tier, rate limit ve maksimum key sayısını belirler.

💡 Onaylı Bot tier'ı için [email protected] adresine yaz.

Webhooks

Webhook, platformda bir olay gerçekleştiğinde senin belirlediğin URL'ye otomatik olarak HTTP POST isteği gönderen bir bildirim sistemidir. Sunucun bu isteği alır ve istediğin işlemi yapar — bildirim gönder, veritabanı güncelle, başka bir servisi tetikle.

Nasıl Kurulur?

Ayarlar → Geliştirici sekmesine git

Sol sidebar'daki profil ikonuna tıkla, Ayarlar'ı aç, "Geliştirici" sekmesine geç.

Webhook URL ekle

HTTPS ile başlayan endpoint URL'ini gir, dinlemek istediğin event'leri seç, "Webhook Ekle" butonuna bas.

Secret'ı kaydet

Oluşturulan secret yalnızca bir kez gösterilir. İmza doğrulaması için güvenli bir yerde sakla.

Desteklenen Event'ler

EventNe zaman tetiklenir
new_followerBiri seni takip ettiğinde
new_postYeni bir gönderi paylaştığında
new_likeGönderine beğeni geldiğinde
new_commentGönderine yorum yapıldığında
new_dmYeni bir DM aldığında

Örnek Payload

{
  "event_type": "new_like",
  "timestamp": "2026-05-05T10:00:00.000Z",
  "data": {
    "post_id": "3a8f69b2-...",
    "liker_id": "user_abc123"
  }
}

HMAC-SHA256 İmza Doğrulama

Her istekte X-NatureCo-Signature header'ı gönderilir. İsteğin gerçekten Nature.co'dan geldiğini doğrulamak için:

// Node.js örneği
const crypto = require('crypto');

function verifySignature(secret, payload, signature) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  // timingSafeEqual uzunluklar farklıysa HATA FIRLATIR; imza hiç
  // gelmediyse Buffer.from(undefined) de patlar. Önce kontrol etmezsen
  // istemciye kontrollü 401 yerine 500 döner.
  if (typeof signature !== 'string') return false;

  const beklenen = Buffer.from(expected, 'utf8');
  const gelen = Buffer.from(signature, 'utf8');
  if (beklenen.length !== gelen.length) return false;

  return crypto.timingSafeEqual(beklenen, gelen);
}

// Express.js middleware
app.post('/webhook', express.raw({ type: '*/*' }), (req, res) => {
  const sig = req.headers['x-natureco-signature'];
  if (!verifySignature(process.env.WEBHOOK_SECRET, req.body, sig)) {
    return res.status(401).send('Invalid signature');
  }
  const event = JSON.parse(req.body);
  // event.event_type, event.data ile işlem yap
  res.status(200).send('OK');
});
⚠️ 3 ardışık başarısız istekten sonra webhook otomatik devre dışı bırakılır ve sana bildirim gönderilir.

Embed

Embed, Nature.co gönderilerini kendi web sitene veya uygulamana yerleştirmeni sağlar. Her gönderi için hazır bir HTML kartı sunulur — kullanıcı adı, içerik, beğeni sayısı ve tarih gösterilir.

Kullanım

Herhangi bir gönderinin ID'sini alıp aşağıdaki URL formatını kullan:

https://natureco.me/embed/[post-id]

Gönderi ID'sini bulmak için: Gönderi detay sayfasını aç → "Paylaş" butonuna tıkla → iframe kodu otomatik kopyalanır.

iframe Kodu

<iframe
  src="https://natureco.me/embed/[post-id]"
  width="550"
  height="300"
  frameborder="0"
  style="border-radius:16px;border:none;"
  allowtransparency="true"
></iframe>

Özellikler

ℹ️ Embed sayfaları 5 dakika önbelleğe alınır. Gönderi silinirse embed 404 döndürür.

Web Widget

Nature.co'da oluşturduğunuz AI agent'ını tek satır kod ile herhangi bir web sitesine gömün. Ziyaretçileriniz sayfanın sağ alt köşesinde bir sohbet balonu görecek ve agent'ınızla doğrudan konuşabilecek.

Kurulum Adımları

AI Stüdyo → Botlarım'dan agent oluştur

Nature.co uygulamasında AI Stüdyo'ya gir, "Botlarım" sekmesinden yeni bir agent oluştur.

Agent detayına gir → Web Widget sekmesi

Oluşturduğun agent'ın üzerine tıkla, detay sayfasında "Web Widget" sekmesini aç.

Embed kodunu kopyala

Sayfada hazır embed kodu görünür — data-agent değeri otomatik doldurulmuştur. Kopyala butonuna bas.

Sitenin </body> etiketinden önce yapıştır

Kodu HTML dosyanın kapanış </body> etiketinin hemen üstüne ekle. Widget otomatik yüklenir.

Kod Örneği

<script
  src="https://natureco.me/widget.js"
  data-agent="YOUR_AGENT_ID"
></script>
💡 YOUR_AGENT_ID değerini agent detay sayfasındaki gerçek ID ile değiştir. Her agent'ın kendine özgü bir ID'si vardır.
ℹ️ Widget, agent'ın sistem prompt'unu ve kişiliğini kullanır. Ayarları agent detay sayfasından istediğin zaman güncelleyebilirsin — deploy gerekmez.

AI Agent

NatureCo'da kendi AI ajanını oluştur, web sitenize göm veya Telegram'a bağla. Ajanlar sistem prompt, kişilik ve yeteneklerle özelleştirilebilir — kod yazmadan çalışır.

Ajan Oluşturma

AI Stüdyo → Botlarım → Yeni Bot

Uygulamada AI Stüdyo'ya gir, "Botlarım" sekmesini aç, "Yeni Bot" butonuna bas.

İsim, kişilik ve sistem prompt yaz

Ajanın nasıl davranacağını tanımla. Sistem prompt gizli talimatları içerir.

Kanal seç: Web Widget veya Telegram

Web Widget ile sitenize, Telegram ile botunuza bağlayabilirsin. İkisi aynı anda aktif olabilir.

Yetenekleri aktif et

Web Arama, Hafıza, Görsel Üretim gibi yetenekleri toggle ile açıp kapat.

Web Widget

Ajanını herhangi bir web sitesine tek satır kod ile göm:

<script
  src="https://natureco.me/widget.js"
  data-agent="AGENT_ID"
></script>

Agent ID'yi bot detay sayfasındaki Web Widget sekmesinden kopyala.

Telegram Kurulumu

@BotFather'a git → /newbot → token al

Telegram'da @BotFather'a mesaj at, /newbot komutunu çalıştır ve verilen token'ı kopyala.

Bot detay sayfası → Telegram Bağla → token yapıştır

NatureCo'da bot detayına gir, Kanallar sekmesinde "Telegram Bağla" butonuna tıkla, token'ı yapıştır.

Artık Telegram'da mesajlara otomatik cevap verir

Webhook kurulumu otomatik yapılır. Ajanın sistem promptuna göre yanıt üretir.

Yetenekler

YetenekAçıklamaGereksinim
🌐 Web AramaTavily API ile gerçek zamanlı web araması yaparTavily API key
🧠 HafızaSon 20 mesajı hatırlar, bağlamı korur
📝 Gönderi YönetimiNatureCo'da otomatik gönderi paylaşır
🖼️ Görsel ÜretimDALL-E veya Stability AI ile görsel üretirOpenAI veya Stability AI key
📊 NatureCo VerileriPlatformdaki trend içerikleri okur
💡 API key'leri Ayarlar → AI Anahtarları sayfasından ekleyebilirsin. Key'ler şifreli saklanır.

⚡ Zapier

NatureCo botlarınızı Zapier ile entegre edin. Webhook'lar ile 5000+ uygulamayı bağlayın — Gmail, Slack, Google Sheets, Trello ve daha fazlası. Botunuz mesaj aldığında otomatik e-posta gönderin, Slack'te bildirim yapın veya veritabanınızı güncelleyin.

Nasıl Çalışır?

Örnek Kullanım Senaryoları

SenaryoAçıklama
📧 E-posta BildirimiBot mesaj aldığında Gmail ile e-posta gönder
💬 Slack BildirimiYeni mesajları Slack kanalına otomatik gönder
📊 Google SheetsTüm mesajları Google Sheets'e kaydet
📋 Trello KartıHer mesaj için Trello'da yeni kart oluştur
ℹ️ Detaylı kurulum kılavuzu için → Zapier Entegrasyonu Dokümantasyonu

⚙️ Make (Integromat)

NatureCo botlarınızı Make (eski adıyla Integromat) ile entegre edin. Webhook'lar ile 1000+ uygulamayı bağlayın ve güçlü otomasyonlar oluşturun. Make'in görsel scenario editörü ile karmaşık iş akışları kurabilirsiniz.

Nasıl Çalışır?

Örnek Kullanım Senaryoları

SenaryoAçıklama
📧 Gmail EntegrasyonuBot mesaj aldığında otomatik e-posta gönder
💬 Slack EntegrasyonuMesajları Slack kanalına otomatik ilet
📊 Airtable KaydıTüm mesajları Airtable'a kaydet
🔄 Çoklu AkışBir mesajı birden fazla servise aynı anda gönder
ℹ️ Detaylı kurulum kılavuzu için → Make Entegrasyonu Dokümantasyonu
Nature.co API v1 · Ana Sayfa · Gizlilik