intentic
Create your workspace
Connected systems

Exit locations

Sending the sandbox's outbound traffic out of a chosen country

On this page(7 sections)

Which countries a provider offers, bringing an exit up, moving it, taking a fresh address in the same country, and checking where the world actually sees you. That last check is what the others are judged against: a switch that quietly left traffic where it was is the failure this exists to rule out.

7 calls. Pick one to open it, or use the list on the right.

GET/exitWays to come out somewhere else

Every configured exit with its live state, the country it was asked to appear in, and the country it actually appears in. Those last two disagreeing is the whole reason this reports both.

What you send

Nothing. Call it as it is.

What comes back

FieldType
linksEvery configured exit, with where it…object[]
idWhich exitstring
providerWhat it runs on"tor" | "vpngate" | "wireguard"
stateWhether it is carrying traffic, coming…"up" | "starting" | "down" | "unavailable" … (5)
proxyWhere to point traffic that should…string
countryWhere it was asked to come…string
observedCountryWhere it actually comes out, as…string
ipThe address behind that observationstring
checkedAtWhen that was checked, in milliseconds,…number
interfaceThe network interface, for the kinds…string
sinceWhen it came up, in millisecondsnumber
autoStartWhether it starts itself when the…boolean
detailWhy it failed, or a note…string
Try itanswered in this tab
curl
curl "$SANDBOX/exit" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.list();
GET/exit/{id}/countriesCountries one exit can reach

Where this exit can put you, ranked by how much capacity is really there. Asked of the provider when it answers and taken from a built-in list when it does not, and the answer says which of those you got.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress

What comes back

FieldType
countriesWhere this exit can put you,…object[]
countryThe country's codestring
countryNameIts name, spelled outstring
serversHow many servers this provider has…number
shareHow much of the provider's actual…number
liveWhether the provider answered, or this…boolean
Try itanswered in this tab
curl
curl "$SANDBOX/exit/a1b2c3d4/countries" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.countries({
  "id": "a1b2c3d4"
});
POST/exit/{id}/startBring an exit upstream

Starts the exit in the country it was configured for. Streamed, because a first start fetches a catalogue, raises a tunnel and then checks the address, which takes tens of seconds on the free providers and can fail at each step with something worth reading. Starting one that is already up simply says so.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress

What comes back

FieldType
when event is "message"shape
dataobject
kindstring
idstring
retrynumber
when event is "done"shape
dataunknown
idstring
retrynumber
when event is "error"shape
dataunknown
idstring
retrynumber
Try itanswered in this tab
curl
curl -N -X POST "$SANDBOX/exit/a1b2c3d4/start" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.start({
  "id": "a1b2c3d4"
});
POST/exit/{id}/useMove to another countrystream

Switches the exit's country, starting it first if it was down. It ends by checking where the world actually sees you and fails if that does not match what you asked for. A switch that quietly left your traffic where it was is the exact failure this whole feature exists to rule out.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress
countryWhere to come outstringbody

What comes back

FieldType
when event is "message"shape
dataobject
kindstring
idstring
retrynumber
when event is "done"shape
dataunknown
idstring
retrynumber
when event is "error"shape
dataunknown
idstring
retrynumber
Try itanswered in this tab
curl
curl -N -X POST "$SANDBOX/exit/a1b2c3d4/use" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"country":"DE"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.use({
  "id": "a1b2c3d4",
  "country": "DE"
});
POST/exit/{id}/rotateTake a different address, same countrystream

Swaps to another address in the country you are already in. Fails if the address does not actually change, which on a small pool it sometimes cannot.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress

What comes back

FieldType
when event is "message"shape
dataobject
kindstring
idstring
retrynumber
when event is "done"shape
dataunknown
idstring
retrynumber
when event is "error"shape
dataunknown
idstring
retrynumber
Try itanswered in this tab
curl
curl -N -X POST "$SANDBOX/exit/a1b2c3d4/rotate" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.rotate({
  "id": "a1b2c3d4"
});
POST/exit/{id}/checkWhere the world sees you right now

Looks up the address and country as seen through this exit. Cheap, and the honest answer to whether you are really where you meant to be, which is what every other call here is judged against.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress

What comes back

FieldType
ipThe address the world sees, looked…string
countryWhich country that address is instring
countryNameThat country's name, spelled outstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/exit/a1b2c3d4/check" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.check({
  "id": "a1b2c3d4"
});
POST/exit/{id}/stopTake an exit down

Shuts the exit off. One that was already down is fine: the promise is that it is not up afterwards, not that it was up before.

What you send

FieldTypeWhere
idrequiredWhich exitstringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/exit/a1b2c3d4/stop" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.exit.stop({
  "id": "a1b2c3d4"
});
More in Connected systems

Type to search every page, in the docs and the API reference.