Proforma Oluşturma
Yeni bir proforma faturası oluşturur.
Endpoint
POST /kolaybi/v1/proformas
Parametreler
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
contact_id | integer | Evet | Müşteri/cari ID |
address_id | integer | Evet | Adres ID |
order_date | datetime | Evet | Proforma tarihi |
currency | Currency | Evet | Proforma para birimi |
items | array | Evet | Proforma kalemleri |
serial_no | string | Hayır | Proforma seri numarası |
due_date | datetime | Hayır | Geçerlilik tarihi |
description | string | Hayır | Proforma açıklaması |
tags | array | Hayır | Etiket ID listesi (tags[0], tags[1]) |
subtotal_discount_amount | number | Hayır | Genel iskonto (TRY) |
exchange_rate | string | Hayır | Şirket para biriminin proforma para birimine oranı |
Items Array
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
product_id | integer | Evet | Ürün ID değeri |
quantity | string | Evet | Miktar |
unit_price | string | Evet | Birim fiyat |
vat_rate | string | Evet | KDV oranı |
description | string | Hayır | Kalem açıklaması |
discount_amount | number | Hayır | İndirim tutarı |
Örnekler
- cURL
- JavaScript
- PHP
- Python
- C#
curl -X POST "https://ofis-sandbox-api.kolaybi.com/kolaybi/v1/proformas" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Channel: YOUR_CHANNEL" \
-H "Content-Type: multipart/form-data" \
-F "contact_id=1" \
-F "address_id=1" \
-F "order_date=2024-01-15" \
-F "currency=usd" \
-F "tags[0]=4" \
-F "subtotal_discount_amount=50" \
-F "exchange_rate=30.15" \
-F "items[0][product_id]=1" \
-F "items[0][quantity]=2" \
-F "items[0][unit_price]=100.00" \
-F "items[0][vat_rate]=18" \
-F "serial_no=PROF-001" \
-F "description=Örnek proforma açıklaması"
async function createProforma(data) {
const formData = new FormData();
// Ana parametreler
formData.append("contact_id", data.contact_id);
formData.append("address_id", data.address_id);
formData.append("order_date", data.order_date);
formData.append("currency", data.currency);
// Items
data.items.forEach((item, index) => {
formData.append(`items[${index}][product_id]`, item.product_id);
formData.append(`items[${index}][quantity]`, item.quantity);
formData.append(`items[${index}][unit_price]`, item.unit_price);
formData.append(`items[${index}][vat_rate]`, item.vat_rate);
if (item.description)
formData.append(`items[${index}][description]`, item.description);
if (item.discount_amount)
formData.append(`items[${index}][discount_amount]`, item.discount_amount);
});
// Opsiyonel parametreler
if (data.serial_no) formData.append("serial_no", data.serial_no);
if (data.due_date) formData.append("due_date", data.due_date);
if (data.description) formData.append("description", data.description);
if (Array.isArray(data.tags)) {
data.tags.forEach((tagId, index) =>
formData.append(`tags[${index}]`, tagId)
);
}
if (data.subtotal_discount_amount)
formData.append(
"subtotal_discount_amount",
data.subtotal_discount_amount
);
if (data.exchange_rate)
formData.append("exchange_rate", data.exchange_rate);
const response = await fetch(
"https://ofis-sandbox-api.kolaybi.com/kolaybi/v1/proformas",
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
Channel: channel,
},
body: formData,
}
);
return await response.json();
}
// Kullanım
const proforma = await createProforma({
contact_id: 1,
address_id: 1,
order_date: "2024-01-15",
currency: "usd",
tags: [4],
subtotal_discount_amount: "50.00",
exchange_rate: "30.15",
items: [
{
product_id: 1,
quantity: "2",
unit_price: "100.00",
vat_rate: "18",
},
],
serial_no: "PROF-001",
description: "Örnek proforma açıklaması",
});
function createProforma($data) {
$url = 'https://ofis-sandbox-api.kolaybi.com/kolaybi/v1/proformas';
$postData = [
'contact_id' => $data['contact_id'],
'address_id' => $data['address_id'],
'order_date' => $data['order_date'],
'currency' => $data['currency']
];
// Items
foreach ($data['items'] as $index => $item) {
$postData["items[{$index}][product_id]"] = $item['product_id'];
$postData["items[{$index}][quantity]"] = $item['quantity'];
$postData["items[{$index}][unit_price]"] = $item['unit_price'];
$postData["items[{$index}][vat_rate]"] = $item['vat_rate'];
if (isset($item['description'])) $postData["items[{$index}][description]"] = $item['description'];
if (isset($item['discount_amount'])) $postData["items[{$index}][discount_amount]"] = $item['discount_amount'];
}
// Opsiyonel parametreler
if (isset($data['serial_no'])) $postData['serial_no'] = $data['serial_no'];
if (isset($data['due_date'])) $postData['due_date'] = $data['due_date'];
if (isset($data['description'])) $postData['description'] = $data['description'];
if (isset($data['tags'])) {
foreach ($data['tags'] as $index => $tagId) {
$postData["tags[{$index}]"] = $tagId;
}
}
if (isset($data['subtotal_discount_amount'])) $postData['subtotal_discount_amount'] = $data['subtotal_discount_amount'];
if (isset($data['exchange_rate'])) $postData['exchange_rate'] = $data['exchange_rate'];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($postData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $accessToken,
'Channel: ' . $channel,
'Content-Type: application/x-www-form-urlencoded'
],
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Kullanım
$proforma = createProforma([
'contact_id' => 1,
'address_id' => 1,
'order_date' => '2024-01-15',
'currency' => 'try',
'items' => [
[
'product_id' => 1,
'quantity' => '2',
'unit_price' => '100.00',
'vat_rate' => '18'
]
],
'serial_no' => 'PROF-001',
'description' => 'Örnek proforma açıklaması'
]);
import requests
def create_proforma(data):
url = "https://ofis-sandbox-api.kolaybi.com/kolaybi/v1/proformas"
headers = {
"Authorization": f"Bearer {access_token}",
"Channel": channel,
"Content-Type": "application/x-www-form-urlencoded"
}
post_data = {
'contact_id': data['contact_id'],
'address_id': data['address_id'],
'order_date': data['order_date'],
'currency': data['currency']
}
# Items
for index, item in enumerate(data['items']):
post_data[f"items[{index}][product_id]"] = item['product_id']
post_data[f"items[{index}][quantity]"] = item['quantity']
post_data[f"items[{index}][unit_price]"] = item['unit_price']
post_data[f"items[{index}][vat_rate]"] = item['vat_rate']
if 'description' in item: post_data[f"items[{index}][description]"] = item['description']
if 'discount_amount' in item: post_data[f"items[{index}][discount_amount]"] = item['discount_amount']
# Opsiyonel parametreler
if 'serial_no' in data: post_data['serial_no'] = data['serial_no']
if 'due_date' in data: post_data['due_date'] = data['due_date']
if 'description' in data: post_data['description'] = data['description']
if 'tags' in data:
for idx, tag_id in enumerate(data['tags']):
post_data[f"tags[{idx}]"] = tag_id
if 'subtotal_discount_amount' in data:
post_data['subtotal_discount_amount'] = data['subtotal_discount_amount']
if 'exchange_rate' in data:
post_data['exchange_rate'] = data['exchange_rate']
response = requests.post(url, headers=headers, data=post_data)
return response.json()
# Kullanım
proforma = create_proforma({
'contact_id': 1,
'address_id': 1,
'order_date': '2024-01-15',
'currency': 'try',
'items': [
{
'product_id': 1,
'quantity': '2',
'unit_price': '100.00',
'vat_rate': '18'
}
],
'serial_no': 'PROF-001',
'description': 'Örnek proforma açıklaması'
})
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
async Task<dynamic> CreateProformaAsync(Dictionary<string, string> data)
{
using var client = new HttpClient();
var formContent = new MultipartFormDataContent();
// Ana parametreler
formContent.Add(new StringContent(data["contact_id"]), "contact_id");
formContent.Add(new StringContent(data["address_id"]), "address_id");
formContent.Add(new StringContent(data["order_date"]), "order_date");
formContent.Add(new StringContent(data["currency"]), "currency");
// Items
if (data.ContainsKey("items"))
{
var items = JsonConvert.DeserializeObject<List<dynamic>>(data["items"]);
for (int i = 0; i < items.Count; i++)
{
var item = items[i];
formContent.Add(new StringContent(item.product_id.ToString()), $"items[{i}][product_id]");
formContent.Add(new StringContent(item.quantity.ToString()), $"items[{i}][quantity]");
formContent.Add(new StringContent(item.unit_price.ToString()), $"items[{i}][unit_price]");
formContent.Add(new StringContent(item.vat_rate.ToString()), $"items[{i}][vat_rate]");
}
}
// Opsiyonel parametreler
if (data.ContainsKey("serial_no"))
formContent.Add(new StringContent(data["serial_no"]), "serial_no");
if (data.ContainsKey("description"))
formContent.Add(new StringContent(data["description"]), "description");
var request = new HttpRequestMessage(HttpMethod.Post,
"https://ofis-sandbox-api.kolaybi.com/kolaybi/v1/proformas")
{
Content = formContent
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
request.Headers.Add("Channel", channel);
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<dynamic>(content);
}
// Kullanım
var proforma = await CreateProformaAsync(new Dictionary<string, string>
{
{ "contact_id", "1" },
{ "address_id", "1" },
{ "order_date", "2024-01-15" },
{ "currency", "usd" },
{ "serial_no", "PROF-001" },
{ "description", "Örnek proforma açıklaması" },
{ "tags[0]", "4" },
{ "subtotal_discount_amount", "50" },
{ "exchange_rate", "30.15" },
{ "items", "[{\"product_id\":1,\"quantity\":\"2\",\"unit_price\":\"100.00\",\"vat_rate\":\"18\"}]" }
});
Yanıt
- Başarılı Yanıt
{
"data": {
"document_id": 412,
"grand_total": 236.4,
"grand_currency": "usd",
"exchange_grand_total": 7116.16,
"exchange_grand_currency": "try"
}
}
Yanıt Alanları
| Alan | Tip | Açıklama |
|---|---|---|
document_id | integer | Proforma ID |
grand_total | number | Proforma para biriminde toplam |
grand_currency | string | Proforma para birimi |
exchange_grand_total | number | Şirket para birimindeki karşılık |
exchange_grand_currency | string | Şirket para birimi |