{
"status": true,
"result": []
}{
"status": false,
"message": "İstek alanları geçersiz."
}{
"status": false,
"code": "UNAUTHORIZED",
"message": "API kimlik bilgileri doğrulanamadı."
}{
"status": false,
"message": "Ürün, IP, modül izni veya kaynak kapsamı uygun değil."
}{
"status": false,
"message": "Hesap bulunamadı / GİB oturumu açılamadı."
}{
"status": false,
"code": "OPERATION_IN_PROGRESS",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": false,
"code": "OPERATION_REJECTED",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later."
}{
"status": false,
"message": "İşlem gerçekleştirilemedi."
}{
"status": false,
"code": "UPSTREAM_RESULT_UNCERTAIN",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": false,
"code": "OPERATION_RECORD_UNAVAILABLE",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}GİB e-Arşiv işlemi yürütün
Yalnız logout,getUserData,query,html,download,cancel,verifyPhoneNumber,sign,send türleri kabul edilir.
PATCH
https://api.muhasip.pro
/
apps
/
earsiv
{
"status": true,
"result": []
}{
"status": false,
"message": "İstek alanları geçersiz."
}{
"status": false,
"code": "UNAUTHORIZED",
"message": "API kimlik bilgileri doğrulanamadı."
}{
"status": false,
"message": "Ürün, IP, modül izni veya kaynak kapsamı uygun değil."
}{
"status": false,
"message": "Hesap bulunamadı / GİB oturumu açılamadı."
}{
"status": false,
"code": "OPERATION_IN_PROGRESS",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": false,
"code": "OPERATION_REJECTED",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later."
}{
"status": false,
"message": "İşlem gerçekleştirilemedi."
}{
"status": false,
"code": "UPSTREAM_RESULT_UNCERTAIN",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}{
"status": false,
"code": "OPERATION_RECORD_UNAVAILABLE",
"message": "İşlem sonucunu durum adresinden kontrol ediniz.",
"retryable": false
}Mali işlem sonucunu ve varsa
operationId değerini saklayın. Zaman aşımında veya review_required durumunda otomatik
tekrar yapmayın. Tamamlanmış tekrar cevabı ilk cevabın bütün gövdesini yeniden sunmaz. İşlem
takibiNe yapar?
Yalnız logout,getUserData,query,html,download,cancel,verifyPhoneNumber,sign,send türleri kabul edilir. query için giden/itiraz ve sıralı iki ISO tarih; html/download için UUID ve signed boolean zorunludur. send ve verifyPhoneNumber Idempotency-Key ister. İptal belge tarihindeki hesaba ait listede doğrulanır; sağlayıcı iptali kesinleşmeden yerel bağ kaldırılmaz. sign yalnız GİB sonuc=1 ile başarı sayılır. send kesin ETTN sunamazsa 502 review_required döner; rastgele veya son listedeki belge UUID değeri kullanılmaz. İşlem takibi: yanıttaki operation makbuzunu saklayın; replayed=true cevabı ilk yanıtın bütün içeriğini tekrar etmez. İmzada aynı ETTN+OID farklı SMS koduyla tekrar kullanılırsa 409; kesin yanlış koddan sonra yeni SMS challenge/oid alınmalıdır.Ön koşullar ve izin
func=getUserData|query|html|download için muhasip:earsiv:read; diğer belgelenmiş türler için muhasip:earsiv:write gerekir. send ve verifyPhoneNumber için Idempotency-Key zorunludur.
İlişkili kayıtlar aynı firmaya ait olmalıdır. Erişim ayarları için kimlik ve izinler rehberini inceleyin.
İşlem anahtarı: func=send veya verifyPhoneNumber için zorunlu. Aynı işlem için aynı anahtarı kullanın; örnekler MUHASIP_IDEMPOTENCY_KEY ortam değişkenini kullanır.
İstek ve cevap şemalarını indirin.
İstek örnekleri
Örnekler temsilîdir. Kimlikleri, belge tarihlerini ve iş verisini kendi yetkili kayıtlarınızla değiştirin. Node.js örnekleri Node.js 20 veya üzeri içindir; PHP örnekleri cURL uzantısını kullanır. Hiçbiri otomatik tekrar yapmaz.- query
- html
- download
- send
- verifyPhoneNumber
- sign
- cancel
- getUserData
- logout
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "query",
"type": "giden",
"date": [
"2026-10-01",
"2026-10-18"
]
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "query",
"type": "giden",
"date": [
"2026-10-01",
"2026-10-18"
]
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "query",
type: "giden",
date: ["2026-10-01", "2026-10-18"]
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "html",
"uuid": "00000000-0000-4000-8000-000000000001",
"signed": false
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "html",
"uuid": "00000000-0000-4000-8000-000000000001",
"signed": false
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "html",
uuid: "00000000-0000-4000-8000-000000000001",
signed: false
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "download",
"uuid": "00000000-0000-4000-8000-000000000001",
"signed": true
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "download",
"uuid": "00000000-0000-4000-8000-000000000001",
"signed": true
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "download",
uuid: "00000000-0000-4000-8000-000000000001",
signed: true
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header "Idempotency-Key: $MUHASIP_IDEMPOTENCY_KEY" \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "send",
"CustomerInfo": {
"Name": "Örnek İşletme",
"Address": "Örnek adres",
"District": "Çankaya",
"City": "Ankara"
},
"InvoiceType": "SATIS",
"issueDate": "2026-10-18",
"currencyCode": "TRY",
"description": "Örnek satış",
"total": {
"linesTotal": 100,
"linesAllowanceTotal": 0,
"taxesTotals": [
{
"taxCode": "0015",
"total": 20
}
],
"payableAmount": 120
},
"lines": [
{
"name": "Örnek hizmet",
"quantity": 1,
"unitType": "C62",
"price": 100,
"total": 100,
"allowanceTotal": 0,
"KDVPercent": 20,
"KDVTotal": 20,
"taxes": [
{
"taxCode": "0015",
"total": 20,
"percent": 20
}
]
}
]
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$operationKey = getenv('MUHASIP_IDEMPOTENCY_KEY');
if (!$operationKey) {
throw new RuntimeException('Kalıcı işleme ait tekrar anahtarı eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json', 'Idempotency-Key: ' . $operationKey];
$body = <<<'JSON'
{
"func": "send",
"CustomerInfo": {
"Name": "Örnek İşletme",
"Address": "Örnek adres",
"District": "Çankaya",
"City": "Ankara"
},
"InvoiceType": "SATIS",
"issueDate": "2026-10-18",
"currencyCode": "TRY",
"description": "Örnek satış",
"total": {
"linesTotal": 100,
"linesAllowanceTotal": 0,
"taxesTotals": [
{
"taxCode": "0015",
"total": 20
}
],
"payableAmount": 120
},
"lines": [
{
"name": "Örnek hizmet",
"quantity": 1,
"unitType": "C62",
"price": 100,
"total": 100,
"allowanceTotal": 0,
"KDVPercent": 20,
"KDVTotal": 20,
"taxes": [
{
"taxCode": "0015",
"total": 20,
"percent": 20
}
]
}
]
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const operationKey = process.env.MUHASIP_IDEMPOTENCY_KEY
if (!operationKey) throw new Error("Kalıcı işleme ait tekrar anahtarı eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Idempotency-Key": operationKey,
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "send",
CustomerInfo: {
Name: "Örnek İşletme",
Address: "Örnek adres",
District: "Çankaya",
City: "Ankara"
},
InvoiceType: "SATIS",
issueDate: "2026-10-18",
currencyCode: "TRY",
description: "Örnek satış",
total: {
linesTotal: 100,
linesAllowanceTotal: 0,
taxesTotals: [
{
taxCode: "0015",
total: 20
}
],
payableAmount: 120
},
lines: [
{
name: "Örnek hizmet",
quantity: 1,
unitType: "C62",
price: 100,
total: 100,
allowanceTotal: 0,
KDVPercent: 20,
KDVTotal: 20,
taxes: [
{
taxCode: "0015",
total: 20,
percent: 20
}
]
}
]
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header "Idempotency-Key: $MUHASIP_IDEMPOTENCY_KEY" \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "verifyPhoneNumber"
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$operationKey = getenv('MUHASIP_IDEMPOTENCY_KEY');
if (!$operationKey) {
throw new RuntimeException('Kalıcı işleme ait tekrar anahtarı eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json', 'Idempotency-Key: ' . $operationKey];
$body = <<<'JSON'
{
"func": "verifyPhoneNumber"
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const operationKey = process.env.MUHASIP_IDEMPOTENCY_KEY
if (!operationKey) throw new Error("Kalıcı işleme ait tekrar anahtarı eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Idempotency-Key": operationKey,
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "verifyPhoneNumber"
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "sign",
"smsCode": "123456",
"oid": "ORNEK_SMS_ISLEM_KIMLIGI",
"data": {
"ettn": "00000000-0000-4000-8000-000000000001"
}
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "sign",
"smsCode": "123456",
"oid": "ORNEK_SMS_ISLEM_KIMLIGI",
"data": {
"ettn": "00000000-0000-4000-8000-000000000001"
}
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "sign",
smsCode: "123456",
oid: "ORNEK_SMS_ISLEM_KIMLIGI",
data: {
ettn: "00000000-0000-4000-8000-000000000001"
}
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "cancel",
"reason": "Örnek iptal gerekçesi",
"data": {
"ettn": "00000000-0000-4000-8000-000000000001",
"belgeTarihi": "18/10/2026"
}
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "cancel",
"reason": "Örnek iptal gerekçesi",
"data": {
"ettn": "00000000-0000-4000-8000-000000000001",
"belgeTarihi": "18/10/2026"
}
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "cancel",
reason: "Örnek iptal gerekçesi",
data: {
ettn: "00000000-0000-4000-8000-000000000001",
belgeTarihi: "18/10/2026"
}
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "getUserData"
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "getUserData"
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "getUserData"
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
curl --request PATCH 'https://api.muhasip.pro/apps/earsiv' \
--user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
--header 'Accept: */*' \
--header 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"func": "logout"
}
JSON
<?php
$apiUserId = getenv('MUHASIP_API_USER_ID');
$secretKey = getenv('MUHASIP_API_SECRET');
if (!$apiUserId || !$secretKey) {
throw new RuntimeException('API kimlik bilgileri eksik.');
}
$headers = ['Accept: */*', 'Content-Type: application/json'];
$body = <<<'JSON'
{
"func": "logout"
}
JSON;
$handle = curl_init('https://api.muhasip.pro/apps/earsiv');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($handle);
$httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($response === false) {
throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
}
if ($httpStatus < 200 || $httpStatus >= 300) {
throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
}
// $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
echo 'HTTP ' . $httpStatus . PHP_EOL;
async function main() {
const apiUserId = process.env.MUHASIP_API_USER_ID
const secretKey = process.env.MUHASIP_API_SECRET
if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
const response = await fetch("https://api.muhasip.pro/apps/earsiv", {
method: "PATCH",
redirect: "manual",
headers: {
Accept: "*/*",
Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
"Content-Type": "application/json"
},
body: JSON.stringify({
func: "logout"
}),
signal: AbortSignal.timeout(30000)
})
const data = await response.arrayBuffer()
if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
// data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
console.log("HTTP", response.status)
}
main().catch(() => {
console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
process.exitCode = 1
})
Cevabı değerlendirin
Önce HTTP durumunu, ardından bu kaynağınstatus ve sonuç alanlarını değerlendirin. Bütün uçlar aynı sonuç zarfını veya oluşturma için 201 kodunu kullanmaz.
Temsilî başarılı cevap; gerçek hizmet çağrısından alınmamıştır:
{
"status": true,
"result": []
}
replayed:true varsa cevap güvenli makbuz ve sonuç kimlikleriyle sınırlı olabilir. İlk HTML/PDF veya mali gövdeyi tekrar beklemeyin. reviewRequired:true veya retryable:false yeni bir mali çağrı izni değildir.
Hata durumunda
| HTTP | Bu işlemde anlamı | İzlenecek adım |
|---|---|---|
| 400 | İstek alanları geçersiz. | Alan adını, türünü ve zorunluluğunu kontrol edin; değişmeyen hatalı isteği tekrar göndermeyin. |
| 401 | API kimliği/parolası, erişim süresi veya firma doğrulanamadı. | Anahtar kimliğini, gizli değeri, erişim süresini ve firma erişimini kontrol edin. |
| 403 | API izni, IP kısıtı veya kayıt erişimi uygun değil. | Anahtarın izinlerini, IP kısıtını ve kayıt kimliğini kontrol edin. |
| 406 | Hesap bulunamadı / GİB oturumu açılamadı. | GİB bağlantısı ve hesap oturumunu kontrol edin; mali isteği körlemesine tekrarlamayın. |
| 409 | İstek, devam eden işlemle veya kayıt durumuyla çakışıyor. | Mevcut işlem ve hedefi inceleyin. Kilit veya içerik çatışmasını yeni anahtarla aşmaya çalışmayın. |
| 422 | İstek iş kuralına uymuyor veya işlem reddedildi. | Ret nedenini kontrol edin. Alanlar hatalıysa düzeltin; desteklenmeyen işlemi yeniden göndermeyin. |
| 429 | Ortak istek sınırı aşıldı; sayısal status alanı kullanılır. | Varsa Retry-After bilgisini değerlendirin. Mali çağrıyı otomatik yeniden göndermeyin. |
| 500 | İşlem gerçekleştirilemedi. | İşlem sonucunu inceleyin; bağlantı/hata oluşması mali etkinin hiç başlamadığını kanıtlamaz. |
| 502 | Hizmet yanıtı alınamadı veya mali sonuç kesinleşmedi. | İşlem makbuzunu ve ilgili belge/ödemeyi inceleyin. Belirsiz mali sonucu yeniden göndermeyin. |
| 503 | İşlem kaydına veya gerekli hizmete erişilemiyor. | Varsa işlem kimliğiyle durumu okuyun; kayıt veya hizmet hatasından otomatik tekrar sonucu çıkarmayın. |
Sonraki adım
İşlem makbuzunu saklayın; durum adresinden kontrol edin ve sonuç kimliklerini ilgili belge/tahsilat/siparişle eşleştirin. reviewRequired=true ise yeniden göndermeden manuel inceleyin. Kaynak akışı · İşlem takibi · Kapsam ve sınırlamalarYetkilendirmeler
Kullanıcı adı apiUserId, parola secretKey. Aktif ve süresi geçmemiş API kullanıcısı ve uygun firma gerekir.
Başlıklar
func=send veya verifyPhoneNumber için zorunlu.
Required string length:
1 - 128Pattern:
^[!-~]+$Gövde
application/json
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Yalnız listelenen func değerleri desteklenir. Bilinmeyen func/type yanıt üretmeyebilir.
Mevcut seçenekler:
logout Yanıt
İşlem sonucu.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
İlk çağrı kaynağa özgü yanıtı ve işlem makbuzunu; tamamlanmış tekrar yalnız güvenli makbuzu ve uygun sonuç kimliklerini döndürür.
⌘I