# Create an artifact

Commits `artifacts/<slug>.tsx` into the space’s source. With no space named, the team’s Artifacts space is created lazily — a source container with no site until something publishes.

## POST`/v1/artifacts`

### Authorization

`Authorization`Bearer token · headerrequired

`Authorization: Bearer <key>` with the Space key (`sfc_` prefix) of an unclaimed Space. The same key is the fragment of the claim URL and the token in the Space's `/__/ <key>` sign-in URL.

or

`Authorization`Bearer token · headerrequired

`Authorization: Bearer <token>` with an API key (`sfa_` prefix), an OAuth access token, a session token, or a Space machine credential (`sfm_` prefix).

or

`Authorization`OAuth2 access token · headerrequired

OAuth 2.0 with Spacefast scopes. People use the authorization code flow; machines use client credentials.

**Scopes:**`connectors:execute`

### Query parameters

`team`string

min length 1

### Request body

required`application/json`

`space`string

Space to hold the file. Omit to use (or lazily create) the team's Artifacts space.

min length 1

`slug`stringrequired

File name: the artifact lands at `artifacts/<slug>.tsx`.

min length 1 · max length 128 · matches ^[a-z0-9][a-z0-9-]*$

`title`stringrequired

min length 1 · max length 255

`description`string | any

Show propertiesHide properties

Any of:

- string
- `string`
- any
- `any`
- `bindings`object

Role name to connection id. Roles keep account identity out of the source.

`source`stringrequired

The component body: one component named `App`, zero imports, `export default App.`

min length 1 · max length 200000

### Responses

#### 201Response for status 201

`$schema`string<uri>

Canonical JSON Schema URL for this response body. The server also sends it in the `Link: rel="describedby"` response header.

`data`objectrequired

One artifact, with its source at a commit.

Show propertiesHide properties

- `ref`stringrequired

Artifact address: `<spaceId>:<path>`. The only way to name an artifact.

min length 3 · max length 1024 · matches ^[^:]+:[^:]*$

- `spaceId`stringrequired

Space holding the source file. Read-only projection of `ref`.

- `path`stringrequired

Path within the space's source, e.g. `artifacts/burndown.tsx`. Read-only projection of `ref`.

- `slug`stringrequired

Short name derived from the file name. Unique within its space.

- `title`stringrequired

Title declared in the file's front-matter.

- `description`string | anyrequired

Description declared in the file's front-matter.

Show propertiesHide properties

Any of:

- string
- `string`
- any
- `any`

- `owner`stringrequired

`personal` when the file lives under `artifacts/personal/<user>/`. A visibility convention, not a storage boundary.

Allowed:`team``personal`

- `bindings`objectrequired

Role name to connection id. Code writes roles, never accounts — sharing an artifact is a rebind, not a rewrite.

- `commitSha`stringrequired

Commit the projection was read at. Everything here is true as of this commit.

- `previewUrl`string | anyrequired

Rendered snapshot for this commit; null until one has been captured.

Show propertiesHide properties

Any of:

- string
- `string`
- any
- `any`

- `updatedAt`string<date-time>required

When the commit landed.

matches ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$

- `source`stringrequired

The file: one component named `App`, zero imports, everything else pre-bound in scope.

- `parsedScopeNames`string[]required

Provided-scope names the source actually references. An unknown name here is why a render fails.

## `defaultProblem details` (RFC 9457). Any 4xx/5xx response is one `application/problem+json` document.

- `$schema`string<uri>

Canonical JSON Schema URL for this response body. The server also sends it in the `Link: rel="describedby"` response header.

- `type`stringrequired

URL of the documentation page for this error. Derived from `code`.

- `title`stringrequired

Human-readable name of the error type. Derived from `code`.

- `status`integerrequired

HTTP status of the response, repeated in the body.

min -9007199254740991 · max 9007199254740991

- `detail`stringrequired

What went wrong in this request.

- `code`stringrequired

Stable snake_case error code. Match on this, not on `detail`.

- `pointer`string

RFC 6901 JSON Pointer to the request field or batch entry that failed, for example `/files/37/path`. Present on validation failures.

- `details`object

Machine-readable context keyed by the error code.

- `suggestions`string[]

Recovery steps safe to show to a person.

- `next`string[]

Commands or API requests to run next, usable as written.

- `requestId`stringrequired

ID of this request, from the `X-Request-Id` header or generated. Quote it when contacting support.

## Try it

### Server

**Base URL**https://api.spacefast.com

Custom base URLOverrides the selected server when set.

### Authorization

Bearer tokenRemember on this deviceInclude my values in samples

### Parameters

- `team`query
- Bodyapplication/json

### Request body

Send

### Request

```bash
curl -X POST "https://api.spacefast.com/v1/artifacts" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{\n  "space": "string",\n  "slug": "string",\n  "title": "string",\n  "description": "string",\n  "bindings": {\n    "property1": "string",\n    "property2": "string"\n  },\n  "source": "string"\n}'
```

### Example Requests

```javascript
const response = await fetch("https://api.spacefast.com/v1/artifacts", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_TOKEN",
    "Content-Type": "application/json"
  },
  body: "{\n  \"space\": \"string\",\n  \"slug\": \"string\",\n  \"title\": \"string\",\n  \"description\": \"string\",\n  \"bindings\": {\n    \"property1\": \"string\",\n    \"property2\": \"string\"\n  },\n  \"source\": \"string\"\n}"
});
```

```python
import requests

response = requests.post(
    "https://api.spacefast.com/v1/artifacts",
    headers={
        "Authorization": "Bearer YOUR_TOKEN",
        "Content-Type": "application/json"
    },
    data="{\n  \"space\": \"string\",\n  \"slug\": \"string\",\n  \"title\": \"string\",\n  \"description\": \"string\",\n  \"bindings\": {\n    \"property1\": \"string\",\n    \"property2\": \"string\"\n  },\n  \"source\": \"string\"\n}",
)
```

### Response

#### 201default

```json
{
  "$schema": "http://example.com",
  "data": {
    "ref": "string",
    "spaceId": "string",
    "path": "string",
    "slug": "string",
    "title": "string",
    "description": "string",
    "owner": "team",
    "bindings": {
      "property1": "string",
      "property2": "string"
    },
    "commitSha": "string",
    "previewUrl": "string",
    "updatedAt": "2019-08-24T14:15:22Z",
    "source": "string",
    "parsedScopeNames": [
      "string"
    ]
  }
}
```

#### Error Response

```json
{
  "$schema": "http://example.com",
  "type": "string",
  "title": "string",
  "status": -9007199254740991,
  "detail": "string",
  "code": "string",
  "pointer": "string",
  "details": {
    "property1": null,
    "property2": null
  },
  "suggestions": [
    "string"
  ],
  "next": [
    "string"
  ],
  "requestId": "string"
}
```
