From b81fc0a403d877ff23020495589083dc2968a455 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Thu, 19 Jan 2017 17:28:28 +0100 Subject: [PATCH] Add definitions to create auth tickets and tokens. That will allow us to implement the auth workflow in netlifyctl. Signed-off-by: David Calavera --- go/models/access_token.go | 38 +++++++ go/models/ticket.go | 34 ++++++ .../operations/create_ticket_parameters.go | 53 +++++++++ .../operations/create_ticket_responses.go | 107 ++++++++++++++++++ .../operations/exchange_ticket_parameters.go | 49 ++++++++ .../operations/exchange_ticket_responses.go | 107 ++++++++++++++++++ go/plumbing/operations/operations_client.go | 78 +++++++++++++ .../operations/show_ticket_parameters.go | 49 ++++++++ .../operations/show_ticket_responses.go | 107 ++++++++++++++++++ go/porcelain/auth.go | 41 +++++++ swagger.yml | 77 +++++++++++++ ui/swagger.json | 2 +- 12 files changed, 741 insertions(+), 1 deletion(-) create mode 100644 go/models/access_token.go create mode 100644 go/models/ticket.go create mode 100644 go/plumbing/operations/create_ticket_parameters.go create mode 100644 go/plumbing/operations/create_ticket_responses.go create mode 100644 go/plumbing/operations/exchange_ticket_parameters.go create mode 100644 go/plumbing/operations/exchange_ticket_responses.go create mode 100644 go/plumbing/operations/show_ticket_parameters.go create mode 100644 go/plumbing/operations/show_ticket_responses.go create mode 100644 go/porcelain/auth.go diff --git a/go/models/access_token.go b/go/models/access_token.go new file mode 100644 index 00000000..2bf8f8a9 --- /dev/null +++ b/go/models/access_token.go @@ -0,0 +1,38 @@ +package models + +import "github.com/go-openapi/strfmt" + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +/*AccessToken access token + +swagger:model accessToken +*/ +type AccessToken struct { + + /* access token + */ + AccessToken string `json:"access_token,omitempty"` + + /* created at + */ + CreatedAt string `json:"created_at,omitempty"` + + /* id + */ + ID string `json:"id,omitempty"` + + /* user email + */ + UserEmail string `json:"user_email,omitempty"` + + /* user id + */ + UserID string `json:"user_id,omitempty"` +} + +// Validate validates this access token +func (m *AccessToken) Validate(formats strfmt.Registry) error { + return nil +} diff --git a/go/models/ticket.go b/go/models/ticket.go new file mode 100644 index 00000000..60dec8b3 --- /dev/null +++ b/go/models/ticket.go @@ -0,0 +1,34 @@ +package models + +import "github.com/go-openapi/strfmt" + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +/*Ticket ticket + +swagger:model ticket +*/ +type Ticket struct { + + /* authorized + */ + Authorized bool `json:"authorized,omitempty"` + + /* client id + */ + ClientID string `json:"client_id,omitempty"` + + /* created at + */ + CreatedAt string `json:"created_at,omitempty"` + + /* id + */ + ID string `json:"id,omitempty"` +} + +// Validate validates this ticket +func (m *Ticket) Validate(formats strfmt.Registry) error { + return nil +} diff --git a/go/plumbing/operations/create_ticket_parameters.go b/go/plumbing/operations/create_ticket_parameters.go new file mode 100644 index 00000000..f8e84ee3 --- /dev/null +++ b/go/plumbing/operations/create_ticket_parameters.go @@ -0,0 +1,53 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" +) + +// NewCreateTicketParams creates a new CreateTicketParams object +// with the default values initialized. +func NewCreateTicketParams() *CreateTicketParams { + var () + return &CreateTicketParams{} +} + +/*CreateTicketParams contains all the parameters to send to the API endpoint +for the create ticket operation typically these are written to a http.Request +*/ +type CreateTicketParams struct { + + /*ClientID*/ + ClientID string +} + +// WithClientID adds the clientId to the create ticket params +func (o *CreateTicketParams) WithClientID(ClientID string) *CreateTicketParams { + o.ClientID = ClientID + return o +} + +// WriteToRequest writes these params to a swagger request +func (o *CreateTicketParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + var res []error + + // query param client_id + qrClientID := o.ClientID + qClientID := qrClientID + if qClientID != "" { + if err := r.SetQueryParam("client_id", qClientID); err != nil { + return err + } + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/go/plumbing/operations/create_ticket_responses.go b/go/plumbing/operations/create_ticket_responses.go new file mode 100644 index 00000000..28dbcf1b --- /dev/null +++ b/go/plumbing/operations/create_ticket_responses.go @@ -0,0 +1,107 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + "io" + + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" + + "github.com/netlify/open-api/go/models" +) + +// CreateTicketReader is a Reader for the CreateTicket structure. +type CreateTicketReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the recieved o. +func (o *CreateTicketReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + + case 201: + result := NewCreateTicketCreated() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + + default: + result := NewCreateTicketDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + } +} + +// NewCreateTicketCreated creates a CreateTicketCreated with default headers values +func NewCreateTicketCreated() *CreateTicketCreated { + return &CreateTicketCreated{} +} + +/*CreateTicketCreated handles this case with default header values. + +ok +*/ +type CreateTicketCreated struct { + Payload *models.Ticket +} + +func (o *CreateTicketCreated) Error() string { + return fmt.Sprintf("[POST /oauth/tickets][%d] createTicketCreated %+v", 201, o.Payload) +} + +func (o *CreateTicketCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.Ticket) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewCreateTicketDefault creates a CreateTicketDefault with default headers values +func NewCreateTicketDefault(code int) *CreateTicketDefault { + return &CreateTicketDefault{ + _statusCode: code, + } +} + +/*CreateTicketDefault handles this case with default header values. + +error +*/ +type CreateTicketDefault struct { + _statusCode int + + Payload *models.Error +} + +// Code gets the status code for the create ticket default response +func (o *CreateTicketDefault) Code() int { + return o._statusCode +} + +func (o *CreateTicketDefault) Error() string { + return fmt.Sprintf("[POST /oauth/tickets][%d] createTicket default %+v", o._statusCode, o.Payload) +} + +func (o *CreateTicketDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.Error) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/go/plumbing/operations/exchange_ticket_parameters.go b/go/plumbing/operations/exchange_ticket_parameters.go new file mode 100644 index 00000000..d61e7cba --- /dev/null +++ b/go/plumbing/operations/exchange_ticket_parameters.go @@ -0,0 +1,49 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" +) + +// NewExchangeTicketParams creates a new ExchangeTicketParams object +// with the default values initialized. +func NewExchangeTicketParams() *ExchangeTicketParams { + var () + return &ExchangeTicketParams{} +} + +/*ExchangeTicketParams contains all the parameters to send to the API endpoint +for the exchange ticket operation typically these are written to a http.Request +*/ +type ExchangeTicketParams struct { + + /*TicketID*/ + TicketID string +} + +// WithTicketID adds the ticketId to the exchange ticket params +func (o *ExchangeTicketParams) WithTicketID(TicketID string) *ExchangeTicketParams { + o.TicketID = TicketID + return o +} + +// WriteToRequest writes these params to a swagger request +func (o *ExchangeTicketParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + var res []error + + // path param ticket_id + if err := r.SetPathParam("ticket_id", o.TicketID); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/go/plumbing/operations/exchange_ticket_responses.go b/go/plumbing/operations/exchange_ticket_responses.go new file mode 100644 index 00000000..c87cca3e --- /dev/null +++ b/go/plumbing/operations/exchange_ticket_responses.go @@ -0,0 +1,107 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + "io" + + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" + + "github.com/netlify/open-api/go/models" +) + +// ExchangeTicketReader is a Reader for the ExchangeTicket structure. +type ExchangeTicketReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the recieved o. +func (o *ExchangeTicketReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + + case 201: + result := NewExchangeTicketCreated() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + + default: + result := NewExchangeTicketDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + } +} + +// NewExchangeTicketCreated creates a ExchangeTicketCreated with default headers values +func NewExchangeTicketCreated() *ExchangeTicketCreated { + return &ExchangeTicketCreated{} +} + +/*ExchangeTicketCreated handles this case with default header values. + +ok +*/ +type ExchangeTicketCreated struct { + Payload *models.AccessToken +} + +func (o *ExchangeTicketCreated) Error() string { + return fmt.Sprintf("[POST /oauth/tickets/{ticket_id}/exchange][%d] exchangeTicketCreated %+v", 201, o.Payload) +} + +func (o *ExchangeTicketCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.AccessToken) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewExchangeTicketDefault creates a ExchangeTicketDefault with default headers values +func NewExchangeTicketDefault(code int) *ExchangeTicketDefault { + return &ExchangeTicketDefault{ + _statusCode: code, + } +} + +/*ExchangeTicketDefault handles this case with default header values. + +error +*/ +type ExchangeTicketDefault struct { + _statusCode int + + Payload *models.Error +} + +// Code gets the status code for the exchange ticket default response +func (o *ExchangeTicketDefault) Code() int { + return o._statusCode +} + +func (o *ExchangeTicketDefault) Error() string { + return fmt.Sprintf("[POST /oauth/tickets/{ticket_id}/exchange][%d] exchangeTicket default %+v", o._statusCode, o.Payload) +} + +func (o *ExchangeTicketDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.Error) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/go/plumbing/operations/operations_client.go b/go/plumbing/operations/operations_client.go index e891e7a3..dcb3b905 100644 --- a/go/plumbing/operations/operations_client.go +++ b/go/plumbing/operations/operations_client.go @@ -152,6 +152,32 @@ func (a *Client) CreateSiteSnippet(params *CreateSiteSnippetParams, authInfo run return result.(*CreateSiteSnippetCreated), nil } +/* +CreateTicket create ticket API +*/ +func (a *Client) CreateTicket(params *CreateTicketParams, authInfo runtime.ClientAuthInfoWriter) (*CreateTicketCreated, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewCreateTicketParams() + } + + result, err := a.transport.Submit(&runtime.ClientOperation{ + ID: "createTicket", + Method: "POST", + PathPattern: "/oauth/tickets", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"https"}, + Params: params, + Reader: &CreateTicketReader{formats: a.formats}, + AuthInfo: authInfo, + }) + if err != nil { + return nil, err + } + return result.(*CreateTicketCreated), nil +} + /* DeleteHookBySiteID delete hook by site Id API */ @@ -230,6 +256,32 @@ func (a *Client) DeleteSiteSnippet(params *DeleteSiteSnippetParams, authInfo run return result.(*DeleteSiteSnippetNoContent), nil } +/* +ExchangeTicket exchange ticket API +*/ +func (a *Client) ExchangeTicket(params *ExchangeTicketParams, authInfo runtime.ClientAuthInfoWriter) (*ExchangeTicketCreated, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewExchangeTicketParams() + } + + result, err := a.transport.Submit(&runtime.ClientOperation{ + ID: "exchangeTicket", + Method: "POST", + PathPattern: "/oauth/tickets/{ticket_id}/exchange", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"https"}, + Params: params, + Reader: &ExchangeTicketReader{formats: a.formats}, + AuthInfo: authInfo, + }) + if err != nil { + return nil, err + } + return result.(*ExchangeTicketCreated), nil +} + /* GetDNSForSite get DNS for site API */ @@ -750,6 +802,32 @@ func (a *Client) ShowSiteTLSCertificate(params *ShowSiteTLSCertificateParams, au return result.(*ShowSiteTLSCertificateOK), nil } +/* +ShowTicket show ticket API +*/ +func (a *Client) ShowTicket(params *ShowTicketParams, authInfo runtime.ClientAuthInfoWriter) (*ShowTicketOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewShowTicketParams() + } + + result, err := a.transport.Submit(&runtime.ClientOperation{ + ID: "showTicket", + Method: "GET", + PathPattern: "/oauth/tickets/{ticket_id}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"https"}, + Params: params, + Reader: &ShowTicketReader{formats: a.formats}, + AuthInfo: authInfo, + }) + if err != nil { + return nil, err + } + return result.(*ShowTicketOK), nil +} + /* UpdateSite update site API */ diff --git a/go/plumbing/operations/show_ticket_parameters.go b/go/plumbing/operations/show_ticket_parameters.go new file mode 100644 index 00000000..38cf31c9 --- /dev/null +++ b/go/plumbing/operations/show_ticket_parameters.go @@ -0,0 +1,49 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" +) + +// NewShowTicketParams creates a new ShowTicketParams object +// with the default values initialized. +func NewShowTicketParams() *ShowTicketParams { + var () + return &ShowTicketParams{} +} + +/*ShowTicketParams contains all the parameters to send to the API endpoint +for the show ticket operation typically these are written to a http.Request +*/ +type ShowTicketParams struct { + + /*TicketID*/ + TicketID string +} + +// WithTicketID adds the ticketId to the show ticket params +func (o *ShowTicketParams) WithTicketID(TicketID string) *ShowTicketParams { + o.TicketID = TicketID + return o +} + +// WriteToRequest writes these params to a swagger request +func (o *ShowTicketParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + var res []error + + // path param ticket_id + if err := r.SetPathParam("ticket_id", o.TicketID); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/go/plumbing/operations/show_ticket_responses.go b/go/plumbing/operations/show_ticket_responses.go new file mode 100644 index 00000000..4eb8e1c9 --- /dev/null +++ b/go/plumbing/operations/show_ticket_responses.go @@ -0,0 +1,107 @@ +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + "io" + + "github.com/go-openapi/runtime" + + strfmt "github.com/go-openapi/strfmt" + + "github.com/netlify/open-api/go/models" +) + +// ShowTicketReader is a Reader for the ShowTicket structure. +type ShowTicketReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the recieved o. +func (o *ShowTicketReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + + case 200: + result := NewShowTicketOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + + default: + result := NewShowTicketDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + } +} + +// NewShowTicketOK creates a ShowTicketOK with default headers values +func NewShowTicketOK() *ShowTicketOK { + return &ShowTicketOK{} +} + +/*ShowTicketOK handles this case with default header values. + +ok +*/ +type ShowTicketOK struct { + Payload *models.Ticket +} + +func (o *ShowTicketOK) Error() string { + return fmt.Sprintf("[GET /oauth/tickets/{ticket_id}][%d] showTicketOK %+v", 200, o.Payload) +} + +func (o *ShowTicketOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.Ticket) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewShowTicketDefault creates a ShowTicketDefault with default headers values +func NewShowTicketDefault(code int) *ShowTicketDefault { + return &ShowTicketDefault{ + _statusCode: code, + } +} + +/*ShowTicketDefault handles this case with default header values. + +error +*/ +type ShowTicketDefault struct { + _statusCode int + + Payload *models.Error +} + +// Code gets the status code for the show ticket default response +func (o *ShowTicketDefault) Code() int { + return o._statusCode +} + +func (o *ShowTicketDefault) Error() string { + return fmt.Sprintf("[GET /oauth/tickets/{ticket_id}][%d] showTicket default %+v", o._statusCode, o.Payload) +} + +func (o *ShowTicketDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.Error) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/go/porcelain/auth.go b/go/porcelain/auth.go new file mode 100644 index 00000000..983ce4c7 --- /dev/null +++ b/go/porcelain/auth.go @@ -0,0 +1,41 @@ +package porcelain + +import ( + "github.com/netlify/open-api/go/models" + "github.com/netlify/open-api/go/plumbing/operations" + "github.com/netlify/open-api/go/porcelain/context" +) + +// Create a login ticket to authenticate a user +func (n *Netlify) CreateTicket(ctx context.Context, clientID string) (*models.Ticket, error) { + params := operations.NewCreateTicketParams().WithClientID(clientID) + resp, err := n.Netlify.Operations.CreateTicket(params, context.GetAuthInfo(ctx)) + + if err != nil { + return nil, err + } + + return resp.Payload, nil +} + +func (n *Netlify) ShowTicket(ctx context.Context, ticketID string) (*models.Ticket, error) { + params := operations.NewShowTicketParams().WithTicketID(ticketID) + resp, err := n.Netlify.Operations.ShowTicket(params, context.GetAuthInfo(ctx)) + + if err != nil { + return nil, err + } + + return resp.Payload, nil +} + +func (n *Netlify) ExchangeTicket(ctx context.Context, ticketID string) (*models.AccessToken, error) { + params := operations.NewExchangeTicketParams().WithTicketID(ticketID) + resp, err := n.Netlify.Operations.ExchangeTicket(params, context.GetAuthInfo(ctx)) + + if err != nil { + return nil, err + } + + return resp.Payload, nil +} diff --git a/swagger.yml b/swagger.yml index d2503b06..5dea58a6 100644 --- a/swagger.yml +++ b/swagger.yml @@ -592,6 +592,57 @@ paths: description: error schema: $ref: "#/definitions/error" + /oauth/tickets: + post: + operationId: createTicket + parameters: + - name: client_id + type: string + in: query + required: true + responses: + '201': + description: ok + schema: + $ref: "#/definitions/ticket" + default: + description: error + schema: + $ref: "#/definitions/error" + /oauth/tickets/{ticket_id}: + get: + operationId: showTicket + parameters: + - name: ticket_id + type: string + in: path + required: true + responses: + '200': + description: ok + schema: + $ref: "#/definitions/ticket" + default: + description: error + schema: + $ref: "#/definitions/error" + /oauth/tickets/{ticket_id}/exchange: + post: + operationId: exchangeTicket + parameters: + - name: ticket_id + type: string + in: path + required: true + responses: + '201': + description: ok + schema: + $ref: "#/definitions/accessToken" + default: + description: error + schema: + $ref: "#/definitions/error" definitions: site: type: object @@ -862,6 +913,32 @@ definitions: expires_at: type: string format: dateTime + ticket: + type: object + properties: + id: + type: string + client_id: + type: string + authorized: + type: boolean + created_at: + type: string + format: dateTime + accessToken: + type: object + properties: + id: + type: string + access_token: + type: string + user_id: + type: string + user_email: + type: string + created_at: + type: string + format: dateTime error: type: object required: diff --git a/ui/swagger.json b/ui/swagger.json index 30504a05..5c7605ba 100644 --- a/ui/swagger.json +++ b/ui/swagger.json @@ -1 +1 @@ -{"consumes":["application/json"],"produces":["application/json"],"schemes":["https"],"swagger":"2.0","info":{"title":"Netlify's API definition","version":"0.1.0"},"host":"api.netlify.com","basePath":"/api/v1","paths":{"/deploys/{deploy_id}":{"get":{"operationId":"getDeploy","parameters":[{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/deploys/{deploy_id}/files/{path}":{"put":{"consumes":["application/octet-stream"],"operationId":"uploadDeployFile","parameters":[{"type":"string","name":"deploy_id","in":"path","required":true},{"type":"string","name":"path","in":"path","required":true},{"name":"file_body","in":"body","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/file"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/forms":{"get":{"operationId":"listForms","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/form"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/forms/{form_id}/submissions":{"get":{"operationId":"listFormSubmissions","parameters":[{"type":"string","name":"form_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/submission"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks":{"get":{"operationId":"listHooksBySiteId","parameters":[{"type":"string","name":"site_id","in":"query","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/hook"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createHookBySiteId","parameters":[{"name":"hook","in":"body","required":true,"schema":{"$ref":"#/definitions/hook"}}],"responses":{"201":{"description":"OK","schema":{"$ref":"#/definitions/hook"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks/types":{"get":{"operationId":"listHookTypes","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/hookType"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks/{hook_id}":{"delete":{"operationId":"deleteHookBySiteId","parameters":[{"type":"string","name":"hook_id","in":"path","required":true}],"responses":{"204":{"description":"No content"}}}},"/sites":{"get":{"operationId":"listSites","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/site"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createSite","parameters":[{"name":"site","in":"body","required":true,"schema":{"$ref":"#/definitions/site"}},{"type":"boolean","name":"configure_dns","in":"query"}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}":{"get":{"operationId":"getSite","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"delete":{"operationId":"deleteSite","responses":{"200":{"description":"OK"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"patch":{"consumes":["application/json"],"operationId":"updateSite","parameters":[{"name":"site","in":"body","required":true,"schema":{"$ref":"#/definitions/site"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/deploys":{"get":{"operationId":"listSiteDeploys","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/deploy"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"operationId":"createSiteDeploy","parameters":[{"name":"deploy","in":"body","required":true,"schema":{"$ref":"#/definitions/deployFiles"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/deploys/{deploy_id}":{"get":{"operationId":"getSiteDeploy","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/deploys/{deploy_id}/restore":{"post":{"operationId":"restoreSiteDeploy","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/dns":{"get":{"operationId":"getDNSForSite","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dnsZone"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"operationId":"configureDNSForSite","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dnsZone"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/files":{"get":{"operationId":"listSiteFiles","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/file"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/files/{file_path}":{"get":{"operationId":"getSiteFileByPathName","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"file_path","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/file"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/forms":{"get":{"operationId":"listSiteForms","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/form"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/metadata":{"get":{"operationId":"getSiteMetadata","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/metadata"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"operationId":"updateSiteMetadata","parameters":[{"name":"metadata","in":"body","required":true,"schema":{"$ref":"#/definitions/metadata"}}],"responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/snippets":{"get":{"operationId":"listSiteSnippets","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/snippet"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createSiteSnippet","parameters":[{"name":"snippet","in":"body","required":true,"schema":{"$ref":"#/definitions/snippet"}}],"responses":{"201":{"description":"OK","schema":{"$ref":"#/definitions/snippet"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/snippets/{snippet_id}":{"get":{"operationId":"getSiteSnippet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/snippet"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"consumes":["application/json"],"operationId":"updateSiteSnippet","parameters":[{"name":"snippet","in":"body","required":true,"schema":{"$ref":"#/definitions/snippet"}}],"responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"delete":{"operationId":"deleteSiteSnippet","responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"snippet_id","in":"path","required":true}]},"/sites/{site_id}/ssl":{"get":{"operationId":"showSiteTLSCertificate","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/sniCertificate"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"operationId":"provisionSiteTLSCertificate","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"certificate","in":"query"},{"type":"string","name":"key","in":"query"},{"type":"string","name":"ca_certificates","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/sniCertificate"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/submissions":{"get":{"operationId":"listSiteSubmissions","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/submission"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}}},"definitions":{"deploy":{"type":"object","properties":{"admin_url":{"type":"string"},"branch":{"type":"string"},"build_id":{"type":"string"},"commit_ref":{"type":"string"},"commit_url":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"deploy_ssl_url":{"type":"string"},"deploy_url":{"type":"string"},"draft":{"type":"boolean"},"error_message":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"required":{"type":"array","items":{"type":"string"}},"review_id":{"type":"string"},"screenshot_url":{"type":"string"},"site_id":{"type":"string"},"skipped":{"type":"boolean"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"},"url":{"type":"string"},"user_id":{"type":"string"}}},"deployFiles":{"type":"object","properties":{"async":{"type":"boolean"},"draft":{"type":"boolean"},"files":{"type":"object"}}},"dnsRecord":{"type":"object","properties":{"hostname":{"type":"string"},"id":{"type":"string"},"priority":{"type":"integer","format":"int64"},"ttl":{"type":"integer","format":"int64"},"type":{"type":"string"},"value":{"type":"string"}}},"dnsZone":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"records":{"type":"array","items":{"$ref":"#/definitions/dnsRecord"}}}},"error":{"type":"object","required":["message"],"properties":{"code":{"type":"integer","format":"int64"},"message":{"type":"string"}}},"file":{"type":"object","properties":{"id":{"type":"string"},"mime_type":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"form":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"fields":{"type":"array","items":{"type":"object"}},"id":{"type":"string"},"name":{"type":"string"},"paths":{"type":"array","items":{"type":"string"}},"site_id":{"type":"string"},"submission_count":{"type":"integer","format":"int32"}}},"hook":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"data":{"type":"object"},"event":{"type":"string"},"id":{"type":"string"},"site_id":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"}}},"hookType":{"type":"object","properties":{"events":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object"}},"name":{"type":"string"}}},"metadata":{"type":"object"},"site":{"type":"object","properties":{"admin_url":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"custom_domain":{"type":"string"},"deploy_url":{"type":"string"},"domain_aliases":{"type":"array","items":{"type":"string"}},"force_ssl":{"type":"boolean"},"id":{"type":"string"},"managed_dns":{"type":"boolean"},"name":{"type":"string"},"notification_email":{"type":"string"},"password":{"type":"string"},"plan":{"type":"string"},"published_deploy":{"$ref":"#/definitions/deploy"},"screenshot_url":{"type":"string"},"ssl":{"type":"boolean"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"},"url":{"type":"string"},"user_id":{"type":"string"}}},"sniCertificate":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"domains":{"type":"array","items":{"type":"string"}},"expires_at":{"type":"string","format":"dateTime"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"}}},"snippet":{"type":"object","properties":{"general":{"type":"string"},"general_position":{"type":"string"},"goal":{"type":"string"},"goal_position":{"type":"string"},"id":{"type":"integer","format":"int32"},"site_id":{"type":"string"},"title":{"type":"string"}}},"submission":{"type":"object","properties":{"body":{"type":"string"},"company":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"data":{"type":"object"},"email":{"type":"string"},"first_name":{"type":"string"},"id":{"type":"string"},"last_name":{"type":"string"},"name":{"type":"string"},"number":{"type":"integer","format":"int32"},"site_url":{"type":"string"},"summary":{"type":"string"}}}},"securityDefinitions":{"netlifyAuth":{"type":"oauth2","flow":"implicit","authorizationUrl":"https://app.netlify.com/authorize"}},"security":[{"netlifyAuth":[]}]} \ No newline at end of file +{"consumes":["application/json"],"produces":["application/json"],"schemes":["https"],"swagger":"2.0","info":{"title":"Netlify's API definition","version":"0.1.0"},"host":"api.netlify.com","basePath":"/api/v1","paths":{"/deploys/{deploy_id}":{"get":{"operationId":"getDeploy","parameters":[{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/deploys/{deploy_id}/files/{path}":{"put":{"consumes":["application/octet-stream"],"operationId":"uploadDeployFile","parameters":[{"type":"string","name":"deploy_id","in":"path","required":true},{"type":"string","name":"path","in":"path","required":true},{"name":"file_body","in":"body","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/file"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/forms":{"get":{"operationId":"listForms","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/form"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/forms/{form_id}/submissions":{"get":{"operationId":"listFormSubmissions","parameters":[{"type":"string","name":"form_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/submission"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks":{"get":{"operationId":"listHooksBySiteId","parameters":[{"type":"string","name":"site_id","in":"query","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/hook"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createHookBySiteId","parameters":[{"name":"hook","in":"body","required":true,"schema":{"$ref":"#/definitions/hook"}}],"responses":{"201":{"description":"OK","schema":{"$ref":"#/definitions/hook"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks/types":{"get":{"operationId":"listHookTypes","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/hookType"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/hooks/{hook_id}":{"delete":{"operationId":"deleteHookBySiteId","parameters":[{"type":"string","name":"hook_id","in":"path","required":true}],"responses":{"204":{"description":"No content"}}}},"/oauth/tickets":{"post":{"operationId":"createTicket","parameters":[{"type":"string","name":"client_id","in":"query","required":true}],"responses":{"201":{"description":"ok","schema":{"$ref":"#/definitions/ticket"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/oauth/tickets/{ticket_id}":{"get":{"operationId":"showTicket","parameters":[{"type":"string","name":"ticket_id","in":"path","required":true}],"responses":{"200":{"description":"ok","schema":{"$ref":"#/definitions/ticket"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/oauth/tickets/{ticket_id}/exchange":{"post":{"operationId":"exchangeTicket","parameters":[{"type":"string","name":"ticket_id","in":"path","required":true}],"responses":{"201":{"description":"ok","schema":{"$ref":"#/definitions/accessToken"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites":{"get":{"operationId":"listSites","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/site"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createSite","parameters":[{"name":"site","in":"body","required":true,"schema":{"$ref":"#/definitions/site"}},{"type":"boolean","name":"configure_dns","in":"query"}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}":{"get":{"operationId":"getSite","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"delete":{"operationId":"deleteSite","responses":{"200":{"description":"OK"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"patch":{"consumes":["application/json"],"operationId":"updateSite","parameters":[{"name":"site","in":"body","required":true,"schema":{"$ref":"#/definitions/site"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/site"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/deploys":{"get":{"operationId":"listSiteDeploys","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/deploy"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"operationId":"createSiteDeploy","parameters":[{"name":"deploy","in":"body","required":true,"schema":{"$ref":"#/definitions/deployFiles"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/deploys/{deploy_id}":{"get":{"operationId":"getSiteDeploy","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/deploys/{deploy_id}/restore":{"post":{"operationId":"restoreSiteDeploy","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"deploy_id","in":"path","required":true}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/deploy"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/dns":{"get":{"operationId":"getDNSForSite","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dnsZone"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"operationId":"configureDNSForSite","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dnsZone"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/files":{"get":{"operationId":"listSiteFiles","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/file"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/files/{file_path}":{"get":{"operationId":"getSiteFileByPathName","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"file_path","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/file"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/forms":{"get":{"operationId":"listSiteForms","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/form"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/metadata":{"get":{"operationId":"getSiteMetadata","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/metadata"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"operationId":"updateSiteMetadata","parameters":[{"name":"metadata","in":"body","required":true,"schema":{"$ref":"#/definitions/metadata"}}],"responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/snippets":{"get":{"operationId":"listSiteSnippets","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/snippet"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"consumes":["application/json"],"operationId":"createSiteSnippet","parameters":[{"name":"snippet","in":"body","required":true,"schema":{"$ref":"#/definitions/snippet"}}],"responses":{"201":{"description":"OK","schema":{"$ref":"#/definitions/snippet"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true}]},"/sites/{site_id}/snippets/{snippet_id}":{"get":{"operationId":"getSiteSnippet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/snippet"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"put":{"consumes":["application/json"],"operationId":"updateSiteSnippet","parameters":[{"name":"snippet","in":"body","required":true,"schema":{"$ref":"#/definitions/snippet"}}],"responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"delete":{"operationId":"deleteSiteSnippet","responses":{"204":{"description":"No content"},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"snippet_id","in":"path","required":true}]},"/sites/{site_id}/ssl":{"get":{"operationId":"showSiteTLSCertificate","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/sniCertificate"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}},"post":{"operationId":"provisionSiteTLSCertificate","parameters":[{"type":"string","name":"site_id","in":"path","required":true},{"type":"string","name":"certificate","in":"query"},{"type":"string","name":"key","in":"query"},{"type":"string","name":"ca_certificates","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/sniCertificate"}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}},"/sites/{site_id}/submissions":{"get":{"operationId":"listSiteSubmissions","parameters":[{"type":"string","name":"site_id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/submission"}}},"default":{"description":"error","schema":{"$ref":"#/definitions/error"}}}}}},"definitions":{"accessToken":{"type":"object","properties":{"access_token":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"id":{"type":"string"},"user_email":{"type":"string"},"user_id":{"type":"string"}}},"deploy":{"type":"object","properties":{"admin_url":{"type":"string"},"branch":{"type":"string"},"build_id":{"type":"string"},"commit_ref":{"type":"string"},"commit_url":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"deploy_ssl_url":{"type":"string"},"deploy_url":{"type":"string"},"draft":{"type":"boolean"},"error_message":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"required":{"type":"array","items":{"type":"string"}},"review_id":{"type":"string"},"screenshot_url":{"type":"string"},"site_id":{"type":"string"},"skipped":{"type":"boolean"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"},"url":{"type":"string"},"user_id":{"type":"string"}}},"deployFiles":{"type":"object","properties":{"async":{"type":"boolean"},"draft":{"type":"boolean"},"files":{"type":"object"}}},"dnsRecord":{"type":"object","properties":{"hostname":{"type":"string"},"id":{"type":"string"},"priority":{"type":"integer","format":"int64"},"ttl":{"type":"integer","format":"int64"},"type":{"type":"string"},"value":{"type":"string"}}},"dnsZone":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"records":{"type":"array","items":{"$ref":"#/definitions/dnsRecord"}}}},"error":{"type":"object","required":["message"],"properties":{"code":{"type":"integer","format":"int64"},"message":{"type":"string"}}},"file":{"type":"object","properties":{"id":{"type":"string"},"mime_type":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"form":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"fields":{"type":"array","items":{"type":"object"}},"id":{"type":"string"},"name":{"type":"string"},"paths":{"type":"array","items":{"type":"string"}},"site_id":{"type":"string"},"submission_count":{"type":"integer","format":"int32"}}},"hook":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"data":{"type":"object"},"event":{"type":"string"},"id":{"type":"string"},"site_id":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"}}},"hookType":{"type":"object","properties":{"events":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object"}},"name":{"type":"string"}}},"metadata":{"type":"object"},"site":{"type":"object","properties":{"admin_url":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"custom_domain":{"type":"string"},"deploy_url":{"type":"string"},"domain_aliases":{"type":"array","items":{"type":"string"}},"force_ssl":{"type":"boolean"},"id":{"type":"string"},"managed_dns":{"type":"boolean"},"name":{"type":"string"},"notification_email":{"type":"string"},"password":{"type":"string"},"plan":{"type":"string"},"published_deploy":{"$ref":"#/definitions/deploy"},"screenshot_url":{"type":"string"},"ssl":{"type":"boolean"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"},"url":{"type":"string"},"user_id":{"type":"string"}}},"sniCertificate":{"type":"object","properties":{"created_at":{"type":"string","format":"dateTime"},"domains":{"type":"array","items":{"type":"string"}},"expires_at":{"type":"string","format":"dateTime"},"state":{"type":"string"},"updated_at":{"type":"string","format":"dateTime"}}},"snippet":{"type":"object","properties":{"general":{"type":"string"},"general_position":{"type":"string"},"goal":{"type":"string"},"goal_position":{"type":"string"},"id":{"type":"integer","format":"int32"},"site_id":{"type":"string"},"title":{"type":"string"}}},"submission":{"type":"object","properties":{"body":{"type":"string"},"company":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"data":{"type":"object"},"email":{"type":"string"},"first_name":{"type":"string"},"id":{"type":"string"},"last_name":{"type":"string"},"name":{"type":"string"},"number":{"type":"integer","format":"int32"},"site_url":{"type":"string"},"summary":{"type":"string"}}},"ticket":{"type":"object","properties":{"authorized":{"type":"boolean"},"client_id":{"type":"string"},"created_at":{"type":"string","format":"dateTime"},"id":{"type":"string"}}}},"securityDefinitions":{"netlifyAuth":{"type":"oauth2","flow":"implicit","authorizationUrl":"https://app.netlify.com/authorize"}},"security":[{"netlifyAuth":[]}]} \ No newline at end of file