Support tickets

Open support tickets with the Blooio team, reply to them, close them, and check on call-forwarding requests.

A support ticket is a conversation between your organization and the Blooio team. The same tickets show in the dashboard under Tickets in the account menu, so a ticket opened over the API can be followed up from either place.

Call-forwarding requests are tickets too. When you ask Blooio to forward a number's calls, you get back a ticket_id, and you check on the request by reading that ticket.

Open a ticket

curl -X POST https://api.blooio.com/v4/tickets \
  -H "Authorization: Bearer api_..." \
  -H "Content-Type: application/json" \
  -d '{ "type": "technical", "content": "Messages from +15551230001 are stuck as sent." }'
Try it

type is one of support, billing, technical, feature_request, or call_forwarding. content is the request itself, up to 10,000 characters.

{
  "data": {
    "id": "tkt_...",
    "type": "technical",
    "status": "open",
    "priority": "medium",
    "content": "Messages from +15551230001 are stuck as sent.",
    "forwarding": null,
    "can_comment": true,
    "created_at": 1735689600000,
    "updated_at": 1735689600000
  }
}

Priority is set by Blooio support

Every ticket opens at medium. Blooio support raises or lowers it as they triage. priority is read-only: sending it when you open or update a ticket returns 422 priority_not_allowed.

Follow a ticket

List your tickets, newest first, with the usual cursor pagination. Filter by status or type:

curl "https://api.blooio.com/v4/tickets?status=waiting_on_customer" \
  -H "Authorization: Bearer api_..."
Try it

A ticket's status is one of:

Status Meaning
open Not picked up yet.
in_progress Blooio support is working on it.
waiting_on_customer Support needs a reply from you.
closed Resolved.

Read the conversation with GET /v4/tickets/{ticket_id}/comments, and reply with:

curl -X POST https://api.blooio.com/v4/tickets/tkt_.../comments \
  -H "Authorization: Bearer api_..." \
  -H "Content-Type: application/json" \
  -d '{ "content": "Here is the message id: msg_..." }'
Try it

Replying to a ticket that is waiting_on_customer moves it back to in_progress. Closed tickets don't take replies, and neither do tickets Blooio opens for you, such as purchase records. Those return can_comment: false.

Close a ticket

Close a ticket you no longer need:

curl -X PATCH https://api.blooio.com/v4/tickets/tkt_... \
  -H "Authorization: Bearer api_..." \
  -H "Content-Type: application/json" \
  -d '{ "status": "closed" }'
Try it

status is the only field you can change. Purchase, system, and billing tickets are managed by Blooio and return 403.

Check a call-forwarding request

Request forwarding for a dedicated or inbound number you own:

curl -X POST https://api.blooio.com/v4/me/numbers/%2B15551230001/call-forwarding \
  -H "Authorization: Bearer api_..." \
  -H "Content-Type: application/json" \
  -d '{ "forward_to": "+15557654321" }'
Try it
{
  "data": {
    "success": true,
    "ticket_id": "tkt_...",
    "status": "open",
    "number": "+15551230001",
    "forward_to": "+15557654321"
  }
}

Forwarding isn't instant. Poll the ticket for its forwarding block:

curl https://api.blooio.com/v4/tickets/tkt_... \
  -H "Authorization: Bearer api_..."
Try it
{
  "data": {
    "id": "tkt_...",
    "type": "call_forwarding",
    "status": "in_progress",
    "priority": "medium",
    "content": "Please forward +15551230001 to +15557654321",
    "forwarding": {
      "state": "in_progress",
      "source_number": "+15551230001",
      "destination_number": "+15557654321",
      "completed_at": null
    },
    "can_comment": true,
    "created_at": 1735689600000,
    "updated_at": 1735689660000
  }
}
forwarding.state Meaning
pending Not started yet.
in_progress Blooio is setting up forwarding with the carrier.
completed Calls to the source number now forward. completed_at says when.
failed The last attempt failed, and the ticket stays open with Blooio support.

Blooio closes the ticket once forwarding is in place, so a closed ticket always reads completed, whatever its last attempt reported. Poll every minute or so until state is completed, and read the ticket's comments if it reads failed.

Scopes

API keys can call every endpoint on this page. Blooio Apps need these scopes:

Operation Endpoint Scope
List / get tickets GET /v4/tickets, GET /v4/tickets/{ticket_id} tickets:read
List comments GET /v4/tickets/{ticket_id}/comments tickets:read
Open a ticket POST /v4/tickets tickets:write
Reply POST /v4/tickets/{ticket_id}/comments tickets:write
Close a ticket PATCH /v4/tickets/{ticket_id} tickets:write
Request call forwarding POST /v4/me/numbers/{number}/call-forwarding numbers:manage

An app that requests call forwarding and then checks on it needs both numbers:manage and tickets:read.