NAV
cURL

Introduction

The REST API for administration of MEX Connections is used to activate Swedish geographical telephone numbers for receiving SMS on a mobile phone number.

The user account used with the MEX Connection REST API can also be used with Generic Mobiles send and receive SMS REST API.

Getting started

Irrelevant headers will be omitted and json pretty-printed for clarity.

To use the MEX REST API you need an account. Please get in touch with our friendly support team or your sales contact and you'll be up and running in no time!

Email: kund@genericmobile.se
Phone: 020-31 00 41
International: +46 86016666

Base URL: https://api.genericmobile.se/mex/api/v2/

MEX connections configured with the REST API will be visible in the Web portal.

Authentication

All requests must contain an Authorization header. Two different methods are supported, Basic authentication or OAuth 2.0 Bearer token authentication.

Basic Authentication

Basic Authorization header

curl -X GET 'https://api.genericmobile.se/mex/api/v2/' \
  --basic -u Alice:secretPwd

Example HTTP session

GET /mex/api/v2/ HTTP/1.1
Host: api.genericmobile.se
Authorization: Basic QWxpY2U6c2VjcmV0UHdk

Basic authentication can be used for access control, see RFC 7617 for details. In basic authentication the Authorization header contains Basic as first parameter followed by a base64-encoded username:password.

401 Unauthorized

Will be returned if your credentials are wrong or you have insufficient privileges.

Bearer Token Authentication

Get a Bearer token

curl -X GET 'https://api.genericmobile.se/GMIdentity/token' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=password&username=Alice&password=secretPwd'
200 OK
{
    "access_token": "Ec87w-vdziBQW9-tMy87OJRh... ...fkM00O0yFZ",
    "token_type": "bearer",
    "expires_in": 86399
}

Example HTTP session

GET /mex/api/v2/ HTTP/1.1
Host: api.genericmobile.se
Authorization: Bearer Ec87w-vdziBQW9-tMy87OJRh... ...fkM00O0yFZ

In OAuth 2.0 Bearer token authentication the grant type password is used, see RFC 6749 for details.

A token is first generated.

Token URL: https://api.genericmobile.se/GMIdentity/token

The generated token is valid 24 hours and shall be placed in the Authorization header after the Bearer parameter.

401 Unauthorized

Will be returned if your credentials are wrong or you have insufficient privileges.

MEX Connections

Number formats

Telephone numbers shall in variables be given in international format starting with +. When telephone numbers are given in a URL the + sign shall be excluded.

Add connection

Add connection

curl -X POST 'https://api.genericmobile.se/mex/api/v2/connections' \
  --basic -u Alice:secretPwd \
  -H 'Content-Type: application/json' \
  -d '{
        "number": "+46101234567",
        "mobile": "+46707659443",
        "groupId": "d8a6c7bf-287e-11e9-8523-005056a25b64",
        "comment": "MEX connection for Alice"
      }'
201 Created
{
  "id": "46101234567",
  "number": "+46101234567",
  "mobile": "+46707659443",
  "groupId": "d8a6c7bf-287e-11e9-8523-005056a25b64",
  "comment": "MEX connection for Alice",
  "lastmodified": "2022-01-13T15:08:36+00:00"
}

A connection is added by sending a POST with a JSON-object to /connections, see Connection object for details. To add a connection to a group the group must first be created, see MEX Groups.

POST /connections

HTTP Response

201 Created

A successful request contains a connection object.

400 Bad Request

Most error responses from the API will include an error object.

Delete connection

Delete connection

curl -X DELETE 'https://api.genericmobile.se/mex/api/v2/connections/46101234567' \
  --basic -u Alice:secretPwd
204 No Content

A connection is deleted by sending a DELETE to /connections/{id} where {id} is the number without the + sign.

DELETE /connections/{id}

HTTP Response

204 No Content

The connection was successfully deleted.

404 Not Found

The connection was not found.

Delete all connections in a group

Delete all connection in a group

curl -X DELETE 'https://api.genericmobile.se/mex/api/v2/connections?groupId=d8a6c7bf-287e-11e9-8523-005056a25b64' \
  --basic -u Alice:secretPwd
204 No Content

All connections in a group can be deleted in one DELETE call.

DELETE /connections?groupId={groupId}

HTTP Response

204 No Content

The connections were successfully deleted.

404 Not Found

The group was not found.

Delete all connections

Delete all connections

curl -X DELETE 'https://api.genericmobile.se/mex/api/v2/connections?all=true' \
  --basic -u Alice:secretPwd
204 No Content

All connections can be deleted in one DELETE call.

DELETE /connections?all=true

HTTP Response

204 No Content

All connections were successfully deleted.

Update connection

Update connection

curl -X PUT 'https://api.genericmobile.se/mex/api/v2/connections/46101234567' \
  --basic -u Alice:secretPwd \
  -H 'Content-Type: application/json' \
  -d '{
        "mobile": "+46707659443",
        "groupId": null,
        "comment": "MEX connection for Alice"
      }'
200 OK
{
  "id": "46101234567",
  "number": "+46101234567",
  "mobile": "+46707659443",
  "comment": "MEX connection for Alice",
  "lastmodified": "2022-01-13T15:08:36+00:00"
}

To update an existing connection PUT a connection object to /connections/{id}. The number cannot be changed, it's ignored and can be omitted.

PUT /connections/{id}

HTTP Response

200 OK

A successful request contains a connection object.

404 Not Found

The connection was not found.

400 Bad Request

Most error responses from the API will include an error object.

List all connections

List all connections

curl -X GET 'https://api.genericmobile.se/mex/api/v2/connections' \
  --basic -u Alice:secretPwd
200 OK
{
  "connections": [
    {
      "id": "46101234567",
      "number": "+46101234567",
      "mobile": "+46707659443",
      "comment": "MEX connection for Alice",
      "lastmodified": "2022-01-06T15:08:36+00:00"
    },
    {
      "id": "46107654321",
      "number": "+46107654321",
      "mobile": "+46707659443",
      "groupId": "d8a6c484-287e-11e9-8523-005056a25b64",
      "comment": "MEX connection for Bob",
      "lastmodified": "2022-01-10T15:08:36+00:00"
    }
  ]
}

List your MEX connections with GET as the example shows.

GET /connections

HTTP Response

200 OK

A successful request contains a JSON-object with an array of connection objects in connections .

List all connections in a group

List all connections in a group

curl -X GET 'https://api.genericmobile.se/mex/api/v2/connections?groupId=d8a6c484-287e-11e9-8523-005056a25b64' \
  --basic -u Alice:secretPwd
200 OK
{
  "connections": [
    {
      "id": "46107654321",
      "number": "+46107654321",
      "mobile": "+46707659443",
      "groupId": "d8a6c484-287e-11e9-8523-005056a25b64",
      "comment": "MEX connection for Bob",
      "lastmodified": "2022-01-10T15:08:36+00:00"
    }
  ]
}

You can list all connections in a group by using groupId or groupName.

GET /connections?groupId={id}

HTTP Response

200 OK

A successful request contains a JSON-object with an array of connection objects in connections .

404 Not Found

The group was not found.

Get connection

Get connection

curl -X GET 'https://api.genericmobile.se/mex/api/v2/connections/46101234567' \
  --basic -u Alice:secretPwd
200 OK
{
  "id": "46101234567",
  "number": "+46101234567",
  "mobile": "+46707659443",
  "comment": "MEX connection for Alice",
  "lastmodified": "2022-01-06T15:08:36+00:00"
}

Fetch one connection with GET as the example shows.

GET /connections/{id}

HTTP Response

200 OK

A successful request contains a connection object.

404 Not Found

The connection was not found.

Connection object

Parameter Required Type Default Description
id No String - Resource identifier (same as number but without leading +.
number In POST String - Swedish phone number +46101234567.
mobile Yes String - Swedish mobile phone number +46707659443.
groupId No String(36) null The group the connection belongs to.
comment No String(0..100) null Optional user defined text.
lastmodified No String(25) - ISO-8601 DateTime.

MEX Groups

The geographical telephone numbers that are activated for receiving SMS can be related to a group. Groups are only used for administrational reasons, for example it is possible to use a separate group name for all telephone numbers belonging to a certain company or part of a company.

Add group

Add group

curl -X POST 'https://api.genericmobile.se/mex/api/v2/groups' \
  --basic -u Alice:secretPwd \
  -H 'Content-Type: application/json' \
  -d '{
        "name": "Group One"
      }'
201 Created
{
  "id": "d8a6c7bf-287e-11e9-8523-005056a25b64",
  "name": "Group One"
}

A group is added by sending a POST with a JSON-object to /groups, see group object for details.

POST /groups

HTTP Response

201 Created

A successful request contains a group object.

400 Bad Request

Most error responses from the API will include an error object.

Delete group

Delete group

curl -X DELETE 'https://api.genericmobile.se/mex/api/v2/groups/d8a6c7bf-287e-11e9-8523-005056a25b64' \
  --basic -u Alice:secretPwd
204 No Content

Deleting a group does not delete the group members but they will no longer belong to any group.

DELETE /groups/{id}

HTTP Response

204 No Content

404 Not Found

The group was not found.

Update group

Update group

curl -X POST 'https://api.genericmobile.se/mex/api/v2/groups/d8a6c7bf-287e-11e9-8523-005056a25b64' \
  --basic -u Alice:secretPwd \
  -H 'Content-Type: application/json' \
  -d '{
        "name": "Group One"
      }'
201 Created
{
  "id": "d8a6c7bf-287e-11e9-8523-005056a25b64",
  "name": "Group One"
}

To update an existing group PUT a group object to /groups/{id}. The id cannot be changed, it's value in the group object is ignored and can be omitted.

PUT /groups/{id}

HTTP Response

200 OK

A successful request contains a group object.

404 Not Found

The group was not found.

400 Bad Request

Most error responses from the API will include an error object.

Update group name or cost

Update group name

curl -X POST 'https://api.genericmobile.se/mex/api/v2/groups/d8a6c7bf-287e-11e9-8523-005056a25b64/name' \
  --basic -u Alice:secretPwd \
  -H 'Content-Type: application/json' \
  -d '"New name"'
201 Created
{
  "id": "d8a6c7bf-287e-11e9-8523-005056a25b64",
  "name": "New name"
}

To update a single parameter, name or cost, in an existing group PUT the new value to /groups/{id}/name or /groups/{id}/cost.

PUT /groups/{id}/name

HTTP Response

200 OK

A successful request contains a group object.

404 Not Found

The group was not found.

400 Bad Request

Most error responses from the API will include an error object.

List all groups

List all groups

curl -X GET 'https://api.genericmobile.se/mex/api/v2/groups' \
  --basic -u Alice:secretPwd
200 OK
{
  "groups": [
    {
        "id": "d8a6c7bf-287e-11e9-8523-005056a25b64",
        "name": "Group One"
    }
  ]
}

List your groups with GET as the example shows.

GET /connections

HTTP Response

200 OK

A successful request contains a JSON-object with an array of group objects in groups .

Get group

Get group

curl -X GET 'https://api.genericmobile.se/mex/api/v2/groups/d8a6c7bf-287e-11e9-8523-005056a25b64' \
  --basic -u Alice:secretPwd
200 OK
{
  "id": "d8a6c7bf-287e-11e9-8523-005056a25b64",
  "name": "Group One"
}

Fetch a group with GET as the example shows.

GET /groups/{id}

HTTP Response

200 OK

A successful request contains a group object.

404 Not Found

The group was not found.

Group object

Parameter Required Type Default Description
id No String(36) - Resource identifier.
name Yes String(1..100) - A unique name for the group.
cost No UInt32 0 cost can only be used by and is only visible to selected partners.

Errors

HTTP response codes

Success

HTTPS Code Status Description
200 OK Successful request.
201 Created Successful request, content was created.
204 No Content Successful request, no content will be returned.

Client Errors

HTTPS Code Status Description
400 Bad request Something in the request is missing or wrong.
401 Unauthorized Authentication failed.
403 Forbidden The request is correct but cannot be performed.
404 Not found Resource not found.
405 Method not allowed The method specified is not allowed for the resource.
406 Not Acceptable Content generated is not matched with the Accept header.
411 Length Required Content-Length header is missing or wrong.
415 Unsupported Media Type Content-Type header is missing or wrong.

Server Errors

HTTPS Code Status Description
500 Internal Server Error Server could not process the request due to internal error.
502 Bad Gateway Invalid response or could not reach upstream server or application pool.
503 Service unavailable Server is currently unavailable or down for maintenance.

Error object

Example of error object

400 Bad Request
{
  "error": {
    "code": "ERR_VALIDATION_FAILED",
    "message": "Validation failed",
    "target": "MexConnection",
    "details": [
      {
        "code": "ERR_INVALID_NUMBER",
        "message": "Number must be in international format",
        "target": "mobile"
      }
    ]
  }
}

Most error responses from the API will include an error object. The error object always contains code and message. It may contain target, details and innererror.

Error codes

Code Message
ERR_UNAUTHORIZED Authorization has been denied for this request
ERR_VALIDATION_FAILED Validation failed
ERR_PROPERTY_REQUIRED Property is required
ERR_PROPERTY_NOT_ALLOWED Property not allowed
ERR_PROPERTY_LENGTH_EXCEEDED Property max length exceeded
ERR_INVALID_NUMBER Number must be in international format
ERR_SWE_ONLY Only swedish numbers allowed
ERR_MCL_NOT_ALLOWED Minicall numbers not allowed
ERR_MOBILE_NOT_ALLOWED Mobile phone numbers not allowed
ERR_MOBILE_ONLY Mobile must be to a mobile phone
ERR_NUMBER_NOT_FOUND Number not found
ERR_NUMBER_ALREADY_EXISTS Number already exists
ERR_NUMBER_CANNOT_BE_CHANGED Number cannot be changed
ERR_INVALID_GROUPID GroupId not valid
ERR_GROUP_EMPTY Group name cannot be empty
ERR_GROUP_ALREADY_EXISTS A group with this name already exists
ERR_GROUP_NOT_FOUND Group not found
ERR_INBOX_USERID_REQUIRED Inbox cannot be used, account not connected to a SmsWeb UserId
ERR_INBOX_ONLY Inbox cannot be combined with mobile
ERR_DATABASE Database error
ERR_OTHER Unexpected error