Wiro
Developers · Public API

The Wiro API

A way to read your agency’s clients, projects and team out of Wiro from other software — a spreadsheet, a client’s dashboard, an automation tool.

Start here

What this actually is

Wiro holds your data. Normally you look at it by signing in. The API is a second door: it lets a program ask Wiro for that data and get it back as text, without anyone signing in and clicking around.

You control that door with an API key — a long password you generate in Settings. Whoever holds the key can read your clients, projects and team. Nothing else, and nothing can be changed or deleted through it.

A real example

A client asks whether their project budgets can feed into their own finance dashboard automatically. You generate a key, send it to their developer with a link to this page, and they wire it up in an afternoon. From then on their dashboard updates itself, and you never export another spreadsheet by hand.

You probably don’t need it if

  • Nobody has asked you for it. This is a thing you reach for when someone else requests your data in a format their software can read.
  • You just want a spreadsheet once. Exporting from inside Wiro is faster.
  • You want to push data into Wiro. This is read-only — it can only take data out.
Step 1

Get a key

In Wiro, go to Settings → Integrations → Public REST API, type a label describing who it’s for (“Acme finance dashboard”), and press Generate.

  • The key is shown once. Copy it somewhere safe before closing the box — Wiro stores only a fingerprint, so nobody can look it up for you later.
  • Treat it like a password. Anyone holding it can read your client list. Send it the way you’d send a password, not in a public channel.
  • One key per person or tool. That way you can revoke a single one without breaking everything else.
  • Revoking is instant and permanent — the key stops working on the next request.
Step 2

Hand this to your developer

Everything below is the technical part. The short version: three addresses, one header, JSON back.

Authentication

Send the key as a bearer token on every request. No key, or a revoked one, returns 401.

curl "https://wiro.ae/wapi/v1/clients" \
  -H "Authorization: Bearer wiro_your_key_here"

What comes back

Always an object with data (the records) and pagination (where you are in the list). Records are ordered newest first.

{
  "data": [ { "id": "…", "name": "Acme Corp", … } ],
  "pagination": { "page": 1, "limit": 50, "total": 142, "pages": 3 }
}

Paging

You get 50 records at a time. Pass ?page=2 for the next batch, and ?limit= to change the size — up to 100. Keep going until page reaches pages.

Rate limit

100 requests per minute per key. Going over returns 429; wait a moment and retry.

GET /wapi/v1/clients

Clients

Every client in your agency, newest first.

FieldTypeWhat it is
ididWiro's permanent ID for this client. Use it to match records between systems.
namestringThe client's name as you typed it in Wiro.
companystring or emptyCompany name, if you recorded one.
emailstring or emptyMain email address on the client record.
countrystring or emptyCountry, if set.
industrystring or emptyIndustry, if set.
contact_namestring or emptyDay-to-day contact person at the client.
contact_emailstring or emptyThat contact's email address.
created_atdateWhen the client was added to Wiro.
GET /wapi/v1/projects

Projects

Every project in your agency, newest first.

FieldTypeWhat it is
ididWiro's permanent ID for this project.
namestringThe project name.
statusstringWhere the project stands — the same status you see on the Projects page.
budgetnumber or emptyBudget as a plain number, with no currency symbol. Null if you haven't set one.
deadlinedate or emptyDue date. Null if the project has no deadline.
briefstring or emptyThe project brief, as written.
client_idid or emptyWhich client this belongs to — matches an `id` from Clients. Null for internal work.
assigned_toid or emptyWhich team member owns it — matches an `id` from Team. Null if unassigned.
created_atdateWhen the project was created.
GET /wapi/v1/team

Team

Your active team members, newest first. People you've removed are not included.

FieldTypeWhat it is
ididWiro's permanent ID for this person.
full_namestring or emptyTheir name. Null if they haven't finished setting up their profile.
emailstring or emptyThe email address they sign in with.
rolestringTheir permission level in Wiro — admin or member.
departmentstring or emptyDepartment, if set.
job_titlestring or emptyJob title, if set.
statusstringAlways "active" here, since removed members are left out.
avatar_urlstring or emptyLink to their profile photo. Null if they haven't uploaded one.
created_atdateWhen they joined the agency.

Pagination

The pagination object attached to every response.

FieldTypeWhat it is
pageintegerWhich page you're looking at.
limitintegerHow many records this page holds.
totalintegerHow many records exist in total.
pagesintegerHow many pages there are altogether.

When something goes wrong

Errors come back as { "error": "…" } with one of these status codes.

CodeMeaningWhat to do
401The key is missing, mistyped, or has been revoked.Check the Authorization header, or generate a new key in Settings.
429More than 100 requests in one minute on the same key.Slow down and retry in a few seconds.
500Something broke on Wiro's side.Retry; if it persists, contact support@wiro.ae.

The spec file

openapi.json is this page written for machines instead of people — an OpenAPI 3.1 document. Opening it in a browser looks like a wall of text, which is expected; it isn’t meant to be read directly.

Paste that URL into a tool and it configures itself:

  • Postman or Insomnia — imports all three endpoints ready to call.
  • Zapier, Make or n8n — the starting point for a custom connector.
  • Code generators — turn it into a typed client in one command.

Questions? support@wiro.ae