msiam  
                
                  
                    December 17, 2022, 12:45pm
                   
                  1 
               
             
            
              Dear All
Sample Request:
{
Sample Response:
{
how i can do this
             
            
              
           
          
            
              
                avc  
              
                  
                    December 17, 2022,  1:20pm
                   
                  2 
               
             
            
              Hi:
You need to manage this connection with a backend method in Python. Call external API using requests library:
import requests
def get_data_from_api(url):
  response = requests.get(url)
  data = response.json()
  return data
Note that maybe you need some authentication work before … and you will need to extract data properly and fit it in your doctype …
Inserting data is easy with frappe API methods.
doc = frappe.new_doc('Your doctype)
doc.yourfield1 = 'Your data1'
doc.yourfield2 = 'Your data2'
doc.insert()
Here some inspiration:
  
  
    
      # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
import frappe
import requests
from frappe import _
from frappe.model.document import Document
from frappe.utils import nowdate
class CurrencyExchangeSettings(Document):
	def validate(self):
		self.set_parameters_and_result()
		if frappe.flags.in_test or frappe.flags.in_install or frappe.flags.in_setup_wizard:
			return
		response, value = self.validate_parameters()
		self.validate_result(response, value)
	def set_parameters_and_result(self):
		if self.service_provider == "exchangerate.host":
show original 
   
  
    
    
  
  
 
  
  
    
      # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
import frappe
import requests
from frappe import _
from frappe.model.document import Document
from frappe.utils import nowdate
class CurrencyExchangeSettings(Document):
	def validate(self):
		self.set_parameters_and_result()
		if frappe.flags.in_test or frappe.flags.in_install or frappe.flags.in_setup_wizard:
			return
		response, value = self.validate_parameters()
		self.validate_result(response, value)
	def set_parameters_and_result(self):
		if self.service_provider == "exchangerate.host":
show original 
   
  
    
    
  
  
 
Hope this helps.
             
            
              1 Like 
            
           
          
            
            
              All this time I was scared of API integrations and never tried to learn it. Recently I took the effort and help from the community to learn API integration and it was freakin easy.
@avc  has provided a good example.
Here is a little project I did with APIs
import frappe
import time
import asyncio
import requests
from requests.auth import HTTPBasicAuth
from requests.exceptions import HTTPError
enable = frappe.db.get_single_value('Razorpay API Settings', 'enable')
key_id = frappe.db.get_single_value('Razorpay API Settings', 'key_id')
key_secret = frappe.db.get_single_value('Razorpay API Settings', 'key_secret')
from_account = frappe.db.get_single_value('Razorpay API Settings', 'account_number')
auth = HTTPBasicAuth('apikey', 'apisecret')
def payout_composite_bank_account(**payout_info):
    ## Documentation : https://razorpay.com/docs/api/x/payout-composite ##
    # mode = "NEFT"
    # amount =  round(1, 2) * 100
    # purpose = "payout"
    # account_name = "ZARNIK HOTEL SUPPLIES PRIVATE LIMITED"
    # account_number = "2339261005253"
    # account_ifsc = "CNRB0002339"
    # contact_name = "Rahul Jayan"
    # contact_email = "rahul@zarnik.com"
    # contact_mobile = "7736060114"
    # contact_type = "vendor"
    # contact_reference = "V00023"
    # payment_reference = "TEST"
    # narration = "TEST"
    mode = str(payout_info["mode"])
    amount = int(float(payout_info["amount"]) * 100)
    purpose = str(payout_info["purpose"]) 
    account_name = str(payout_info["account_name"]) 
    account_number = str(payout_info["account_number"]) 
    account_ifsc = str(payout_info["account_ifsc"] )
    contact_name = str(payout_info["contact_name"]) 
    # contact_email = str(payout_info["contact_email"])
    # contact_mobile = str(payout_info["contact_mobile"]) 
    contact_type = str(payout_info["contact_type"])
    contact_reference = str(payout_info["contact_reference"]).replace("-"," ")
    payment_reference = str(payout_info["payment_reference"]) .replace("-"," ")
    narration = str("ZARNIK " + str(payout_info["contact_reference"]).replace("-"," ") + " " + str(payout_info["payment_reference"]).replace("-"," "))
    url = "https://api.razorpay.com/v1/payouts"
    headers = {"X-Payout-Idempotency" : ""}
    payload = {
            "mode": mode,
            "amount": amount,
            "purpose": purpose,                         
            "currency": "INR",
            "narration": narration,
            "fund_account": {
                "account_type": "bank_account",
                "bank_account": {
                    "name": account_name,
                    "ifsc": account_ifsc,
                    "account_number": account_number
                },
                "contact": {
                    "name": contact_name,
                    # "email": contact_email,
                    # "contact": contact_mobile,
                    "type": contact_type,
                    "reference_id": contact_reference
                }
            },
            "reference_id": payment_reference,
            "account_number": str(from_account),
            "queue_if_low_balance": bool(1)
            }
    if enable == 1:
        try:
            response = requests.request("POST", url, auth=auth, headers=headers, json=payload)
            print(response.text)
            return response
        except HTTPError as http_err:
            frappe.log_error(message=f'{http_err}',title="RazorpayX HTTP Error")
            print(response.text)
            return response
        except Exception as err:
            frappe.log_error(message=f'{err}',title="Razorpayx Payout Composit API Error")
            print(response.text)
            return response
def fetch_transaction_by_id(payout_id="xyz"):
    ## Documentation : https://razorpay.com/docs/api/x/transactions#fetch-transaction-by-id ##
    if enable == 1:
        if payout_id:
            try:
                url = "https://api.razorpay.com/v1/payouts/"+payout_id
                response = requests.request("GET", url, auth=auth)
                print(response.json())
                return response
            except HTTPError as http_err:
                frappe.log_error(message=f'{http_err}',title=f'RazorpayX HTTP Error: {payment_order}')
                print(response.json())
                return response
            except Exception as err:
                frappe.log_error(message=f'{err}',title=f'RazorpayX: {payment_order}')
                print(response.json())
                return response
 
            
              4 Likes 
            
           
          
            
              
                shtorky  
              
                  
                    December 18, 2022,  9:12pm
                   
                  4 
               
             
            
              Is there any way to link attendance application (paypagar) with erpnext
             
            
              
           
          
            
              
                avc  
              
                  
                    December 18, 2022,  9:27pm
                   
                  5 
               
             
            
              Hi:
If the software to connect have any mechanism like API endpoint, database, exported file … to get data from  or send data to … then you can connect it (technically at least …)
Anyway, i can’t found any information about Paypagar (seems just a mobile app …?).
Hope this helps.
             
            
              
           
          
            
              
                shtorky  
              
                  
                    December 19, 2022,  6:42am
                   
                  6 
               
             
            
              Yes a mobile app with live location to take the attend for the employees outside
             
            
              
           
          
            
            
              You will have to ask the company if they have APIs
             
            
              1 Like 
            
           
          
            
            
              Has anyone coded an API call to a service using OAuth2?
I’d love some pointers in this regard. Thanks so much.
             
            
              
           
          
            
            
              Can you please give some idea on how erpnext and DELMIA Works IQMS application can be integrated. Delmia Works has WEB api. I want to integrate that api with ERPnext. Kindly give some ideas to achieve this.
             
            
              
           
          
            
            
              Hey Azhar,
             
            
              
           
          
            
            
              @SrinivasanS2307  Please DM me, we can discuss on WhatsApp or Call.