ZATCA API Client¶
HTTP client for the ZATCA endpoints, plus response models.
Client¶
Create client
Create a ZATCA client from config.
ZatcaClient::new(config: Config) -> Result<ZatcaClient, ZatcaError>
ZatcaClient(config: Config)
FfiResult_FfiZatcaClient fatoora_zatca_client_new(FfiConfig* config);
Args
config: environment config handle.
Returns
ZatcaClient: configured client.
CSID flows
Issue and renew credentials.
ZatcaClient::post_csr_for_ccsid(csr: &Csr, otp: &str) -> Result<CsidCredentials<Compliance>, ZatcaError>
ZatcaClient::post_ccsid_for_pcsid(ccsid: &CsidCredentials<Compliance>) -> Result<CsidCredentials<Production>, ZatcaError>
ZatcaClient::renew_csid(pcsid: &CsidCredentials<Production>, csr: &Csr, otp: &str, accept_language: Option<&str>) -> Result<CsidCredentials<Production>, ZatcaError>
ZatcaClient.post_csr_for_ccsid(csr: Csr, otp: str) -> CsidCompliance
ZatcaClient.post_ccsid_for_pcsid(ccsid: CsidCompliance) -> CsidProduction
ZatcaClient.renew_csid(pcsid: CsidProduction, csr: Csr, otp: str, accept_language: Optional[str]) -> CsidProduction
FfiResult_FfiCsidCompliance fatoora_zatca_post_csr_for_ccsid(FfiZatcaClient* client, FfiCsr* csr, const char* otp);
FfiResult_FfiCsidProduction fatoora_zatca_post_ccsid_for_pcsid(FfiZatcaClient* client, FfiCsidCompliance* ccsid);
FfiResult_FfiCsidProduction fatoora_zatca_renew_csid(FfiZatcaClient* client, FfiCsidProduction* pcsid, FfiCsr* csr, const char* otp, const char* accept_language);
Args
csr: CSR object.otp: one-time password from ZATCA portal.accept_language: optional language header.
Returns
CsidCompliance/CsidProduction: credential handles.
Invoice endpoints
Compliance check, reporting, and clearance.
ZatcaClient::check_invoice_compliance(invoice: &SignedInvoice, credentials: &CsidCredentials<Compliance>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient::report_simplified_invoice(invoice: &SignedInvoice, credentials: &CsidCredentials<Production>, clearance_status: bool, accept_language: Option<&str>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient::clear_standard_invoice(invoice: &SignedInvoice, credentials: &CsidCredentials<Production>, clearance_status: bool, accept_language: Option<&str>) -> Result<ValidationResponse, ZatcaError>
ZatcaClient.check_compliance(invoice: SignedInvoice, ccsid: CsidCompliance) -> ValidationResponse
ZatcaClient.report_simplified_invoice(invoice: SignedInvoice, pcsid: CsidProduction, clearance_status: bool, accept_language: Optional[str]) -> ValidationResponse
ZatcaClient.clear_standard_invoice(invoice: SignedInvoice, pcsid: CsidProduction, clearance_status: bool, accept_language: Optional[str]) -> ValidationResponse
FfiResult_FfiValidationResponse fatoora_zatca_check_compliance(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidCompliance* ccsid);
FfiResult_FfiValidationResponse fatoora_zatca_report_simplified_invoice(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidProduction* pcsid, bool clearance_status, const char* accept_language);
FfiResult_FfiValidationResponse fatoora_zatca_clear_standard_invoice(FfiZatcaClient* client, FfiSignedInvoice* invoice, FfiCsidProduction* pcsid, bool clearance_status, const char* accept_language);
Args
invoice: signed invoice handle.ccsid/pcsid: compliance or production credentials.clearance_status: request clearance status in response.accept_language: optional language header.
Returns
ValidationResponse: structured response with statuses and messages.
Credentials¶
Credential helpers
Build and inspect credential handles.
CsidCredentials::new(env: EnvironmentType, request_id: Option<String>, token: impl Into<String>, secret: impl Into<String>) -> CsidCredentials<T>
CsidCredentials::env(&self) -> EnvironmentType
CsidCredentials::request_id(&self) -> Option<&str>
CsidCredentials::binary_security_token(&self) -> &str
CsidCredentials::secret(&self) -> &str
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
CsidCompliance.env() -> Environment
CsidCompliance.request_id() -> str
CsidCompliance.token() -> str
CsidCompliance.secret() -> str
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);
FfiResult_FfiEnvironment fatoora_csid_compliance_env(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_compliance_request_id(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_compliance_token(FfiCsidCompliance* creds);
FfiResult_FfiString fatoora_csid_compliance_secret(FfiCsidCompliance* creds);
FfiResult_FfiEnvironment fatoora_csid_production_env(FfiCsidProduction* creds);
FfiResult_FfiString fatoora_csid_production_request_id(FfiCsidProduction* creds);
FfiResult_FfiString fatoora_csid_production_token(FfiCsidProduction* creds);
FfiResult_FfiString fatoora_csid_production_secret(FfiCsidProduction* creds);
Args
env: target environment.token/secret: credential values.request_id: optional request ID.
Returns
- credential handles and field accessors.
Response Types¶
Response shapes
ValidationResponseexposes validation_results(), reporting_status(), clearance_status(), and QR status fields.ValidationResultsexposes info_messages(), warning_messages(), error_messages(), and status().ValidationMessageexposes type, code, category, message, status fields.MessageListnormalizes info messages that may be one, many, or empty.UnauthorizedResponseandServerErrorResponseprovide structured error bodies.
Errors
ZatcaErroris returned for HTTP failures, invalid responses, unauthorized/server errors, and client-state mismatches (environment, invoice type, etc.).
See also: API Client Guide