Skip to content

JSON endpoint to JSON

Use attr: 'json' when the target URL is already a JSON endpoint. Microlink fetches the URL, parses the full response body with JSON.parse, and returns native structured data instead of a string.

The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://pokeapi.co/api/v2/pokemon/pikachu' URL with 'data', 'meta' & 'prerender' API parameters:

CLI Microlink API example

microlink https://pokeapi.co/api/v2/pokemon/pikachu&data.json.attr=json

cURL Microlink API example

curl -G "https://api.microlink.io" \
  -d "url=https://pokeapi.co/api/v2/pokemon/pikachu" \
  -d "data.json.attr=json" \
  -d "meta=false" \
  -d "prerender=false"

JavaScript Microlink API example

import mql from '@microlink/mql'

const { data } = await mql('https://pokeapi.co/api/v2/pokemon/pikachu', {
  data: {
    json: {
      attr: "json"
    }
  },
  meta: false,
  prerender: false
})

Python Microlink API example

import requests

url = "https://api.microlink.io/"

querystring = {
    "url": "https://pokeapi.co/api/v2/pokemon/pikachu",
    "data.json.attr": "json",
    "meta": "false",
    "prerender": "false"
}

response = requests.get(url, params=querystring)

print(response.json())

Ruby Microlink API example

require 'uri'
require 'net/http'

base_url = "https://api.microlink.io/"

params = {
  url: "https://pokeapi.co/api/v2/pokemon/pikachu",
  data.json.attr: "json",
  meta: "false",
  prerender: "false"
}

uri = URI(base_url)
uri.query = URI.encode_www_form(params)

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
response = http.request(request)

puts response.body

PHP Microlink API example

<?php

$baseUrl = "https://api.microlink.io/";

$params = [
    "url" => "https://pokeapi.co/api/v2/pokemon/pikachu",
    "data.json.attr" => "json",
    "meta" => "false",
    "prerender" => "false"
];

$query = http_build_query($params);
$url = $baseUrl . '?' . $query;

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET"
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #: " . $err;
} else {
    echo $response;
}

Golang Microlink API example

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "io"
)

func main() {
    baseURL := "https://api.microlink.io"

    u, err := url.Parse(baseURL)
    if err != nil {
        panic(err)
    }
    q := u.Query()
    q.Set("url", "https://pokeapi.co/api/v2/pokemon/pikachu")
    q.Set("data.json.attr", "json")
    q.Set("meta", "false")
    q.Set("prerender", "false")
    u.RawQuery = q.Encode()

    req, err := http.NewRequest("GET", u.String(), nil)
    if err != nil {
        panic(err)
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(body))
}
Read the parsed endpoint payload from data.json.

Return JSON directly

Add embed: 'json' when the API URL itself should return the parsed JSON field:

The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://pokeapi.co/api/v2/pokemon/pikachu' URL with 'data', 'meta', 'prerender' & 'embed' API parameters:

CLI Microlink API example

microlink https://pokeapi.co/api/v2/pokemon/pikachu&data.json.attr=json&embed=json

cURL Microlink API example

curl -G "https://api.microlink.io" \
  -d "url=https://pokeapi.co/api/v2/pokemon/pikachu" \
  -d "data.json.attr=json" \
  -d "meta=false" \
  -d "prerender=false" \
  -d "embed=json"

JavaScript Microlink API example

import mql from '@microlink/mql'

const { data } = await mql('https://pokeapi.co/api/v2/pokemon/pikachu', {
  data: {
    json: {
      attr: "json"
    }
  },
  meta: false,
  prerender: false,
  embed: "json"
})

Python Microlink API example

import requests

url = "https://api.microlink.io/"

querystring = {
    "url": "https://pokeapi.co/api/v2/pokemon/pikachu",
    "data.json.attr": "json",
    "meta": "false",
    "prerender": "false",
    "embed": "json"
}

response = requests.get(url, params=querystring)

print(response.json())

Ruby Microlink API example

require 'uri'
require 'net/http'

base_url = "https://api.microlink.io/"

params = {
  url: "https://pokeapi.co/api/v2/pokemon/pikachu",
  data.json.attr: "json",
  meta: "false",
  prerender: "false",
  embed: "json"
}

uri = URI(base_url)
uri.query = URI.encode_www_form(params)

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
response = http.request(request)

puts response.body

PHP Microlink API example

<?php

$baseUrl = "https://api.microlink.io/";

$params = [
    "url" => "https://pokeapi.co/api/v2/pokemon/pikachu",
    "data.json.attr" => "json",
    "meta" => "false",
    "prerender" => "false",
    "embed" => "json"
];

$query = http_build_query($params);
$url = $baseUrl . '?' . $query;

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET"
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #: " . $err;
} else {
    echo $response;
}

Golang Microlink API example

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "io"
)

func main() {
    baseURL := "https://api.microlink.io"

    u, err := url.Parse(baseURL)
    if err != nil {
        panic(err)
    }
    q := u.Query()
    q.Set("url", "https://pokeapi.co/api/v2/pokemon/pikachu")
    q.Set("data.json.attr", "json")
    q.Set("meta", "false")
    q.Set("prerender", "false")
    q.Set("embed", "json")
    u.RawQuery = q.Encode()

    req, err := http.NewRequest("GET", u.String(), nil)
    if err != nil {
        panic(err)
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(body))
}
The response is JSON, so a worker or backend job can consume it without reading a nested data.json field.
The same request as a raw URL:
https://api.microlink.io?url=https://pokeapi.co/api/v2/pokemon/pikachu&data.json.attr=json&meta=false&prerender=false&embed=json

Keep the whole response body

attr: 'json' is whole-page only. Do not combine it with selector or selectorAll; Microlink parses the entire endpoint response.
{
  url: 'https://pokeapi.co/api/v2/pokemon/pikachu',
  data: {
    json: {
      attr: 'json'
    }
  },
  meta: false,
  prerender: false
}
The original JSON shape is preserved as structured data. Strings that contain HTML-like text, such as "<b>bold</b>", stay as strings and are not interpreted as DOM markup.

When to use it

NeedUse
Fetch a REST API through Microlinkattr: 'json'
Keep response metadata next to the parsed payloadleave embed out
Return the parsed field as the API responseadd embed: 'json'
Extract content from an HTML pageuse text, markdown, or html instead

Next step

Use Data extraction: Extract JSON for the full rule behavior. Use Web page to Text when the source is an HTML page, or PDF file to Markdown when the source URL points directly to a PDF file.