Webhooks

Stay up to date with the latest events in your Okra apps with webhooks


Overview

Webhooks provide real-time notifications when important events take place in your Okra app. You can subscribe to these events by setting up a webhook URL and receive notifications to your system in simple JSON payloads.

Webhook responses correspond to the Okra products that you enable in your Okra app. Some examples when Okra sends webhook notifications:

  • a user successfully connects their account
  • a user's account needs reauthentication
  • an identity profile is ready

Use these notifications for tasks that require a response via the API, such as asynchronous requests, retries, or any other operation that needs processing on the backend of your application.

How to use

Okra recommends that you follow this workflow to ensure a smooth flow of information in your app:

  1. Ensure that your app can receive webhooks
  2. Subscribe to webhooks to receive event notifications and up-to-date data
  3. Check that your integration follows the best practices

Receiving events

To receive event notifications from Okra, you simply need to open an unauthenticated POST route in your application. The Okra API sends event notifications as a JSON payload in the request body.

Sample code for receiving events in NodeJs and PHP:

// Using Express
app.post("/your/webhook/url", function(req, res) {
    // Retrieve the request's body
    const event = req.body;
    // Do something with event
    res.send(200);
});
<?php
// Retrieve the request's body and parse it as JSON
$input = @file_get_contents("php://input");
$event = json_decode($input);
// Do something with $event
http_response_code(200); // PHP 5.4 or higher
?>

Subscribe to webhooks

You can subscribe to webhook notifications in 3 ways:

In the App Builder

Add your preferred webhook URL to the callback_url field in the App Builder when building your Okra app. Okra uses this URL to deliver event notifications about all products as POST requests. Using this subscription method, you can define an app-level webhook URL.

You can define this URL in both the Quick link and the Full customization options in the App Builder. Check out the Customization guide for more details.

In the Dashboard

Set up your preferred webhook URL on the Webhooks page in the Dashboard. Okra uses this URL to deliver event notifications about all products as POST requests. Using this subscription method, you can define a project-level webhook URL.

  1. On the Configuration tab, select your preferred API environment.
  2. Add your URL that receives event notifications
  3. Add your secret API key as the bearer token and Save your changes.
When building with options

You can programmatically add your preferred webhook URL using the callback_url app property. Okra uses this URL to deliver event notifications about all products as POST requests. Using this subscription method, you can define an app-level webhook URL.

Visit the Embed your app guide to learn more about this integration option, and check out the available Okra app properties.

Webhook levels

Okra provides webhooks on 2 levels: app and project.

App-level means that Okra sends notifications to your preferred webhook URL only about a specific Okra app. This enables you to define different webhook URLs for different apps, giving you more flexibility when working with multiple app integrations.

Project-level means that Okra sends notifications to your preferred webhook URL about every Okra app in your active project.

Webhook priority

The Okra API always tries sending webhooks to app-level webhook URLs first.

  • If you do not define an app-level webhook URL, the API tries sending the webhooks again to the project-level URL.
  • If you do not define a project-level webhook URL, the Okra API does not try sending the webhooks again.

Payment webhooks

These are the available Payments webhook events:

  • PAYMENT_SUCCESS

  • PAYMENT_FAILED

  • PAYMENT_CANCELLED

When a payment fails, you can find the detailed reason for the failure in the PAYMENT_FAILED webhook payload's payment.error object.

This object contains the error code and the error message fields that help you determine the exact cause why a specific payment failed. payment.error.message can contain information directly provided by the bank.

Check out the Payment errors reference for more details.

Sample Payment webhook responses

You can check sample Payment webhook responses here.
{
	"method":"PAYMENT",
	"callback_type":"PAYMENT",
	"callback_code":"PAYMENT_SUCCESS",
	"type":"CALLBACK",
	"code":"PAYMENT_SUCCESS",
	"callbackURL":"https://webhook.site/2b163e2a-d006-425d-8491-4b2d57039598",
	"env":"production",
	"status":"is_success",
	"started_at":"2023-09-25T15:17:42.700Z",
	"ended_at":"2023-09-25T15:19:34.190Z",
	"message":"Successfully fetched payment",
	"error":"",
	"accountId":"16c3db98100ba0f440d57c05",
	"options":{
		
	},
	"meta":{
		
	},
	"bankName":"United Bank For Africa",
	"bankType":"1d6fe57a4099cc4b210bbebb",
	"bankId":"1d6fe57a4099cc4b210bbebb",
	"bankSlug":"united-bank-for-africa",
	"record":"1511a4961476ad00421119a3",
	"recordId":"1511a4961476ad00421119a3",
	"callback_url":"https://api.okra.ng/v2/callback?record=1511a4961476ad00421119a3&method=PAYMENT",
	"login_type":"web",
	"country":"NG",
	"extras":{
		
	},
	"garnishment":{
		"amount_collected":10000
	},
	"schedule":{
		"current_amount":0,
		"paymentId":"1511a4acba3a63866e2e3ee9"
	},
	"paymentId":"1511a4acba3a63866e2e3ee9",
	"link":{
		"_id":"14e87b7506d6fc2a57fc1aa3",
		"amount":10000,
		"type":"one-time",
		"short_url":"Y2tzm84cf",
		"url":"https://pay.dev.okra.ng/Y2tzm84cf"
	},
	"payment":{
		"_id":"1511a4acba3a63866e2e3ee9",
		"record":"1511a4551476ad00427379a3",
		"amount":10000,
		"available_balance":null,
		"bank":"1d6fe32a4099cc4b210bbebb",
		"bank_response":{
			"success":true,
			"msg":"Your account ending in 5888 has been successfully charged"
		},
		"created_at":"2023-09-25T15:18:04.185Z",
		"credit_account":"150988850817be83d4b61bc2",
		"currency":"NGN",
		"current_project":"12207f16da47873727a94610",
		"debit_account":"14c3db98100ba0f440d57c05",
		"email":null,
		"env":"production",
		"error":null,
		"error_response":null,
		"fee":26.88,
		"last_updated":"2023-09-25T15:19:33.460Z",
		"link":"14e87b7236d6fc2a57fc1aa3",
		"meta":{
			
		},
		"meta_responses":null,
		"owner":"1d9118ea182d3d000cb7c486",
		"ref":"OKRA, INC via OKR PAY Ref FZlhJ0c",
		"refund":null,
		"schedule":{
			"startDate":null,
			"endDate":null
		},
		"source":"link",
		"status":"success",
		"type":"transfer",
		"receipt":"1534a4d21476ad00427379df",
		"customer":"1425220a3bd4390012d6b365"
	},
	"isRefund":false,
	"nuban":"1110945961"
}
{
		"method":"PAYMENT",
		"callback_type":"PAYMENT",
		"callback_code":"PAYMENT_FAILED",
		"type":"CALLBACK",
		"code":"PAYMENT_FAILED",
		"callbackURL":"https://example.com/webhooks/payments",
		"env":"production",
		"status":"is_failed",
		"started_at":"2023-11-16T15:24:39.209Z",
		"ended_at":"2023-11-16T15:25:44.775Z",
		"message":"Error fetching payment!",
		"error":"Error From Bank: Error: Invalid Username or Password Please Try Again",
		"options":{
			"transaction_id":1110689418302
		},
		"meta":{
			"transaction_id":1110689418302
		},
		"bankName":"Guaranty Trust Bank",
		"bankType":"5d6fe57a4099cc4b210bbeb3",
		"bankId":"5d6fe57a4099cc4b210bbeb3",
		"bankSlug":"guaranty-trust-bank",
		"record":"6556343794f3c6003ae9103d",
		"recordId":"6556343794f3c6003ae9103d",
		"callback_url":"https://api.okra.ng/v2/callback?record=1156343794f3c6003ae9103d&method=PAYMENT",
		"login_type":"app",
		"country":"NG",
		"extras":{},
		"garnishment":{
			"amount_collected":0
		},
		"schedule":{
			"current_amount":0,
			"paymentId":"11563466550cc14d863d81ef"
		},
		"paymentId":"11563466550cc14d863d81ef",
		"link":{
			"_id":"11562fd063b5a3003a28a98e",
			"amount":1589030,
			"type":"one-time",
			"url":"https://pay.okra.ng/abcdAtMjD",
			"short_url":"abcdAtMjD"
		},
		"payment":{
			"_id":"11563466550cc14d863d81ef",
			"record":"1156343794f3c6003ae9103d",
			"amount":1589030,
			"available_balance":null,
			"bank":"5d6fe57a4099cc4b210bbeb3",
			"bank_response":null,
			"created_at":"2023-11-16T15:25:26.275Z",
			"credit_account":"111660fbb561088b64f38aab",
			"currency":"NGN",
			"current_project":"11f633889e64635f2629e252",
			"debit_account":null,
			"email":null,
			"env":"production",
			"error":{
				"type":"error",
				"error":true,
				"status":false,
				"code":1053,
				"method":"Payment error - Unable to process",
				"message":"Error from Bank: Error: Invalid Username or Password Please Try Again"
			},
			"error_response":{
				"success":false,
				"msg":"Error: INVALID USERNAME OR PASSWORD Please try again"
			},
			"fee":53.75,
			"last_updated":"2023-11-16T15:25:44.721Z",
			"link":"11562fd063b5a3003a28a98e",
			"meta":{
				"transaction_id":1110689418302
			},
			"meta_responses":null,
			"owner":"5fd207192d33eb209ceee978",
			"ref":"This is a payment ref",
			"refund":null,
			"schedule":{
				"startDate":null,
				"endDate":null
			},
			"source":"link",
			"status":"error",
			"type":"transfer"
		},
		"isRefund":false
	}
{
	"method":"PAYMENT",
	"callback_type":"PAYMENT",
	"callback_code":"PAYMENT_CANCELLED",
	"type":"CALLBACK",
	"code":"PAYMENT_CANCELLED",
	"env":"production",
	"status":"is_cancelled",
	"started_at":"2023-09-08T08:49:12.425Z",
	"ended_at":"2023-09-08T08:50:07.741Z",
	"message":"payment cancelled",
	"error":"",
	"accountId":"1498d3f7697aaf7019a4db6a",
	"options":{
		
	},
	"meta":{
		
	},
	"bankName":"Access Bank",
	"bankType":"1d6fe57a4099cc4b210bbec0",
	"bankId":"1d6fe57a4099cc4b210bbec0",
	"bankSlug":"access-bank",
	"record":"14fae008080a7e004576cb2d",
	"recordId":"14fae008080a7e004576cb2d",
	"callback_url":"https://api.okra.ng/v2/callback?record=14fae008080a7e004576cb2d&method=PAYMENT",
	"login_type":"app",
	"country":"NG",
	"extras":{
		
	},
	"garnishment":{
		"amount_collected":0
	},
	"schedule":{
		"current_amount":0,
		"paymentId":"14fae02860fb365271bdd18d"
	},
	"paymentId":"14fae02860fb365271bdd18d",
	"payment":{
		"amount":10500,
		"fee":26.88,
		"projects":[
			
		],
		"type":"transfer",
		"_id":"14fae02860fb365271bdd18d",
		"record":"14fae008080a7e004576cb2d",
		"__v":0,
		"available_balance":null,
		"bank":"1d6fe57a4099cc4b210bbec0",
		"bank_response":null,
		"created_at":"2023-09-08T08:49:44.730Z",
		"credit_account":"10a3bc792ba83b658736cd46",
		"currency":"NGN",
		"current_project":"10507f16da47873727a94610",
		"debit_account":"1498d3f7697aaf7019a4db6a",
		"email":null,
		"env":null,
		"error":null,
		"error_response":null,
		"last_updated":"2023-09-08T08:50:04.756Z",
		"link":null,
		"meta_responses":null,
		"owner":"1d9288ea182d3d000cb7c486",
		"ref":"OKRA, INC via OKR PAY Ref 4Hf-1Ig",
		"refund":null,
		"schedule":null,
		"source":"integration",
		"status":"cancelled",
		"receipt":"14fae02e080a7e004576cb6f",
		"customer":"14247efe8e3711362e9ef0ab"
	},
	"isRefund":false,
	"callbackURL":"https://webhook.site/1b363e2a-d006-425d-8491-4b2d57039598"
}

Data webhooks

See this table for a list of available webhook events for Okra's Data products:

ProductsEvents
AuthenticationAUTH_SUCCES, AUTH_FAILED
IdentityIDENTITY_IS_READY
AccountsACCOUNTS_SUCCESS, ACCOUNTS_FAILED
BalanceBALANCE_SUCCESS, BALANCE_FAILED
TransactionsTRANSACTIONS_IS_READY, TRANSACTIONS_FAILED

Sample Data webhook responses

You can check sample webhook responses for Okra's Data products here.
{
  "method": "AUTH",
  "callback_type": "AUTH",
  "callback_code": "AUTH_SUCCESS",
  "type": "CALLBACK",
  "code": "AUTH_SUCCESS",
  "callbackURL": "https://webhook.site/11363e2a-d006-425d-8491-4b2d57039598",
  "env": "production",
  "status": "is_success",
  "started_at": "2023-09-25T15:17:42.700Z",
  "ended_at": "2023-09-25T15:18:41.336Z",
  "message":"Successfully fetched auth",
  "options": {},
  "meta": {},
  "bankName": "United Bank For Africa",
  "bankType": "5d6fe57a4099cc4b210bbebb",
  "bankId": "5d6fe57a4099cc4b210bbebb",
  "bankSlug": "united-bank-for-africa",
  "record": "1511a8761476ad00427379a3",
  "recordId": "1511a8761476ad00427379a3",
  "callback_url": "https://api.okra.ng/v2/callback?record=1511a8761476ad00427379a3&method=AUTH",
  "login_type": "web",
  "customerId": "1425563a3bd4390012d6b365",
  "customerBvn": "11160345297",
  "country":"NG",
  "extras": {},
  "auth":{}
}
{
	"record":"1512b77b69f471003be39aee",
	"current_project":"10b9d7f8927d04af13e8ad25",
	"env":"production",
	"identityType":"bvn",
	"method":"IDENTITY",
	"customerId":"1512b78469f471003be39b07",
	"customerBvn":"22349114205",
	"started_at":"2023-09-26T10:50:36.446Z",
	"ended_at":"2023-09-26T10:50:44.837Z",
	"code":"is_success",
	"status":"IDENTITY_IS_READY",
	"identity":{
		"enrollment":{
			"bank":"082",
			"branch":"Kaduna Kano Road",
			"registration_date":"2014-02-13"
		},
		"aliases":[
			
		],
		"phone":[
			"0806236915"
		],
		"email":[
			
		],
		"next_of_kins":[
			
		],
		"address":[
			"Block 34 Kotoko Nda Kaduna"
		],
		"record":[
			"1512b77b69f491003be39aee",
			"1512b76b69f471003be39aee"
		],
		"_id":"6512b784a6df80c20bfff934",
		"bvn":"22349114205",
		"dob":"1983-11-26",
		"env":"production",
		"firstname":"John",
		"fullname":"John Smith",
		"gender":"Male",
		"is_bvn_verified":true,
		"last_bvn_processed":"2023-09-26T10:50:44.792Z",
		"lastname":"Smith",
		"level_of_account":"Level 2 Medium Level Accounts",
		"lga_of_origin":"Lagos",
		"lga_of_residence":"Kanu North",
		"marital_status":"Married",
		"middlename":"Smith",
		"nationality":"Nigeria",
		"nin":"33362",
		"photo_id":[
			{
				"url":"https://dv7b45oo123j4.cloudfront.net",
				"image_type":"bvn_photo"
			}
		],
		"state_of_origin":"Osun State",
		"state_of_residence":"Kaduna State",
		"verification_country":"NG",
		"watch_listed":"No",
		"customer":"1512b78469f471003be39b07",
		"employer":[
			
		]
	},
	"type":"CALLBACK",
	"message":"Record callback started!"
}
{
  "method":"ACCOUNTS",
  "callback_type": "ACCOUNTS",
  "callback_code":"ACCOUNTS_SUCCESS",
  "type":"CALLBACK",
  "code":"ACCOUNTS_SUCCESS",
  "callbackURL":"http://1169-186-50-214-203.ngrok.io/okra",
  "env":"production-sandbox",
  "status":"is_success",
  "started_at":"2023-09-22T12:16:45.298Z",
  "ended_at":"2023-09-22T12:18:45.525Z",
  "message":"Successfully fetched accounts",
  "options": {
    "transaction_id": 1000000001012
  },
  "meta": {
    "transaction_id": 1000000001012
  },
  "bankName": "First Bank of Nigeria",
  "bankType": "5d6fe57a4099cc4b210bbeb1",
  "bankId": "5d6fe57a4099cc4b210bbeb1",
  "bankSlug": "first-bank-of-nigeria",
  "record": "150d85ad0c46cb6e3d50c606",
  "recordId": "150d85ad0c46cb6e3d50c606",
  "callback_url": "https://api.okra.ng/v2/callback?record=150d85ad0c46cb6e3d50c606&method=ACCOUNTS",
  "login_type": "app",
  "customerId": "14d2af66325d263113941070",
  "customerBvn":"1141956307",
  "country":"NG",
  "extras":{},
  "account": {
    "available_balance": 10108713,
    "ledger_balance": 10108713,
    "currency": "NGN",
    "name": "John Okra",
    "nuban": "111233647",
    "ref": "saving-account",
    "status": "active",
    "type": "Savings",
    "env": "production-sandbox",
    "customer": "14d2af66325d263113941070",
    "account": "14e3af6c8b2c54289d5850dd",
    "accountId": "14e3af6c8b2c54289d5850dd"
  }
}
{
	"method":"BALANCE",
	"callback_type":"BALANCE",
	"callback_code":"BALANCE_SUCCESS",
	"type":"CALLBACK",
	"code":"BALANCE_SUCCESS",
	"callbackURL":"https://eosdhd4nbslhpf1.m.pipedream.net",
	"env":"production",
	"status":"is_success",
	"started_at":"2023-09-23T16:56:01.441Z",
	"ended_at":"2023-09-23T16:58:31.979Z",
	"message":"Successfully fetched balance",
	"options":{
		"tester_id":"123"
	},
	"meta":{
		
	},
	"bankName":"First Bank of Nigeria",
	"bankType":"1d6fe57a4099cc4b210bbeb1",
	"bankId":"1d6fe57a4099cc4b210bbeb1",
	"bankSlug":"first-bank-of-nigeria",
	"record":"150f18a14409430043bae777",
	"recordId":"150f18a14409430043bae777",
	"callback_url":"https://api.okra.ng/v2/callback?record=150f18a14409430043bae777&method=BALANCE",
	"login_type":"web",
	"customerId":null,
	"customerEmail":null,
	"customerBvn":null,
	"country":"NG",
	"extras":{
		
	},
	"nuban":"1114075889",
	"balance":{
		"_id":"12b56e99a03c3711ef0645a4",
		"manual":false,
		"name":"John Smith",
		"type":" Savings",
		"currency":"NGN",
		"env":"production",
		"nuban":"1114075889",
		"bank":"1d6fe57a4099cc4b210bbeb1",
		"customer":null,
		"created_at":"2022-06-24T07:58:17.215Z",
		"last_updated":"2023-09-23T16:58:31.398Z",
		"balance":"12b56ea175622e1237c24db3",
		"status":"active",
		"credentialsLinked":true,
		"ledger_balance":1078.82,
		"available_balance":1078.82,
		"accountId":"12b56e99a03c3711ef0645a4"
	}
}
{
	"method":"TRANSACTIONS",
	"callback_type":"TRANSACTIONS",
	"callback_code":"TRANSACTIONS_IS_READY",
	"type":"CALLBACK",
	"code":"TRANSACTIONS_IS_READY",
	"callbackURL":"https://webhook.site/1112592b-35f7-4f73-a085-368641b74446",
	"env":"production",
	"status":"is_success",
	"started_at":"2023-10-23T10:28:21.158Z",
	"ended_at":"2023-10-23T10:29:41.963Z",
	"message":"Successfully fetched transactions",
	"accountId":"1089af4701afae453ded4961",
	"options":{
		"sample_key":"sample_value"
	},
	"meta":{
		"sample_key_2":"sample_value"
	},
	"bankName":"Rubies Bank",
	"bankType":"5f11487e847b28538bfc6c5f",
	"bankId":"5f11487e847b28538bfc6c5f",
	"bankSlug":"rubies-bank",
	"record":"11364ac529df5246f1d409b1",
	"recordId":"11364ac529df5246f1d409b1",
	"callback_url":"https://api.okra.ng/v2/callback?record=11364ac529df5246f1d409b1&method=TRANSACTIONS",
	"login_type":"app",
	"customerId":"1424825c8e3711362e9ef0cd",
	"customerBvn":"11118789177",
	"country":"NG",
	"extras":{
		
	},
	"newTransactions":0,
	"nuban":"1111181099",
	"accountName":"John Smith"
}

User authentication webhook

The USER_DISCONNECT webhook notifies you when a user disconnects their account.

Sample payload for this event:

{
  "message": "Customer disconnected an account",
  "event": "USER_DISCONNECT",
  "data": {
    "accounts": ["53456ef366890da2345"],
    "customer": "534fd4575d3290da2445",
    "my_okra": true,
    "disconnect": true,
    "disconnected_by": "134fd4575d3290da2222",
    "disconnected_at": "2023-09-12T12:11:20.750Z"
  }
}

Best practices

Follow these best practices to ensure that your webhook implementation runs smoothly.

Monitoring webhooks
  • During integration, Okra recommends that you test and monitor that your app can successfully receive event notifications. You can use services like Webhooks.site or Pipedream for testing and monitoring.
Setting up webhook URLs
  • If you are using .htaccess, make sure that you add the trailing / to the URL you set.
  • Test your webhook URL with a POST request to ensure that it is able to receive the request body.
  • Make sure that your webhook URL is publicly available. localhost URLs cannot receive events.
Whitelisting webhook IPs

Okra delivers webhooks from these IP addresses:

  • 13.39.179.188
  • 13.38.152.18
  • 35.180.165.18
Responding to event notifications

Okra recommends that you respond with a 200 OK status message when you receive an event notification. You do not need to provide a request body or any other parameters, only the status code. The Okra API considers this as a confirmation that your app has received the notification.

If your app returns any status other than 2xx, the API considers the notification as "not received". Based on Okra's retry policy, the API continues to send the notification every hour for the next 72 hours.

If your app starts a longer process in response to an event notifiction without sending a 200 OK status message, the Okra API might time out in waiting for a response. The API considers this timeout the same as a notification that is "not received" and falls back to the retry policy. Okra recommends that you avoid duplicte notifications by sending a 200 OK status message immediately when you receive an event notification.

Matching keys

All webhook requests are sent with an Okra-Auth header for verification. Okra recommends that you verify and match the webhook secret key you passed when creating this webhook.

Sample code on how to verify incoming webhook requests in Node JS
// Javascript  Implementation

const secret = process.env.OKRA_WEBHOOK_KEY;
function verifyWebhook(req, res, next) {
  
  //isVerified is a function that verifies the token
    if (!isVerified(req.headers['Okra-Auth'])) {
        return res.status(401).json({
            message: "Unauthorized request."
        });
    }
    next();
}
router.post('/create', verifyWebhook, (req, res) => {
    const webhook = req.body;
  switch(webhook.event) {
        case "okra.event":
            // do something with webhook.data.account;
            break;
    }
    return res.sendStatus(200);
});

Trigger webhooks

Okra enables you to trigger webhooks for specific user records, to any URL that you set up. Triggering webhooks can be useful in these scenarios:

  • You want to trigger webhooks to an alternative webhook URL for certain users
  • You want to check the status of a webhook
  • Your app did not receive webhook events due to technical issues and you want to retrigger failed event notifications

You can trigger webhooks by sending a POST request to the /callback/trigger endpoint:

$ curl -X POST 'https://api.okra.ng/v2/callback/trigger' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <<your secret_API_key>>' \
--data '{
    "records": ["10b7be20ca7ce542d906e029", "10b7bc9aca7ce542d906e026"], //an array of record Ids
    "url": "https://yourcompany.com/webhooks/okra" //the callback_url (optional), defaults to your saved callback_url
}'
{
    "status": "success",
    "message": "Queuing all failed webhooks",
    "data": {
        "success": true,
        "msg": "Queuing all failed webhooks"
    }
}
  1. Use your secret API key for bearer authentication
  2. Use these body parameters to specify your request:
Body parameterRequiredDescription
recordstrueAn array of record ID for users. This array accepts a maximum of 100 record IDs.
urlfalseSpecifies a URL where the Okra API sends triggered webhooks. If you do not specify url, the value defaults to the default webhook URL you set up.

Webhooks for async data processing

Some of Okra's products, like Balance and Transactions require asynchronous data processing.

For these products, the Okra API provides a URL instead of immediately returning a response. You can periodically ping this URL to see if data processing is ready or not.

{
    "transactions":{
        "callback_url":"https://api.okra.ng/v2/callback?record=14ad5be8d14dd70039585b0c&method=TRANSACTIONS"
    }
}

Example request:

curl -X GET https://api.okra.ng/v2/callback?record=14ad5be8d14dd70039585b0c&method=TRANSACTIONS"
-H 'Content-Type: application/json' 
-H 'Authorization: Bearer {your_secret_API_key}'
  1. Send a GET request to the /callback endpoint
  2. Use the record and method values that you received in the webhook as query parameters
  3. Use your secret API key for bearer authentication

Was this page helpful?