Integrations¶
The Integrations API provides endpoints to manage how Ella Core connects to external systems: SMS settings and SMSCs, IMS settings, allowed IMS peers, IMS application servers and service profiles, roaming (roaming partners, roaming Diameter peers, and the SEPP), and the Diameter status.
Get the SMS Settings¶
This path returns Ella Core's serving node number.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/sms |
Parameters¶
None
Sample Response¶
{
"result": {
"servingNodeNumber": "+15550001111"
}
}
Update the SMS Settings¶
This path sets Ella Core's serving node number. SMS is available once the serving node number is set and at least one SMSC is configured.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/sms |
Parameters¶
servingNodeNumber(string): Ella Core's E.164 number for SMS. An empty string clears it.
Sample Request¶
{
"servingNodeNumber": "+15550001111"
}
Sample Response¶
{
"result": {
"message": "SMS settings updated successfully"
}
}
List SMSCs¶
This path returns the list of SMSCs.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/sms/smscs |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"name": "main",
"serviceCentres": ["+15550000000"],
"nodes": [
{
"originHost": "smsc1.node.example.org",
"address": "192.0.2.10",
"port": 3868,
"status": {
"state": "open",
"originHost": "smsc1.node.example.org",
"realm": "example.org",
"since": "2026-09-29T13:44:09Z"
}
},
{
"originHost": "smsc2.node.example.org",
"address": "192.0.2.11",
"port": 3868,
"status": {
"state": "down",
"since": "2026-09-29T13:44:09Z",
"error": "dial 192.0.2.11:3868: connection refused"
}
}
]
}
]
}
}
Get an SMSC¶
This path returns an SMSC.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/sms/smscs/{name} |
Parameters¶
None
Create an SMSC¶
This path creates an SMSC.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/sms/smscs |
Parameters¶
name(string): The name of the SMSC.serviceCentres(array of strings): The E.164 service centre numbers the SMSC serves, for example+15550000000.nodes(array of objects): The SMSC's Diameter nodes.originHost(optional string): The node's Origin-Host. When set, the node must give this Origin-Host when it connects.address(string): The IPv4 or IPv6 address or the host name of the node's Diameter endpoint.port(optional integer): The SCTP port of the node's Diameter endpoint, between 1 and 65535. Defaults to3868.
Sample Request¶
{
"name": "main",
"serviceCentres": ["+15550000000"],
"nodes": [
{
"originHost": "smsc1.node.example.org",
"address": "192.0.2.10"
},
{
"originHost": "smsc2.node.example.org",
"address": "192.0.2.11"
}
]
}
Sample Response¶
{
"result": {
"name": "main",
"serviceCentres": ["+15550000000"],
"nodes": [
{
"originHost": "smsc1.node.example.org",
"address": "192.0.2.10",
"port": 3868
},
{
"originHost": "smsc2.node.example.org",
"address": "192.0.2.11",
"port": 3868
}
]
}
}
Update an SMSC¶
This path updates an SMSC.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/sms/smscs/{name} |
Parameters¶
Same as Create an SMSC, without name.
Sample Response¶
{
"result": {
"message": "SMSC updated successfully"
}
}
Delete an SMSC¶
This path deletes an SMSC.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/sms/smscs/{name} |
Parameters¶
None
Sample Response¶
{
"result": {
"message": "SMSC deleted successfully"
}
}
Get the IMS Settings¶
This path returns the P-CSCF addresses, the voice status, the IMS home domain, whether IMS voice is advertised, and whether peers are restricted to the allowed IMS peers.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims |
Parameters¶
None
Sample Response¶
{
"result": {
"pcscfAddresses": ["192.0.2.20", "2001:db8::20"],
"voiceStatus": "enabled",
"homeDomain": "ims.example.org",
"derivedHomeDomain": "ims.mnc001.mcc001.3gppnetwork.org",
"advertiseVoice": true,
"restrictPeers": true
}
}
| Field | Description |
|---|---|
voiceStatus |
Whether the IMS configuration is ready for voice: enabled, no_pcscf, no_ims_data_network (no IMS data network named ims), or ip_family_mismatch (no P-CSCF address shares an IP version with the pools of the ims data network). |
homeDomain |
The configured IMS home domain. Empty when derivedHomeDomain is used. |
advertiseVoice |
true when Ella Core tells home UEs that IMS voice is supported. |
restrictPeers |
true when only peers matching an allowed IMS peer may connect. |
Update the IMS Settings¶
This path sets the P-CSCF addresses, the IMS home domain, whether IMS voice is advertised, and whether peers are restricted to the allowed IMS peers. Changing the home domain moves the identities of the IMS application servers to the new domain and de-registers the subscribers whose public identities change.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/ims |
Parameters¶
pcscfAddresses(array of strings): Unicast IPv4 and IPv6 addresses or host names of the IMS, in preference order. At most 10, with at most 5 addresses of each IP version, without duplicates. UEs receive the addresses of the IP version they request. An empty list clears it. A changed list applies to new IMS sessions.homeDomain(string): The IMS home domain, a domain name with at least two labels. An empty string, or the derived domain itself, uses the domain derived from the operator ID,ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org. The EPC realm and3gppnetwork.orgdomains of other PLMNs are rejected. Ella Core accepts Diameter requests addressed to it.advertiseVoice(boolean): Whether Ella Core tells every home UE that IMS voice is supported. It applies at each UE's next registration, attach or tracking area update. Roamers are never told.restrictPeers(boolean): Whether only peers matching an allowed IMS peer may connect. With no allowed IMS peer, every peer is rejected. Turning it on disconnects connected peers that match none.
All four are required.
Sample Request¶
{
"pcscfAddresses": ["pcscf.ims.example.org", "192.0.2.20", "2001:db8::20"],
"homeDomain": "ims.example.org",
"advertiseVoice": true,
"restrictPeers": true
}
Sample Response¶
{
"result": {
"message": "IMS settings updated successfully"
}
}
List Allowed IMS Peers¶
This path returns the allowed IMS peers, each with this node's connections from the peers it matches.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/allowed-peers |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"name": "cscf",
"realm": "ims.example.org",
"addresses": ["10.3.0.0/24", "2001:db8:3::/64"],
"connections": [
{
"state": "open",
"originHost": "scscf.ims.example.org",
"realm": "ims.example.org",
"since": "2026-10-05T13:44:09Z"
}
]
}
]
}
}
Get an Allowed IMS Peer¶
This path returns an allowed IMS peer.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/allowed-peers/{name} |
Parameters¶
None
Create an Allowed IMS Peer¶
This path creates an allowed IMS peer. At most 32 allowed IMS peers can be configured.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/ims/allowed-peers |
Parameters¶
name(string): The name of the allowed IMS peer.originHost(optional string): The Origin-Host the peer must give, a fully qualified domain name, compared case-insensitively.realm(optional string): The Origin-Realm the peer must give, a fully qualified domain name.addresses(array of strings): The IPv4 or IPv6 addresses or CIDR prefixes the peer connects from, at least one and at most 16, e.g.10.3.0.5or10.3.0.0/24. A bare address means a/32or/128prefix.0.0.0.0/0and::/0allow any source address. They are returned as canonical prefixes, sorted and without duplicates.
At least one of originHost and realm is required.
A Diameter peer matches an allowed IMS peer when it connects from one of the addresses and gives the originHost and realm that are set. Matching peers are labelled ims. When restrictPeers is set in the IMS settings, other peers are rejected.
Sample Request¶
{
"name": "cscf",
"realm": "ims.example.org",
"addresses": ["10.3.0.0/24", "2001:db8:3::/64"]
}
Responses¶
| Status | Condition |
|---|---|
201 |
Returns the created allowed IMS peer. |
400 |
Invalid parameters. |
409 |
The name is taken, or another allowed IMS peer has the same Origin-Host, realm and addresses. |
Sample Response¶
{
"result": {
"name": "cscf",
"realm": "ims.example.org",
"addresses": ["10.3.0.0/24", "2001:db8:3::/64"],
"connections": []
}
}
Update an Allowed IMS Peer¶
This path replaces the Origin-Host, realm and addresses of an allowed IMS peer. When restrictPeers is set, connected peers that no longer match any allowed IMS peer are disconnected.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/ims/allowed-peers/{name} |
Parameters¶
Same as Create an Allowed IMS Peer, without name.
Sample Response¶
{
"result": {
"message": "Allowed IMS peer updated successfully"
}
}
Delete an Allowed IMS Peer¶
This path deletes an allowed IMS peer. When restrictPeers is set, connected peers that no longer match any allowed IMS peer are disconnected.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/ims/allowed-peers/{name} |
Parameters¶
None
Sample Response¶
{
"result": {
"message": "Allowed IMS peer deleted successfully"
}
}
List IMS Application Servers¶
This path returns the list of IMS application servers, sorted by name.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/application-servers |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"name": "mcptt",
"serverName": "sip:mcptt.ims.example.org",
"publicServiceIdentities": ["sip:!.*[email protected]"]
}
]
}
}
Get an IMS Application Server¶
This path returns an IMS application server.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/application-servers/{name} |
Parameters¶
None
Create an IMS Application Server¶
This path creates an IMS application server.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/ims/application-servers |
Parameters¶
name(string): The name of the application server.serverName(string): The SIP URI of the application server.publicServiceIdentities(optional array of strings): The SIP or tel URIs the application server hosts. A wildcarded identity uses the!regex!syntax, for examplesip:!.*[email protected]. Identities are stored in canonical form: lowercase scheme and host, no URI parameters, and tel numbers without visual separators. An identity can't be hosted by, or overlap one of, another application server, be or cover a subscriber's public identity (sip:+<msisdn>@<IMS home domain>,tel:+<msisdn>orsip:mcptt-<msisdn>@<IMS home domain>), or take the form of a subscriber identity (sip:<IMSI>@<IMS home domain>).
Sample Request¶
{
"name": "mcptt",
"serverName": "sip:mcptt.ims.example.org",
"publicServiceIdentities": ["sip:!.*[email protected]"]
}
Sample Response¶
{
"result": {
"name": "mcptt",
"serverName": "sip:mcptt.ims.example.org",
"publicServiceIdentities": ["sip:!.*[email protected]"]
}
}
Update an IMS Application Server¶
This path updates an IMS application server. The server name and the public service identities are replaced.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/ims/application-servers/{name} |
Parameters¶
Same as Create an IMS Application Server, without name.
Sample Response¶
{
"result": {
"message": "Application server updated successfully"
}
}
Delete an IMS Application Server¶
This path deletes an IMS application server. An application server used by the initial filter criteria of a service profile can't be deleted.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/ims/application-servers/{name} |
Parameters¶
None
Sample Response¶
{
"result": {
"message": "Application server deleted successfully"
}
}
List IMS Service Profiles¶
This path returns the IMS service profiles, sorted by name.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/service-profiles |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"name": "mcptt",
"initialFilterCriteria": [
{
"priority": 0,
"applicationServerName": "mcptt",
"trigger": {
"conditionsMatch": "all",
"groups": [{"conditions": [{"method": "REGISTER"}]}]
},
"defaultHandling": "SESSION_CONTINUED",
"includeRegisterRequest": true,
"includeRegisterResponse": true
}
]
}
]
}
}
Get an IMS Service Profile¶
This path returns an IMS service profile.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/ims/service-profiles/{name} |
Parameters¶
None
Create an IMS Service Profile¶
This path creates an IMS service profile.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/ims/service-profiles |
Parameters¶
name(string): The name of the service profile.initialFilterCriteria(optional array): In priority order (TS 29.228 Annex B.2.2). Each criterion has:applicationServerName(string): The name of the IMS application server matching requests are sent to.trigger(optional object): Without it, the criterion matches every request.conditionsMatch(string):allif a group matches when all of its conditions match, and the trigger matches when any group matches.anyif a group matches when any of its conditions matches, and the trigger matches when every group matches.groups(array): Groups ofconditions. Each condition has an optionalnegated(boolean) and exactly one ofrequestURI(string),method(string),sipHeader({header, content}),sessionCase(ORIGINATING_REGISTERED,TERMINATING_REGISTERED,TERMINATING_UNREGISTERED,ORIGINATING_UNREGISTEREDorORIGINATING_CDIV) andsessionDescription({line, content}). With theREGISTERmethod,registrationTypeslists up to two ofINITIAL_REGISTRATION,RE-REGISTRATIONandDE-REGISTRATION. Request URIs, headers, lines and contents are extended regular expressions.
profilePart(optional string):REGISTEREDorUNREGISTERED, the part of the user profile the criterion belongs to. Omitted for both.defaultHandling(optional string):SESSION_CONTINUEDorSESSION_TERMINATED, what the S-CSCF does when the application server can't be reached.serviceInfo(optional string): Passed transparently to the application server.includeRegisterRequest(optional boolean)includeRegisterResponse(optional boolean)
The priority of a criterion is its position in the list. It is returned on reads and ignored on writes.
Sample Request¶
{
"name": "conference",
"initialFilterCriteria": [
{
"applicationServerName": "conference",
"trigger": {
"conditionsMatch": "all",
"groups": [{"conditions": [{"requestURI": "^sip:conference@.*$"}]}]
},
"defaultHandling": "SESSION_TERMINATED"
}
]
}
Sample Response¶
{
"result": {
"name": "conference",
"initialFilterCriteria": [
{
"priority": 0,
"applicationServerName": "conference",
"trigger": {
"conditionsMatch": "all",
"groups": [{"conditions": [{"requestURI": "^sip:conference@.*$"}]}]
},
"defaultHandling": "SESSION_TERMINATED",
"includeRegisterRequest": false,
"includeRegisterResponse": false
}
]
}
}
Update an IMS Service Profile¶
This path replaces the initial filter criteria of an IMS service profile. Registered subscribers whose profile assigns it get the new user profile.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/ims/service-profiles/{name} |
Parameters¶
initialFilterCriteria(array): In priority order, as in Create an IMS Service Profile. An empty list removes all of them.
Sample Response¶
{
"result": {
"message": "Service profile updated successfully"
}
}
Delete an IMS Service Profile¶
This path deletes an IMS service profile. A service profile a profile assigns can't be deleted.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/ims/service-profiles/{name} |
Parameters¶
None
Sample Response¶
{
"result": {
"message": "Service profile deleted successfully"
}
}
List Roaming Partners¶
This path returns the list of roaming partners. For a partner with a 5G agreement, n32 gives the N32-c context of this node, when it has interfaces.n32.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/roaming/partners |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"id": "0199a3c2-1f4e-7d21-8c9b-5a6e7f8091a2",
"name": "Partner Telecom",
"plmns": [
{"mcc": "999", "mnc": "70"}
],
"profileName": "roamers",
"sepp": {
"fqdn": "sepp1.5gc.mnc070.mcc999.3gppnetwork.org",
"n32cURI": "https://sepp1.5gc.mnc070.mcc999.3gppnetwork.org:443",
"trustAnchorPEM": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"
},
"diameterPeerID": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b",
"n32": {
"state": "established"
}
}
]
}
}
| N32 field | Description |
|---|---|
state |
idle, establishing, established, failed, or unknown (the handshake could not start). |
peer |
The partner SEPP the context is with, when the handshake was redirected. |
lastError |
The reason of the last failure. |
Create a Roaming Partner¶
This path creates a new roaming partner.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/roaming/partners |
Parameters¶
name(string): The name of the partner. Must be unique.plmns(array): The partner's PLMN IDs, at least one.mcc(string): 3 digits.mnc(string): 2 or 3 digits.nrfAPIRoot(string, optional): The apiRoot (httporhttps) of the NRF of this PLMN, for its roamers. Defaults tohttps://nrf.5gc.mnc<MNC>.mcc<MCC>.3gppnetwork.orgof this PLMN ID. Needssepp.
profileName(string): The name of the profile applied to the partner's roamers.sepp(object, optional): The 5G agreement.fqdn(string): The partner SEPP's FQDN, as in its certificate:<host>.5gc.mnc<MNC>.mcc<MCC>.3gppnetwork.org, or<host>.5gc.mnc<MNC>.mcc<MCC>.<IPX ID>.ipxnetwork.org, for one of the partner's PLMN IDs.n32cURI(string): The apiRoot of the partner SEPP's N32-c endpoint:https, host, optional port and optional path prefix.n32fURI(string, optional): The apiRoot of the partner SEPP's N32-f endpoint. Defaults ton32cURI.trustAnchorPEM(string): The CA certificates that the partner SEPP's certificate chains to, or the partner's self-signed certificate, in PEM. Each certificate must be valid, with an ECDSA key or an RSA key of at least 2048 bits.
diameterPeerID(string, optional): The ID of the roaming Diameter peer of the 4G agreement.
Sample Request¶
{
"name": "Partner Telecom",
"plmns": [{"mcc": "999", "mnc": "70"}],
"profileName": "roamers",
"sepp": {
"fqdn": "sepp1.5gc.mnc070.mcc999.3gppnetwork.org",
"n32cURI": "https://sepp1.5gc.mnc070.mcc999.3gppnetwork.org:443",
"trustAnchorPEM": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"
},
"diameterPeerID": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b"
}
Responses¶
| Status | Condition |
|---|---|
201 |
Returns the created partner. |
400 |
Invalid parameters. |
404 |
The profile or the roaming Diameter peer does not exist. |
409 |
The name is taken, or a PLMN ID conflicts. |
Sample Response¶
{
"result": {
"id": "0199a3c2-1f4e-7d21-8c9b-5a6e7f8091a2",
"name": "Partner Telecom",
"plmns": [
{"mcc": "999", "mnc": "70"}
],
"profileName": "roamers",
"sepp": {
"fqdn": "sepp1.5gc.mnc070.mcc999.3gppnetwork.org",
"n32cURI": "https://sepp1.5gc.mnc070.mcc999.3gppnetwork.org:443",
"trustAnchorPEM": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"
},
"diameterPeerID": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b"
}
}
Get a Roaming Partner¶
This path returns the details of a specific roaming partner, as in List Roaming Partners.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/roaming/partners/{id} |
Parameters¶
None
Update a Roaming Partner¶
This path updates an existing roaming partner. When a removed PLMN ID or agreement still has roamers, all the partner's roamers are first deregistered on every node, and purged at their home network.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/roaming/partners/{id} |
Parameters¶
The parameters of Create a Roaming Partner.
Responses¶
| Status | Condition |
|---|---|
200 |
The partner is updated. |
400 |
Invalid parameters. |
404 |
The partner, the profile or the roaming Diameter peer does not exist. |
409 |
The name is taken, a PLMN ID conflicts, or the roamers were not all deregistered within one minute. Nothing is changed. |
Sample Response¶
{
"result": {
"message": "Roaming partner updated successfully"
}
}
Delete a Roaming Partner¶
This path deletes a roaming partner. Its roamers are first deregistered on every node, and purged at their home network. The usage of its roamers is kept.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/roaming/partners/{id} |
Parameters¶
None
Responses¶
| Status | Condition |
|---|---|
200 |
The partner is deleted. |
404 |
The partner does not exist. |
409 |
The roamers were not all deregistered within one minute. Nothing is changed. |
Sample Response¶
{
"result": {
"message": "Roaming partner deleted successfully"
}
}
Re-run the N32 Handshake¶
This path starts a new N32-c handshake with the partner's SEPP on this node. It returns the state right after the start.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/roaming/partners/{id}/handshake |
Parameters¶
None
Responses¶
| Status | Condition |
|---|---|
202 |
The handshake started. |
404 |
The partner does not exist. |
409 |
The partner has no 5G agreement, or this node has no interfaces.n32. |
Sample Response¶
{
"result": {
"n32": {
"state": "establishing"
}
}
}
List Roaming Diameter Peers¶
This path returns the list of roaming Diameter peers: the HSS or Diameter Edge Agent of roaming partners. status gives the state of this node's connection to the peer.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/roaming/diameter-peers |
Parameters¶
None
Sample Response¶
{
"result": {
"items": [
{
"id": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b",
"originHost": "hss.epc.mnc070.mcc999.3gppnetwork.org",
"address": "198.51.100.5",
"port": 3868,
"status": {
"state": "open",
"originHost": "hss.epc.mnc070.mcc999.3gppnetwork.org",
"realm": "epc.mnc070.mcc999.3gppnetwork.org",
"since": "2026-10-05T13:44:09Z"
}
}
]
}
}
Create a Roaming Diameter Peer¶
This path creates a new roaming Diameter peer.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/roaming/diameter-peers |
Parameters¶
address(string): The IPv4 or IPv6 address of the peer.port(integer, optional): The peer's SCTP port. Defaults to3868.originHost(string, optional): The peer's Origin-Host. When set, the peer must give this Origin-Host when it connects.
Responses¶
| Status | Condition |
|---|---|
201 |
Returns the created peer. |
400 |
Invalid parameters. |
409 |
Another Diameter peer has the identity or the address. |
Sample Response¶
{
"result": {
"id": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b",
"originHost": "hss.epc.mnc070.mcc999.3gppnetwork.org",
"address": "198.51.100.5",
"port": 3868
}
}
Get a Roaming Diameter Peer¶
This path returns the details of a specific roaming Diameter peer.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/roaming/diameter-peers/{id} |
Parameters¶
None
Sample Response¶
{
"result": {
"id": "0199a3c2-5c1e-7b8e-9f3a-2d4c6e8f0a1b",
"originHost": "hss.epc.mnc070.mcc999.3gppnetwork.org",
"address": "198.51.100.5",
"port": 3868
}
}
Update a Roaming Diameter Peer¶
This path updates an existing roaming Diameter peer.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/roaming/diameter-peers/{id} |
Parameters¶
address(string): The IPv4 or IPv6 address of the peer.port(integer): The peer's SCTP port.originHost(string, optional): The peer's Origin-Host. When set, the peer must give this Origin-Host when it connects.
Sample Response¶
{
"result": {
"message": "Roaming Diameter peer updated successfully"
}
}
Delete a Roaming Diameter Peer¶
This path deletes a roaming Diameter peer.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/roaming/diameter-peers/{id} |
Parameters¶
None
Sample Response¶
{
"result": {
"message": "Roaming Diameter peer deleted successfully"
}
}
Get the SEPP Status¶
This path returns the N32 listener and SEPP ID of this node, the stored certificate of each SEPP ID, and the trust anchors to give roaming partners.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/roaming/sepp |
Parameters¶
None
Sample Response¶
{
"result": {
"listener": {
"seppID": 1,
"configured": true,
"address": "192.0.2.11",
"port": 443,
"listening": true
},
"certificates": [
{
"seppID": 1,
"fqdn": "sepp1.5gc.mnc001.mcc001.3gppnetwork.org",
"source": "generated",
"subject": "CN=sepp1.5gc.mnc001.mcc001.3gppnetwork.org,O=5gc.mnc001.mcc001.3gppnetwork.org",
"sans": ["sepp1.5gc.mnc001.mcc001.3gppnetwork.org"],
"issuer": "CN=SEPP CA,O=5gc.mnc001.mcc001.3gppnetwork.org",
"notBefore": "2026-10-01T08:00:00Z",
"notAfter": "2029-10-01T08:00:00Z",
"fingerprint": "sha256:a1b2...7e",
"trustAnchorFingerprint": "sha256:5f0c...9a"
}
],
"trustAnchors": [
{
"source": "generated",
"subject": "CN=SEPP CA,O=5gc.mnc001.mcc001.3gppnetwork.org",
"fingerprint": "sha256:5f0c...9a",
"notAfter": "2036-10-01T08:00:00Z",
"pem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n",
"seppIDs": [1, 2]
}
]
}
}
seppIDs lists the nodes that use each trust anchor.
Import a SEPP Certificate¶
This path replaces a node's SEPP certificate with one issued by your CA. When the FQDN or the trust anchor changes, the node runs the N32 handshake again with every partner.
| Method | Path |
|---|---|
| PUT | /api/v1/integrations/roaming/sepp/nodes/{seppID}/certificate |
Parameters¶
certificateChainPEM(string): The certificate, then any intermediates, ending with the CA certificate that partners trust. The certificate must be an end-entity certificate with keyUsage digitalSignature, extendedKeyUsage serverAuth and clientAuth (or none), and a subjectAltName DNS name under5gc.mnc<MNC>.mcc<MCC>.3gppnetwork.orgof your PLMN ID.privateKeyPEM(string): The certificate's private key: ECDSA P-256 or P-384, or RSA of at least 2048 bits.fqdn(string, optional): The node's SEPP FQDN, when the certificate has several DNS names. Defaults to the subject CN.
Responses¶
| Status | Condition |
|---|---|
200 |
Returns the imported certificate, as listed in Get the SEPP Status, with warnings: a missing extendedKeyUsage, a validity over 3 years, or a trust anchor that partners must import. |
400 |
Invalid certificate or key. |
409 |
Another node has this FQDN. |
Sample Response¶
{
"result": {
"seppID": 1,
"fqdn": "sepp1.5gc.mnc001.mcc001.3gppnetwork.org",
"source": "imported",
"subject": "CN=sepp1.5gc.mnc001.mcc001.3gppnetwork.org",
"sans": ["sepp1.5gc.mnc001.mcc001.3gppnetwork.org"],
"issuer": "CN=Operator Root CA",
"notBefore": "2026-10-01T08:00:00Z",
"notAfter": "2028-10-01T08:00:00Z",
"fingerprint": "sha256:d4e5...01",
"trustAnchorFingerprint": "sha256:77aa...3c",
"warnings": [
"The trust anchor of this node changed: every roaming partner must import the new trust anchor before N32 with this node works again"
]
}
}
Delete a SEPP Certificate¶
This path deletes a node's SEPP certificate, generated or imported. The node then generates a new one signed by the cluster SEPP CA. Use it to return to a generated certificate after an import.
| Method | Path |
|---|---|
| DELETE | /api/v1/integrations/roaming/sepp/nodes/{seppID}/certificate |
Parameters¶
None
Responses¶
| Status | Condition |
|---|---|
200 |
The certificate was deleted. |
400 |
seppID is not between 1 and 63. |
404 |
The node has no SEPP certificate. |
Regenerate the SEPP CA¶
This path replaces the cluster SEPP CA and deletes every generated SEPP certificate; each node then generates a new one with the new CA. Imported certificates are kept.
| Method | Path |
|---|---|
| POST | /api/v1/integrations/roaming/sepp/ca/regenerate |
Parameters¶
None
Sample Response¶
{
"result": {
"trustAnchor": {
"source": "generated",
"subject": "CN=SEPP CA,O=5gc.mnc001.mcc001.3gppnetwork.org",
"fingerprint": "sha256:c47d...12",
"notAfter": "2036-11-03T10:00:00Z",
"pem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n",
"seppIDs": []
},
"warnings": [
"The cluster SEPP CA changed: every roaming partner must import the new trust anchor before N32 with the nodes that use generated certificates works again"
]
}
}
Get the Diameter Status¶
This path returns Ella Core's Diameter realm, the Origin-Host of every cluster node, the Diameter listener, and the state of this node's Diameter peers.
| Method | Path |
|---|---|
| GET | /api/v1/integrations/diameter |
Parameters¶
None
Sample Response¶
{
"result": {
"realm": "epc.mnc001.mcc001.3gppnetwork.org",
"servedRealms": [
"epc.mnc001.mcc001.3gppnetwork.org",
"ims.mnc001.mcc001.3gppnetwork.org",
"ims.example.org"
],
"nodes": [
{
"nodeId": "1",
"displayName": "core-1",
"originHost": "mmec01.mmegi0001.mme.epc.mnc001.mcc001.3gppnetwork.org",
"local": true
}
],
"listener": {
"enabled": true,
"addresses": ["192.0.2.1"],
"port": 3868
},
"peers": [
{
"id": "smsc-0199a3c2-7a10-7c3e-8d2f-4b5c6d7e8f90",
"role": "smsc",
"owner": {
"kind": "smsc",
"name": "main"
},
"originHost": "smsc.example.org",
"realm": "example.org",
"address": "192.0.2.10",
"port": 3868,
"direction": "outbound",
"state": "open",
"since": "2026-09-29T13:44:09Z"
},
{
"id": "scscf.ims.example.org",
"role": "ims",
"owner": {
"kind": "imsPeer",
"name": "cscf"
},
"originHost": "scscf.ims.example.org",
"realm": "ims.example.org",
"address": "192.0.2.20",
"direction": "inbound",
"state": "open",
"since": "2026-10-05T13:44:09Z"
}
]
}
}
| Field | Description |
|---|---|
realm |
Ella Core's Diameter realm, epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org. |
servedRealms |
The realms Ella Core accepts requests for: realm, the derived IMS home domain, and the configured IMS home domain. |
peers[].role |
smsc for an SMSC node, ims for a peer that matches an allowed IMS peer, roaming for a roaming Diameter peer, or unknown for an inbound peer that matches no allowed IMS peer. |
peers[].owner |
The SMSC, allowed IMS peer, or roaming Diameter peer of the connection: kind is smsc, imsPeer, or roamingDiameterPeer; name is its name, or its ID for a roaming Diameter peer. |
peers[].direction |
inbound when the peer connects to Ella Core, outbound when Ella Core connects to the peer. Inbound peers have no port. |
peers[].error |
The reason the last connection failed, when the peer is not connected. |