{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"838de86a-797a-47b7-bf5f-795c33a26fbf","name":"Pasca Technology E-Invoicing","description":"# **Getting Started with PASCA**\n\nWelcome to PASCA! This comprehensive guide will walk you through the complete process of setting up your account and effectively using our invoice management system. Whether you're focused on sending or receiving invoices, our platform is designed to provide a seamless and efficient experience.\n\n## **Initial Setup Process**\n\n### **Step 1: Account Registration and Onboarding**\n\nYour journey begins with creating your PASCA account and completing our guided onboarding process. During this phase, you will provide essential business information and configure your initial account settings. This foundational step is crucial as it establishes your unique identity and operational parameters within the Federal Inland Revenue Service (FIRS) ecosystem.\n\n### **Step 2: Select PASCA as Your Access Point (APP2)**\n\nUpon successful completion of your onboarding, navigate to your FIRS Multi-Business Solution (MBS) dashboard. Here, you are required to select PASCA as your designated Access Point Provider (APP2). This is a critical and mandatory step; without explicitly choosing PASCA as your APP, you will be unable to exchange invoices through our system. Consider this action as formally informing FIRS that PASCA is your chosen gateway for all electronic invoice-related communications.\n\n### **Step 3: Retrieve Your API Credentials**\n\nAccess your dedicated PASCA dashboard to securely obtain your unique API Key and Client Secret. These credentials serve as your digital keys, granting programmatic access to our services. It is paramount to keep these credentials highly secure and never share them publicly, as they are essential for authenticating all your requests to our system.\n\n### **Step 4: Configure Your Webhook**\n\nTo facilitate the automatic reception of incoming invoice notifications and data, you must set up and configure your webhook URL within your PASCA account settings. This configuration instructs our system precisely where to send invoice notifications when you receive them from other businesses. Ensure your designated webhook endpoint is properly configured and robust enough to reliably handle incoming data payloads.\n\n# **Authentication**\n\nOur API utilizes a secure API Key and Client Secret for authenticating your requests. Once retrieved from your PASCA dashboard (as described in Step 3 of the Initial Setup Process), these credentials must be included in the headers of your API calls.\n\nTypically, authentication is handled by including your API Key and Client Secret in specific HTTP headers, such as:\n\n- API-Key: \\[Your API Key\\]\n    \n- API-Secret: \\[Your Client Secret\\]\n    \n\nAlways consult the specific API endpoint documentation (e.g., in the Postman Collection) for the exact header names and values required for each request.\n\n# **Response Codes and Structures**\n\nOur API adheres to standard HTTP response codes to indicate the success or failure of an API request, along with the nature of the outcome. All API responses are returned in JSON (JavaScript Object Notation) format, providing a structured and easily parseable data payload.\n\n### **Common HTTP Response Codes:**\n\n**2xx Success:**\n\n- 200 OK: The request was successful, and the requested data is in the response body.\n    \n- 201 Created: The request was successful, and a new resource was created.\n    \n- 204 No Content: The request was successful, but there is no content to return (e.g., a successful deletion).\n    \n\n**4xx Client Error:**\n\n- 400 Bad Request: The server cannot process the request due to a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).\n    \n- 401 Unauthorized: The request requires user authentication.\n    \n- 403 Forbidden: The server understood the request but refuses to authorize it.\n    \n- 404 Not Found: The requested resource could not be found on the server.\n    \n- 422 Unprocessable Entity: The server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions (often due to validation errors).\n    \n\n**5xx Server Error:**\n\n- 500 Internal Server Error: A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.\n    \n- 503 Service Unavailable: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.\n    \n\n### **Response Structure:**\n\nSuccessful responses will typically include the requested data within a JSON object. Error responses will generally include a message field describing the error and sometimes an errors object with more specific details (e.g., validation failures).\n\n**Example Success Response (JSON):**\n\n`{ \"status\": \"success\",`  \n`\"code\": 200 \"message\": \"Invoice signed successfully.\", \"data\": { \"irn\": \"INV001-ED78DUD-20250912\", \"accounting_supplier_party\": \"...\" } }`\n\n**Example Error Response (JSON):**\n\n`{ \"status\": \"error\", \"message\": \"Validation failed.\", \"errors\": { \"irn\": [\"The IRN field is required.\"], \"amount\": [\"The amount must be a positive number.\"] } }`\n\n## **Invoice Management Workflow**\n\nWith your account now fully set up, you can proceed to manage your invoices efficiently using our API endpoints:\n\n### **A. Validate Invoice Reference Number (IRN) - Optional but Recommended**\n\nBefore processing any invoice, you have the option to validate your Invoice Reference Number. This endpoint ensures that your IRN adheres to the correct and expected format: Invoice Reference – Service ID – DateStamp. This proactive validation step helps in identifying and rectifying formatting errors early in your process, preventing potential issues downstream.\n\n### **B. Validate Invoice Schema - Optional but Recommended**\n\nThis endpoint allows for a comprehensive validation of your entire invoice structure and content prior to its final submission. It rigorously checks that all required fields are present, correctly formatted, and conform to the stringent FIRS standards. Utilizing this validation can significantly save time and resources by catching structural or data-related errors before they escalate into larger problems.\n\n### **C. Sign Your Invoice**\n\nOnce your invoice has been properly formatted and validated, the next crucial step is to digitally sign it with FIRS. This action applies an official, cryptographic digital signature to your invoice, rendering it legally valid and authentic for subsequent transmission within the FIRS ecosystem.\n\n### **D. Transmit Your Invoice**\n\nFollowing the signing process, you can proceed to transmit your invoice to the recipient's system. The transmission mechanism operates from your designated Access Point Provider (PASCA) directly to the customer's Access Point Provider.\n\n**Important Note on Transmission**: Should the recipient's system be temporarily unavailable or unresponsive, our robust system is equipped with an automated retry mechanism. It will automatically attempt to re-transmit the invoice every 6 hours, for a maximum of 4 retry attempts. If, after all automated retries, the invoice still cannot be successfully delivered, you will be required to manually contact the customer directly to resolve the underlying issue and facilitate delivery.\n\n### **E. Sign and Transmit in One Step**\n\nFor those seeking a more streamlined and simplified integration, we offer a combined endpoint that performs both the digital signing and immediate transmission of your invoice in a single API call. This consolidated approach is ideal for reducing complexity in your integration process.\n\n### **F. Update Payment Status**\n\nAfter the customer has successfully received and processed your invoice, our system allows you to update its payment status. The available status options are:\n\n- **PENDING**: Indicates that payment is expected but has not yet been received.\n    \n- **PAID**: Confirms that the payment for the invoice has been successfully completed.\n    \n- **REJECTED**: Signifies that the invoice has been declined or disputed by the recipient.\n    \n\n# **Receiving Invoices**\n\nSetting up your system to seamlessly receive invoices through PASCA is a straightforward process:\n\n### **Step 1: Webhook Configuration**\n\nEnsure your webhook is properly configured (as detailed in Step 4 of the Initial Setup Process). This configured endpoint is where PASCA will securely send all incoming invoice data destined for your system.\n\n### **Step 2: Access Point Selection**\n\nIt is imperative to confirm that PASCA remains selected as your Access Point Provider (APP4) in your FIRS MBS dashboard. This ensures that all invoices directed to your entity are correctly routed and processed through our system.\n\n### **Step 3: Automatic Invoice Delivery**\n\nWhen another party sends an invoice to you via the FIRS ecosystem, PASCA will automatically decrypt the invoice data and securely deliver the complete invoice payload to your configured webhook endpoint. You will receive all the invoice details in a structured JSON format that your system can easily parse and process.\n\n## **Best Practices**\n\nTo ensure optimal performance and a smooth experience with PASCA, we recommend the following best practices:\n\n- Validate Before Signing: Always utilize the optional validation endpoints for both IRN and invoice schema before signing to proactively identify and correct errors.\n    \n- Secure Credentials: Keep your API credentials highly secure and implement a regular rotation policy for your API keys and client secrets.\n    \n- Monitor Webhook: Continuously monitor your webhook endpoint to ensure it is always available and capable of receiving incoming data without interruption.\n    \n- Thorough Testing: Always conduct comprehensive testing of your integration in a dedicated development or staging environment before deploying to a live production environment.\n    \n- Seek Support: If you encounter any issues during setup, integration, or while using our services, do not hesitate to contact our dedicated support team.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"41657148","team":6740602,"collectionId":"838de86a-797a-47b7-bf5f-795c33a26fbf","publishedId":"2sB2qXm3gP","public":true,"publicUrl":"https://documenter-api.postman.tech/view/41657148/2sB2qXm3gP","privateUrl":"https://go.postman.co/documentation/41657148-838de86a-797a-47b7-bf5f-795c33a26fbf","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2025-05-19T14:22:35.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/53cc8814e84ecff6a9e812ed521992e6bd516eb03aba8fc2ac511cfaf1e1668f","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sB2qXm3gP"}