Alaveteli for campaigners: How to create pre-written requests for your supporters

If you are using Freedom of Information for a campaign, and you need to request the same information from several different bodies, or a variety of information from one body, it can be useful to put your supporters to work for you.

We recently profiled the Detention Logs project, which is using Freedom of Information requests to uncover conditions in Australia’s detention centres. Anyone can use the information already uncovered to request further documents or clarify ambiguous facts.

One aspect we didn’t mention is that, in order to make this process as quick and simple as possible, Detention Logs provides users with a pre-written FOI request which they can tweak as necessary before sending off to the relevant authority. This is linked to from a button on the Detention Logs website

This nifty bit of functionality could be useful for all kinds of campaigns. If yours is one of them, read on to discover how to set it up.


This method will work on any Alaveteli site that is running a recent version of the code: for our example, we’re using RightToKnow but you could substitute or any of these.

Here’s an example of a pre-filled request — follow the link to see what it looks like on the page:

As you can see, this unwieldy web address contains all the information that RightToKnow, Australia’s Freedom of Information site, needs in order to create a pre-filled request.The URL tells it who the request should go to, what the title of the request is, and what should go in the main body.

It’s quite simple to create these yourself. Just build the URL up in steps:

  1. Begin by telling the site that this is a new request:
  2. Add a forward slash (/) and then the body you want the request to be sent to (exactly as it is written in the url of the body’s page of the website):
  3. Add a question mark: This tells the website that we are going to introduce a ‘parameter string’. Now our URL looks like this:
  4. Input a title: we need to indicate that the next part should go into the ‘title’ field, like this: and then dictate what the title should be: Notice that if there is a space between words, it should be shown as %20. To make the process of encoding the URLs easier, you can use an encoder tool like this one:
  5. Input the body of the request, again using ‘%20’ between each word. This is where your URL can become very long! We use the parameter default_letter and the salutation (Dear…) and signoff (Yours…) are automatically wrapped around this by the site, so there’s no need to include them:

Remember to include a ‘=’ after each parameter name (e.g. title=) and to separate parameters with an ‘&’.

So, there you have it. A customised URL that you can set up if you need supporters to send a pre-written request to a specified body or bodies.

As mentioned above, the Detention Logs project used this method to help their supporters request detention centre incident reports, attaching a different URL to each report so that the title would contain the relevant report number. To see the technical details of how they set this up, visit their GitHub page.

More parameters

Here are some other parameters that can be used in addition to the ones above:

  • body – This is an alternative to default_letter which lets you specify the entire body of the request including the salutation and signoff.
  • tags – This allows you to add a space-separated list of tags, so for example you can identify any requests made through your campaign or which refer to the same topic. For example, the Detention Logs project used tags like this: &tags=detentionlogs%20incident-number%3A1-2PQQH5

A tag can have a ‘name’ and an optional ‘value’ (created in the form “name:value”). The first tag in the above example is ‘detentionlogs’ (‘name’) and the second tag is ‘incident-number:A1-2PQQH5’ (‘name:value’). The encoder tool above changes the colon to ‘%3’.

If you use this pre-written request tool we’d love to hear about it, so please get in touch if you do.

Image: Gabriel Saldana (CC 2.0)