jibrid

Jibrid API

ZATCA e-invoicing, Qoyod accounting, and Foodics POS as an API. Onboard with ZATCA, submit invoices, sync with Qoyod, and access Foodics data — all through simple HTTP calls.

Base URL
https://www.jibrid.com/api/v1
Environment
jbr_test_sandbox
jbr_live_production

Quick start

  1. Get your API key from the dashboard
  2. Onboard with ZATCA using POST /v1/zatca/onboard
  3. Submit invoices via POST /v1/zatca/invoices

Response format

All responses use a standard JSON envelope:

{
  "success": true,
  "data": {
    "...": "endpoint-specific data"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-10T14:30:00.000Z",
    "environment": "sandbox"
  }
}

Authentication

Authenticate every request with an API key in the Authorization header.

Sandbox keys
jbr_test_xxxxxxxx

Routes to ZATCA sandbox. No real submissions.

Production keys
jbr_live_xxxxxxxx

Submits to ZATCA production. Real invoices.

Header format

Authorization: Bearer jbr_test_xxxxx

Important: API keys are hashed (SHA-256) before storage. The plaintext key is shown once at creation and cannot be retrieved. Store it securely.

ZATCA Onboarding

POST/v1/zatca/onboard

Complete ZATCA e-invoicing onboarding in a single call. Generates a CSR, obtains compliance and production CSIDs, runs compliance checks, and stores encrypted credentials.

Request Body

FieldTypeRequiredDescription
vat_numberstringrequired15-digit VAT number (starts and ends with 3)
org_namestringrequiredOrganization legal name
org_unitstringoptionalBranch or unit name (default: "Main Branch")
citystringoptionalCity name (default: "Riyadh")
otpstringrequiredOne-time password from ZATCA portal (use "123456" in sandbox)

Example Request

curl -X POST https://www.jibrid.com/api/v1/zatca/onboard \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer jbr_test_xxxxx" \
  -d '{
    "vat_number": "399999999900003",
    "org_name": "Maximum Speed Tech Supply LTD",
    "org_unit": "Riyadh Branch",
    "city": "Riyadh",
    "otp": "123456"
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "onboarding_id": "uuid",
    "status": "active",
    "vat_number": "399999999900003",
    "egs_serial": "1-Jibrid|2-1.0|3-...",
    "environment": "sandbox",
    "duration_ms": 1810
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-10T...",
    "environment": "sandbox"
  }
}

Submit Invoice

POST/v1/zatca/invoices

Sign and submit an invoice to ZATCA. Simplified invoices (B2C) are reported; standard invoices (B2B) go through clearance. VAT is calculated server-side.

Request Body

FieldTypeRequiredDescription
invoice_typestringrequired"simplified" (B2C) or "standard" (B2B)
invoice_numberstringrequiredYour invoice reference number
issue_datestringrequiredInvoice date (YYYY-MM-DD)
issue_timestringrequiredInvoice time (HH:MM:SS)
supply_datestringoptionalDelivery date (YYYY-MM-DD). Auto-set to issue_date for standard invoices
sellerobjectrequiredSeller details (vat_number, name, commercial_registration, address)
buyerobjectoptionalBuyer details. Required for standard invoices (vat_number, name, id_type, id_value, address)
itemsarrayrequiredLine items (name, quantity, unit_price, vat_rate)
payment_meansstringoptionalPayment code (default: "10" = cash)
notestringoptionalInvoice note

Example Request

curl -X POST https://www.jibrid.com/api/v1/zatca/invoices \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer jbr_test_xxxxx" \
  -d '{
    "invoice_type": "simplified",
    "invoice_number": "INV-001",
    "issue_date": "2026-02-10",
    "issue_time": "14:30:00",
    "supply_date": "2026-02-10",
    "seller": {
      "vat_number": "399999999900003",
      "name": "Maximum Speed Tech Supply LTD",
      "commercial_registration": "1010000000",
      "address": {
        "street": "King Fahd Road",
        "city": "Riyadh",
        "district": "RRRD2929",
        "postal_code": "12345"
      }
    },
    "items": [{
      "name": "Web Development Service",
      "quantity": 1,
      "unit_price": 1000.00,
      "vat_rate": 0.15
    }]
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "invoice_id": "uuid",
    "uuid": "uuid",
    "invoice_number": "INV-001",
    "status": "REPORTED",
    "reporting_status": "REPORTED",
    "clearance_status": null,
    "invoice_hash": "base64...",
    "qr_code": "base64...",
    "validation_results": {
      "status": "PASS",
      "errors": [],
      "warnings": []
    },
    "totals": {
      "subtotal": 1000,
      "vat_total": 150,
      "total": 1150,
      "currency": "SAR"
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-10T...",
    "environment": "sandbox"
  }
}

List Invoices

GET/v1/zatca/invoices

Retrieve a paginated list of all invoices submitted for your organization. Results are sorted by creation date (newest first).

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
limitintegeroptionalResults per page, max 100 (default: 20)

Example Request

curl https://www.jibrid.com/api/v1/zatca/invoices?page=1&limit=20 \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "invoices": [
      {
        "id": "uuid",
        "uuid": "uuid",
        "invoice_number": "INV-001",
        "invoice_type": "simplified",
        "subtotal": 1000,
        "vat_total": 150,
        "total": 1150,
        "currency": "SAR",
        "zatca_status": "REPORTED",
        "validation_status": "PASS",
        "issue_date": "2026-02-10",
        "issue_time": "14:30:00",
        "created_at": "2026-02-10T14:30:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "total_pages": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-10T...",
    "environment": "sandbox"
  }
}

Invoice Detail

GET/v1/zatca/invoices/:id

Retrieve full details for a specific invoice, including the ZATCA validation results, signed XML hash, QR code, and the original request payload.

Example Request

curl https://www.jibrid.com/api/v1/zatca/invoices/INVOICE_ID \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "invoice_id": "uuid",
    "uuid": "uuid",
    "invoice_number": "INV-001",
    "invoice_type": "simplified",
    "invoice_counter": 1,
    "status": "REPORTED",
    "reporting_status": "REPORTED",
    "clearance_status": null,
    "validation_results": {
      "status": "PASS",
      "errors": [],
      "warnings": []
    },
    "totals": {
      "subtotal": 1000,
      "vat_total": 150,
      "total": 1150,
      "currency": "SAR"
    },
    "invoice_hash": "base64...",
    "qr_code": "base64...",
    "issue_date": "2026-02-10",
    "issue_time": "14:30:00",
    "submitted_at": "2026-02-10T14:30:00.000Z",
    "request_payload": {
      "...": "original request body"
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-10T...",
    "environment": "sandbox"
  }
}

Check Status

GET/v1/zatca/status

Check your ZATCA onboarding status, credential health, and invoice submission statistics for the last 30 days.

Example Request

curl https://www.jibrid.com/api/v1/zatca/status \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "onboarding": {
      "status": "active",
      "vat_number": "399999999900003",
      "egs_serial": "1-Jibrid|2-1.0|3-...",
      "environment": "sandbox",
      "onboarded_at": "2026-02-10T...",
      "expires_at": null
    },
    "stats": {
      "total_invoices": 3,
      "last_30_days": 3,
      "errors_last_30_days": 0
    },
    "plan": "free",
    "rate_limit_per_minute": 60
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-10T...",
    "environment": "sandbox"
  }
}

Qoyod Accounting

Sync your chart of accounts, customers, products, and invoices with Qoyod accounting software. Uses the same API key as ZATCA endpoints.

Prerequisite: Connect your Qoyod account in the Dashboard before calling these endpoints. You will need your Qoyod API key from Qoyod Settings → API.

Connection Status

GET/v1/qoyod/status

Check whether the Qoyod accounting integration is connected for your organization.

Example Request

curl https://www.jibrid.com/api/v1/qoyod/status \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "connected": true,
    "connector": "qoyod"
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

List Accounts

GET/v1/qoyod/accounts

Retrieve the full chart of accounts from the connected Qoyod organization.

Example Request

curl https://www.jibrid.com/api/v1/qoyod/accounts \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "accounts": [
      {
        "id": 1,
        "name": "Cash",
        "name_ar": "نقد",
        "code": "1001",
        "account_type": "asset",
        "parent_id": null,
        "is_active": true
      },
      {
        "id": 2,
        "name": "Revenue",
        "name_ar": "إيرادات",
        "code": "4001",
        "account_type": "revenue",
        "parent_id": null,
        "is_active": true
      }
    ]
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

List Customers

GET/v1/qoyod/customers

Retrieve a paginated list of customers from the connected Qoyod organization.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
per_pageintegeroptionalResults per page (default: 20)

Example Request

curl "https://www.jibrid.com/api/v1/qoyod/customers?page=1&per_page=20" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "customers": [
      {
        "id": 1,
        "name": "Acme Corp",
        "email": "info@acme.sa",
        "phone": "+966551234567",
        "vat_number": "300000000000003"
      }
    ]
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

Create Customer

POST/v1/qoyod/customers

Create a new customer in the connected Qoyod organization.

Request Body

FieldTypeRequiredDescription
namestringrequiredCustomer name
emailstringoptionalEmail address
phonestringoptionalPhone number
vat_numberstringoptional15-digit VAT registration number
addressstringoptionalStreet address
citystringoptionalCity
countrystringoptionalISO country code (e.g. "SA")

Example Request

curl -X POST https://www.jibrid.com/api/v1/qoyod/customers \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer jbr_test_xxxxx" \
  -d '{
    "name": "Acme Corp",
    "email": "info@acme.sa",
    "vat_number": "300000000000003"
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "customer": {
      "id": 42,
      "name": "Acme Corp",
      "email": "info@acme.sa",
      "phone": "+966551234567",
      "vat_number": "300000000000003"
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

List Invoices

GET/v1/qoyod/invoices

Retrieve a paginated list of invoices from the connected Qoyod organization.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
per_pageintegeroptionalResults per page (default: 20)

Example Request

curl "https://www.jibrid.com/api/v1/qoyod/invoices?page=1&per_page=20" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "invoices": [
      {
        "id": 1,
        "reference": "INV-001",
        "customer_id": 42,
        "date": "2026-02-21",
        "status": "sent",
        "total": 1150
      }
    ]
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

Create Invoice

POST/v1/qoyod/invoices

Create a new invoice in the connected Qoyod organization. Provide either customer_id (existing customer) or customer_name (inline customer).

Request Body

FieldTypeRequiredDescription
customer_idintegeroptionalQoyod customer ID. Required if customer_name is not provided
customer_namestringoptionalInline customer name. Required if customer_id is not provided
customer_vatstringoptionalCustomer VAT number (only with customer_name)
datestringrequiredInvoice date (YYYY-MM-DD)
due_datestringoptionalPayment due date (YYYY-MM-DD)
referencestringoptionalYour invoice reference number
notesstringoptionalInvoice notes or description
line_itemsarrayrequiredLine items (description, quantity, unit_price, tax_rate?, product_id?)

Example Request

curl -X POST https://www.jibrid.com/api/v1/qoyod/invoices \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer jbr_test_xxxxx" \
  -d '{
    "customer_id": 42,
    "date": "2026-02-21",
    "due_date": "2026-03-21",
    "reference": "INV-001",
    "notes": "Monthly service fee",
    "line_items": [{
      "description": "Web Development",
      "quantity": 1,
      "unit_price": 1000,
      "tax_rate": 15
    }]
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "invoice": {
      "id": 1,
      "reference": "INV-001",
      "customer_id": 42,
      "date": "2026-02-21",
      "due_date": "2026-03-21",
      "status": "draft",
      "subtotal": 1000,
      "tax_total": 150,
      "total": 1150,
      "line_items": [
        {
          "description": "Web Development",
          "quantity": 1,
          "unit_price": 1000,
          "tax_rate": 15,
          "tax_amount": 150,
          "total": 1150
        }
      ]
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

Invoice Detail

GET/v1/qoyod/invoices/:id

Retrieve full details for a specific Qoyod invoice by its numeric ID.

Example Request

curl https://www.jibrid.com/api/v1/qoyod/invoices/42 \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "invoice": {
      "id": 1,
      "reference": "INV-001",
      "customer_id": 42,
      "date": "2026-02-21",
      "due_date": "2026-03-21",
      "status": "sent",
      "subtotal": 1000,
      "tax_total": 150,
      "total": 1150,
      "notes": "Monthly service fee",
      "line_items": [
        {
          "description": "Web Development",
          "quantity": 1,
          "unit_price": 1000,
          "tax_rate": 15,
          "tax_amount": 150,
          "total": 1150
        }
      ]
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

List Products

GET/v1/qoyod/products

Retrieve all products from the connected Qoyod organization.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
per_pageintegeroptionalResults per page (default: 20)

Example Request

curl "https://www.jibrid.com/api/v1/qoyod/products?page=1" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "products": [
      {
        "id": 1,
        "name": "Widget",
        "name_ar": "قطعة",
        "sku": "WDG-01",
        "price": 99.99,
        "tax_rate": 15,
        "is_active": true
      }
    ]
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-21T...",
    "environment": "sandbox"
  }
}

Foodics POS

Access branches, products, categories, orders, and customers from your connected Foodics POS system. Uses the same API key as ZATCA and Qoyod endpoints.

Prerequisite: Connect your Foodics account in the Dashboard before calling these endpoints. You will be redirected to Foodics to authorize access via OAuth.

Connection Status

GET/v1/foodics/status

Check whether the Foodics POS integration is connected for your organization.

Example Request

curl https://www.jibrid.com/api/v1/foodics/status \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "connection": {
      "status": "connected",
      "connector": "foodics"
    },
    "plan": "free",
    "rate_limit_per_minute": 60
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

List Branches

GET/v1/foodics/branches

Retrieve a paginated list of branches (store locations) from the connected Foodics account.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
page_sizeintegeroptionalResults per page, max 50 (default: 25)
is_activebooleanoptionalFilter by active status

Example Request

curl "https://www.jibrid.com/api/v1/foodics/branches?page=1&page_size=25" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "branches": [
      {
        "id": "abc123",
        "name": "Main Branch",
        "name_ar": "الفرع الرئيسي",
        "reference": "001",
        "phone": "+966501234567",
        "address": "King Fahd Rd",
        "city": "Riyadh",
        "is_active": true
      }
    ],
    "pagination": {
      "page": 1,
      "total_pages": 1,
      "total_count": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

List Products

GET/v1/foodics/products

Retrieve a paginated list of products (menu items) from the connected Foodics account. Supports search and category filtering.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
page_sizeintegeroptionalResults per page, max 50 (default: 25)
category_idstringoptionalFilter by category HID
is_activebooleanoptionalFilter by active status
searchstringoptionalSearch by product name

Example Request

curl "https://www.jibrid.com/api/v1/foodics/products?page=1&page_size=25" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "products": [
      {
        "id": "prod123",
        "name": "Chicken Burger",
        "name_ar": "برجر دجاج",
        "sku": "CB-01",
        "price": 25,
        "category_id": "cat456",
        "is_active": true
      }
    ],
    "pagination": {
      "page": 1,
      "total_pages": 1,
      "total_count": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

List Categories

GET/v1/foodics/categories

Retrieve a paginated list of product categories from the connected Foodics account.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
page_sizeintegeroptionalResults per page, max 50 (default: 25)
is_activebooleanoptionalFilter by active status

Example Request

curl "https://www.jibrid.com/api/v1/foodics/categories?page=1" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "categories": [
      {
        "id": "cat456",
        "name": "Burgers",
        "name_ar": "برجر",
        "parent_id": null,
        "is_active": true
      }
    ],
    "pagination": {
      "page": 1,
      "total_pages": 1,
      "total_count": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

List Orders

GET/v1/foodics/orders

Retrieve a paginated list of orders from the connected Foodics account. Supports filtering by branch, date range, and status.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
page_sizeintegeroptionalResults per page, max 50 (default: 25)
branch_idstringoptionalFilter by branch HID
date_fromstringoptionalFilter orders from this date (YYYY-MM-DD)
date_tostringoptionalFilter orders to this date (YYYY-MM-DD)
statusstringoptionalFilter by status: closed, void, returned

Example Request

curl "https://www.jibrid.com/api/v1/foodics/orders?page=1&date_from=2026-02-01&date_to=2026-02-28" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "orders": [
      {
        "id": "ord789",
        "number": 1001,
        "branch_id": "abc123",
        "customer_id": null,
        "type": "dine_in",
        "status": "closed",
        "subtotal": 50,
        "discount": 0,
        "total": 57.5,
        "taxes": [
          {
            "name": "VAT",
            "rate": 15,
            "amount": 7.5
          }
        ],
        "line_items": [],
        "payments": [],
        "business_date": "2026-02-24",
        "created_at": "2026-02-24T14:00:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "total_pages": 1,
      "total_count": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

List Customers

GET/v1/foodics/customers

Retrieve a paginated list of customers from the connected Foodics account. Supports search by name, email, or phone.

Query Parameters

FieldTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
page_sizeintegeroptionalResults per page, max 50 (default: 25)
searchstringoptionalSearch by name, email, or phone

Example Request

curl "https://www.jibrid.com/api/v1/foodics/customers?page=1&search=Ahmed" \
  -H "Authorization: Bearer jbr_test_xxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "customers": [
      {
        "id": "cust001",
        "name": "Ahmed Ali",
        "email": "ahmed@example.com",
        "phone": "+966501234567",
        "is_blacklisted": false
      }
    ],
    "pagination": {
      "page": 1,
      "total_pages": 1,
      "total_count": 1
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-02-24T...",
    "environment": "sandbox"
  }
}

Error Codes

All errors return a consistent envelope with success: false, an error code, an English message, and an Arabic translation.

Error response format
{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable description",
    "message_ar": "وصف بالعربي"
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "...",
    "environment": "sandbox"
  }
}
CodeHTTPDescription
MISSING_API_KEY401No Authorization header provided
INVALID_AUTH_FORMAT401Header must be: Bearer <api_key>
INVALID_KEY_FORMAT401Key must start with jbr_test_ or jbr_live_
INVALID_API_KEY401API key not found or hash mismatch
KEY_DISABLED401API key has been deactivated
INVALID_VAT_NUMBER400VAT number must be 15 digits, starting and ending with 3
MISSING_FIELD400A required field is missing from the request body
INVALID_INVOICE_TYPE400invoice_type must be "simplified" or "standard"
INVALID_DATE400Date must be in YYYY-MM-DD format
INVALID_TIME400Time must be in HH:MM:SS format
NOT_ONBOARDED400No active ZATCA credentials. Call /v1/zatca/onboard first
INVOICE_NOT_FOUND404Invoice ID does not exist or belongs to another org
ONBOARDING_FAILED500ZATCA onboarding process failed
INVOICE_SUBMISSION_FAILED500Invoice signing or ZATCA submission failed
RATE_LIMITED429Too many requests. Check X-RateLimit-* headers
ZATCA_UNAVAILABLE503ZATCA service temporarily unavailable. Retry later
QOYOD_NOT_CONNECTED422Qoyod is not connected. Connect via the dashboard first
QOYOD_AUTH_ERROR401Qoyod API key is invalid or expired
QOYOD_VALIDATION_ERROR400Qoyod rejected the request — check field errors
QOYOD_NOT_FOUND404Resource not found in Qoyod
QOYOD_RATE_LIMIT429Qoyod API rate limit exceeded. Retry after the specified time
QOYOD_UNAVAILABLE503Qoyod API temporarily unavailable. Retry later
FOODICS_NOT_CONNECTED422Foodics is not connected. Connect via the dashboard first
FOODICS_REQUEST_FAILED502Foodics API request failed. Retry later

Rate Limits

API requests are rate-limited per API key based on your plan. Limits are enforced per minute.

PlanRequests / MonthRate Limit
Free1,00060/min
Pro1,000120/min
Business10,000300/min
EnterpriseUnlimitedCustom

Rate Limit Headers

Every V1 API response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per minute for your plan
X-RateLimit-RemainingApproximate remaining requests in the current window
X-RateLimit-ResetUnix timestamp when the rate limit window resets
Retry-AfterSeconds to wait before retrying (only on 429 responses)

429 Too Many Requests: If you exceed the rate limit, you will receive a 429 response with a Retry-After: 60 header. Wait the specified time before retrying.

Jibrid API v1.0 · Built for Saudi businesses