Find an API

Search public APIs with auth details & Postman guides

← All APIs

Written Questions Service API

parliament · Data

Data No Auth Free & Open open_data

Data around written questions and answers, as well as written ministerial statements.

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Returns a list of daily reports

Returns a list of daily reports

https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports?skip=1&take=1&house=example&dateTo=example&dateFrom=example

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports?skip=1&take=1&house=example&dateTo=example&dateFrom=example"
import requests
params = {
    "skip": "1",
    "take": "1",
    "house": "example",
    "dateTo": "example",
    "dateFrom": "example"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports');
url.searchParams.set('skip', '1');
url.searchParams.set('take', '1');
url.searchParams.set('house', 'example');
url.searchParams.set('dateTo', 'example');
url.searchParams.set('dateFrom', 'example');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

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

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports")
	q := baseURL.Query()
	q.Set("skip", "1")
	q.Set("take", "1")
	q.Set("house", "example")
	q.Set("dateTo", "example")
	q.Set("dateFrom", "example")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports")
uri.query = URI.encode_www_form({
  "skip" => "1",
  "take" => "1",
  "house" => "example",
  "dateTo" => "example",
  "dateFrom" => "example"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/dailyreports/dailyreports?" . http_build_query([
    "skip" => "1",
    "take" => "1",
    "house" => "example",
    "dateTo" => "example",
    "dateFrom" => "example"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Returns a list of written questions

Returns a list of written questions

https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions?uIN=example&skip=1&take=1&house=example&members=example&answered=example&searchTerm=example&expandMember=true&tabledWhenTo=example&answeredWhenTo=example&askingMemberId=1&questionStatus=example&tabledWhenFrom=example&answeringBodies=example&correctedWhenTo=example&answeredWhenFrom=example&includeWithdrawn=true&answeringMemberId=1&correctedWhenFrom=example

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions?uIN=example&skip=1&take=1&house=example&members=example&answered=example&searchTerm=example&expandMember=true&tabledWhenTo=example&answeredWhenTo=example&askingMemberId=1&questionStatus=example&tabledWhenFrom=example&answeringBodies=example&correctedWhenTo=example&answeredWhenFrom=example&includeWithdrawn=true&answeringMemberId=1&correctedWhenFrom=example"
import requests
params = {
    "uIN": "example",
    "skip": "1",
    "take": "1",
    "house": "example",
    "members": "example",
    "answered": "example",
    "searchTerm": "example",
    "expandMember": "true",
    "tabledWhenTo": "example",
    "answeredWhenTo": "example",
    "askingMemberId": "1",
    "questionStatus": "example",
    "tabledWhenFrom": "example",
    "answeringBodies": "example",
    "correctedWhenTo": "example",
    "answeredWhenFrom": "example",
    "includeWithdrawn": "true",
    "answeringMemberId": "1",
    "correctedWhenFrom": "example"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions');
url.searchParams.set('uIN', 'example');
url.searchParams.set('skip', '1');
url.searchParams.set('take', '1');
url.searchParams.set('house', 'example');
url.searchParams.set('members', 'example');
url.searchParams.set('answered', 'example');
url.searchParams.set('searchTerm', 'example');
url.searchParams.set('expandMember', 'true');
url.searchParams.set('tabledWhenTo', 'example');
url.searchParams.set('answeredWhenTo', 'example');
url.searchParams.set('askingMemberId', '1');
url.searchParams.set('questionStatus', 'example');
url.searchParams.set('tabledWhenFrom', 'example');
url.searchParams.set('answeringBodies', 'example');
url.searchParams.set('correctedWhenTo', 'example');
url.searchParams.set('answeredWhenFrom', 'example');
url.searchParams.set('includeWithdrawn', 'true');
url.searchParams.set('answeringMemberId', '1');
url.searchParams.set('correctedWhenFrom', 'example');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

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

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions")
	q := baseURL.Query()
	q.Set("uIN", "example")
	q.Set("skip", "1")
	q.Set("take", "1")
	q.Set("house", "example")
	q.Set("members", "example")
	q.Set("answered", "example")
	q.Set("searchTerm", "example")
	q.Set("expandMember", "true")
	q.Set("tabledWhenTo", "example")
	q.Set("answeredWhenTo", "example")
	q.Set("askingMemberId", "1")
	q.Set("questionStatus", "example")
	q.Set("tabledWhenFrom", "example")
	q.Set("answeringBodies", "example")
	q.Set("correctedWhenTo", "example")
	q.Set("answeredWhenFrom", "example")
	q.Set("includeWithdrawn", "true")
	q.Set("answeringMemberId", "1")
	q.Set("correctedWhenFrom", "example")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions")
uri.query = URI.encode_www_form({
  "uIN" => "example",
  "skip" => "1",
  "take" => "1",
  "house" => "example",
  "members" => "example",
  "answered" => "example",
  "searchTerm" => "example",
  "expandMember" => "true",
  "tabledWhenTo" => "example",
  "answeredWhenTo" => "example",
  "askingMemberId" => "1",
  "questionStatus" => "example",
  "tabledWhenFrom" => "example",
  "answeringBodies" => "example",
  "correctedWhenTo" => "example",
  "answeredWhenFrom" => "example",
  "includeWithdrawn" => "true",
  "answeringMemberId" => "1",
  "correctedWhenFrom" => "example"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenquestions/questions?" . http_build_query([
    "uIN" => "example",
    "skip" => "1",
    "take" => "1",
    "house" => "example",
    "members" => "example",
    "answered" => "example",
    "searchTerm" => "example",
    "expandMember" => "true",
    "tabledWhenTo" => "example",
    "answeredWhenTo" => "example",
    "askingMemberId" => "1",
    "questionStatus" => "example",
    "tabledWhenFrom" => "example",
    "answeringBodies" => "example",
    "correctedWhenTo" => "example",
    "answeredWhenFrom" => "example",
    "includeWithdrawn" => "true",
    "answeringMemberId" => "1",
    "correctedWhenFrom" => "example"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Returns a list of written statements

Returns a list of written statements

https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements?uIN=example&skip=1&take=1&house=example&members=example&madeWhenTo=example&searchTerm=example&expandMember=true&madeWhenFrom=example&answeringBodies=example

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements?uIN=example&skip=1&take=1&house=example&members=example&madeWhenTo=example&searchTerm=example&expandMember=true&madeWhenFrom=example&answeringBodies=example"
import requests
params = {
    "uIN": "example",
    "skip": "1",
    "take": "1",
    "house": "example",
    "members": "example",
    "madeWhenTo": "example",
    "searchTerm": "example",
    "expandMember": "true",
    "madeWhenFrom": "example",
    "answeringBodies": "example"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements');
url.searchParams.set('uIN', 'example');
url.searchParams.set('skip', '1');
url.searchParams.set('take', '1');
url.searchParams.set('house', 'example');
url.searchParams.set('members', 'example');
url.searchParams.set('madeWhenTo', 'example');
url.searchParams.set('searchTerm', 'example');
url.searchParams.set('expandMember', 'true');
url.searchParams.set('madeWhenFrom', 'example');
url.searchParams.set('answeringBodies', 'example');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

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

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements")
	q := baseURL.Query()
	q.Set("uIN", "example")
	q.Set("skip", "1")
	q.Set("take", "1")
	q.Set("house", "example")
	q.Set("members", "example")
	q.Set("madeWhenTo", "example")
	q.Set("searchTerm", "example")
	q.Set("expandMember", "true")
	q.Set("madeWhenFrom", "example")
	q.Set("answeringBodies", "example")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements")
uri.query = URI.encode_www_form({
  "uIN" => "example",
  "skip" => "1",
  "take" => "1",
  "house" => "example",
  "members" => "example",
  "madeWhenTo" => "example",
  "searchTerm" => "example",
  "expandMember" => "true",
  "madeWhenFrom" => "example",
  "answeringBodies" => "example"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/parliament.uk/writtenquestions/v1/api/writtenstatements/statements?" . http_build_query([
    "uIN" => "example",
    "skip" => "1",
    "take" => "1",
    "house" => "example",
    "members" => "example",
    "madeWhenTo" => "example",
    "searchTerm" => "example",
    "expandMember" => "true",
    "madeWhenFrom" => "example",
    "answeringBodies" => "example"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. See official documentation for authentication and setup.

What can you build with Written Questions Service API?

Written Questions Service API is a Data API. Developers commonly use data APIs for:

  • enriching your app with third-party datasets
  • building data pipelines and ETL workflows
  • querying and searching large datasets
  • powering research, analysis, and reporting tools
  • syncing reference data into your own systems

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Written Questions Service API is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide

Open documentation ↗