C# Constant 400 Bad Request

Bearer (_accesstoken)Op 10 jan. 2013 17:53 schreef liam@liambateman.net het volgende:

So far, I’ve tried :

Replacing the Auth header with

req.Headers[“Authorization”] = "OAuth " + (_accessToken);

Which is as per the google playground.

On Thursday, January 10, 2013 4:12:14 PM UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow (http://stackoverflow.com/**
questions/14257496/freeagent-**api-oauth-from-c-sharphttp://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)
and is below as well. Anyone know how I can go aout digging more into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req = (HttpWebRequest)WebRequest.Cre**ate(“https://api.freeagent.**com/v2/recurring_invoices https://api.freeagent.com/v2/recurring_invoices”);

req.Headers[“Authorization”] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;
// and get the responsevar resp = req.GetResponse();var streamIn = new StreamReader(resp.GetResponseS**tream());
returnData = streamIn.ReadToEnd();
streamIn.Close();
return resp;

Now I’m loosly trying to conver the following :
https://dev.freeagent.com/**docs/using_curlhttps://dev.freeagent.com/docs/using_curl

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions on
what could be causing this problem?


You received this message because you are subscribed to the Google Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/freeagent_api/-/hN9PP2K-TosJ.
To post to this group, send email to freeagent_api@googlegroups.com.
To unsubscribe from this group, send email to
freeagent_api+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/freeagent_api?hl=en.

Ok, Thanks Nic. Fiddler suggestion has sorted this.

It seems freeagent requires that I have a User Agent set. Fiddler showed me
the Bad Request page as follows.

<?xml version="1.0" encoding="UTF-8"?>
User agent http header not set

Adjusting the code to include a user agent seem’s to have resolved the
issue.

req.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)

AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";

Does this seem right? The right values are now being returned.On Friday, January 11, 2013 10:12:18 AM UTC, Nic Wise wrote:

Hi

I have most of the api working using RestSharp:

GitHub - nicwise/FreeAgent: A basic .NET client for FreeAgent.com (work in progress)

I wrote that for my iPhone app, mobileAgent, but it’s fairly basic
.NET, so it should work on anything.

My authentication injection code looks very much like yours:

protected void SetAuthentication(RestRequest request)
{
request.AddHeader(“Authorization”, "Bearer " +
Client.CurrentAccessToken.access_token);
}

Have you run fiddler or something similar to see exactly what is going
over the wire? that often helps.

On 10 January 2013 19:25, <li...@liambateman.net <javascript:>> wrote:

CURL Works fine on my mac, same token etc. Hmm even more frustrating.

On Thursday, January 10, 2013 7:23:55 PM UTC, li…@liambateman.netwrote:

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a spin
now.

On Thursday, January 10, 2013 5:01:11 PM UTC, io…@freeagent.comwrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization
header
to "Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li…@liambateman.netwrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow
(
http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)

and is below as well. Anyone know how I can go aout digging more into
this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req =
(HttpWebRequest)WebRequest.Create("
https://api.freeagent.com/v2/recurring_invoices");

req.Headers[“Authorization”] = "Bearer " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;

// and get the response
var resp = req.GetResponse();
var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();

return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions
on
what could be causing this problem?


You received this message because you are subscribed to the Google
Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/freeagent_api/-/oLNgUg0bYp8J.

To post to this group, send email to freeag...@googlegroups.com<javascript:>.

To unsubscribe from this group, send email to
freeagent_ap...@googlegroups.com <javascript:>.
For more options, visit this group at
http://groups.google.com/group/freeagent_api?hl=en.


Nic Wise
t. +44 7788 592 806 | @fastchicken
b. http://www.fastchicken.co.nz/

mobileAgent (for FreeAgent): get your accounts in your pocket.
http://goo.gl/IuBU
Trip Wallet: Keep track of your budget on the go: http://goo.gl/ePhKa
Earnest: Self-employed? Track your business expenses and income.
http://earnestapp.com
Nearest Bus: find when the next bus is coming to your stop.
http://goo.gl/Vcz1p
London Bike App: Find the nearest Boris Bike, and get riding!
http://goo.gl/Icp2

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization header to
"Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

IoanOn Thursday, 10 January 2013 16:12:14 UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have asked
the question over on StackOverflow (
http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)
and is below as well. Anyone know how I can go aout digging more into this?

I’m trying to connect to a API (In this case freeagent) to grab some data.
I’ve used Googles OAuth Playground to generate me a token.

var req = (HttpWebRequest)WebRequest.Create(“https://api.freeagent.com/v2/recurring_invoices”);

req.Headers[“Authorization”] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;
// and get the responsevar resp = req.GetResponse();var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();
return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions on
what could be causing this problem?

Hi

I have most of the api working using RestSharp:

I wrote that for my iPhone app, mobileAgent, but it’s fairly basic
.NET, so it should work on anything.

My authentication injection code looks very much like yours:

protected void SetAuthentication(RestRequest request)
{
request.AddHeader(“Authorization”, "Bearer " +
Client.CurrentAccessToken.access_token);
}

Have you run fiddler or something similar to see exactly what is going
over the wire? that often helps.On 10 January 2013 19:25, liam@liambateman.net wrote:

CURL Works fine on my mac, same token etc. Hmm even more frustrating.

On Thursday, January 10, 2013 7:23:55 PM UTC, li...@liambateman.net wrote:

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a spin
now.

On Thursday, January 10, 2013 5:01:11 PM UTC, io...@freeagent.com wrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization header
to "Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow
(http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)
and is below as well. Anyone know how I can go aout digging more into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req =
(HttpWebRequest)WebRequest.Create(“https://api.freeagent.com/v2/recurring_invoices”);

req.Headers[“Authorization”] = "Bearer " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;

// and get the response
var resp = req.GetResponse();
var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();

return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions on
what could be causing this problem?


You received this message because you are subscribed to the Google Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/freeagent_api/-/oLNgUg0bYp8J.

To post to this group, send email to freeagent_api@googlegroups.com.
To unsubscribe from this group, send email to
freeagent_api+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/freeagent_api?hl=en.

Nic Wise
t. +44 7788 592 806 | @fastchicken
b. http://www.fastchicken.co.nz/

mobileAgent (for FreeAgent): get your accounts in your pocket.
http://goo.gl/IuBU
Trip Wallet: Keep track of your budget on the go: http://goo.gl/ePhKa
Earnest: Self-employed? Track your business expenses and income.
http://earnestapp.com
Nearest Bus: find when the next bus is coming to your stop. http://goo.gl/Vcz1p
London Bike App: Find the nearest Boris Bike, and get riding! http://goo.gl/Icp2

Hi Liam,

I’m totally new to all this and am trying to integrate my winforms .net app
to FreeAgent for basic contact and invoicing, In the past I’ve successfully
integrated to Sage 50 using their windows api and also KashFlow using their
SOAP interface but I’m totally new to OAuth and not much of a webdev (i’m
more winforms/mssql) so this has been a MAJOR learning curve.

I’ve successfully manged to write some code to get and refresh the access
token but could not even get the simple COMPANY GET request to work, for
hours I’ve been tearing my hair out, re-factoring my code sure I was right
and then I found this!

Setting the “User-Agent” header property made it work, wow. I’m sure this
is documented in the Oauth2 documentation somewhere but I cannot get my
head around the fact that this was not visible in request in the OAuth 2.0
playground, seeing all the header info would have helped me to debug this
simple misunderstanding hours ago.

Anyway. Thanks a LOT.

I’ll be using fiddler a lot more from now methinks.

yours very apprehensively Dean.On Friday, 11 January 2013 17:44:56 UTC, Liam Bateman wrote:

Ok, Thanks Nic. Fiddler suggestion has sorted this.

It seems freeagent requires that I have a User Agent set. Fiddler showed
me the Bad Request page as follows.

<?xml version="1.0" encoding="UTF-8"?>
User agent http header not set

Adjusting the code to include a user agent seem’s to have resolved the
issue.

req.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)

AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";

Does this seem right? The right values are now being returned.

On Friday, January 11, 2013 10:12:18 AM UTC, Nic Wise wrote:

Hi

I have most of the api working using RestSharp:

GitHub - nicwise/FreeAgent: A basic .NET client for FreeAgent.com (work in progress)

I wrote that for my iPhone app, mobileAgent, but it’s fairly basic
.NET, so it should work on anything.

My authentication injection code looks very much like yours:

protected void SetAuthentication(RestRequest request)
{
request.AddHeader(“Authorization”, "Bearer " +
Client.CurrentAccessToken.access_token);
}

Have you run fiddler or something similar to see exactly what is going
over the wire? that often helps.

On 10 January 2013 19:25, li...@liambateman.net wrote:

CURL Works fine on my mac, same token etc. Hmm even more frustrating.

On Thursday, January 10, 2013 7:23:55 PM UTC, li...@liambateman.net wrote:

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a
spin
now.

On Thursday, January 10, 2013 5:01:11 PM UTC, io...@freeagent.com wrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization
header
to "Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow
(
http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)

and is below as well. Anyone know how I can go aout digging more
into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req =
(HttpWebRequest)WebRequest.Create("
https://api.freeagent.com/v2/recurring_invoices");

req.Headers[“Authorization”] = "Bearer " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;

// and get the response
var resp = req.GetResponse();
var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();

return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any
suggestions on
what could be causing this problem?


You received this message because you are subscribed to the Google
Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/freeagent_api/-/oLNgUg0bYp8J.

To post to this group, send email to freeag...@googlegroups.com.
To unsubscribe from this group, send email to
freeagent_ap...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/freeagent_api?hl=en.


Nic Wise
t. +44 7788 592 806 | @fastchicken
b. http://www.fastchicken.co.nz/

mobileAgent (for FreeAgent): get your accounts in your pocket.
http://goo.gl/IuBU
Trip Wallet: Keep track of your budget on the go: http://goo.gl/ePhKa
Earnest: Self-employed? Track your business expenses and income.
http://earnestapp.com
Nearest Bus: find when the next bus is coming to your stop.
http://goo.gl/Vcz1p
London Bike App: Find the nearest Boris Bike, and get riding!
http://goo.gl/Icp2

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a spin now.On Thursday, January 10, 2013 5:01:11 PM UTC, io...@freeagent.com wrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization header to
"Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow (
http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)
and is below as well. Anyone know how I can go aout digging more into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req = (HttpWebRequest)WebRequest.Create(“https://api.freeagent.com/v2/recurring_invoices”);

req.Headers[“Authorization”] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;
// and get the responsevar resp = req.GetResponse();var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();
return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions on
what could be causing this problem?

CURL Works fine on my mac, same token etc. Hmm even more frustrating.On Thursday, January 10, 2013 7:23:55 PM UTC, li...@liambateman.net wrote:

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a spin
now.

On Thursday, January 10, 2013 5:01:11 PM UTC, io...@freeagent.com wrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization header
to "Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li...@liambateman.net wrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow (
http://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)
and is below as well. Anyone know how I can go aout digging more into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req = (HttpWebRequest)WebRequest.Create(“https://api.freeagent.com/v2/recurring_invoices”);

req.Headers[“Authorization”] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;
// and get the responsevar resp = req.GetResponse();var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();
return resp;

Now I’m loosly trying to conver the following :
FreeAgent Developer Dashboard

I constantly get a Bad Request HTTP 400 - Anyone have any suggestions on
what could be causing this problem?

Hi Liam,

The user agent is used to identify your app to FreeAgent in our logs so
that if your clients encounter a problem we can get back to you with the
information. You can set the user agent to anything you like, there’s no
need to set it to a “browser-like” string. Why not set it to the name of
your app and a version string? “My App v1.0” That way if there’s ever a
need we can tell you which version of your app is encountering a problem.

Kind regards,

GraemeOn 11 January 2013 17:44, liam@liambateman.net wrote:

Ok, Thanks Nic. Fiddler suggestion has sorted this.

It seems freeagent requires that I have a User Agent set. Fiddler showed
me the Bad Request page as follows.

<?xml version="1.0" encoding="UTF-8"?>
User agent http header not set

Adjusting the code to include a user agent seem’s to have resolved the
issue.

req.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)

AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";

Does this seem right? The right values are now being returned.

On Friday, January 11, 2013 10:12:18 AM UTC, Nic Wise wrote:

Hi

I have most of the api working using RestSharp:

https://github.com/nicwise/**FreeAgenthttps://github.com/nicwise/FreeAgent

I wrote that for my iPhone app, mobileAgent, but it’s fairly basic
.NET, so it should work on anything.

My authentication injection code looks very much like yours:

protected void SetAuthentication(RestRequest request)
{
request.AddHeader(“**Authorization”, "Bearer " +
Client.CurrentAccessToken.**access_token);
}

Have you run fiddler or something similar to see exactly what is going
over the wire? that often helps.

On 10 January 2013 19:25, li...@liambateman.net wrote:

CURL Works fine on my mac, same token etc. Hmm even more frustrating.

On Thursday, January 10, 2013 7:23:55 PM UTC, li…@liambateman.netwrote:

Hi Guys,

Thanks for replies. I’m still having the same issue.

req.Headers[“Authorization”] = "Bearer " + _accessToken;

Havent tried it via CURL yet only the playground. Will give CURL a
spin
now.

On Thursday, January 10, 2013 5:01:11 PM UTC, io…@freeagent.comwrote:

Hi Liam,

I’m not sure the encoding is needed, just set your Authorization
header
to "Bearer " + _accessToken as Riël said.

Did you have any luck with getting results using curl?

Ioan

On Thursday, 10 January 2013 16:12:14 UTC, li…@liambateman.netwrote:

Hi Guys,

Trying to get the API hooked up to our internal tools via C#. I have
asked the question over on StackOverflow
(http://stackoverflow.com/**questions/14257496/freeagent-**
api-oauth-from-c-sharphttp://stackoverflow.com/questions/14257496/freeagent-api-oauth-from-c-sharp)

and is below as well. Anyone know how I can go aout digging more
into this?

I’m trying to connect to a API (In this case freeagent) to grab some
data. I’ve used Googles OAuth Playground to generate me a token.

var req =
(HttpWebRequest)WebRequest.Create("https://api.freeagent.
com/v2/recurring_invoiceshttps://api.freeagent.com/v2/recurring_invoices");

req.Headers[“Authorization”] = "Bearer " +
Convert.ToBase64String(**Encoding.ASCII.GetBytes(_**accessToken));

req.ContentType = “application/xml”;
req.Accept = “application/xml”;
req.Method = “GET”;

// and get the response
var resp = req.GetResponse();
var streamIn = new StreamReader(resp.**GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();

return resp;

Now I’m loosly trying to conver the following :
https://dev.freeagent.com/**docs/using_curlhttps://dev.freeagent.com/docs/using_curl

I constantly get a Bad Request HTTP 400 - Anyone have any
suggestions on
what could be causing this problem?


You received this message because you are subscribed to the Google
Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/**msg/freeagent_api/-/**oLNgUg0bYp8Jhttps://groups.google.com/d/msg/freeagent_api/-/oLNgUg0bYp8J.

To post to this group, send email to freeag...@googlegroups.com**.
To unsubscribe from this group, send email to
freeagent_ap…@**googlegroups.com.
For more options, visit this group at
http://groups.google.com/**group/freeagent_api?hl=enhttp://groups.google.com/group/freeagent_api?hl=en.


Nic Wise
t. +44 7788 592 806 | @fastchicken
b. http://www.fastchicken.co.nz/

mobileAgent (for FreeAgent): get your accounts in your pocket.
http://goo.gl/IuBU
Trip Wallet: Keep track of your budget on the go: http://goo.gl/ePhKa
Earnest: Self-employed? Track your business expenses and income.
http://earnestapp.com
Nearest Bus: find when the next bus is coming to your stop.
http://goo.gl/Vcz1p
London Bike App: Find the nearest Boris Bike, and get riding!
http://goo.gl/Icp2


You received this message because you are subscribed to the Google Groups
“FreeAgent API” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/freeagent_api/-/SydobcnqE4wJ.

To post to this group, send email to freeagent_api@googlegroups.com.
To unsubscribe from this group, send email to
freeagent_api+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/freeagent_api?hl=en.

Graeme Boyd
Senior Software Engineer

Web. freeagent.com http://www.freeagent.com/ Blog. The FreeAgent Blog - FreeAgent
Twitter. @freeagent https://twitter.com/#!/freeagent Facebook.
FreeAgent | Edinburgh

40 Torphichen Street, Edinburgh, EH3 8JB
FreeAgent Central Ltd. Registered in sunny Scotland SC316774