Skip to content

JSON endpoint to JSON

Use attr with 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 with 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 URL to Text, URL to Markdown, or URL to HTML when the source is a web page, PDF, or office document instead of a JSON endpoint.