Skip to content

ZATCA API Client

The HTTP client is the main way to contact ZATCA's official fatoora platform API. Please do read the ZATCA Official API Gateway for more details.

ZatcaClient

new

Create client
ZatcaClient::new(config: Config) -> Result<ZatcaClient, ZatcaError>
ZatcaClient(config: Config)
FfiResult_FfiZatcaClient fatoora_zatca_client_new(FfiConfig* config);

post_csr_for_ccsid

Issue compliance CSID
ZatcaClient::post_csr_for_ccsid(csr: &Csr, otp: &str) -> Result<CsidCredentials<Compliance>, ZatcaError>
ZatcaClient.post_csr_for_ccsid(csr: Csr, otp: str) -> CsidCompliance
FfiResult_FfiCsidCompliance fatoora_zatca_post_csr_for_ccsid(FfiZatcaClient* client, FfiCsr* csr, const char* otp);

post_ccsid_for_pcsid

Issue production CSID
ZatcaClient::post_ccsid_for_pcsid(ccsid: &CsidCredentials<Compliance>) -> Result<CsidCredentials<Production>, ZatcaError>
ZatcaClient.post_ccsid_for_pcsid(ccsid: CsidCompliance) -> CsidProduction
FfiResult_FfiCsidProduction fatoora_zatca_post_ccsid_for_pcsid(FfiZatcaClient* client, FfiCsidCompliance* ccsid);

renew_csid

Renew production CSID
ZatcaClient::renew_csid(pcsid: &CsidCredentials<Production>, csr: &Csr, otp: &str, accept_language: Option<&str>) -> Result<CsidCredentials<Production>, ZatcaError>
ZatcaClient.renew_csid(pcsid: CsidProduction, csr: Csr, otp: str, accept_language: Optional[str]) -> CsidProduction
FfiResult_FfiCsidProduction fatoora_zatca_renew_csid(FfiZatcaClient* client, FfiCsidProduction* pcsid, FfiCsr* csr, const char* otp, const char* accept_language);

check_invoice_compliance

Check invoice compliance
ZatcaClient::check_invoice_compliance(invoice: &SignedInvoice, credentials: &CsidCredentials<Compliance>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient.check_invoice_compliance(invoice: SignedInvoice, ccsid: CsidCompliance) -> ValidationResponse
FfiResult_FfiValidationResponse fatoora_zatca_check_invoice_compliance(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidCompliance* ccsid);

report_simplified_invoice

Report simplified invoice
ZatcaClient::report_simplified_invoice(invoice: &SignedInvoice, credentials: &CsidCredentials<Production>, clearance_status: bool, accept_language: Option<&str>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient.report_simplified_invoice(invoice: SignedInvoice, pcsid: CsidProduction, clearance_status: bool, accept_language: Optional[str]) -> ValidationResponse
FfiResult_FfiValidationResponse fatoora_zatca_report_simplified_invoice(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidProduction* pcsid, bool clearance_status, const char* accept_language);

clear_standard_invoice

Clear standard invoice
ZatcaClient::clear_standard_invoice(invoice: &SignedInvoice, credentials: &CsidCredentials<Production>, clearance_status: bool, accept_language: Option<&str>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient.clear_standard_invoice(invoice: SignedInvoice, pcsid: CsidProduction, clearance_status: bool, accept_language: Optional[str]) -> ValidationResponse
FfiResult_FfiValidationResponse fatoora_zatca_clear_standard_invoice(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidProduction* pcsid, bool clearance_status, const char* accept_language);

CsidCredentials / CsidCompliance / CsidProduction

new

Create credential handle
CsidCredentials::new(env: EnvironmentType, request_id: Option<String>, token: impl Into<String>, secret: impl Into<String>) -> CsidCredentials<T>
CsidCompliance.new(env: Environment, token: str, secret: str, request_id: Optional[str] = None) -> CsidCompliance
CsidProduction.new(env: Environment, token: str, secret: str, request_id: Optional[str] = None) -> CsidProduction
FfiResult_FfiCsidCompliance fatoora_csid_compliance_new(FfiEnvironment env, const char* request_id, const char* token, const char* secret);
FfiResult_FfiCsidProduction fatoora_csid_production_new(FfiEnvironment env, const char* request_id, const char* token, const char* secret);

env

Read credential environment
CsidCredentials::env(&self) -> EnvironmentType
CsidCompliance.env() -> Environment
CsidProduction.env() -> Environment
FfiResult_FfiEnvironment fatoora_csid_compliance_env(FfiCsidCompliance* creds);
FfiResult_FfiEnvironment fatoora_csid_production_env(FfiCsidProduction* creds);

request_id

Read optional request id
CsidCredentials::request_id(&self) -> Option<&str>
CsidCompliance.request_id() -> str
CsidProduction.request_id() -> str
FfiResult_FfiString fatoora_csid_compliance_request_id(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_production_request_id(FfiCsidProduction* creds);

binary_security_token

Read token
CsidCredentials::binary_security_token(&self) -> &str
CsidCompliance.binary_security_token() -> str
CsidProduction.binary_security_token() -> str
FfiResult_FfiString fatoora_csid_compliance_binary_security_token(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_production_binary_security_token(FfiCsidProduction* creds);

secret

Read credential secret
CsidCredentials::secret(&self) -> &str
CsidCompliance.secret() -> str
CsidProduction.secret() -> str
FfiResult_FfiString fatoora_csid_compliance_secret(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_production_secret(FfiCsidProduction* creds);

Response Types

Response shapes

  • ValidationResponse exposes validation_results(), reporting_status(), clearance_status(), and QR status fields.
  • ValidationResults exposes info_messages(), warning_messages(), error_messages(), and status().
  • ValidationMessage exposes type, code, category, message, and status fields.
  • MessageList normalizes info messages that may be one, many, or empty.
  • UnauthorizedResponse and ServerErrorResponse provide structured error bodies.

Errors

Errors

  • ZatcaError is returned for HTTP failures, invalid responses, unauthorized/server errors, and client-state mismatches (environment, invoice type, etc.).

See also: API Client Guide