مرجع API
شغّل 33 أداة ملفات من شيفرتك الخاصة. مفتاح واحد في الترويسة، ورفع واحد، ورابط حالة للاستعلام — دون حاجة إلى SDK.
مقدمة
تتيح واجهة Convertavo البرمجية المحوّلات نفسها الموجودة في الموقع — أدوات PDF والصور وOCR والوسائط — عبر HTTPS عادي. وهي منظمة حول عدد قليل من الموارد المتوقعة، وتقبل الرفع بصيغة multipart/form-data، وتجيب دائمًا بـ JSON مع رموز حالة HTTP القياسية.
المصادقة
أنشئ مفتاحًا في لوحة التحكم ضمن مفاتيح API. تبدأ المفاتيح بـ at_ وتُعرض مرة واحدة: نخزّن بصمتها فقط، فلا يمكن استعادة مفتاح مفقود — ألغِه وأنشئ غيره. أرسل المفتاح مع كل طلب:
Authorization: Bearer at_your_key_hereCONVERTAVO_KEY، كما يفعل كل مثال في هذه الصفحة.
المفتاح المفقود يعيد 401 Missing API key؛ والمفتاح الخاطئ أو الملغى يعيد 401 Invalid or revoked API key.
البدء السريع
اضغط ملف PDF من البداية إلى النهاية: ارفعه، وانتظر المهمة، واحفظ النتيجة. اختر لغتك — ويُحفظ الاختيار في الصفحة كلها.
- 1اضبط مفتاحكاحفظه كمتغير البيئة
CONVERTAVO_KEY. - 2ما تحتاجهcURL، أو PHP مع ext-curl، أو Python مع
requests، أو Node.js 18+. - 3شغّل السكربتيرفع، ويستعلم كل 2 ثانية، وينزّل.
# 1. Upload — returns 202 and a status_url
curl -X POST https://convertavo.com/ar/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@report.pdf" \
-F "settings[Compression level]=Balanced (recommended)"
# 2. Poll until status is "done" or "failed"
curl https://convertavo.com/ar/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
# 3. Download the signed download_url from step 2 as it is
# (no key needed; it stops working when the file is deleted)
curl -L -o report-small.pdf "https://convertavo.com/ar/download/1814?expires=1791200000&signature=3f9a…"
<?php
const BASE = 'https://convertavo.com/ar/api/v1';
function convertavo(string $method, string $url, array $fields = []): array
{
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY'), 'Accept: application/json'],
CURLOPT_POSTFIELDS => $fields ?: null,
]);
$body = json_decode(curl_exec($ch), true);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($code >= 400) {
throw new RuntimeException($body['message'] ?? "HTTP {$code}");
}
return $body;
}
// 1. Upload
$job = convertavo('POST', BASE . '/tools/compress-pdf/convert', [
'files[0]' => new CURLFile('report.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
]);
// 2. Poll
do {
sleep(2);
$job = convertavo('GET', $job['status_url'] ?? BASE . "/conversions/{$job['id']}");
} while (in_array($job['status'], ['queued', 'processing'], true));
if ($job['status'] === 'failed') {
throw new RuntimeException($job['error']);
}
// 3. Download
foreach ($job['files'] as $file) {
copy($file['download_url'], $file['name']);
}
import os
import time
import requests
BASE = 'https://convertavo.com/ar/api/v1'
session = requests.Session()
session.headers['Authorization'] = f"Bearer {os.environ['CONVERTAVO_KEY']}"
# 1. Upload
with open('report.pdf', 'rb') as f:
r = session.post(
f'{BASE}/tools/compress-pdf/convert',
files=[('files[]', f)],
data={'settings[Compression level]': 'Balanced (recommended)'},
timeout=120,
)
r.raise_for_status()
job = r.json()
status_url = job['status_url']
# 2. Poll
while job['status'] in ('queued', 'processing'):
time.sleep(2)
job = session.get(status_url, timeout=30).json()
if job['status'] == 'failed':
raise RuntimeError(job['error'])
# 3. Download
for file in job['files']:
with open(file['name'], 'wb') as out:
out.write(requests.get(file['download_url'], timeout=120).content)
import { readFile, writeFile } from 'node:fs/promises';
const BASE = 'https://convertavo.com/ar/api/v1';
const headers = { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// 1. Upload
const form = new FormData();
form.append('files[]', new Blob([await readFile('report.pdf')]), 'report.pdf');
form.append('settings[Compression level]', 'Balanced (recommended)');
let res = await fetch(`${BASE}/tools/compress-pdf/convert`, { method: 'POST', headers, body: form });
let job = await res.json();
if (res.status !== 202) throw new Error(job.message);
const statusUrl = job.status_url;
// 2. Poll
while (['queued', 'processing'].includes(job.status)) {
await sleep(2000);
job = await (await fetch(statusUrl, { headers })).json();
}
if (job.status === 'failed') throw new Error(job.error);
// 3. Download
for (const file of job.files) {
const data = Buffer.from(await (await fetch(file.download_url)).arrayBuffer());
await writeFile(file.name, data);
}
كيف يعمل التحويل
تعمل التحويلات في طابور، فيعود الرفع فورًا وينتهي العمل في الخلفية — عادةً خلال ثوانٍ.
status_urlqueued → processing → done | faileddownload_url، صالح لمدة ساعة واحدة/api/v1/toolsسرد الأدوات
يعيد كل أداة نشطة مع أسماء الإعدادات الدقيقة التي تتوقعها نقطة التحويل الخاصة بها. استخدمه بدلًا من تثبيت الخيارات في الشيفرة. والأدوات التي فيها "api_supported": false تعمل من رابط وهي متاحة في الموقع فقط.
curl https://convertavo.com/ar/api/v1/tools \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ar/api/v1/tools',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/tools', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"tools": [
{
"key": "compress-pdf",
"name": "Compress PDF",
"category": "PDF",
"input": "file",
"api_supported": true,
"accepts": "PDF",
"accepts_multiple_files": false,
"settings": [ … ],
"switches": [ … ]
}
]
}
/api/v1/tools/{key}جلب أداة
أداة واحدة بمفتاحها. يعيد 404 لأداة غير معروفة أو معطّلة.
| معلمة المسار | النوع | الوصف |
|---|---|---|
key مطلوب | string | مفتاح الأداة، مثل compress-image. راجع مرجع الأدوات. |
curl https://convertavo.com/ar/api/v1/tools/compress-image \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/compress-image');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ar/api/v1/tools/compress-image',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/tools/compress-image', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"key": "compress-image",
"name": "Compress Image",
"category": "Image",
"input": "file",
"api_supported": true,
"accepts": "JPG, PNG, WebP",
"accepts_multiple_files": true,
"settings": [
{ "name": "Quality", "type": "range" },
{ "name": "Output format", "type": "select",
"options": ["Keep original", "JPG", "WebP", "AVIF"] },
{ "name": "Max width", "type": "number", "example": "1920" }
],
"switches": [
{ "index": 0, "name": "Strip EXIF and location data" }
]
}
/api/v1/tools/{key}/convertتحويل الملفات
يرفع ملفًا أو أكثر ويضع التحويل في الطابور. أرسل multipart/form-data. يجيب بـ 202 Accepted فورًا؛ وتابع status_url للحصول على النتيجة.
| Field | Type | Description |
|---|---|---|
files[] مطلوب | file[] | حتى حجم الدفعة في خطتك لكل طلب (راجع الحدود)؛ وقسّم الدفعات الأكبر. وكل ملف يكلّف أرصدة الأداة. والأدوات التي لا تدعم الملفات المتعددة تقبل ملفًا واحدًا. |
settings[<name>] اختياري | string | إعداد باسمه الدقيق (بالإنجليزية)، مثل settings[Output format]=WebP. والإعدادات المحذوفة تستخدم القيمة الافتراضية للأداة. |
switches[<index>] اختياري | boolean | خيار خانة اختيار حسب موضعه؛ 1 مفعّل، و0 متوقف. والمفاتيح المحذوفة متوقفة. |
curl -X POST https://convertavo.com/ar/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Quality]=80' \
-F 'settings[Output format]=WebP' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Quality]' => '80',
'settings[Output format]' => 'WebP',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Quality]': '80',
'settings[Output format]': 'WebP',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Quality]', '80');
form.append('settings[Output format]', 'WebP');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
{
"id": 852,
"status": "queued",
"status_url": "https://convertavo.com/ar/api/v1/conversions/852",
"credits_charged": 1,
"credits_remaining": 2999
}
/api/v1/conversions/{id}جلب تحويل
حالة تحويل بدأته. والتحويل الذي يتبع حسابًا آخر يعيد 404.
| Field | Type | Description |
|---|---|---|
status | enum | queued أو processing أو done أو failed. |
error | string | null | عند failed: جملة آمنة لعرضها على شخص. |
files[] | array | عند done: name، وsize بالبايت، وdownload_url. |
download_all_url | string | حين تنتج المهمة عدة ملفات: كلها في ملف ZIP واحد. |
expires_at | ISO 8601 | موعد حذف ملفات الإخراج. |
curl https://convertavo.com/ar/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/conversions/852');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ar/api/v1/conversions/852',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/conversions/852', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"id": 852,
"tool_key": "compress-image",
"status": "done",
"error": null,
"files": [
{
"name": "photo.webp",
"size": 58766,
"download_url": "https://convertavo.com/ar/download/1814?expires=1794545640&signature=3f9a\u2026"
}
],
"expires_at": "2026-11-13T09:54:00+05:00"
}
الإعدادات والمفاتيح
الخيارات تطابق عناصر التحكم في صفحة كل أداة، فالأسماء هي الكلمات التي تراها هناك في الصفحة الإنجليزية.
- الإعدادات تُخاطب بتسميتها الإنجليزية:
settings[Compression level]=Maximum compression. والمسافات وعلامات الترقيم جزء من الاسم؛ ومكتبة HTTP لديك ترمّزها. - إعدادات القوائم تقبل إحدى القيم المدرجة بالضبط، بما في ذلك حالة الأحرف.
- المفاتيح خانات اختيار حسب الموضع، بدءًا من
0. في الموقع يبدأ المفتاح الأول محددًا؛ أما عبر API فكل مفتاح متوقف ما لم ترسل1. - الأسماء غير المعروفة تُتجاهل بدلًا من رفضها — تحقّق من الإملاء عبر جلب أداة إذا بدا أن خيارًا ما بلا تأثير.
الحدود والحصص
| الحد | Free | Basic | Standard | Business | Lifetime |
|---|---|---|---|---|---|
| الأرصدة | 50 يوميًا | 3,000 شهريًا | 10,000 شهريًا | 40,000 شهريًا | 60,000 مرة واحدة |
| الطلبات في الدقيقة | 10 | 30 | 60 | 120 | 60 |
| أكبر ملف | 100 MB | 200 MB | 500 MB | 1,000 MB | 500 MB |
| الملفات لكل طلب | 10 | 20 | 50 | 100 | 50 |
- التحويلات تكلّف أرصدة لكل ملف، بـأسعار الموقع نفسها ومن الرصيد نفسه: عشر صور برصيد واحد (1) لكل منها تكلّف 10.
- الاستعلام وسرد الأدوات وتنزيل النتائج لا تكلّف شيئًا، لكن كل طلب يُحتسب من طلبات الدقيقة في خطتك.
- كل استجابة تحويل تتضمن
credits_chargedوcredits_remainingليتمكن السكربت من ضبط وتيرته. - أعضاء الفريق ينفقون أرصدة الفريق.
الأخطاء
الأخطاء تعيد جسم JSON فيه message مقروء للبشر. وأخطاء التحقق (422) تتضمن أيضًا كائن errors مفهرسًا حسب الحقل.
| الحالة | المعنى | ما الذي تفعله |
|---|---|---|
| 202 | مقبول — التحويل في الطابور. | استعلم عن status_url. |
| 401 | مفتاح مفقود أو خاطئ أو ملغى. | تحقّق من ترويسة Authorization. |
| 404 | أداة غير معروفة، أو تحويل ليس لك. | تحقّق من المفتاح أو المعرّف. |
| 410 | رابط تنزيل حُذف ملفه. | حوّل مجددًا. |
| 422 | لا ملف، أو ملف يتجاوز حد الحجم في خطتك، أو أداة تعمل بالروابط فقط. | اقرأ errors وأصلح الطلب. |
| 402 | أرصدة غير كافية لهذا الطلب. | يحتوي الجسم على credits_needed وcredits_remaining وcredits_reset_at. انتظر التجديد أو رقِّ خطتك. |
| 429 | طلبات كثيرة جدًا في الدقيقة لخطتك. | انتظر ثواني Retry-After، ثم أعد المحاولة. |
| 5xx | فشل شيء من جهتنا. | أعد المحاولة مع تأخير متزايد أُسيًا. |
{
"message": "The files field is required.",
"errors": {
"files": ["The files field is required."]
}
}
التنزيلات والاحتفاظ
- روابط التنزيل لا تحتاج إلى مفتاح API، فيمكنك تمرير أحدها إلى متصفح. ولا يمكن تخمينها — تعامل معها كأسرار ما دامت صالحة.
- تُحذف ملفات الإدخال والإخراج بعد ساعة واحدة من التحويل؛ وبعد ذلك يعيد الرابط
410. - سجل التحويل (الاسم، والحجم، والحالة) يبقى في سجل لوحة التحكم.
أفضل الممارسات
done أو failed.5xx وأخطاء الشبكة مع تأخير. ولا تُعِد محاولة 4xx — أصلح الطلب.القيود الحالية
- لا Webhooks بعد — استعلم عن رابط الحالة.
- لا نقطة نهاية لسجل التحويلات؛ استخدم لوحة التحكم.
- التغييرات غير المتوافقة ستصدر كـ
/v2؛ ويبقى/v1كما هو موثّق.
واجهة رموز QR
أنشئ رموز QR ثابتة وديناميكية، ونزّلها بصيغة SVG أو PNG أو JPG أو WebP أو PDF، وغيّر وجهة الرمز الديناميكي، واقرأ تحليلات مسحه. وهي تستخدم المفتاح نفسه المستخدم في كل ما سبق، والمحرّك نفسه الذي يستخدمه الموقع: صيغ الحمولة نفسها، وقواعد التصميم نفسها، والفحص نفسه للتأكد من أن الرمز يُمسح فعلًا قبل تسليمه لك.
| نقطة النهاية | ما تفعله |
|---|---|
GET /api/v1/qr/types | الأنواع التي يمكنك استخدامها والحقول التي يقبلها كل منها. |
POST /api/v1/qr/render | أنشئ صورة وأعدها. لا يُحفظ شيء. |
POST /api/v1/qr | احفظ رمزًا ثابتًا أو ديناميكيًا. |
GET /api/v1/qr | اسرد رموزك (mode، status، type، q، per_page). |
GET · PATCH · DELETE /api/v1/qr/{id} | اقرأ رمزًا واحدًا أو غيّره أو احذفه. وid هو الـ id المُعاد عند إنشائه. |
GET /api/v1/qr/{id}/image | الرمز كملف صورة. |
GET /api/v1/qr/{id}/analytics | المسحات، والزوار الفريدون، والأجهزة، والدول، وغيرها (للديناميكية فقط). |
403). وتُحتسب الطلبات من طلبات الدقيقة في خطتك، وكل مفتاح محدود بـ 60 طلبًا في الدقيقة — و20 في الدقيقة لكل ما يرسم صورة. وتجاوز ذلك يعيد 429 مع ترويسة Retry-After. وحفظ الرموز والرموز الديناميكية يتبع حصص الخطة نفسها في الموقع.
dataيحمل حقول النوع. اطلب الأسماء من/qr/types— رمز WiFi يقبلssidوpasswordوauthentication؛ والرابط يقبلurl.designاختياري وكل حقل فيه يُتحقق منه. والألوان بالشكل#rrggbb؛ والتصميم الذي لن يُمسح بموثوقية يُرفض بـ422، معscannability_scoreوreasons.- الصفحات المستضافة (بطاقة العمل، وقائمة الطعام، وصفحات الملفات…) وروابط متاجر التطبيقات تُنشأ في الموقع، لا عبر API.
- يمكن إرسال الشعار كصورة
data:؛ وشعارات SVG تُنظَّف من السكربتات، وكل ما ليس صورة فعلًا يُرفض. - الرمز الذي يتبع شخصًا آخر يجيب بـ
404، تمامًا كأنه غير موجود.
/api/v1/qr/renderرسم صورة QR
أرسل ما ينبغي أن يحمله الرمز؛ فتعود الصورة مباشرة. وformat هو svg أو png (الافتراضي) أو jpg أو webp أو pdf؛ وsize بالبكسل، حتى 2048.
curl -X POST https://convertavo.com/ar/api/v1/qr/render \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}' \
-o wifi.png
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/qr/render');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'wifi', 'data' => ['ssid' => 'Guest', 'password' => 'welcome-2026', 'authentication' => 'WPA'], 'design' => ['dots' => ['shape' => 'rounded', 'color' => ['type' => 'solid', 'value' => '#1e3a8a']]], 'format' => 'png', 'size' => 512]),
]);
$response = curl_exec($ch);
file_put_contents('wifi.png', $response);
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/qr/render',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'wifi', 'data': {'ssid': 'Guest', 'password': 'welcome-2026', 'authentication': 'WPA'}, 'design': {'dots': {'shape': 'rounded', 'color': {'type': 'solid', 'value': '#1e3a8a'}}}, 'format': 'png', 'size': 512},
timeout=60,
)
response.raise_for_status()
open('wifi.png', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ar/api/v1/qr/render', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}),
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('wifi.png', Buffer.from(await response.arrayBuffer()));
{
"message": "This design would not scan reliably, so it was not made.",
"scannability_score": 40,
"reasons": [
"Contrast between the dots and background is too low (1.4:1, minimum 4.0:1) …"
]
}
/api/v1/qrإنشاء رمز QR
mode هو static (الافتراضي: البيانات داخل الرمز، للأبد) أو dynamic (الرمز يحمل رابطًا مختصرًا يمكنك إعادة توجيهه لاحقًا — ويجب أن ينتج النوع عنوان ويب، مثل url). اختياري: name وtags وfolder_id وdesign، وللرموز الديناميكية custom_slug. يعيد 201.
curl -X POST https://convertavo.com/ar/api/v1/qr \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/qr');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'url', 'mode' => 'dynamic', 'name' => 'Spring menu', 'data' => ['url' => 'https://example.com/menu'], 'tags' => ['spring']]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/qr',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'url', 'mode': 'dynamic', 'name': 'Spring menu', 'data': {'url': 'https://example.com/menu'}, 'tags': ['spring']},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/qr', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}),
});
console.log(await response.json());
{
"data": {
"id": "0f6c1b52-…",
"name": "Spring menu",
"type": "url",
"mode": "dynamic",
"status": "active",
"short_url": "https://…/q/k3d9x2p",
"destination_url": "https://example.com/menu",
"scannability_score": 100,
"scan_count": 0,
"links": {
"self": "https://…/api/v1/qr/0f6c1b52-…",
"image": "https://…/api/v1/qr/0f6c1b52-…/image",
"analytics": "https://…/api/v1/qr/0f6c1b52-…/analytics"
}
}
}
/api/v1/qr PATCH/api/v1/qr/{id}السرد والقراءة والتحديث والحذف
PATCH يقبل name وtags، و— للرموز الديناميكية — destination (يُفحص تمامًا كالذي يُكتب في الموقع) وstatus (paused أو active). والرمز المطبوع لا يتغير أبدًا. وDELETE يعيد 204.
curl -X PATCH https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://example.com/summer-menu"}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['destination' => 'https://example.com/summer-menu']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'destination': 'https://example.com/summer-menu'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"destination":"https://example.com/summer-menu"}),
});
console.log(await response.json());
{ "message": "That website is not allowed on this service." }
/api/v1/qr/{id}/image?format=svg&size=1024تنزيل صورة
يرسم رمزًا محفوظًا من تصميمه المخزّن. وصورة الرمز الديناميكي ترمّز رابطه المختصر، فالملف الذي تطبعه لا يحتاج إلى تغيير أبدًا.
curl -X GET https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o qr.svg
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('qr.svg', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('qr.svg', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('qr.svg', Buffer.from(await response.arrayBuffer()));
/api/v1/qr/{id}/analyticsتحليلات المسح
range هو today أو 7d أو 30d (الافتراضي) أو 90d أو 365d أو custom مع تاريخي from وto. كل التواريخ بتوقيت UTC. والزوار يُعدّون، ولا تُحدد هويتهم أبدًا.
curl -X GET https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
console.log(await response.json());
{
"data": {
"from": "2026-09-16", "to": "2026-09-22",
"totals": { "scans": 412, "unique": 301 },
"delta": { "scans": 12.5, "unique": 8.1 },
"series": [ … ],
"breakdowns": { "device": [ … ], "country": [ … ], … }
}
}
واجهة الفوترة
أنشئ الفواتير وعروض الأسعار والإشعارات الدائنة وأصدرها وتتبّعها؛ واحفظ عملاءك؛ وسجّل المدفوعات؛ ونزّل ملف PDF وملف XML المتوافق مع EN 16931؛ ودع برنامجك يُبلَّغ حين تُعرض فاتورة أو تُدفع أو يتأخر سدادها. وتستخدم المفتاح نفسه المستخدم في كل ما سبق، والمحرّك نفسه في منشئ الفواتير: التحقق نفسه، والإجماليات نفسها، والترقيم نفسه، وملف PDF نفسه.
| نقطة النهاية | ما تفعله |
|---|---|
POST /api/v1/invoices | أنشئ مسودة، أو أصدرها فورًا مع "issue": true. |
GET /api/v1/invoices | اسرد المستندات، الأحدث أولًا (status، type، client_id، issued_from، issued_to، q). |
GET · PATCH · DELETE /api/v1/invoices/{id} | اقرأ مستندًا؛ وغيّر مسودة أو احذفها. |
POST /api/v1/invoices/{id}/issue | أصدر مسودة: يُخصَّص الرقم الآن. |
POST /api/v1/invoices/{id}/payments | سجّل دفعة. |
POST /api/v1/invoices/{id}/send · /cancel | أرسلها إلى العميل بالبريد · ألغِها. |
GET /api/v1/invoices/{id}/pdf | ملف PDF. |
GET /api/v1/invoices/{id}/pdf-a3 · /xml/ubl · /xml/cii | بيانات منظمة (الفواتير والإشعارات الدائنة). |
GET · POST /api/v1/clients, GET · PATCH · DELETE /api/v1/clients/{id} | عملاؤك. |
GET /api/v1/businesses | الأنشطة التجارية التي تصدر الفواتير باسمها. |
403). وإصدار مستند يستهلك رصيدًا واحدًا، تمامًا كما في الموقع؛ أما المسودات والقراءة والمدفوعات فمجانية. وطلبات الدقيقة تتبع خطتك، وتجاوزها يعيد 429 مع Retry-After.
- المبالغ تُرسل كسلاسل عشرية بعملة المستند —
"1250.50"، ولا تكون رقمًا عشريًا عائمًا أبدًا. وتعود مرتين: كسلاسل عشرية فيamountsوكأعداد صحيحة بالوحدات الصغرى فيamounts_minor؛ واستخدم الأعداد الصحيحة للحساب. ويحسب الخادم كل إجمالي بنفسه؛ وتُتجاهل الإجماليات المرسلة في الطلب. - عدم التكرار (Idempotency). أرسل ترويسة
Idempotency-Keyمع أيPOSTأوPATCHأوDELETE. المفتاح نفسه مع الجسم نفسه خلال 24 ساعة يعيد الإجابة الأولى مجددًا، موسومة بـIdempotent-Replayed: true— فإذا انقطع الاتصال، أرسله مجددًا ببساطة. والمفتاح نفسه مع جسم مختلف يُرفض بـ422. - الترقيم بالمؤشر: أعد
meta.next_cursorكـcursorحتى يصبحnull. ويصلper_pageإلى 100. - الفاتورة أو العميل الذي يتبع شخصًا آخر يجيب بـ
404، تمامًا كأنه غير موجود. - المرجع الكامل المقروء آليًا: مستند OpenAPI 3.1، المولّد من الشيفرة التي تخدم نقاط النهاية هذه.
/api/v1/invoicesإنشاء فاتورة وإصدارها
الجسم هو الفاتورة كما يحفظها المحرر: currency، وlines (لكل منها description وquantity وunit_price وtax_rate وtax_category)، واختياريًا التواريخ، وbuyer، وseller، والخصومات، والشحن، والملاحظات، والقالب. أعطِ client_id لملء المشتري من عميل محفوظ، وbusiness_id لاختيار النشاط التجاري الذي تصدر عنه. ومع "issue": true تُرقَّم فورًا وتحمل الإجابة pdf_url؛ ودونه تبقى مسودة يمكنك تغييرها.
curl -X POST https://convertavo.com/ar/api/v1/invoices \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/invoices');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['issue' => true, 'currency' => 'USD', 'issue_date' => '2026-10-20', 'due_date' => '2026-11-03', 'buyer' => ['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example'], 'lines' => [['description' => 'Logo design', 'quantity' => '1', 'unit_price' => '450.00', 'tax_rate' => '0', 'tax_category' => 'zero'], ['description' => 'Brand guidelines (hours)', 'quantity' => '6', 'unit_price' => '65.00', 'tax_rate' => '0', 'tax_category' => 'zero']], 'notes' => 'Thank you for your business.']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/invoices',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'issue': True, 'currency': 'USD', 'issue_date': '2026-10-20', 'due_date': '2026-11-03', 'buyer': {'name': 'Northwind Studio', 'email': 'accounts@northwind.example'}, 'lines': [{'description': 'Logo design', 'quantity': '1', 'unit_price': '450.00', 'tax_rate': '0', 'tax_category': 'zero'}, {'description': 'Brand guidelines (hours)', 'quantity': '6', 'unit_price': '65.00', 'tax_rate': '0', 'tax_category': 'zero'}], 'notes': 'Thank you for your business.'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/invoices', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}),
});
console.log(await response.json());
{
"data": {
"id": "0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f",
"object": "invoice",
"type": "invoice",
"status": "partially_paid",
"number": "INV-2026-0042",
"business_id": 12,
"client_id": 34,
"client_name": "Northwind Studio",
"currency": "USD",
"language": "en",
"issue_date": "2026-10-20",
"due_date": "2026-11-03",
"reference": "Project Kite",
"po_number": "PO-77",
"related_invoice_id": "0199a2b4-5d00-7e2f-a1b2-c3d4e5f60718",
"amounts": {
"subtotal": "840.00",
"discount": "0.00",
"shipping": "0.00",
"tax": "0.00",
"withholding": "0.00",
"rounding": "0.00",
"total": "840.00",
"payable": "840.00",
"paid": "400.00",
"credited": "0.00",
"balance": "440.00"
},
"amounts_minor": {
"subtotal": 84000,
"discount": 0,
"shipping": 0,
"tax": 0,
"withholding": 0,
"rounding": 0,
"total": 84000,
"payable": 84000,
"paid": 40000,
"credited": 0,
"balance": 44000
},
"issued_at": "2026-10-20T09:05:00+05:00",
"sent_at": "2026-10-20T09:06:00+05:00",
"viewed_at": "2026-10-20T11:30:00+05:00",
"paid_at": "2026-10-21T10:00:00+05:00",
"cancelled_at": "2026-10-21T10:00:00+05:00",
"pdf_url": "https://convertavo.com/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/pdf",
"pdf_sha256": "abababababababababababababababababababababababababababababababab",
"created_at": "2026-10-20T09:00:00+05:00",
"updated_at": "2026-10-21T10:00:00+05:00"
}
}
الأخطاء تعود كـ 422 مع errors مفهرسة بمسار الحقل — lines.1.unit_price — لتُعرض بجانب الحقل الصحيح. ودون أرصدة متبقية، يجيب الإصدار بـ 402 وتُحفظ المسودة (draft_id).
/api/v1/invoices/{id}/paymentsالفواتير والمدفوعات والإرسال
الدفعة هي amount (سلسلة عشرية) أو amount_minor، مع paid_on وmethod وreference. أعطِ external_id خاصًا بك — معرّف معاملة البنك أو بوابة الدفع — فتُسجّل الدفعة نفسها مرة واحدة مهما تكرر وصولها. وتنتقل الفاتورة إلى partially_paid وpaid بنفسها.
curl -X POST https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['amount' => '300.00', 'method' => 'bank_transfer', 'reference' => 'TRX-9921', 'external_id' => 'bank-tx-55120']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'amount': '300.00', 'method': 'bank_transfer', 'reference': 'TRX-9921', 'external_id': 'bank-tx-55120'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}),
});
console.log(await response.json());
{
"data": { "id": 56, "object": "payment", "amount_minor": 30000, "amount": "300.00", "currency": "USD", "paid_on": "2026-10-21", "method": "bank_transfer", "reference": "TRX-9921" },
"invoice": { "id": "0199a2b4-…", "status": "partially_paid", "amounts_minor": { "payable": 84000, "paid": 30000, "balance": 54000, … }, … }
}
- المستند الصادر لا يمكن تغييره أو حذفه (
409): صحّحه بإشعار دائن من الموقع، أو ألغِه ما دام لم يُدفع أو يُقيَّد عليه شيء. POST …/issueعلى مستند صادر أصلًا يعيده دون تغيير — آمن للتكرار.POST …/sendيرسل للعميل بالبريد ملف PDF ورابطًا خاصًا، بلغة المستند؛ وtoيستبدل العنوان.
/api/v1/clientsالعملاء
أنشئ بـ name على الأقل؛ وأضف email وaddress وtax_number وcountry (رمز ISO) وcurrency وlanguage وpayment_terms_days. وPATCH يغيّر فقط الحقول التي ترسلها (وnull يمسح أحدها) و"archived": true يؤرشف. والعميل الذي لديه مستندات لا يمكن حذفه — أرشفه بدلًا من ذلك، فيبقى سجله كاملًا.
curl -X POST https://convertavo.com/ar/api/v1/clients \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/clients');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example', 'country' => 'US', 'currency' => 'USD']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/clients',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'name': 'Northwind Studio', 'email': 'accounts@northwind.example', 'country': 'US', 'currency': 'USD'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/clients', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}),
});
console.log(await response.json());
/api/v1/invoices/{id}/pdf-a3PDF/A-3 وXML
للفواتير والإشعارات الدائنة: المستند نفسه كبيانات منظمة، متوافقة مع EN 16931، المعيار الأوروبي للفوترة الإلكترونية. و/xml/ubl هو UBL 2.1، و/xml/cii هو UN/CEFACT CII، و/pdf-a3 نسخة PDF/A-3 من ملف PDF وبداخلها ملف CII باسم factur-x.xml — ملف واحد يقرؤه الناس وتستورده برامج المحاسبة.
409، لأن هذه الصيغ لا مكان فيها لها.
curl -X GET https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o invoice-ubl.xml
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('invoice-ubl.xml', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('invoice-ubl.xml', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ar/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('invoice-ubl.xml', Buffer.from(await response.arrayBuffer()));
Webhooks
أضف عنوان https في لوحة التحكم (تبويب الأعمال ← Webhooks) واختر الأحداث. كل منها طلب POST بصيغة JSON — فيه type الحدث، ووقت created، والفاتورة كـ data.object (إضافة إلى data.payment في أحداث الدفع):
invoice.issued, invoice.sent, invoice.viewed, invoice.reminder_sent, invoice.overdue, invoice.paid, invoice.cancelled, invoice.credited, payment.recorded, payment.refunded, quote.accepted, quote.declined
- تحقّق من التوقيع.
Convertavo-Signatureبالشكلt=<unix time>,v1=<signature>، حيث التوقيع هو HMAC-SHA256 بالترميز الست عشري لـ<t>.<raw body>بسر التوقيع لنقطة النهاية لديك. أعد حسابه، وقارن في زمن ثابت، وارفض كل ما يتجاوز عمره خمس دقائق. - أجب بسرعة. أي
2xxخلال 10 ثوانٍ يُعد تسليمًا. وأي شيء آخر يُعاد إرساله بعد دقيقة، وخمس دقائق، ونصف ساعة، وساعتين، وست ساعات. والعنوان الذي يفشل في 15 عمليات تسليم متتالية يُوقف حتى تعيد تفعيله. - توقّع التكرار.
Convertavo-Deliveryيبقى نفسه في كل إعادة إرسال لتسليم واحد: احتفظ بما عالجته وتخطَّه.
<?php
// $secret: the webhook's signing secret.
$body = file_get_contents('php://input');
$header = $_SERVER['HTTP_CONVERTAVO_SIGNATURE'] ?? '';
if (! preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m)
|| abs(time() - (int) $m[1]) > 300
|| ! hash_equals(hash_hmac('sha256', $m[1].'.'.$body, $secret), $m[2])) {
http_response_code(400);
exit;
}
$event = json_decode($body, true);
// $event['type'], $event['data']['object'] …
http_response_code(200);
import { createHmac, timingSafeEqual } from 'node:crypto';
// rawBody: the request body exactly as received (a Buffer).
export function verify(rawBody, header, secret) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header ?? '');
if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
const expected = createHmac('sha256', secret)
.update(`${m[1]}.${rawBody}`)
.digest();
return timingSafeEqual(expected, Buffer.from(m[2], 'hex'));
}
واجهة الروابط المختصرة
اختصر الروابط، وغيّر وجهاتها، واقرأ نقراتها — بالمحرّك نفسه والفحوص الأمنية نفسها في مختصر الروابط. وتستخدم المفتاح نفسه المستخدم في كل ما سبق.
| نقطة النهاية | ما تفعله |
|---|---|
POST /api/v1/links | اختصر رابطًا واحدًا. |
POST /api/v1/links/bulk | اختصر حتى 100 رابط في طلب واحد. |
GET /api/v1/links | اسرد روابطك (search، tag، per_page حتى 100، page). |
GET · PATCH · DELETE /api/v1/links/{code} | اقرأ رابطًا واحدًا أو غيّره أو احذفه. |
GET /api/v1/links/{code}/stats | النقرات، والزوار الفريدون، والدول، والأجهزة، والمُحيلون، وغيرها. |
429 مع Retry-After)، وتتبع الروابط الجديدة حدود الساعة واليوم نفسها في الموقع — 100 في الساعة و1,000 في اليوم لكل حساب.
- تُفحص كل وجهة تمامًا كما في الموقع: يجب أن تكون عنوان
http(s)عامًا، وليست خدمة اختصار أخرى، وليست في قائمة الحظر، وغير مدرجة في Google Safe Browsing. والرفض يكون422معmessageيمكنك عرضه على شخص. - الرموز لا تفرّق بين الأحرف الكبيرة والصغيرة. والرابط الذي يتبع شخصًا آخر يجيب بـ
404، تمامًا كأنه غير موجود. - الرابط المحظور لأسباب أمنية يمكن قراءته لا تغييره (
423). - غير متاحة عبر RapidAPI: الروابط تتبع حسابك.
/api/v1/linksاختصار رابط
url مطلوب. واختياري: code (نهاية مخصّصة، 3–40 حرفًا أو رقمًا أو - أو _)، وtitle، وtags، وexpires_at وactivates_at (ISO 8601، أو توقيت محلي مع timezone)، وclick_limit، وone_time، وpassword، وexpired_redirect_url، وredirect_type (302 افتراضيًا أو 301)، وog_title / og_description / og_image لمعاينة وسائل التواصل، ووسوم utm_* الخمسة، وclean: true لإزالة معلمات التتبع مثل fbclid. يعيد 201.
curl -X POST https://convertavo.com/ar/api/v1/links \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/spring-menu', 'code' => 'spring-menu', 'utm_source' => 'newsletter', 'utm_medium' => 'email', 'expires_at' => '2026-12-31T23:59:00Z']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/links',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/spring-menu', 'code': 'spring-menu', 'utm_source': 'newsletter', 'utm_medium': 'email', 'expires_at': '2026-12-31T23:59:00Z'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/links', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}),
});
console.log(await response.json());
{
"code": "spring-menu",
"short_url": "https://…/s/spring-menu",
"destination": "https://example.com/spring-menu?utm_source=newsletter&utm_medium=email",
"safety_status": "clean",
"warnings": [],
"clicks": 0,
"is_active": true,
"redirect_type": 302,
"expires_at": "2026-12-31T23:59:00+00:00",
"urls": {
"qr_png": "https://…/tools/url-shortener/links/spring-menu/qr.png",
"qr_svg": "https://…/tools/url-shortener/links/spring-menu/qr.svg",
"stats": "https://…/tools/url-shortener/stats/spring-menu"
}
}
safety_status هو clean، أو pending (لم يمكن سؤال Safe Browsing بعد؛ وسيُعاد الفحص)، أو suspicious — الرابط يعمل، لكن الزوار يرون تحذيرًا أولًا، وwarnings يقول السبب.
/api/v1/links/{code} PATCH/api/v1/links/{code}السرد والقراءة والتحديث والحذف
PATCH يقبل url (وجهة جديدة، تُفحص كرابط جديد — ويبقى الرابط المختصر ورمز QR الخاص به كما هما)، وأي خيار مما سبق، وremove_password: true، وis_active للإيقاف المؤقت أو الاستئناف. وDELETE يعيد 204؛ ثم يجيب العنوان بـ 410 Gone ولا يُعاد استخدامه أبدًا.
curl -X PATCH https://convertavo.com/ar/api/v1/links/spring-menu \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/summer-menu","is_active":true}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/links/spring-menu');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/summer-menu', 'is_active' => true]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/ar/api/v1/links/spring-menu',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/summer-menu', 'is_active': True},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/links/spring-menu', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/summer-menu","is_active":true}),
});
console.log(await response.json());
{ "message": "That is already a short link from another service. Shorten the address it leads to instead." }
/api/v1/links/bulkالاختصار بالجملة
links مصفوفة من حتى 100 كائن بالحقول نفسها للرابط الواحد. وكل منها ينجح أو يفشل وحده؛ وتسردها الإجابة بالترتيب.
curl -X POST https://convertavo.com/ar/api/v1/links/bulk \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/links/bulk');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['links' => [['url' => 'https://example.com/a'], ['url' => 'https://example.com/b', 'code' => 'page-b']]]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ar/api/v1/links/bulk',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'links': [{'url': 'https://example.com/a'}, {'url': 'https://example.com/b', 'code': 'page-b'}]},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/links/bulk', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}),
});
console.log(await response.json());
{
"results": [
{ "index": 0, "link": { "code": "x7kq2m", "short_url": "https://…/s/x7kq2m", … } },
{ "index": 1, "error": "That back-half is already taken." }
]
}
/api/v1/links/{code}/statsإحصائيات النقرات
range هو 7d أو 30d (الافتراضي) أو 90d أو 12m أو all أو custom مع from وto؛ وgrain هو hour أو day أو week أو month؛ وbots=1 يضيف الزيارات الآلية إلى clicks. والأيام بتوقيت UTC. ولا تُستخدم ملفات تعريف الارتباط: الزوار الفريدون يُعدّون يوميًا من قيمة تتغير كل يوم، فلا يمكن تتبعهم إلى شخص أبدًا.
curl https://convertavo.com/ar/api/v1/links/spring-menu/stats?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/links/spring-menu/stats?range=7d');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ar/api/v1/links/spring-menu/stats?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ar/api/v1/links/spring-menu/stats?range=7d', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"range": { "from": "2026-10-11", "to": "2026-10-17", "grain": "day", "includes_bots": false },
"totals": { "clicks": 412, "people": 412, "unique_daily": 330, "bots": 17, "qr_scans": 96, "all_time": 1288 },
"series": [ { "label": "Sun 11 Oct", "start": "2026-10-11", "clicks": 51 }, … ],
"breakdowns": {
"by_country": { "PK": 220, "AE": 81, "GB": 60, "other": 51 },
"by_device": { "mobile": 301, "desktop": 104, "tablet": 7 },
"by_source": { "link": 316, "qr": 96 }
}
}
Webhooks للنقرات
أضف رابط Webhook في لوحة التحكم ← الروابط المختصرة فتُرسل إليه كل نقرة على روابطك كطلب JSON POST، بعد ثوانٍ من حدوثها. ولا تُرسل برامج الروبوت.
{
"event": "link.clicked",
"link": { "code": "spring-menu", "short_url": "https://…/s/spring-menu" },
"click": {
"at": "2026-10-17T12:04:55+00:00",
"country": "PK", "device": "mobile", "os": "Android", "browser": "Chrome",
"referrer": "www.instagram.com", "source": "link", "utm_campaign": "spring-sale"
}
}
- يحمل كل طلب
X-Convertavo-Signature: sha256=…، وهو HMAC-SHA256 للجسم الخام بسر الـ Webhook الخاص بك. احسبه بنفسك وقارنه قبل الوثوق بالطلب. - أجب بأي
2xxخلال 5 ثوانٍ. وأي شيء آخر يُعاد إرساله بعد 10 ثوانٍ، ودقيقة واحدة (1)، و5 دقائق. - بعد 20 عملية تسليم فاشلة متتالية يُوقف الـ Webhook؛ وأعد تفعيله من لوحة التحكم.
- يجب أن تكون عناوين Webhook روابط
httpsعامة.
مرجع الأدوات
كل أداة، والملفات التي تقبلها، وكل إعداداتها، وطلب يعمل. انقر أداة لتوسيعها.
PDF 10 أدوات
ضغط ملف PDF
compress-pdf
أداة ضغط ملف PDF من Convertavo تصغّر ملف PDF الكبير ليناسب البريد الإلكتروني أو حد الرفع، ويبقى النص واضحًا. إذا طلب منك نموذج ملفًا أصغر من 1 ميغابايت، يمكنك كتابة ذلك كحجم مستهدف. وترى صفحتك الجديدة بجانب القديمة قبل تنزيلها.
/api/v1/tools/compress-pdf/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 5–15 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Compression level] اختياري |
string |
Balanced (recommended)Maximum compressionLight — best quality |
settings[Image quality] اختياري |
string |
Web (150 DPI)Print (300 DPI)Keep original |
settings[Target size (MB)] اختياري |
number |
Number. مثال: 1080
|
switches[0] اختياري |
boolean | Downsample embedded images. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Remove metadata and leftover editing data. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Subset embedded fonts. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Image quality]=Web (150 DPI)' \
-F 'settings[Target size (MB)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/compress-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Image quality]' => 'Web (150 DPI)',
'settings[Target size (MB)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/compress-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Image quality]': 'Web (150 DPI)',
'settings[Target size (MB)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Image quality]', 'Web (150 DPI)');
form.append('settings[Target size (MB)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/compress-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل JPG إلى PDF
jpg-to-pdf
اجمع الصور أو الملفات الممسوحة في ملف PDF واحد، مع التحكم في حجم الصفحة والاتجاه والهوامش. مجانًا للملفات الأصغر من 25 ميغابايت، ودون حاجة إلى حساب.
/api/v1/tools/jpg-to-pdf/convert
- يقبل
- JPG, PNG, HEIC
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 3–8 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, HEIC). ويعتمد حد الحجم على خطتك. |
settings[Page size] اختياري |
string |
A4LetterFit to image |
settings[Orientation] اختياري |
string |
AutoPortraitLandscape |
settings[Margin] اختياري |
string |
NoneSmallMedium |
settings[Images per page] اختياري |
string |
124 |
switches[0] اختياري |
boolean | Compress images to reduce file size. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Add a page number to each page. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Sort files by name before combining. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/jpg-to-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Page size]=A4' \
-F 'settings[Orientation]=Auto' \
-F 'settings[Margin]=None' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/jpg-to-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Page size]' => 'A4',
'settings[Orientation]' => 'Auto',
'settings[Margin]' => 'None',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/jpg-to-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Page size]': 'A4',
'settings[Orientation]': 'Auto',
'settings[Margin]': 'None',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Page size]', 'A4');
form.append('settings[Orientation]', 'Auto');
form.append('settings[Margin]', 'None');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/jpg-to-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
دمج ملفات PDF
merge-pdf
ارفع ملفات PDF، ورتّبها، ونزّل ملفًا واحدًا مدمجًا. مجانًا، دون حساب، ودون علامة مائية.
/api/v1/tools/merge-pdf/convert
- يقبل
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 2–5 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (PDF). ويعتمد حد الحجم على خطتك. |
settings[File order] اختياري |
string |
Manual (drag to reorder)Filename A–ZUpload order |
switches[0] اختياري |
boolean | Add a bookmark for each source file. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/merge-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F "files[]=@appendix.pdf" \
-F 'settings[File order]=Manual (drag to reorder)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/merge-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'files[1]' => new CURLFile('appendix.pdf'),
'settings[File order]' => 'Manual (drag to reorder)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/merge-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb')), ('files[]', open('appendix.pdf', 'rb'))],
data={
'settings[File order]': 'Manual (drag to reorder)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('files[]', new Blob([await readFile('appendix.pdf')]), basename('appendix.pdf'));
form.append('settings[File order]', 'Manual (drag to reorder)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/merge-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل PDF إلى Excel
pdf-to-excel
محوّل PDF إلى Excel المجاني من Convertavo يستخرج الجداول من ملف PDF ويضعها في جدول بيانات حقيقي. تبقى الصفوف والأعمدة في أماكنها. ويعمل مع كشوف الحسابات البنكية والفواتير وقوائم الأسعار والتقارير، حتى عندما يكون الجدول بلا خطوط.
/api/v1/tools/pdf-to-excel/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 10–30 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Page range] اختياري |
string |
Text. مثال: 1-3
|
settings[Output format] اختياري |
string |
Excel (.xlsx)CSV (.csv)Google Sheets |
settings[Header row] اختياري |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] اختياري |
string |
Point (1.50)Comma (1,50) |
switches[0] اختياري |
boolean | Keep empty rows. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Treat numbers as text. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/pdf-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/pdf-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/pdf-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/pdf-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل PDF إلى JPG
pdf-to-jpg
حوّل كل صفحة إلى صورة JPG أو PNG أو WebP تنشرها أو تضمّنها أو تعدّلها في أي محرر صور. مجانًا، دون حساب ودون علامة مائية.
/api/v1/tools/pdf-to-jpg/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 4–12 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Page range] اختياري |
string |
Text. مثال: 1-3
|
settings[Image format] اختياري |
string |
JPGPNGWebP |
settings[Resolution] اختياري |
string |
150 DPI (screen)300 DPI (print)600 DPI (archival) |
settings[Quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
switches[0] اختياري |
boolean | Deliver as a zip archive. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Use a white background instead of transparency. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Extract embedded images only. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/pdf-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Image format]=JPG' \
-F 'settings[Resolution]=150 DPI (screen)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/pdf-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Image format]' => 'JPG',
'settings[Resolution]' => '150 DPI (screen)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/pdf-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Image format]': 'JPG',
'settings[Resolution]': '150 DPI (screen)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Image format]', 'JPG');
form.append('settings[Resolution]', '150 DPI (screen)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/pdf-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل PDF إلى نص
pdf-to-text
ارفع ملف PDF واحصل على نص نظيف قابل للنسخ خلال ثوانٍ. تمر الصفحات الممسوحة بالتعرّف الضوئي تلقائيًا. مجانًا، دون حساب ودون علامة مائية.
/api/v1/tools/pdf-to-text/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 3–8 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Page range] اختياري |
string |
Text. مثال: 1-3
|
settings[Output format] اختياري |
string |
Plain text (.txt)Word (.docx)Markdown (.md)Web page (.html)JSON (pages, lines, tables) |
settings[Text layout] اختياري |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Language] اختياري |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] اختياري |
string |
Text. مثال: your-pdf-password
|
settings[Translate to (optional, machine translation)] اختياري |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] اختياري |
boolean | Run OCR when no text layer is found. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Keep tables as tab-separated columns. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Remove headers and page numbers. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Mark where each page starts. أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Fix words split across lines. أرسل 1 للتفعيل. |
switches[5] اختياري |
boolean | Re-read every page with OCR (fixes garbled text). أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/pdf-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Plain text (.txt)' \
-F 'settings[Text layout]=Keep line breaks' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/pdf-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Plain text (.txt)',
'settings[Text layout]' => 'Keep line breaks',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/pdf-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Plain text (.txt)',
'settings[Text layout]': 'Keep line breaks',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Plain text (.txt)');
form.append('settings[Text layout]', 'Keep line breaks');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/pdf-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل PDF إلى Word
pdf-to-word
محوّل PDF إلى Word المجاني من Convertavo يحوّل ملف PDF إلى ملف Word حقيقي. حافظ على شكل كل صفحة كما هو تمامًا، أو احصل على الكلمات في فقرات يمكنك تعديلها. وملفات PDF الممسوحة ضوئيًا تعمل أيضًا: تُقرأ صفحاتها بالتعرّف الضوئي على النص (OCR) ضمن التحويل.
/api/v1/tools/pdf-to-word/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 8–20 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Page range] اختياري |
string |
Text. مثال: 1-3
|
settings[Output] اختياري |
string |
Word (.docx)OpenDocument (.odt)Rich text (.rtf) |
settings[Layout mode] اختياري |
string |
Same layout, editableKeep exact layoutFlowing textText only |
settings[Picture quality] اختياري |
string |
High (200 DPI)Very high (300 DPI)Smaller file (150 DPI) |
settings[Language] اختياري |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] اختياري |
string |
Text. مثال: your-pdf-password
|
settings[Translate to (optional, machine translation)] اختياري |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] اختياري |
boolean | Run OCR on scanned pages. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Keep images and graphics. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Convert tables to Word tables. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Keep fonts, sizes and colours. أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Leave out repeated headers, footers and page numbers. أرسل 1 للتفعيل. |
switches[5] اختياري |
boolean | Start each PDF page on a new Word page. أرسل 1 للتفعيل. |
switches[6] اختياري |
boolean | Add a table of contents from the headings. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/pdf-to-word/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Word (.docx)' \
-F 'settings[Layout mode]=Same layout, editable' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/pdf-to-word/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output]' => 'Word (.docx)',
'settings[Layout mode]' => 'Same layout, editable',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/pdf-to-word/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output]': 'Word (.docx)',
'settings[Layout mode]': 'Same layout, editable',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Word (.docx)');
form.append('settings[Layout mode]', 'Same layout, editable');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/pdf-to-word/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تدوير صفحات PDF
rotate-pdf
أداة Convertavo المجانية تتيح لك تدوير صفحات PDF أونلاين وحفظ التغيير نهائيًا. دوّر الملف كله، أو صفحة واحدة، أو الصفحات التي خرجت خاطئة فقط. ويمكنها حتى أن تكتشف بنفسها الصفحات المائلة والمقلوبة.
/api/v1/tools/rotate-pdf/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 2–4 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Rotation] اختياري |
string |
90° clockwise90° counter-clockwise180° |
settings[Apply to] اختياري |
string |
All pagesOdd pages onlyEven pages onlySelected pages |
settings[Selected pages] اختياري |
string |
Text. مثال: 3, 7
|
switches[0] اختياري |
boolean | Detect page orientation automatically. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Keep the original file as a copy. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/rotate-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Rotation]=90° clockwise' \
-F 'settings[Apply to]=All pages' \
-F 'settings[Selected pages]=3, 7' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/rotate-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Rotation]' => '90° clockwise',
'settings[Apply to]' => 'All pages',
'settings[Selected pages]' => '3, 7',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/rotate-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Rotation]': '90° clockwise',
'settings[Apply to]': 'All pages',
'settings[Selected pages]': '3, 7',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Rotation]', '90° clockwise');
form.append('settings[Apply to]', 'All pages');
form.append('settings[Selected pages]', '3, 7');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/rotate-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تقسيم ملف PDF
split-pdf
أداة Convertavo المجانية تقسّم ملف PDF إلى ملفات منفصلة أونلاين. خذ صفحة واحدة، أو استخرج الصفحات من 3 إلى 7، أو قطّع تقريرًا طويلًا إلى أجزاء بكتابة نطاقات الصفحات التي تريدها. اعتبرها مقصًّا لملفات PDF يعمل في متصفحك، دون أن تثبّت أي شيء.
/api/v1/tools/split-pdf/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 2–6 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Pages to extract] اختياري |
string |
Text. مثال: 1-5, 12
|
settings[Filename prefix] اختياري |
string |
Text. مثال: part
|
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/split-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Pages to extract]=1-5, 12' \
-F 'settings[Filename prefix]=part'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/split-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Pages to extract]' => '1-5, 12',
'settings[Filename prefix]' => 'part',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/split-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Pages to extract]': '1-5, 12',
'settings[Filename prefix]': 'part',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Pages to extract]', '1-5, 12');
form.append('settings[Filename prefix]', 'part');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/split-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
إزالة كلمة مرور PDF
unlock-pdf
أداة Convertavo المجانية تزيل كلمة المرور من ملف PDF، فيُفتح الملف دون أن يطلبها كل مرة. كثير من البنوك تقفل كشوف الحسابات بتاريخ ميلادك، وكتابته كل شهر تصبح مملة سريعًا. اكتبه هنا مرة واحدة. ما تنزّله هو ملف PDF عادي يمكنك فتحه وطباعته ودمجه وتحويله مثل أي ملف آخر.
/api/v1/tools/unlock-pdf/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 2–5 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Document password] اختياري |
string |
Text. مثال: your-pdf-password
|
settings[Remove] اختياري |
string |
BothOpen passwordPermissions only |
switches[0] اختياري |
boolean | Allow printing after unlocking. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Allow copying text after unlocking. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Allow editing after unlocking. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/unlock-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Document password]=your-pdf-password' \
-F 'settings[Remove]=Both' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/unlock-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Document password]' => 'your-pdf-password',
'settings[Remove]' => 'Both',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/unlock-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Document password]': 'your-pdf-password',
'settings[Remove]': 'Both',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Document password]', 'your-pdf-password');
form.append('settings[Remove]', 'Both');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/unlock-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Image 7 أدوات
ضغط الصور
compress-image
ضاغط الصور المجاني من Convertavo يجعل الصور أصغر دون أن يجعلها ضبابية. تخرج معظم الصور أخف بنسبة 60 إلى 80%، ولن ترى فرقًا. أضف ملفات JPG أو PNG أو WebP حتى 25 ميغابايت، واختر جودة، ونزّل.
/api/v1/tools/compress-image/convert
- يقبل
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 4–10 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). ويعتمد حد الحجم على خطتك. |
settings[Compression] اختياري |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
settings[Target size (KB)] اختياري |
number |
Number. مثال: 200
|
settings[Output format] اختياري |
string |
Keep originalSmallest (auto)JPGPNGWebPAVIF |
settings[Resize] اختياري |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] اختياري |
number |
Number. مثال: 1920
|
settings[Max height (px)] اختياري |
number |
Number. مثال: 1080
|
settings[Background for transparency] اختياري |
string |
WhiteBlack |
settings[File names] اختياري |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] اختياري |
boolean | Strip EXIF and location data. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Convert PNG photos to JPG when smaller. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Keep the colour profile. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Keep animation (GIF and WebP). أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Never make a file bigger. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F 'settings[Target size (KB)]=200' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'settings[Target size (KB)]' => '200',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'settings[Target size (KB)]': '200',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('settings[Target size (KB)]', '200');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
قص الصورة
crop-image
تحتاج إلى صورة مربعة لـ Instagram، أو طولية لقصة؟ أداة القص المجانية من Convertavo تتيح لك سحب إطار فوق الجزء الذي تريد الاحتفاظ به، مباشرة في متصفحك. تنتهي معظم عمليات القص خلال 2 إلى 5 ثوانٍ.
/api/v1/tools/crop-image/convert
- يقبل
- JPG, PNG, WebP
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 2–5 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, WebP). ويعتمد حد الحجم على خطتك. |
settings[Aspect ratio] اختياري |
string |
Free1:1 square16:94:33:29:16 story |
settings[Width (px)] اختياري |
number |
Number. مثال: 1080
|
settings[Height (px)] اختياري |
number |
Number. مثال: 1080
|
settings[Anchor] اختياري |
string |
CentreTopBottomLeftRight |
switches[0] اختياري |
boolean | Apply the same crop to every image. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/crop-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Aspect ratio]=Free' \
-F 'settings[Width (px)]=1080' \
-F 'settings[Height (px)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/crop-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Aspect ratio]' => 'Free',
'settings[Width (px)]' => '1080',
'settings[Height (px)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/crop-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Aspect ratio]': 'Free',
'settings[Width (px)]': '1080',
'settings[Height (px)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Aspect ratio]', 'Free');
form.append('settings[Width (px)]', '1080');
form.append('settings[Height (px)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/crop-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
HEIC إلى JPG
heic-to-jpg
أرسل لك أحدهم صورة من iPhone وحاسوب Windows لا يفتحها؟ محوّل HEIC إلى JPG المجاني من Convertavo يحوّلها إلى JPG عادي يفتحه كل هاتف وحاسوب وموقع. أفلت صورة واحدة أو مجلدًا كاملًا. يستغرق الأمر عادةً من 3 إلى 7 ثوانٍ.
/api/v1/tools/heic-to-jpg/convert
- يقبل
- HEIC, HEIF
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 3–7 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (HEIC, HEIF). ويعتمد حد الحجم على خطتك. |
settings[JPG quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
settings[Output format] اختياري |
string |
JPGPNGWebP |
settings[Max dimension] اختياري |
number |
Number. مثال: 2048
|
switches[0] اختياري |
boolean | Keep EXIF data such as date and camera. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Keep GPS location data. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/heic-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@IMG_0412.heic" \
-F "files[]=@IMG_0413.heic" \
-F 'settings[JPG quality]=80' \
-F 'settings[Output format]=JPG' \
-F 'settings[Max dimension]=2048' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/heic-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('IMG_0412.heic'),
'files[1]' => new CURLFile('IMG_0413.heic'),
'settings[JPG quality]' => '80',
'settings[Output format]' => 'JPG',
'settings[Max dimension]' => '2048',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/heic-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('IMG_0412.heic', 'rb')), ('files[]', open('IMG_0413.heic', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Output format]': 'JPG',
'settings[Max dimension]': '2048',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('IMG_0412.heic')]), basename('IMG_0412.heic'));
form.append('files[]', new Blob([await readFile('IMG_0413.heic')]), basename('IMG_0413.heic'));
form.append('settings[JPG quality]', '80');
form.append('settings[Output format]', 'JPG');
form.append('settings[Max dimension]', '2048');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/heic-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل PNG إلى JPG
png-to-jpg
يحفظ هاتفك كل لقطة شاشة بصيغة PNG، وتتراكم هذه الملفات بسرعة. محوّل PNG إلى JPG المجاني من Convertavo يحوّلها إلى ملفات JPG أصغر بكثير تبدو مطابقة. في مثالنا، خرجت لقطة شاشة بحجم 596 كيلوبايت بحجم 162 كيلوبايت. أضف ملفًا واحدًا أو مجلدًا كاملًا، ويستغرق الأمر عادةً من 2 إلى 6 ثوانٍ.
/api/v1/tools/png-to-jpg/convert
- يقبل
- PNG
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 2–6 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (PNG). ويعتمد حد الحجم على خطتك. |
settings[JPG quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
settings[Background for transparency] اختياري |
string |
WhiteBlackCustom colour |
settings[Custom colour] اختياري |
string |
Text. مثال: #F5E6CC
|
settings[Max width] اختياري |
number |
Number. مثال: 1920
|
switches[0] اختياري |
boolean | Strip metadata. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Optimise for the web. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Keep the colour profile. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/png-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png" \
-F "files[]=@image-2.png" \
-F 'settings[JPG quality]=80' \
-F 'settings[Background for transparency]=White' \
-F 'settings[Custom colour]=#F5E6CC' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/png-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
'files[1]' => new CURLFile('image-2.png'),
'settings[JPG quality]' => '80',
'settings[Background for transparency]' => 'White',
'settings[Custom colour]' => '#F5E6CC',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/png-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb')), ('files[]', open('image-2.png', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Background for transparency]': 'White',
'settings[Custom colour]': '#F5E6CC',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
form.append('files[]', new Blob([await readFile('image-2.png')]), basename('image-2.png'));
form.append('settings[JPG quality]', '80');
form.append('settings[Background for transparency]', 'White');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/png-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
إزالة الخلفية
remove-background
تريد الشخص أو المنتج فقط، دون الغرفة الفوضوية خلفه؟ أداة إزالة الخلفية المجانية من Convertavo تقص العنصر وتعطيك PNG شفافًا نظيفًا. دون فُرش ودون تتبع يدوي. يستغرق الأمر عادةً من 8 إلى 20 ثانية.
/api/v1/tools/remove-background/convert
- يقبل
- JPG, PNG, WebP
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 8–20 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (JPG, PNG, WebP). ويعتمد حد الحجم على خطتك. |
settings[Output] اختياري |
string |
Transparent PNGWhite backgroundCustom colour |
settings[Custom colour] اختياري |
string |
Text. مثال: #F5E6CC
|
settings[Edge refinement] اختياري |
string |
StandardSoft (hair and fur)Sharp (products) |
switches[0] اختياري |
boolean | Keep the original resolution. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Add a soft shadow under the subject. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Crop tightly to the subject. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/remove-background/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Output]=Transparent PNG' \
-F 'settings[Custom colour]=#F5E6CC' \
-F 'settings[Edge refinement]=Standard' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/remove-background/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Output]' => 'Transparent PNG',
'settings[Custom colour]' => '#F5E6CC',
'settings[Edge refinement]' => 'Standard',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/remove-background/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Output]': 'Transparent PNG',
'settings[Custom colour]': '#F5E6CC',
'settings[Edge refinement]': 'Standard',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Output]', 'Transparent PNG');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('settings[Edge refinement]', 'Standard');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/remove-background/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تغيير حجم الصورة
resize-image
حدّد عرضًا وارتفاعًا دقيقين، أو غيّر الحجم بنسبة مئوية. ويمكنك أيضًا استهداف حجم طباعة أو حد بالكيلوبايت. نسبة العرض إلى الارتفاع مقفلة افتراضيًا.
/api/v1/tools/resize-image/convert
- يقبل
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 3–8 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). ويعتمد حد الحجم على خطتك. |
settings[Resize by] اختياري |
string |
Exact size (width × height)Popular size (preset)PercentageLongest sidePrint size (cm, mm or inches)File size (KB) |
settings[Preset size] اختياري |
string |
Instagram · Square post — 1080 × 1080Instagram · Portrait post — 1080 × 1350Instagram · Landscape post — 1080 × 566Instagram · Story or Reel — 1080 × 1920Facebook · Post — 1200 × 630Facebook · Cover photo — 851 × 315Facebook · Profile picture — 320 × 320X (Twitter) · Post — 1600 × 900X (Twitter) · Header — 1500 × 500LinkedIn · Post — 1200 × 627LinkedIn · Banner — 1584 × 396YouTube · Thumbnail — 1280 × 720YouTube · Channel banner — 2560 × 1440TikTok · Video cover — 1080 × 1920Pinterest · Pin — 1000 × 1500WhatsApp · Profile photo — 500 × 500WhatsApp · Status — 1080 × 1920Passport photo · 2 × 2 in (US) — 600 × 600Passport photo · 35 × 45 mm — 413 × 531Website · Blog image — 1200 × 800Email header — 600 × 200App icon or favicon — 512 × 512HD — 1280 × 720Full HD — 1920 × 10804K UHD — 3840 × 2160A4 page at 300 DPI — 2480 × 3508 |
settings[Width (px)] اختياري |
number |
Number. مثال: 1920
|
settings[Height (px)] اختياري |
number |
Number. مثال: 1080
|
settings[Percentage (%)] اختياري |
number |
Number. مثال: 50
|
settings[Longest side (px)] اختياري |
number |
Number. مثال: 1920
|
settings[Print width] اختياري |
number |
Number. مثال: 10
|
settings[Print height] اختياري |
number |
Number. مثال: 15
|
settings[Unit] اختياري |
string |
cmmminches |
settings[Target file size (KB)] اختياري |
number |
Number. مثال: 200
|
settings[Resize mode] اختياري |
string |
Fit insideFill and cropPad to exact sizeStretch |
settings[Crop focus] اختياري |
string |
Smart — find the subjectCentreTopBottomLeftRight |
settings[Padding] اختياري |
string |
WhiteBlackTransparentBlurred pictureAverage colour |
settings[Output format] اختياري |
string |
Keep originalJPGPNGWebPAVIF |
settings[Quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
settings[Resampling] اختياري |
string |
Lanczos — sharpest, for photosBicubic — smoothBilinear — softestNearest — pixel art and icons |
settings[Print resolution (DPI)] اختياري |
string |
Keep original7296150300600 |
settings[File names] اختياري |
string |
Keep original namesAdd "-resized"Add the new size (e.g. -1080x1080) |
switches[0] اختياري |
boolean | Lock aspect ratio. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Do not enlarge images that are already smaller. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Sharpen after resizing. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Strip EXIF and location data. أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Keep animation (GIF and WebP). أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/resize-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Resize by]=Exact size (width × height)' \
-F 'settings[Preset size]=Instagram · Square post — 1080 × 1080' \
-F 'settings[Width (px)]=1920' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/resize-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Resize by]' => 'Exact size (width × height)',
'settings[Preset size]' => 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]' => '1920',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/resize-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Resize by]': 'Exact size (width × height)',
'settings[Preset size]': 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]': '1920',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Resize by]', 'Exact size (width × height)');
form.append('settings[Preset size]', 'Instagram · Square post — 1080 × 1080');
form.append('settings[Width (px)]', '1920');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/resize-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
محوّل WebP
webp-converter
حفظت صورة من موقع فخرجت كملف .webp؟ محوّل WebP المجاني من Convertavo يحوّلها إلى JPG أو PNG يُفتح في كل مكان. ويعمل بالاتجاه المعاكس أيضًا، فيحوّل ملفات JPG وPNG إلى صور WebP صغيرة لموقعك خلال 2 إلى 5 ثوانٍ.
/api/v1/tools/webp-converter/convert
- يقبل
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 2–5 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). ويعتمد حد الحجم على خطتك. |
settings[Convert to] اختياري |
string |
WebPJPGPNGAVIFGIF (keeps animation)ICO (favicon)TIFFBMP |
settings[Compression] اختياري |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] اختياري |
integer |
Whole number, 1–100. مثال: 80
|
settings[Target size (KB)] اختياري |
number |
Number. مثال: 200
|
settings[Resize] اختياري |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] اختياري |
number |
Number. مثال: 1920
|
settings[Max height (px)] اختياري |
number |
Number. مثال: 1080
|
settings[Background for transparency] اختياري |
string |
WhiteBlack |
settings[WebP effort] اختياري |
string |
BalancedFastSmallest file (slower) |
settings[File names] اختياري |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] اختياري |
boolean | Keep EXIF data such as date and camera. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Lossless — no quality loss, larger file. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Keep the colour profile. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Keep animation (GIF and WebP). أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Keep exact colours under transparency. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/webp-converter/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Convert to]=WebP' \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/webp-converter/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Convert to]' => 'WebP',
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/webp-converter/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Convert to]': 'WebP',
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Convert to]', 'WebP');
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/webp-converter/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
OCR 3 أدوات
تحويل الصورة إلى Excel
image-to-excel
ارفع صورة أو لقطة شاشة أو صفحة ممسوحة فيها جدول واحصل على جدول بيانات حقيقي، كل قيمة في خليتها. مجاني، دون حاجة إلى حساب للملفات حتى 25 ميغابايت.
/api/v1/tools/image-to-excel/convert
- يقبل
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 3–10 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). ويعتمد حد الحجم على خطتك. |
settings[Language] اختياري |
string |
Auto-detectEnglishUrduArabicChinese |
settings[Output format] اختياري |
string |
Excel (.xlsx)CSV (.csv) |
settings[Header row] اختياري |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] اختياري |
string |
Point (1.50)Comma (1,50) |
switches[0] اختياري |
boolean | Merge cells that span multiple columns. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Keep empty rows. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Treat numbers as text. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/image-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/image-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/image-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/image-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
صورة إلى نص
image-to-text
ارفع صورة أو لقطة شاشة أو مسحًا واحصل على نص قابل للتحديد يمكنك نسخه وتحريره والبحث فيه. مجاني، دون حاجة إلى حساب للملفات حتى 25 ميغابايت.
/api/v1/tools/image-to-text/convert
- يقبل
- JPG, PNG, HEIC, WebP, TIFF, BMP, GIF
- الملفات لكل طلب
- حتى حجم الدفعة في خطتك (5 في Free، وحتى 100 في Business)
- الوقت المعتاد
- 5–15 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file[] | ملف واحد أو أكثر (JPG, PNG, HEIC, WebP, TIFF, BMP, GIF). ويعتمد حد الحجم على خطتك. |
settings[Language] اختياري |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Second language (mixed text)] اختياري |
string |
NoneEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Image mode] اختياري |
string |
AutoPrinted documentScreenshotPhoto of a pageHandwritingSign or sparse textSingle lineMath formula (LaTeX) |
settings[Layout] اختياري |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Output format] اختياري |
string |
Plain text (.txt)Word (.docx)Searchable PDFMarkdown (.md)JSON (words, positions, confidence) |
settings[Translate to (optional, machine translation)] اختياري |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] اختياري |
boolean | Enhance contrast before reading. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Correct page skew automatically. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Flag low-confidence words. أرسل 1 للتفعيل. |
switches[3] اختياري |
boolean | Clean up stray symbols and noise. أرسل 1 للتفعيل. |
switches[4] اختياري |
boolean | Combine a batch into one file. أرسل 1 للتفعيل. |
switches[5] اختياري |
boolean | Detect QR codes and barcodes. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/image-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Second language (mixed text)]=None' \
-F 'settings[Image mode]=Auto' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/image-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Second language (mixed text)]' => 'None',
'settings[Image mode]' => 'Auto',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/image-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Second language (mixed text)]': 'None',
'settings[Image mode]': 'Auto',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Second language (mixed text)]', 'None');
form.append('settings[Image mode]', 'Auto');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/image-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
التعرّف الضوئي على ملفات PDF
pdf-ocr
أداة التعرّف الضوئي على ملفات PDF من Convertavo تحوّل ملف PDF الممسوح إلى PDF قابل للبحث. ارفع ملفك، واختر اللغة، ونزّل نسخة يمكنك البحث فيها وتحديد النص ونسخه.
/api/v1/tools/pdf-ocr/convert
- يقبل
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 10–40 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PDF). ويعتمد حد الحجم على خطتك. |
settings[Language] اختياري |
string |
Auto-detectEnglishSpanishUrduArabicChinese |
settings[Page range] اختياري |
string |
Text. مثال: 1-3
|
settings[Output] اختياري |
string |
Searchable PDF (same look)Searchable PDF + text file |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/pdf-ocr/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Searchable PDF (same look)'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/pdf-ocr/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Language]' => 'Auto-detect',
'settings[Page range]' => '1-3',
'settings[Output]' => 'Searchable PDF (same look)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/pdf-ocr/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Page range]': '1-3',
'settings[Output]': 'Searchable PDF (same look)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Searchable PDF (same look)');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/pdf-ocr/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Media 3 أدوات
ضغط الفيديو
compress-video
الفيديو كبير جدًا للبريد الإلكتروني، أو WhatsApp لا يرسله؟ ضاغط الفيديو المجاني من Convertavo يصغّره إلى الحجم الذي تحتاجه دون أن يفسده. ارفع ملف MP4 أو MOV أو MKV أو AVI، واكتب الحجم الذي تريده، وتنتهي معظم الفيديوهات خلال 1 إلى 4 دقائق.
/api/v1/tools/compress-video/convert
- يقبل
- MP4, MOV, MKV, AVI
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 60–240 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (MP4, MOV, MKV, AVI). ويعتمد حد الحجم على خطتك. |
settings[Compression level] اختياري |
string |
Balanced (recommended)MaximumLight — best quality |
settings[Target size (MB)] اختياري |
number |
Number. مثال: 25
|
settings[Resolution] اختياري |
string |
Keep original1080p720p480p |
settings[Codec] اختياري |
string |
H.264H.265 |
switches[0] اختياري |
boolean | Reduce the frame rate to 30 fps. أرسل 1 للتفعيل. |
switches[1] اختياري |
boolean | Lower the audio bitrate to 128 kbps. أرسل 1 للتفعيل. |
switches[2] اختياري |
boolean | Remove audio entirely. أرسل 1 للتفعيل. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/compress-video/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Target size (MB)]=25' \
-F 'settings[Resolution]=Keep original' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/compress-video/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Target size (MB)]' => '25',
'settings[Resolution]' => 'Keep original',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/compress-video/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Target size (MB)]': '25',
'settings[Resolution]': 'Keep original',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Target size (MB)]', '25');
form.append('settings[Resolution]', 'Keep original');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/compress-video/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل MOV إلى MP4
mov-to-mp4
فيديو iPhone يعمل جيدًا على الهاتف، ثم لا يُفتح على حاسوب Windows. محوّل MOV إلى MP4 المجاني من Convertavo يصلح ذلك بخطوة واحدة، دون أي تثبيت. ارفع ملف MOV، واترك الإعدادات الافتراضية، وتجهز معظم الفيديوهات خلال 30 إلى 120 ثانية.
/api/v1/tools/mov-to-mp4/convert
- يقبل
- MOV, AVI, MKV, WebM
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 30–120 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (MOV, AVI, MKV, WebM). ويعتمد حد الحجم على خطتك. |
settings[Quality] اختياري |
string |
Same as source1080p720p480p |
settings[Video codec] اختياري |
string |
H.264 (most compatible)H.265 (smaller files) |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/mov-to-mp4/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Quality]=Same as source' \
-F 'settings[Video codec]=H.264 (most compatible)'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/mov-to-mp4/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Quality]' => 'Same as source',
'settings[Video codec]' => 'H.264 (most compatible)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/mov-to-mp4/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Quality]': 'Same as source',
'settings[Video codec]': 'H.264 (most compatible)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Quality]', 'Same as source');
form.append('settings[Video codec]', 'H.264 (most compatible)');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/mov-to-mp4/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
تحويل MP4 إلى MP3
mp4-to-mp3
تريد الصوت فقط من فيديو، مثل محاضرة للحافلة أو أغنية من مقطع حفلة؟ محوّل MP4 إلى MP3 المجاني من Convertavo يحتفظ بالصوت ويتخلص من الصورة. ارفع الفيديو، واختر الجودة، ونزّل ملف MP3، عادةً في أقل من دقيقة.
/api/v1/tools/mp4-to-mp3/convert
- يقبل
- MP4, MOV, MKV, AVI
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 20–60 ثانية
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (MP4, MOV, MKV, AVI). ويعتمد حد الحجم على خطتك. |
settings[Bitrate] اختياري |
string |
192 kbps (recommended)320 kbps128 kbps |
settings[Channels] اختياري |
string |
StereoMono |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/mp4-to-mp3/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Bitrate]=192 kbps (recommended)' \
-F 'settings[Channels]=Stereo'
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/mp4-to-mp3/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Bitrate]' => '192 kbps (recommended)',
'settings[Channels]' => 'Stereo',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/mp4-to-mp3/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Bitrate]': '192 kbps (recommended)',
'settings[Channels]': 'Stereo',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Bitrate]', '192 kbps (recommended)');
form.append('settings[Channels]', 'Stereo');
const response = await fetch('https://convertavo.com/ar/api/v1/tools/mp4-to-mp3/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
AI 2 أدوات
كاشف الفن بالذكاء الاصطناعي
ai-art-detector
وجدت رسمًا على الإنترنت وتشعر أن فيه شيئًا غريبًا؟ كاشف الفن بالذكاء الاصطناعي المجاني من Convertavo يتحقق مما إذا كان رسم أو لوحة أو رسم توضيحي قد خرج من مولّد صور بالذكاء الاصطناعي. لا تحصل على درجة فقط، بل ترى الأدلة. ارفع صورة JPG أو PNG أو WebP، وتستغرق الإجابة عادةً من 2 إلى 4 ثوانٍ.
/api/v1/tools/ai-art-detector/convert
- يقبل
- JPG, PNG, WebP
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- 2–4 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (JPG, PNG, WebP). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/ai-art-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/ai-art-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/ai-art-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/ai-art-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
كاشف الصور بالذكاء الاصطناعي
ai-image-detector
ارفع صورة، وسيقدّر كاشف الصور من Convertavo إن كانت مولّدة. إنه تقدير وليس دليلًا. تحصل على حكم، ومدى ثقة النموذج، والأدلة وراءه. وحين يكون الجواب الصادق «لا يمكن الجزم»، يقول التقرير ذلك.
/api/v1/tools/ai-image-detector/convert
- يقبل
- JPG, PNG, WebP
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- من 2 إلى 4 ثوانٍ
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (JPG, PNG, WebP). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/ai-image-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/ai-image-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/ai-image-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/ai-image-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Links 5 أدوات
مختصر الروابط الجماعي
bulk-url-shortener
تحتاج إلى اختصار قائمة كاملة من الروابط؟ الصقها في مختصر الروابط الجماعي من Convertavo، رابطًا في كل سطر، أو ارفع ملف CSV. تعود كل الروابط المختصرة في جدول بيانات واحد، ولكل منها رمز QR خاص. إنه مجاني، ولحد 50 رابطًا في المرة لا تحتاج حتى إلى حساب.
/api/v1/tools/bulk-url-shortener/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- دقيقة أو دقيقتان
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/bulk-url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/bulk-url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/bulk-url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/bulk-url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
كاشف الروابط المختصرة
expand-url
لست متأكدًا من رابط مختصر أرسله لك أحدهم؟ ضعه في فاحص الروابط المختصرة من Convertavo، وسترى العنوان الحقيقي قبل أن تضغط عليه. نتتبع الرابط نيابةً عنك ونعرض العنوان الكامل، وكل محطة في الطريق، وفحصًا أمنيًا. دون حساب ودون تطبيق.
/api/v1/tools/expand-url/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/expand-url/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/expand-url/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/expand-url/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/expand-url/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
صفحة الرابط في البايو
link-in-bio
Your profile has room for one link, but you have five things to share. Make a free link in bio page on Convertavo, and that one link opens all of them, with the designs, videos, sign-up forms and insights other services charge for. No ads.
/api/v1/tools/link-in-bio/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/link-in-bio/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/link-in-bio/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/link-in-bio/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/link-in-bio/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
مختصر الروابط
url-shortener
هل رابطك طويل لدرجة أنه ينقطع في الرسالة النصية؟ الصقه في مختصر الروابط المجاني من Convertavo، وستحصل على رابط قصير خلال ثانية تقريبًا. يأتي كل رابط مع رمز QR وعدّاد للنقرات. دون حساب. ولا شيء مخفي خلف خطة مدفوعة أيضًا.
/api/v1/tools/url-shortener/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
منشئ روابط UTM
utm-builder
Did that newsletter actually bring anyone to your site, or was it the Instagram post? Run the link through Convertavo’s UTM builder before you share it, and your analytics will finally tell you. The tagged link comes out long and ugly (that’s normal), so shorten it right here. No account needed, and it costs nothing.
/api/v1/tools/utm-builder/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/utm-builder/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/utm-builder/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/utm-builder/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/utm-builder/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Business 1 أداة
منشئ الفواتير
invoice-generator
أنشئ فاتورة احترافية بلغة عميلك وعملته. الضرائب والخصومات والاستقطاع محسوبة بدقة، وملف PDF دون علامة مائية — دون حاجة إلى حساب.
/api/v1/tools/invoice-generator/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/invoice-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/invoice-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/invoice-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/invoice-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
QR Code 2 أدوات
مولّد رمز QR
qr-code-generator
أنشئ رمز QR لرابط أو شبكة Wi-Fi أو بطاقة اتصال أو محادثة WhatsApp. اختر الألوان وشكل النقاط والإطار والشعار، ثم نزّله.
/api/v1/tools/qr-code-generator/convert
- يقبل
- أي ملف
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (أي نوع). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/qr-code-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/qr-code-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/qr-code-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/qr-code-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
قارئ رمز QR
qr-code-scanner
قارئ مجاني لرموز QR والباركود. امسح من الكاميرا أو صورة أو لقطة شاشة أو ملف PDF، ويُفحص كل رابط قبل أن تفتحه.
/api/v1/tools/qr-code-scanner/convert
- يقبل
- PNG, JPG, WebP, GIF, PDF
- الملفات لكل طلب
- ملف واحد (أرسل ملفًا واحدًا لكل طلب)
- الوقت المعتاد
- فوري
- جرّبها
- افتح صفحة الأداة ←
جسم الطلب multipart/form-data
| الحقل | النوع | الوصف |
|---|---|---|
files[] مطلوب |
file | الملف المراد تحويله (PNG, JPG, WebP, GIF, PDF). ويعتمد حد الحجم على خطتك. |
مثال على طلب
curl -X POST https://convertavo.com/ar/api/v1/tools/qr-code-scanner/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png"
<?php
$ch = curl_init('https://convertavo.com/ar/api/v1/tools/qr-code-scanner/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ar/api/v1/tools/qr-code-scanner/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
const response = await fetch('https://convertavo.com/ar/api/v1/tools/qr-code-scanner/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);