Publish an immutable private package version (browser session)
import requests
url = "https://api.platform.ankra.app/org/service-packages"
payload = {
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [{ "name": "<string>" }],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
headers = {
"cookie": "ankra_session=",
"X-Ankra-CSRF": "<x-ankra-csrf>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: 'ankra_session=',
'X-Ankra-CSRF': '<x-ankra-csrf>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
version: '<string>',
publisher_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
profiles: {},
parameters: [
{
name: '<string>',
minimum: 500000000,
maximum: 500000000,
default: 500000000,
unit: '<string>'
}
],
secrets: [{name: '<string>', modes: []}],
outputs: [{name: '<string>'}],
lifecycle: {
verify: '<string>',
upgrade: '<string>',
recovery: '<string>',
delete: '<string>'
}
})
};
fetch('https://api.platform.ankra.app/org/service-packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://api.platform.ankra.app/org/service-packages \
--header 'Content-Type: application/json' \
--header 'X-Ankra-CSRF: <x-ankra-csrf>' \
--cookie ankra_session= \
--data '
{
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [
{
"name": "<string>"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": "<string>",
"capability": "<string>",
"digest": "<string>",
"first_party": true,
"created_at": "2023-11-07T05:31:56Z",
"contract": {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"capability": "logs",
"profiles": {
"hosted": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"customer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"existing": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
}
},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": [
"hosted"
]
}
],
"outputs": [
{
"name": "<string>",
"kind": "endpoint"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
},
"connection": {
"protocol": "postgres",
"endpoints": [
{
"name": "<string>",
"scheme": "<string>",
"service": "<string>",
"port": 32768
}
],
"secret_name": "<string>",
"secret_keys": [
"<string>"
],
"fields": {}
}
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Services
Publish an immutable private package version (browser session)
Requires live profiles.read, profiles.write (publication), or profiles.share (recipient management) permission, intersected with token scopes. Catalogue publication does not grant deployment permission, approve hosted operation, or assert runtime readiness. Shared metadata can remain visible after underlying profile access is revoked; contract reads then return 404. Profile fingerprints are rechecked on contract reads.
POST
/
org
/
service-packages
Publish an immutable private package version (browser session)
import requests
url = "https://api.platform.ankra.app/org/service-packages"
payload = {
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [{ "name": "<string>" }],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
headers = {
"cookie": "ankra_session=",
"X-Ankra-CSRF": "<x-ankra-csrf>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: 'ankra_session=',
'X-Ankra-CSRF': '<x-ankra-csrf>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
version: '<string>',
publisher_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
profiles: {},
parameters: [
{
name: '<string>',
minimum: 500000000,
maximum: 500000000,
default: 500000000,
unit: '<string>'
}
],
secrets: [{name: '<string>', modes: []}],
outputs: [{name: '<string>'}],
lifecycle: {
verify: '<string>',
upgrade: '<string>',
recovery: '<string>',
delete: '<string>'
}
})
};
fetch('https://api.platform.ankra.app/org/service-packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://api.platform.ankra.app/org/service-packages \
--header 'Content-Type: application/json' \
--header 'X-Ankra-CSRF: <x-ankra-csrf>' \
--cookie ankra_session= \
--data '
{
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [
{
"name": "<string>"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": "<string>",
"capability": "<string>",
"digest": "<string>",
"first_party": true,
"created_at": "2023-11-07T05:31:56Z",
"contract": {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"capability": "logs",
"profiles": {
"hosted": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"customer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"existing": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
}
},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": [
"hosted"
]
}
],
"outputs": [
{
"name": "<string>",
"kind": "endpoint"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
},
"connection": {
"protocol": "postgres",
"endpoints": [
{
"name": "<string>",
"scheme": "<string>",
"service": "<string>",
"port": 32768
}
],
"secret_name": "<string>",
"secret_keys": [
"<string>"
],
"fields": {}
}
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Body
application/json
At most 256 KiB. Duplicate keys, unknown properties and null contract values are rejected. Only publisher-owned profiles may be published. An identical retry returns the existing version; a changed contract at the same identity returns 409.
Response
Success.