Send Feedback
Skip to content

Kurl Quickstart

This page demonstrates how to load Kurl and perform basic sync and async requests against public and authenticated endpoints.

Setup

Ensure your cloud credentials are set as environment variables, for example:

export AWS_REGION=eu-west-1
export AWS_ACCESS_KEY_ID="… "
export AWS_SECRET_ACCESS_KEY="…"
export AWS_SESSION_TOKEN="… "
Start you KDB-X session:

.kurl:use`kx.kurl
.kurl.init`aws
.kurl.sync ("https://kx-mybucket.s3.us-east-2.amazonaws.com/test_data/data.csv";`GET;::)

export AZURE_STORAGE_ACCOUNT="..."
export AZURE_STORAGE_SHARED_KEY="..."
Start you KDB-X session:

.kurl:use`kx.kurl
.kurl.init`azr
.kurl.sync("https://kx-bucket.blob.core.windows.net/test_data/data.csv";`GET;enlist[`headers]!enlist[enlist["x-ms-version"]!enlist["2017-07-29"]])
200i
...
For more information on the .kurl.sync API and its arguments, visit the Reference page.

gcloud init
export GCP_TOKEN=$(gcloud auth print-access-token)
Start your KDB-X session:

.kurl:use`kx.kurl
/ Call one of .kurl.init or .kurl.register
.kurl.init`gcp / .kurl.register(`oauth2; "*.googleapis.com"; "";enlist[`access_token]!enlist getenv`GCP_TOKEN)
.kurl.sync("https://bigquery.googleapis.com/bigquery/v2/projects/bigquery-public-data/datasets";`GET; ::)
200i
"{\n  \"kind\": \"bigquery#datasetList\",\n  \"etag\": \"IyFqxYKvltLbvNdsx9qlIQ==\",\n  \"nextPageT..

Basic usage

  1. To make synchronous calls, use these details in your KDB-X session:

    q).kurl:use`kx.kurl  // load in the module
    q) info:`AccessKeyId`SecretAccessKey`Token!(getenv`AWS_ACCESS_KEY_ID;getenv`AWS_SECRET_ACCESS_KEY;getenv`AWS_SESSION_TOKEN)
    q).kurl.sync ("https://kx-mybucket.s3.us-east-2.amazonaws.com/test_data/data.csv";`GET;::)  // sync calls fails as you have not registered
    403i
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied..
    q).kurl.register (`aws_cred;"*amazonaws.com";"";info)  // register, this is an alternative to .kurl.init`aws
    q).kurl.sync ("https://kx-mybucket.s3.us-east-2.amazonaws.com/test_data/data.csv";`GET;::)  // successful sync call
    200i
    "sym,price,size\nFDP,1.2,100\n"
    
  2. To make asynchronous calls:

    q) .kurl.async ("https://kx-mybucket.s3.us-east-2.amazonaws.com/test_data/data.csv";`GET;``callback!(`;{.debug.x:x}))
    .debug.x
    200i
    "sym,price,size\nFDP,1.2,100\n"
    
  3. For public datasets (no authentication required):

    .kurl:use`kx.kurl
    .kurl.sync ("https://api.census.gov/data/2020/dec/pl?get=NAME,P1_001N&for=state:*"; `GET; ::)
    200i
    "[[\"NAME\",\"P1_001N\",\"state\"],\n[\"Pennsylvania\",\"13002700\",\"42\"],\n[\"California\",\"395..
    

Next steps

  • Take a look at the Kurl examples for a deeper understanding of how it works.