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.
https://www.jibrid.com/api/v1jbr_test_sandboxjbr_live_productionQuick start
- Get your API key from the dashboard
- Onboard with ZATCA using
POST /v1/zatca/onboard - 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.
jbr_test_xxxxxxxxRoutes to ZATCA sandbox. No real submissions.
jbr_live_xxxxxxxxSubmits to ZATCA production. Real invoices.
Header format
Authorization: Bearer jbr_test_xxxxxImportant: 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
/v1/zatca/onboardComplete 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
| Field | Type | Required | Description |
|---|---|---|---|
| vat_number | string | required | 15-digit VAT number (starts and ends with 3) |
| org_name | string | required | Organization legal name |
| org_unit | string | optional | Branch or unit name (default: "Main Branch") |
| city | string | optional | City name (default: "Riyadh") |
| otp | string | required | One-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
{
"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
/v1/zatca/invoicesSign and submit an invoice to ZATCA. Simplified invoices (B2C) are reported; standard invoices (B2B) go through clearance. VAT is calculated server-side.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| invoice_type | string | required | "simplified" (B2C) or "standard" (B2B) |
| invoice_number | string | required | Your invoice reference number |
| issue_date | string | required | Invoice date (YYYY-MM-DD) |
| issue_time | string | required | Invoice time (HH:MM:SS) |
| supply_date | string | optional | Delivery date (YYYY-MM-DD). Auto-set to issue_date for standard invoices |
| seller | object | required | Seller details (vat_number, name, commercial_registration, address) |
| buyer | object | optional | Buyer details. Required for standard invoices (vat_number, name, id_type, id_value, address) |
| items | array | required | Line items (name, quantity, unit_price, vat_rate) |
| payment_means | string | optional | Payment code (default: "10" = cash) |
| note | string | optional | Invoice 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
{
"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
/v1/zatca/invoicesRetrieve a paginated list of all invoices submitted for your organization. Results are sorted by creation date (newest first).
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| limit | integer | optional | Results 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
{
"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
/v1/zatca/invoices/:idRetrieve 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
{
"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
/v1/zatca/statusCheck 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
{
"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
/v1/qoyod/statusCheck 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
{
"success": true,
"data": {
"connected": true,
"connector": "qoyod"
},
"meta": {
"request_id": "req_...",
"timestamp": "2026-02-21T...",
"environment": "sandbox"
}
}List Accounts
/v1/qoyod/accountsRetrieve 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
{
"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
/v1/qoyod/customersRetrieve a paginated list of customers from the connected Qoyod organization.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| per_page | integer | optional | Results 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
{
"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
/v1/qoyod/customersCreate a new customer in the connected Qoyod organization.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | required | Customer name |
| string | optional | Email address | |
| phone | string | optional | Phone number |
| vat_number | string | optional | 15-digit VAT registration number |
| address | string | optional | Street address |
| city | string | optional | City |
| country | string | optional | ISO 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
{
"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
/v1/qoyod/invoicesRetrieve a paginated list of invoices from the connected Qoyod organization.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| per_page | integer | optional | Results 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
{
"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
/v1/qoyod/invoicesCreate a new invoice in the connected Qoyod organization. Provide either customer_id (existing customer) or customer_name (inline customer).
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| customer_id | integer | optional | Qoyod customer ID. Required if customer_name is not provided |
| customer_name | string | optional | Inline customer name. Required if customer_id is not provided |
| customer_vat | string | optional | Customer VAT number (only with customer_name) |
| date | string | required | Invoice date (YYYY-MM-DD) |
| due_date | string | optional | Payment due date (YYYY-MM-DD) |
| reference | string | optional | Your invoice reference number |
| notes | string | optional | Invoice notes or description |
| line_items | array | required | Line 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
{
"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
/v1/qoyod/invoices/:idRetrieve 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
{
"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
/v1/qoyod/productsRetrieve all products from the connected Qoyod organization.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| per_page | integer | optional | Results per page (default: 20) |
Example Request
curl "https://www.jibrid.com/api/v1/qoyod/products?page=1" \
-H "Authorization: Bearer jbr_test_xxxxx"Response
{
"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
/v1/foodics/statusCheck 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
{
"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
/v1/foodics/branchesRetrieve a paginated list of branches (store locations) from the connected Foodics account.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| page_size | integer | optional | Results per page, max 50 (default: 25) |
| is_active | boolean | optional | Filter 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
{
"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
/v1/foodics/productsRetrieve a paginated list of products (menu items) from the connected Foodics account. Supports search and category filtering.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| page_size | integer | optional | Results per page, max 50 (default: 25) |
| category_id | string | optional | Filter by category HID |
| is_active | boolean | optional | Filter by active status |
| search | string | optional | Search 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
{
"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
/v1/foodics/categoriesRetrieve a paginated list of product categories from the connected Foodics account.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| page_size | integer | optional | Results per page, max 50 (default: 25) |
| is_active | boolean | optional | Filter by active status |
Example Request
curl "https://www.jibrid.com/api/v1/foodics/categories?page=1" \
-H "Authorization: Bearer jbr_test_xxxxx"Response
{
"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
/v1/foodics/ordersRetrieve a paginated list of orders from the connected Foodics account. Supports filtering by branch, date range, and status.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| page_size | integer | optional | Results per page, max 50 (default: 25) |
| branch_id | string | optional | Filter by branch HID |
| date_from | string | optional | Filter orders from this date (YYYY-MM-DD) |
| date_to | string | optional | Filter orders to this date (YYYY-MM-DD) |
| status | string | optional | Filter 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
{
"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
/v1/foodics/customersRetrieve a paginated list of customers from the connected Foodics account. Supports search by name, email, or phone.
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| page_size | integer | optional | Results per page, max 50 (default: 25) |
| search | string | optional | Search 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
{
"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.
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"message_ar": "وصف بالعربي"
},
"meta": {
"request_id": "req_...",
"timestamp": "...",
"environment": "sandbox"
}
}| Code | HTTP | Description |
|---|---|---|
| MISSING_API_KEY | 401 | No Authorization header provided |
| INVALID_AUTH_FORMAT | 401 | Header must be: Bearer <api_key> |
| INVALID_KEY_FORMAT | 401 | Key must start with jbr_test_ or jbr_live_ |
| INVALID_API_KEY | 401 | API key not found or hash mismatch |
| KEY_DISABLED | 401 | API key has been deactivated |
| INVALID_VAT_NUMBER | 400 | VAT number must be 15 digits, starting and ending with 3 |
| MISSING_FIELD | 400 | A required field is missing from the request body |
| INVALID_INVOICE_TYPE | 400 | invoice_type must be "simplified" or "standard" |
| INVALID_DATE | 400 | Date must be in YYYY-MM-DD format |
| INVALID_TIME | 400 | Time must be in HH:MM:SS format |
| NOT_ONBOARDED | 400 | No active ZATCA credentials. Call /v1/zatca/onboard first |
| INVOICE_NOT_FOUND | 404 | Invoice ID does not exist or belongs to another org |
| ONBOARDING_FAILED | 500 | ZATCA onboarding process failed |
| INVOICE_SUBMISSION_FAILED | 500 | Invoice signing or ZATCA submission failed |
| RATE_LIMITED | 429 | Too many requests. Check X-RateLimit-* headers |
| ZATCA_UNAVAILABLE | 503 | ZATCA service temporarily unavailable. Retry later |
| QOYOD_NOT_CONNECTED | 422 | Qoyod is not connected. Connect via the dashboard first |
| QOYOD_AUTH_ERROR | 401 | Qoyod API key is invalid or expired |
| QOYOD_VALIDATION_ERROR | 400 | Qoyod rejected the request — check field errors |
| QOYOD_NOT_FOUND | 404 | Resource not found in Qoyod |
| QOYOD_RATE_LIMIT | 429 | Qoyod API rate limit exceeded. Retry after the specified time |
| QOYOD_UNAVAILABLE | 503 | Qoyod API temporarily unavailable. Retry later |
| FOODICS_NOT_CONNECTED | 422 | Foodics is not connected. Connect via the dashboard first |
| FOODICS_REQUEST_FAILED | 502 | Foodics API request failed. Retry later |
Rate Limits
API requests are rate-limited per API key based on your plan. Limits are enforced per minute.
| Plan | Requests / Month | Rate Limit |
|---|---|---|
| Free | 1,000 | 60/min |
| Pro | 1,000 | 120/min |
| Business | 10,000 | 300/min |
| Enterprise | Unlimited | Custom |
Rate Limit Headers
Every V1 API response includes rate limit headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute for your plan |
| X-RateLimit-Remaining | Approximate remaining requests in the current window |
| X-RateLimit-Reset | Unix timestamp when the rate limit window resets |
| Retry-After | Seconds 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.